Save App supports two distinct registration paths: one for admins who create or join a group, and one for members who have been pre-approved by an admin. Admin registration uses Firebase Phone Authentication for identity verification. Member onboarding uses a two-step flow where the admin first adds the member’s phone, and the member then activates their own account by setting a password.Documentation Index
Fetch the complete documentation index at: https://docs.digiflecttech.dev/llms.txt
Use this file to discover all available pages before exploring further.
POST /api/auth/admin/verify-otp
Completes admin registration (or re-authentication) after the client has verified the admin’s phone number using Firebase Phone Authentication. If no account exists for the phone number, a new admin account is created. If an account already exists, it is promoted to admin and associated with the group.This endpoint is rate-limited to 5 requests per minute and 20 requests per hour.
Request body
The admin’s phone number in Uganda format (
+256XXXXXXXXX). This must match the phone number verified by Firebase.Pass the literal string
"FIREBASE_VERIFIED" to indicate that the phone was verified on the client using Firebase Phone Auth. Standard OTP codes from SMS are no longer issued by the backend.The admin’s display name. Required when creating a new account. Must be between 2 and 100 characters.
The admin’s chosen password. Required when creating a new account. Minimum 8 characters.
The name of the group to create or join. Defaults to
"Default Group" if omitted. Must be between 2 and 100 characters. Group name matching is case-insensitive.Response
Returns aLoginResponse with an active JWT token. If this admin is the first admin registered in the specified group, is_creator is true.
A signed JWT bearer token valid for 24 hours.
The admin’s display name.
Always
"admin" for this endpoint.true if this admin is the first admin in the group, making them the group creator.Error responses
| Status | Condition |
|---|---|
400 Bad Request | name or password was not provided when creating a new account. |
Example
Member onboarding
Members do not self-register. An admin first adds a member’s phone number to the group (setting their status to"pending"). The member then completes a two-step onboarding flow to activate their account.
Check phone number
Call Successful responseIf the phone is not found as a pending member, or belongs to a different group,
POST /api/auth/onboarding/check-phone with the member’s phone number and group name. This confirms that the admin has pre-approved the phone and that the member is joining the correct group.Request bodyThe member’s phone number. Accepts Uganda local format (starting with
0) which the server normalises to +256 automatically.The group the member is attempting to join. Must match the group the admin registered them under (case-insensitive).
success is false and message describes the problem. No error status codes are thrown — always check the success field.Set password and activate
Call Successful responseReturns a Error responses
POST /api/auth/onboarding/set-password with the member’s phone number and their chosen password. This sets the password, activates the account, and returns a JWT token so the member is immediately logged in.Request bodyThe member’s phone number in Uganda format (
+256XXXXXXXXX or local 0XXXXXXXXX).The member’s chosen password. Minimum 8 characters.
LoginResponse identical in shape to the admin registration response, with role: "member".| Status | Condition |
|---|---|
404 Not Found | No pending member found for the given phone number. |