Change password

Overview

Start an authenticated password change. It verifies the current password, then emails a change_password OTP rather than changing the password directly. (Completion happens via verify/email/otp + users/reset/password.)

Prerequisites

  • A bearer token. Callable with Partner and Account tokens.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/users/change/password

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Who can call it: Partner and Account tokens.

  • Authentication runs inside the users/ prefix of the authenticated group.

  • The target is the caller only: it checks and acts on (no id param, no company scoping).

  • The OTP email is branded using the caller's person.company_id.

  • Any authenticated role may change their own password.

Rate limit

  • No rate limit.

Request body

  • Body:
FieldTypeRequiredDescription
current_passwordstringyesMust match the caller's current password, else 400 with a current_password error.
passwordstringyesNew password. Rules: confirmed (requires password_confirmation), different:current_password, min 8 / max 100 chars, at least one letter, mixed case, and at least one number, plus a regex requiring 1 special char and forbidding ", ', \, whitespace, control chars. Note: not persisted here — only validated; the OTP is sent.
password_confirmationstringyesRequired by the confirmed rule on password; must equal password.
{
  "current_password": "OldP@ss123",
  "password": "<new-password>",
  "password_confirmation": "NewP@ss456"
}

Response

  • data.status (string) — success.
  • data.response (string) — Otp has been sent successfully!

200 OK · 200

{ "data": { "status": "success", "response": "Otp has been sent successfully!" } }

Errors

StatusMeaning
400The request was rejected — the response explains why
401The bearer token is missing, expired or invalid
422The request failed validation — the response names the fields
500Unexpected server error

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/users/change/password" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"current_password": "OldP@ss123", "password": "<new-password>", "password_confirmation": "NewP@ss456"}'

Did this page help you?