Savings
Plan types, funding rules, rotating groups and daily interest. About savings Live
- POST
/savings/planOpen a savings plan - POST
/savings/plan/from-goalMove one of your budget goals into savings - GET
/savings/plan/{reference}Read one plan - PUT
/savings/plan/{reference}Rename a plan or move its target - POST
/savings/plan/{reference}/activateActivate a draft plan - POST
/savings/plan/{reference}/cancel-lockCancel a new lock at no cost - POST
/savings/plan/{reference}/closeClose an empty plan - POST
/savings/plan/{reference}/contributeAdd money to a plan - GET
/savings/plan/{reference}/contributionsEverything that has gone into a plan - GET
/savings/plan/{reference}/interestThe interest on a plan, day by day - DELETE
/savings/plan/{reference}/noticeWithdraw the notice you gave - POST
/savings/plan/{reference}/noticeGive notice on a plan that needs it - POST
/savings/plan/{reference}/pausePause a plan - GET
/savings/plan/{reference}/progressHow a plan is doing against its target - POST
/savings/plan/{reference}/resumeResume a paused plan - GET
/savings/plan/{reference}/statementA plan's statement - GET
/savings/plan/{reference}/termsThe terms you agreed to on this plan - POST
/savings/plan/{reference}/withdrawTake money out - POST
/savings/plan/{reference}/withdrawal/quoteWhat would taking money out cost? - GET
/savings/plan/{reference}/withdrawalsEverything that has come out of a plan - GET
/savings/plansList your plans - GET
/savings/product/{reference}One savings product, in full - GET
/savings/productsSee what you can open - GET
/savings/summaryEverything you have saved, across every plan
POST Open a savings plan
POST /savings/plan
Opens a plan as a draft. The product's rate, charges and limits are frozen onto it there and then, so a later change to the product does not reach you. Your savings pot is opened on the first plan you hold in a currency, not before.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: SavingsPlanRequest · Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"planType": "TARGET",
"name": "School fees - 2027 session",
"description": "string",
"currencyCode": "NGN",
"productCode": "string",
"targetAmount": 850000.0,
"targetDate": "2027-08-15",
"lockMode": "NONE",
"maturityDate": "2027-08-15",
"termDays": 90,
"autoRolloverOnMaturity": true,
"priority": 1,
"colourTag": "AMBER",
"imageUrl": "string"
}' {
"planType": "TARGET",
"name": "School fees - 2027 session",
"description": "string",
"currencyCode": "NGN",
"productCode": "string",
"targetAmount": 850000.0,
"targetDate": "2027-08-15",
"lockMode": "NONE",
"maturityDate": "2027-08-15",
"termDays": 90,
"autoRolloverOnMaturity": true,
"priority": 1,
"colourTag": "AMBER",
"imageUrl": "string"
} {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan created successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan created successfully |
POST Move one of your budget goals into savings
POST /savings/plan/from-goal
Turns a goal you already have into a savings plan of the same name, with the same target and date, and moves what you had put aside across in the same movement. Nothing is lost: the goal stays on your record showing where its money went, and its contribution history stays readable. Your other goals are untouched - you move them one at a time, if and when you want to. A goal that belongs to an organization or a community stays where it is, because a savings plan belongs to one person.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: MigrateGoalRequest · Response: GenericResponseGoalMigrationResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/from-goal" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"goalReference": "9f1c7a2e-4b6d-4a11-9f3e-2c8d5e7a1b40",
"productCode": "TARGET-NGN-STANDARD",
"name": "School fees 2027"
}' {
"goalReference": "9f1c7a2e-4b6d-4a11-9f3e-2c8d5e7a1b40",
"productCode": "TARGET-NGN-STANDARD",
"name": "School fees 2027"
} {
"data": {
"goalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"goalName": "string",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"outcome": "string",
"reason": "string",
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"potAccountNumber": "string",
"movedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
}
},
"description": "Goal moved into savings successfully"
} Responses
| Status | When |
|---|---|
200 | Goal moved into savings successfully |
GET Read one plan
GET /savings/plan/{reference}
What is available, what is locked, and how far along you are.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan retrieved successfully |
PUT Rename a plan or move its target
PUT /savings/plan/{reference}
The name, the target and how it looks in your app. Never the rate, the charges or when you may take the money out - those were agreed when you opened it.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: UpdateSavingsPlanRequest · Response: GenericResponseSavingsPlanResponse
curl -X PUT "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"name": {
"name": "string"
},
"description": "string",
"targetAmount": 1000000.0,
"targetDate": "2027-12-01",
"priority": 0,
"colourTag": "string",
"imageUrl": "string"
}' {
"name": {
"name": "string"
},
"description": "string",
"targetAmount": 1000000.0,
"targetDate": "2027-12-01",
"priority": 0,
"colourTag": "string",
"imageUrl": "string"
} {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan updated successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan updated successfully |
POST Activate a draft plan
POST /savings/plan/{reference}/activate
A first contribution does this too.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/activate" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan activated successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan activated successfully |
POST Cancel a new lock at no cost
POST /savings/plan/{reference}/cancel-lock
Within the cooling-off window your plan was opened under, a lock can be undone for nothing: the money is unlocked and no charge is made. After that window the only way out is a withdrawal, which costs what the quote says.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/cancel-lock" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Lock cancelled successfully"
} Responses
| Status | When |
|---|---|
200 | Lock cancelled successfully |
POST Close an empty plan
POST /savings/plan/{reference}/close
Only once nothing is left in it. The plan and its history stay readable - what you saved is a record, not something to delete.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/close" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan closed successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan closed successfully |
POST Add money to a plan
POST /savings/plan/{reference}/contribute
Moves money from your main wallet in the same currency. There is no source to name. Send the same idempotency key again to retry safely.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Idempotency-Key | Reuse the same value on every retry of this request |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: ContributionRequest · Response: GenericResponseContributionResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/contribute" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"amount": 25000.0,
"narration": "August"
}' {
"amount": 25000.0,
"narration": "August"
} {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"trigger": "MANUAL",
"source": "MAIN_WALLET",
"ruleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"occurrenceNumber": 0,
"amount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"feeAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"status": "PENDING",
"transactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planSavedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"planLockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 0,
"failureReason": "string",
"postedAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z",
"charges": [
{
"pricingRuleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"name": {
"name": "string"
},
"category": "FEE",
"amount": 0
}
],
"totalFees": 0,
"totalTaxes": 0,
"totalLevies": 0
},
"description": "Contribution posted successfully"
} Responses
| Status | When |
|---|---|
200 | Contribution posted successfully |
GET Everything that has gone into a plan
GET /savings/plan/{reference}/contributions
Newest first.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseListContributionResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/contributions" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"trigger": "MANUAL",
"source": "MAIN_WALLET",
"ruleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"occurrenceNumber": 0,
"amount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"feeAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"status": "PENDING",
"transactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planSavedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"planLockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 0,
"failureReason": "string",
"postedAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z",
"charges": [
{
"pricingRuleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"name": {
"name": "string"
},
"category": "FEE",
"amount": 0
}
],
"totalFees": 0,
"totalTaxes": 0,
"totalLevies": 0
}
],
"description": "Contributions retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Contributions retrieved successfully |
GET The interest on a plan, day by day
GET /savings/plan/{reference}/interest
What was earned each day, on what balance and at what rate, and every time interest was actually paid in. Daily figures are shown to six decimal places: interest is worked out to that precision and rounded only when it is paid in, so adding up the days reaches the same total we pay rather than drifting away from it.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Query parameters
| Name | Default |
|---|---|
from | Optional |
to | Optional |
Example
Response: GenericResponseInterestSummaryResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/interest" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"productVersion": 0,
"rateApplication": "MARGINAL",
"dayCountConvention": "ACT_365F",
"compounding": "SIMPLE",
"interestPaid": "ON_MATURITY",
"accruedToDate": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedUnrounded": "1863.013698",
"capitalisedToDate": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"withheldToDate": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"forfeitedToDate": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"nextCapitalisationAt": "2026-09-25T10:00:00Z",
"days": [
{
"date": "2026-09-25",
"basis": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"basisKind": "START_OF_DAY_BALANCE",
"ratePercent": 8.0,
"tier": 0,
"accrued": "5.479452",
"status": "ACCRUED"
}
],
"postings": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"periodFrom": "2026-09-25",
"periodTo": "2026-09-25",
"grossAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"withholdingAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"netAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"withholdingPolicyCode": "string",
"carriedResidue": "0.013698",
"locked": true,
"status": "PENDING",
"transactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"postedAt": "2026-09-25T10:00:00Z"
}
]
},
"description": "Interest retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Interest retrieved successfully |
DELETE Withdraw the notice you gave
DELETE /savings/plan/{reference}/notice
The plan goes back to running.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X DELETE "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/notice" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Notice withdrawn successfully"
} Responses
| Status | When |
|---|---|
200 | Notice withdrawn successfully |
POST Give notice on a plan that needs it
POST /savings/plan/{reference}/notice
Starts the notice period this plan was opened under. Once it has run, a withdrawal costs nothing. You can withdraw the notice at any time before then.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/notice" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Notice given successfully"
} Responses
| Status | When |
|---|---|
200 | Notice given successfully |
POST Pause a plan
POST /savings/plan/{reference}/pause
Stops automatic funding. Your money stays exactly where it is.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/pause" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan paused successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan paused successfully |
GET How a plan is doing against its target
GET /savings/plan/{reference}/progress
How far along you are, what is left, how much a month would get you there, and whether you are on track for the date you set. The projection is drawn from your own saving so far and is not a promise - it moves as you do.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsProgressResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/progress" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 0,
"remainingAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"targetDate": "2026-09-25",
"daysRemaining": 0,
"requiredMonthlyAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"projectedCompletionDate": "2026-09-25",
"onTrack": true,
"streakDays": 0
},
"description": "Progress retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Progress retrieved successfully |
POST Resume a paused plan
POST /savings/plan/{reference}/resume
Automatic funding starts again.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/resume" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
},
"description": "Savings plan resumed successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plan resumed successfully |
GET A plan's statement
GET /savings/plan/{reference}/statement
Every movement over the period, oldest first, with a running balance - contributions, withdrawals, interest paid in, penalties and fees, each carrying the ledger transaction reference so it can be reconciled against a bank statement. Defaults to the last three months. Only settled movements appear: something still in flight has not happened yet, and a statement that shows it would be wrong the moment it fails.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Query parameters
| Name | Default |
|---|---|
from | Optional |
to | Optional |
Example
Response: GenericResponseSavingsStatementResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/statement" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"from": "2026-09-25",
"to": "2026-09-25",
"openingBalance": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"closingBalance": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"totalIn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"totalOut": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"interestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"penaltiesCharged": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"feesCharged": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lines": [
{
"occurredAt": "2026-09-25T10:00:00Z",
"entryType": "CONTRIBUTION",
"narrative": "string",
"amountIn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"amountOut": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"runningBalance": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"transactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "POSTED"
}
]
},
"description": "Statement retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Statement retrieved successfully |
GET The terms you agreed to on this plan
GET /savings/plan/{reference}/terms
Read back exactly as they were frozen when you opened it - the rate, when interest is paid, what taking money out early costs, and how long you have to change your mind. A later change to the product never reaches a plan already open under these terms, and the fingerprint here is what proves it.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsPlanTermsResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/terms" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"planReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"productVersion": 0,
"termsHash": "string",
"agreedAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"annualRatePercent": 0,
"rateResetPolicy": "FIXED_AT_OPEN",
"interestPaid": "ON_MATURITY",
"withholdingTaxPercent": 0,
"interestForfeiturePolicy": "NONE",
"penaltyModel": "NONE",
"penaltyMinimum": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"penaltyMaximum": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"freeWithdrawalsPerPeriod": 0,
"coolingOffHours": 0,
"coolingOffEndsAt": "2026-09-25T10:00:00Z",
"termsSummary": "string",
"termsDocumentUrl": "string",
"breakPenaltySummary": [
"string"
]
},
"description": "Terms retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Terms retrieved successfully |
POST Take money out
POST /savings/plan/{reference}/withdraw
Requires the fingerprint from a quote, and an explicit acknowledgement when there is a charge. Send the same idempotency key again to retry safely.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Idempotency-Key | Reuse the same value on every retry of this request |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: WithdrawalRequest · Response: GenericResponseWithdrawalResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/withdraw" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"beneficiaryReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"organizationReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sourceAccountNumber": 3000000001,
"instrumentReference": "8c1f0d4e-6b2a-4f7c-9d31-2a5e8b0c7f44",
"destinationAccountNumber": "string",
"destinationAccountProviderCode": "GTB",
"destinationAccountProviderName": "Guaranty Trust Bank",
"destinationAccountName": {
"name": "string"
},
"amount": 0,
"saveBeneficiary": true,
"beneficiaryAlias": "Landlord",
"currencyCode": "string",
"narration": "string",
"executionMode": "SYNCHRONOUS",
"schedule": {
"startDateTime": "2026-09-25T10:00:00Z",
"frequency": "HOURLY",
"endDateTime": "2026-09-25T10:00:00Z",
"maxOccurrences": 0
}
}' {
"beneficiaryReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"organizationReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sourceAccountNumber": 3000000001,
"instrumentReference": "8c1f0d4e-6b2a-4f7c-9d31-2a5e8b0c7f44",
"destinationAccountNumber": "string",
"destinationAccountProviderCode": "GTB",
"destinationAccountProviderName": "Guaranty Trust Bank",
"destinationAccountName": {
"name": "string"
},
"amount": 0,
"saveBeneficiary": true,
"beneficiaryAlias": "Landlord",
"currencyCode": "string",
"narration": "string",
"executionMode": "SYNCHRONOUS",
"schedule": {
"startDateTime": "2026-09-25T10:00:00Z",
"frequency": "HOURLY",
"endDateTime": "2026-09-25T10:00:00Z",
"maxOccurrences": 0
}
} {
"data": {
"withdrawalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sourceAccountNumber": "string",
"destinationAccountNumber": "string",
"beneficiaryReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"saveBeneficiaryToken": "string",
"beneficiaryName": {
"name": "string"
},
"amount": 0,
"netAmount": 0,
"currencyCode": "string",
"status": "PENDING",
"accountsTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"scheduleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"approvalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"timestamp": "2026-09-25T10:00:00Z",
"charges": [
{
"pricingRuleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"name": {
"name": "string"
},
"category": "FEE",
"amount": 0
}
],
"totalFees": 0,
"totalTaxes": 0,
"totalLevies": 0
},
"description": "Withdrawal posted successfully"
} Responses
| Status | When |
|---|---|
200 | Withdrawal posted successfully |
POST What would taking money out cost?
POST /savings/plan/{reference}/withdrawal/quote
Works out the charge and what you would actually receive. Nothing moves. The fingerprint it returns must be sent back with the withdrawal, so you are only ever charged terms you were actually shown.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Path parameters
| Name |
|---|
reference |
Example
Request body: WithdrawalQuoteRequest · Response: GenericResponseWithdrawalQuoteResponse
curl -X POST "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/withdrawal/quote" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"amount": 100000.0
}' {
"amount": 100000.0
} {
"data": {
"grossAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"penaltyModel": "NONE",
"penaltyAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"interestForfeitedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"feeAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"netAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"earlyBreak": true,
"excessWithdrawal": true,
"remainingTermDays": 0,
"maturityAt": "2026-09-25T10:00:00Z",
"termsHash": "string",
"expiresAt": "2026-09-25T10:00:00Z",
"explanation": "This plan is locked until 15 August 2027, 71 days away. Taking 100,000.00 out now costs 2,000.00 and you lose the 1,863.01 of interest earned so far."
},
"description": "Withdrawal quote calculated successfully"
} Responses
| Status | When |
|---|---|
200 | Withdrawal quote calculated successfully |
GET Everything that has come out of a plan
GET /savings/plan/{reference}/withdrawals
Newest first.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseListWithdrawalResponse
curl -X GET "https://api.bridgemoni.com/savings/plan/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/withdrawals" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"withdrawalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sourceAccountNumber": "string",
"destinationAccountNumber": "string",
"beneficiaryReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"saveBeneficiaryToken": "string",
"beneficiaryName": {
"name": "string"
},
"amount": 0,
"netAmount": 0,
"currencyCode": "string",
"status": "PENDING",
"accountsTransactionReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"scheduleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"approvalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"timestamp": "2026-09-25T10:00:00Z",
"charges": [
{
"pricingRuleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"name": {
"name": "string"
},
"category": "FEE",
"amount": 0
}
],
"totalFees": 0,
"totalTaxes": 0,
"totalLevies": 0
}
],
"description": "Withdrawals retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Withdrawals retrieved successfully |
GET List your plans
GET /savings/plans
Filter by status or by kind of plan.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Query parameters
| Name | Default |
|---|---|
status | Optional |
planType | Optional |
Example
Response: GenericResponseListSavingsPlanResponse
curl -X GET "https://api.bridgemoni.com/savings/plans" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
}
],
"description": "Savings plans retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Savings plans retrieved successfully |
GET One savings product, in full
GET /savings/product/{reference}
The rate band by band, when interest is paid, what an early withdrawal costs and the terms in plain language - for the product you are about to open a plan under. Only products you are eligible for are returned.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseSavingsProductSummaryResponse
curl -X GET "https://api.bridgemoni.com/savings/product/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"version": 0,
"name": {
"name": "string"
},
"appliesTo": "TARGET",
"currencyCode": "string",
"minimumOpeningAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"minimumTermDays": 0,
"maximumTermDays": 0,
"withdrawalPolicy": "ANYTIME",
"noticePeriodDays": 0,
"interestEnabled": true,
"rates": [
{
"from": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"annualRatePercent": 8.0
}
],
"rateApplication": "MARGINAL",
"interestPaid": "ON_MATURITY",
"withholdingTaxPercent": 0,
"breakPenalty": [
{
"remainingDays": "60 or more",
"cost": "2% of the amount plus all interest earned"
}
],
"coolingOffHours": 0,
"termsSummary": "string"
},
"description": "Savings product retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Savings product retrieved successfully |
GET See what you can open
GET /savings/products
The savings products available to you, with the rate you would earn band by band, when interest is paid, what taking money out early costs, and the terms in plain language. Whatever you open, these terms are frozen onto your plan and a later change to the product does not reach you.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Query parameters
| Name | Default |
|---|---|
appliesTo | Optional |
currencyCode | Optional |
countryCode | Optional |
Example
Response: GenericResponseListSavingsProductSummaryResponse
curl -X GET "https://api.bridgemoni.com/savings/products" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"version": 0,
"name": {
"name": "string"
},
"appliesTo": "TARGET",
"currencyCode": "string",
"minimumOpeningAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"minimumTermDays": 0,
"maximumTermDays": 0,
"withdrawalPolicy": "ANYTIME",
"noticePeriodDays": 0,
"interestEnabled": true,
"rates": [
{
"from": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"annualRatePercent": 8.0
}
],
"rateApplication": "MARGINAL",
"interestPaid": "ON_MATURITY",
"withholdingTaxPercent": 0,
"breakPenalty": [
{
"remainingDays": "60 or more",
"cost": "2% of the amount plus all interest earned"
}
],
"coolingOffHours": 0,
"termsSummary": "string"
}
],
"description": "Savings products retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Savings products retrieved successfully |
GET Everything you have saved, across every plan
GET /savings/summary
Totals by currency, with the plans behind each. A saver with a rent pot, a school-fees target and a locked plan wants one answer to 'how much have I got', and this is it. Interest that has accrued but not yet been paid in is shown separately from what is actually in the pot, because only one of the two can be withdrawn today.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Example
Response: GenericResponseSavingsSummaryResponse
curl -X GET "https://api.bridgemoni.com/savings/summary" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"currencies": [
{
"currencyCode": "string",
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"planCount": 0,
"plans": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"planType": "TARGET",
"name": {
"name": "string"
},
"description": "string",
"status": "DRAFT",
"currencyCode": "string",
"productReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"productCode": "string",
"targetAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"savedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lockedAmount": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"accruedInterest": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeInterestPaid": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeContributed": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimeWithdrawn": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"lifetimePenalties": {
"amount": "10000.00",
"currencyCode": "NGN"
},
"progressPercent": 34,
"targetDate": "2026-09-25",
"lockMode": "NONE",
"maturityAt": "2026-09-25T10:00:00Z",
"withdrawalPolicy": "ANYTIME",
"noticeGivenAt": "2026-09-25T10:00:00Z",
"noticeMaturesAt": "2026-09-25T10:00:00Z",
"autoRolloverOnMaturity": true,
"withdrawalsThisPeriod": 0,
"potAccountNumber": 2039471186,
"circleReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"streakDays": 0,
"priority": 0,
"colourTag": "string",
"imageUrl": "string",
"termsHash": "string",
"maturedAt": "2026-09-25T10:00:00Z",
"completedAt": "2026-09-25T10:00:00Z",
"lastActivityAt": "2026-09-25T10:00:00Z",
"creationDateTime": "2026-09-25T10:00:00Z"
}
]
}
],
"activePlanCount": 0,
"activeRuleCount": 0
},
"description": "Summary retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Summary retrieved successfully |
Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors