Sending user data
You send us each user's raw profile and activity. We store it as-received and underwrite from it. Extra or unknown fields are tolerated, so you can evolve your payload without breaking ingestion.
All endpoints require Authorization: Bearer <accessToken>.
Add a user
POST /card/add-user
{
"externalUserId": "949",
"data": {
"user": { "...": "your KYC / profile payload" },
"balances": { "...": "optional" },
"transactions": {
"inApp": [],
"bankStatement": []
}
}
}
| Field | Required | Notes |
|---|---|---|
externalUserId | ✅ | Your stable id for the user. Used on every later call. |
data.user | ✅ | Profile / KYC object. |
data.balances | — | Optional balances object. |
data.transactions | — | Object whose every field must be an array. |
Response
{ "success": true, "message": "User added successfully" }
The user is underwritten asynchronously — the approved limit is not returned here. It arrives via the CREDIT_LIMIT webhook.
Update a user
POST /card/update-user — same body shape.
userandbalancesare replaced.transactionsare appended.
Send this whenever you have new activity, so re-underwriting reflects fresh data.
:::info Idempotency
externalUserId dedupes users — re-sending add-user for the same id updates rather than duplicating.
:::