API reference · Savings & everyday money

Savings circles

GET List the circles you are in

GET /savings/circle

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Example

Response: GenericResponseListCircleResponse

curl -X GET "https://api.bridgemoni.com/savings/circle" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Circles retrieved successfully

POST Start a savings circle

POST /savings/circle

A circle is a target set together and saved for apart. Everyone keeps their own plan and their own money - a circle holds no account, takes no custody, and nobody in it can move anybody else's savings. What it adds is a shared goal and, for those who choose to share it, a board showing how everyone is doing. Returns a join code once; we keep only a hash of it, so if it is lost, issue a new one.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Example

Request body: CircleRequest · Response: GenericResponseCircleResponse

curl -X POST "https://api.bridgemoni.com/savings/circle" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Lagos crew 2026",
  "currencyCode": "NGN",
  "targetAmountPerMember": 500000.0,
  "collectiveTargetAmount": 5000000.0,
  "targetDate": "2026-09-25",
  "visibility": "INVITE_ONLY",
  "maxMembers": 12,
  "shareProgressByDefault": true
}'

Responses

StatusWhen
200Circle created successfully

POST Join a savings circle with a code

POST /savings/circle/join

Accepts the code the circle's owner shared. Joining a circle gives nobody any claim on your money - link one of your plans afterwards if you want your progress counted

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Example

Request body: CircleJoinRequest · Response: GenericResponseCircleResponse

curl -X POST "https://api.bridgemoni.com/savings/circle/join" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
  "joinCode": "K7QP-2M9X"
}'

Responses

StatusWhen
200Joined successfully

GET Read a savings circle

GET /savings/circle/{reference}

Only members can read a circle, whatever its visibility says

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: GenericResponseCircleResponse

curl -X GET "https://api.bridgemoni.com/savings/circle/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Circle retrieved successfully

POST Invite someone to a savings circle

POST /savings/circle/{reference}/invite

By phone number, email address or username. Only the circle's owner may invite. The answer is the same whether or not an account exists with those details, so this cannot be used to find out who is registered.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Path parameters

Name
reference

Example

Request body: CircleInviteRequest · Response: GenericResponseCircleMemberResponse

curl -X POST "https://api.bridgemoni.com/savings/circle/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/invite" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
  "msisdn": "+2348000000000",
  "emailAddress": "ada@example.com",
  "username": "string"
}'

Responses

StatusWhen
200Invitation sent successfully

GET See how the circle is doing

GET /savings/circle/{reference}/leaderboard

The group's combined progress, and a board of the members who chose to share theirs. A member who is not sharing still counts towards the group total but never appears on the board and is never ranked - turning sharing off hides what was already shared, not just what comes next.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: GenericResponseCircleLeaderboardResponse

curl -X GET "https://api.bridgemoni.com/savings/circle/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/leaderboard" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Leaderboard retrieved successfully

POST Leave a savings circle

POST /savings/circle/{reference}/leave

You keep your plan and every naira in it. Leaving only stops your progress being counted towards the group's goal

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Example

Response: GenericResponseCircleResponse

curl -X POST "https://api.bridgemoni.com/savings/circle/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/leave" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Left the circle successfully

POST Point one of your plans at a circle

POST /savings/circle/{reference}/link-plan

Tells the circle which of your plans counts towards the shared goal. The plan stays entirely yours: the circle reads its balance and can never move money into or out of it, and unlinking takes nothing away from you.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Path parameters

Name
reference

Example

Request body: LinkPlanRequest · Response: GenericResponseCircleMemberResponse

curl -X POST "https://api.bridgemoni.com/savings/circle/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/link-plan" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
  "planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
  "shareProgress": true
}'

Responses

StatusWhen
200Plan linked successfully

Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors