Skip to main content
POST
/
api
/
v1.0
/
accounts
Create account
curl --request POST \
  --url https://sandbox-payment-b2b.singapay.id/api/v1.0/accounts \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'X-PARTNER-ID: <api-key>' \
  --data '
{
  "name": "John Doe",
  "account_type": "owned",
  "invite_members": [
    "john@example.com"
  ]
}
'
{
  "status": 200,
  "success": true,
  "data": {
    "id": "01K946KF851RK7FX075GJHBVKF",
    "name": "John Doe",
    "status": "active",
    "account_number": "000000000123",
    "account_type": "owned",
    "kyb_status": "kyb_in_review",
    "invite_members": [
      "john@example.com"
    ]
  }
}

Authorizations

Authorization
string
header
required

JWT issued by POST /api/v1.1/access-token/b2b. Send Authorization: Bearer <token>.

X-PARTNER-ID
string
header
required

Merchant API key (Credential.api_key). Required on every request.

Body

application/json
name
string
required
Required string length: 3 - 100
Example:

"John Doe"

account_type
enum<string> | null

Optional. Sub account type. owned creates the account active immediately (no KYB). personal_managed/business_managed create the account inactive and require BOSS KYB approval before the account can transact. Defaults to owned-style behavior when omitted.

Available options:
owned,
personal_managed,
business_managed
Example:

"owned"

invite_members
string<email>[] | null

Optional but recommended. Array of merchant member email addresses to grant access to this account. All emails must belong to registered members of the merchant. If omitted, no members are assigned.

Maximum array length: 50
Example:
["john@example.com"]

Response

Account created

status
integer
required
Example:

200

success
boolean
required
Example:

true

data
object
required