POST
/api/v1/paymentsAuthorization
bearerAuth AuthorizationBearer <token>
In: header
Header Parameters
X-Request-ID?string
Match
^[a-z][a-z0-9_]{0,127}$Length
1 <= length <= 128Idempotency-Key*string
Match
^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$Length
1 <= length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
currency*string
amount*integer
Range
1 <= value <= 9007199254740991merchant_reference*string
Length
1 <= length <= 255channel?string|string|string|string|string
description?string
Length
1 <= length <= 255metadata?
Properties
properties <= 20return_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]*)?$Length
12 <= length <= 2048Response 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}$Length
1 <= length <= 128Header Parameters
X-Request-ID?string
Match
^[a-z][a-z0-9_]{0,127}$Length
1 <= length <= 128Response 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}/simulateTest-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}$Length
1 <= length <= 128Header Parameters
X-Request-ID?string
Match
^[a-z][a-z0-9_]{0,127}$Length
1 <= length <= 128Idempotency-Key*string
Match
^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$Length
1 <= length <= 255Request 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}