Docs
POST/api/v1/payments

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Header Parameters

X-Request-ID?string
Match^[a-z][a-z0-9_]{0,127}$
Length1 <= length <= 128
Idempotency-Key*string
Match^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$
Length1 <= length <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

currency*string
amount*integer
Range1 <= value <= 9007199254740991
merchant_reference*string
Length1 <= length <= 255
channel?string|string|string|string|string
description?string
Length1 <= length <= 255
metadata?
Propertiesproperties <= 20
return_url?string
Match^https://(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)\.)+[A-Za-z]{2,63}(?::[0-9]{1,5})?(?:[/?#][^\s]*)?$
Length12 <= length <= 2048

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/payments" \  -H "X-Request-ID: vct_test_example_never_use" \  -H "Idempotency-Key: vct_test_example_never_use" \  -H "Content-Type: application/json" \  -d '{    "currency": "IDR",    "amount": 125000,    "merchant_reference": "vct_test_example_never_use",    "description": "vct_test_example_never_use",    "channel": "qris",    "metadata": {      "reference": "vct_test_example_never_use"    },    "return_url": "https://example.com/vct_test_example_never_use"  }'
{  "id": "vct_test_example_never_use",  "amount": "125000",  "currency": "IDR",  "merchant_reference": "vct_test_example_never_use",  "status": "awaiting_method",  "livemode": false,  "channel": "qris",  "created_at": "2026-01-01T00:00:00.000Z",  "updated_at": "2026-01-01T00:00:00.000Z",  "expires_at": null,  "paid_at": null}
GET/api/v1/payments/{payment_id}

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

payment_id*string
Match^[a-z][a-z0-9_]{0,127}$
Length1 <= length <= 128

Header Parameters

X-Request-ID?string
Match^[a-z][a-z0-9_]{0,127}$
Length1 <= length <= 128

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/payments/vct_test_example_never_use" \  -H "X-Request-ID: vct_test_example_never_use"
{  "id": "vct_test_example_never_use",  "amount": "125000",  "currency": "IDR",  "merchant_reference": "vct_test_example_never_use",  "status": "awaiting_method",  "livemode": false,  "channel": "qris",  "created_at": "2026-01-01T00:00:00.000Z",  "updated_at": "2026-01-01T00:00:00.000Z",  "expires_at": null,  "paid_at": null}
POST/api/v1/test/payments/{payment_id}/simulate

Test-only state transitions and delivery retries.

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

payment_id*string
Match^[a-z][a-z0-9_]{0,127}$
Length1 <= length <= 128

Header Parameters

X-Request-ID?string
Match^[a-z][a-z0-9_]{0,127}$
Length1 <= length <= 128
Idempotency-Key*string
Match^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$
Length1 <= length <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

scenario*string|string|string|string|string|string|string

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/test/payments/vct_test_example_never_use/simulate" \  -H "X-Request-ID: vct_test_example_never_use" \  -H "Idempotency-Key: vct_test_example_never_use" \  -H "Content-Type: application/json" \  -d '{    "scenario": "paid"  }'
{  "id": "vct_test_example_never_use",  "amount": "125000",  "currency": "IDR",  "merchant_reference": "vct_test_example_never_use",  "status": "awaiting_method",  "livemode": false,  "channel": "qris",  "created_at": "2026-01-01T00:00:00.000Z",  "updated_at": "2026-01-01T00:00:00.000Z",  "expires_at": null,  "paid_at": null}

On this page