Skip to main content

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": []
}
}
}
FieldRequiredNotes
externalUserIdYour stable id for the user. Used on every later call.
data.userProfile / KYC object.
data.balancesOptional balances object.
data.transactionsObject 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.

  • user and balances are replaced.
  • transactions are 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. :::

Next: Receiving credit limits →