ndeipipayments APIv1 · 0.1.0-draftAPI reference

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_idstringrequired

Starts with usr_.

Query parameters

limitinteger

Default 10.

starting_afterstring

Cursor; an object ID. Returns the page after it. Cannot be combined with ending_before.

ending_beforestring

Cursor; 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.
Request
curl "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts" \
  -H "Api-Key: $NDEIPI_API_KEY"
Response 200
{
  "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_idstringrequired

Starts with usr_.

Headers

Idempotency-Keyheaderrequired

A unique key for this write, up to 255 characters. Send the same key to retry safely; see idempotency.

Body

sourceobjectrequired
source.currencystringrequired

Lower-case ISO 4217 fiat currency code.

source.railstringrequired

A payment rail code, published by GET /routes. Not an enum by design.

destinationobjectrequired
destination.wallet_idstringrequired

Starts with wal_.

metadataobject

Integrator 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.
Request
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"
    }
  }'
Response 201
{
  "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_idstringrequired

Starts with usr_.

deposit_account_idstringrequired

Starts 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.
Request
curl "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts/da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T" \
  -H "Api-Key: $NDEIPI_API_KEY"
Response 200
{
  "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_idstringrequired

Starts with usr_.

deposit_account_idstringrequired

Starts with da_.

Headers

Idempotency-Keyheaderrequired

A 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.
Request
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)"
Response 200
{
  "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_idstringrequired

Starts with usr_.

deposit_account_idstringrequired

Starts with da_.

Headers

Idempotency-Keyheaderrequired

A 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.
Request
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)"
Response 200
{
  "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_idstringrequired

Starts with usr_.

deposit_account_idstringrequired

Starts with da_.

Query parameters

limitinteger

Default 10.

starting_afterstring

Cursor; an object ID. Returns the page after it. Cannot be combined with ending_before.

ending_beforestring

Cursor; an object ID. Returns the page before it. Cannot be combined with starting_after.

created_aftertimestamp
created_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.
Request
curl "https://sandbox.api.ndeipi.example/v1/users/usr_01JA8Z2F5G6H7J8K9M0N1P2Q3R/deposit_accounts/da_01JA8ZF5TP0R5B8Z6Y3X2W1V0T/activity" \
  -H "Api-Key: $NDEIPI_API_KEY"
Response 200
{
  "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
}