Skip to main content
POST
/
api
/
v2.0
/
direct-debit
/
bindings
/
{binding_id}
/
unbind
Unbind Card
curl --request POST \
  --url https://sandbox-payment-b2b.singapay.id/api/v2.0/direct-debit/bindings/{binding_id}/unbind \
  --header 'Authorization: Bearer <token>' \
  --header 'X-PARTNER-ID: <api-key>'
{
  "response_code": "SP000",
  "response_message": "Unbinding initiated",
  "data": {
    "binding_id": "9a1c5b3e-2d4f-4d8c-93cf-9a1c5b3e2d4f",
    "customer_ref": "cust-9001",
    "bank_code": "008",
    "masked_card": "888xxxxxxxxx1234",
    "status": "ACTIVE",
    "payment_otp_mode": "WITH_OTP",
    "created_at": "2026-06-04T07:25:01+07:00",
    "updated_at": "2026-06-04T08:10:01+07:00",
    "failure_reason": null
  }
}

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.

Path Parameters

binding_id
string<uuid>
required

UUID of a DirectDebitBinding owned by the authenticated merchant.

Response

SP000 Unbinding initiated (fire-and-forget). data matches DirectDebitBindingData; status flips to UNBOUND only after the direct-debit.unbinding.succeeded callback lands.

SingaPay Merchant API v2 custom response envelope (ApiResponderHelper::responseJson, ApiResponseTrait). Business outcome is determined by response_code (SP000–SP020), not by HTTP status alone. On success (SP000), data holds the operation payload. On errors, data often includes a message and may echo request fields.

response_code
string
required

SingaPay custom business response code.

Example:

"SP000"

response_message
string
required

Human-readable label paired with response_code.

Example:

"Successfully"

data
object | null

Endpoint-specific payload on success, or error context (validation message, inquiry result with status invalid, etc.).