API reference
Deposit accounts
Standing bank details that credit a user's wallet every time they pay in.
List a user's deposit accounts
GET/v1/users/{user_id}/deposit_accounts
Returns a page of DepositAccount objects.
Path parameters
user_idstringrequiredStarts with
usr_.
Query parameters
limitintegerDefault
10.starting_afterstringCursor; an object ID. Returns the page after it. Cannot be combined with
ending_before.ending_beforestringCursor; an object ID. Returns the page before it. Cannot be combined with
starting_after.
Responses
- 200A page of deposit accounts.
- 401The API key is missing, invalid or revoked.
- 404The object does not exist or belongs to another integrator.
- 429The key is over its rate limit.
- 5XXServer error. Safe to retry with the same idempotency key.
curl "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts" \
-H "Api-Key: $NDEIPI_API_KEY"{
"data": [
{
"id": "da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T",
"object": "deposit_account",
"user_id": "usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R",
"status": "active",
"source": {
"currency": "zar",
"rail": "absa_eft"
},
"destination": {
"wallet_id": "wal_01JA8Z4K2V9QW3H6Y7XKD2M0RS",
"asset": "ndeipi-points"
},
"deposit_instructions": {
"type": "bank",
"currency": "zar",
"rail": "absa_eft",
"bank_name": "Absa Bank",
"bank_address": "15 Troye Street, Johannesburg",
"account_name": "Ndeipi Payments (Pty) Ltd",
"account_number": "4091234567",
"routing_code": "632005",
"swift_bic": "ABSAZAJJ",
"reference": "ND7K3Q9P"
},
"metadata": {},
"version": 1,
"created_at": "2026-10-16T09:30:00Z"
}
],
"has_more": false
}Create a standing deposit account
POST/v1/users/{user_id}/deposit_accounts
Returns permanent deposit details for one source currency and rail. Every deposit received creates an onramp transfer into the destination wallet, so deposits share the transfer state machine, receipts and events with one-off on-ramps.
Only bank rails have standing details. PayPal collects one payment at a time through an approval link, so a paypal source returns 422 unsupported_route here; use a one-off on-ramp (POST /transfers with a fiat source) instead.
Returns DepositAccount.
Path parameters
user_idstringrequiredStarts with
usr_.
Headers
Idempotency-KeyheaderrequiredA unique key for this write, up to 255 characters. Send the same key to retry safely; see idempotency.
Body
sourceobjectrequiredsource.currencystringrequiredLower-case ISO 4217 fiat currency code.
source.railstringrequiredA payment rail code, published by
GET /routes. Not an enum by design.destinationobjectrequireddestination.wallet_idstringrequiredStarts with
wal_.metadataobjectIntegrator key-value data, returned unchanged. Up to 50 keys; keys up to 40 characters, values up to 500.
Responses
- 201Deposit account created.
- 400The request is malformed.
- 401The API key is missing, invalid or revoked.
- 403The key may not perform this action, or the user is not approved.
- 404The object does not exist or belongs to another integrator.
- 409The request conflicts with the object's current state or an earlier request.
- 422The request is well formed but fails validation or a business rule.
- 429The key is over its rate limit.
- 503The on-ramp or off-ramp provider is unavailable and the request was refused rather than queued. Code
provider_unavailable. User-to-user transfers never return this. - 5XXServer error. Safe to retry with the same idempotency key.
curl -X POST "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts" \
-H "Api-Key: $NDEIPI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"source": {
"currency": "zar",
"rail": "absa_eft"
},
"destination": {
"wallet_id": "wal_01JA8Z4K2V9QW3H6Y7XKD2M0RS"
}
}'{
"id": "da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T",
"object": "deposit_account",
"user_id": "usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R",
"status": "active",
"source": {
"currency": "zar",
"rail": "absa_eft"
},
"destination": {
"wallet_id": "wal_01JA8Z4K2V9QW3H6Y7XKD2M0RS",
"asset": "ndeipi-points"
},
"deposit_instructions": {
"type": "bank",
"currency": "zar",
"rail": "absa_eft",
"bank_name": "Absa Bank",
"bank_address": "15 Troye Street, Johannesburg",
"account_name": "Ndeipi Payments (Pty) Ltd",
"account_number": "4091234567",
"routing_code": "632005",
"swift_bic": "ABSAZAJJ",
"reference": "ND7K3Q9P"
},
"metadata": {},
"version": 1,
"created_at": "2026-10-16T09:30:00Z"
}Get a deposit account
GET/v1/users/{user_id}/deposit_accounts/{deposit_account_id}
Returns DepositAccount.
Path parameters
user_idstringrequiredStarts with
usr_.deposit_account_idstringrequiredStarts with
da_.
Responses
- 200The deposit account.
- 401The API key is missing, invalid or revoked.
- 404The object does not exist or belongs to another integrator.
- 429The key is over its rate limit.
- 5XXServer error. Safe to retry with the same idempotency key.
curl "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts/da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T" \
-H "Api-Key: $NDEIPI_API_KEY"{
"id": "da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T",
"object": "deposit_account",
"user_id": "usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R",
"status": "active",
"source": {
"currency": "zar",
"rail": "absa_eft"
},
"destination": {
"wallet_id": "wal_01JA8Z4K2V9QW3H6Y7XKD2M0RS",
"asset": "ndeipi-points"
},
"deposit_instructions": {
"type": "bank",
"currency": "zar",
"rail": "absa_eft",
"bank_name": "Absa Bank",
"bank_address": "15 Troye Street, Johannesburg",
"account_name": "Ndeipi Payments (Pty) Ltd",
"account_number": "4091234567",
"routing_code": "632005",
"swift_bic": "ABSAZAJJ",
"reference": "ND7K3Q9P"
},
"metadata": {},
"version": 1,
"created_at": "2026-10-16T09:30:00Z"
}Deactivate a deposit account
POST/v1/users/{user_id}/deposit_accounts/{deposit_account_id}/deactivate
Deposits that arrive after deactivation are returned to the sender.
Returns DepositAccount.
Path parameters
user_idstringrequiredStarts with
usr_.deposit_account_idstringrequiredStarts with
da_.
Headers
Idempotency-KeyheaderrequiredA unique key for this write, up to 255 characters. Send the same key to retry safely; see idempotency.
Responses
- 200The deactivated deposit account.
- 401The API key is missing, invalid or revoked.
- 404The object does not exist or belongs to another integrator.
- 409The request conflicts with the object's current state or an earlier request.
- 429The key is over its rate limit.
- 5XXServer error. Safe to retry with the same idempotency key.
curl -X POST "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts/da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T/deactivate" \
-H "Api-Key: $NDEIPI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"id": "da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T",
"object": "deposit_account",
"user_id": "usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R",
"status": "deactivated",
"source": {
"currency": "zar",
"rail": "absa_eft"
},
"destination": {
"wallet_id": "wal_01JA8Z4K2V9QW3H6Y7XKD2M0RS",
"asset": "ndeipi-points"
},
"deposit_instructions": {
"type": "bank",
"currency": "zar",
"rail": "absa_eft",
"bank_name": "Absa Bank",
"bank_address": "15 Troye Street, Johannesburg",
"account_name": "Ndeipi Payments (Pty) Ltd",
"account_number": "4091234567",
"routing_code": "632005",
"swift_bic": "ABSAZAJJ",
"reference": "ND7K3Q9P"
},
"metadata": {},
"version": 2,
"created_at": "2026-10-16T09:30:00Z"
}Reactivate a deposit account
POST/v1/users/{user_id}/deposit_accounts/{deposit_account_id}/reactivate
Returns DepositAccount.
Path parameters
user_idstringrequiredStarts with
usr_.deposit_account_idstringrequiredStarts with
da_.
Headers
Idempotency-KeyheaderrequiredA unique key for this write, up to 255 characters. Send the same key to retry safely; see idempotency.
Responses
- 200The reactivated deposit account.
- 401The API key is missing, invalid or revoked.
- 404The object does not exist or belongs to another integrator.
- 409The request conflicts with the object's current state or an earlier request.
- 429The key is over its rate limit.
- 5XXServer error. Safe to retry with the same idempotency key.
curl -X POST "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts/da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T/reactivate" \
-H "Api-Key: $NDEIPI_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"id": "da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T",
"object": "deposit_account",
"user_id": "usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R",
"status": "active",
"source": {
"currency": "zar",
"rail": "absa_eft"
},
"destination": {
"wallet_id": "wal_01JA8Z4K2V9QW3H6Y7XKD2M0RS",
"asset": "ndeipi-points"
},
"deposit_instructions": {
"type": "bank",
"currency": "zar",
"rail": "absa_eft",
"bank_name": "Absa Bank",
"bank_address": "15 Troye Street, Johannesburg",
"account_name": "Ndeipi Payments (Pty) Ltd",
"account_number": "4091234567",
"routing_code": "632005",
"swift_bic": "ABSAZAJJ",
"reference": "ND7K3Q9P"
},
"metadata": {},
"version": 3,
"created_at": "2026-10-16T09:30:00Z"
}List deposits received
GET/v1/users/{user_id}/deposit_accounts/{deposit_account_id}/activity
Returns a page of Deposit objects.
Path parameters
user_idstringrequiredStarts with
usr_.deposit_account_idstringrequiredStarts with
da_.
Query parameters
limitintegerDefault
10.starting_afterstringCursor; an object ID. Returns the page after it. Cannot be combined with
ending_before.ending_beforestringCursor; an object ID. Returns the page before it. Cannot be combined with
starting_after.created_aftertimestampcreated_beforetimestamp
Responses
- 200A page of deposits.
- 401The API key is missing, invalid or revoked.
- 404The object does not exist or belongs to another integrator.
- 429The key is over its rate limit.
- 5XXServer error. Safe to retry with the same idempotency key.
curl "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts/da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T/activity" \
-H "Api-Key: $NDEIPI_API_KEY"{
"data": [
{
"id": "dep_01JA8ZK9YT4W9F2D0C7B6A5Z4Y",
"object": "deposit",
"deposit_account_id": "da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T",
"transfer_id": "trf_01JA8ZD7RM8P3Z6X4W1V0T9S8R",
"state": "completed",
"amount_received": "100.00",
"currency": "zar",
"fees": [],
"rate": "1",
"amount_credited": "100.00",
"rail_reference": "ABSA-20261016-55120",
"return_reason": null,
"created_at": "2026-10-16T09:30:00Z"
}
],
"has_more": false
}