Create a payment
POST /gateway/payments
Required scope: payments:write.
Merchant and money environment are bound to the key, never caller-selected. Only test money is currently enabled. Subscription routing is evaluated at event time.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
Positive GHS amount, at most 8 fractional digits. Existing HTTP aliases amount_ghs/amount_fiat remain accepted.
Optional registered active HTTPS destination. Omit to use all subscribed merchant endpoints. No subscription for a lifecycle event means no delivery of that event.
Asset selector for REQUEST payloads. Parsing is lenient: case-insensitive, _/- ignored, bare USDT means USDT_TRC20. Responses serialize the serde UPPERCASE form (no separators), see PaymentResponse.crypto_type.
Persist one key per business intent and reuse it after uncertain responses. Changed intent under the same key returns 409.
At most 4096 bytes and depth 3. Underscore, bitmomo_, cryptopos_, server_ prefixes and collect_rail are reserved.
object
Retained merchant terms; Bitmomo does not automatically navigate to this URL.
Responses
Section titled “ Responses ”Success
object
Decimal string (BigDecimal serializes as a string)
Example
100.00Lowercase chain label (see PayIntentResponse.network for the canonical {chain}:{testnet|mainnet} form).
Example
6.66666667Serde UPPERCASE wire form (no separators).
Example
testExample
15.00testnet or mainnet (from CRYPTO_NETWORK)
Example
testnetExample
PAY-A1B2C3D4Snake_case lifecycle status. cancelled (explicit user/merchant cancel) is distinct from expired (time expiry).
Null for native assets
Example
6Validation error
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Invalid key
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Scope, merchant or environment denied
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Not found
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Intent conflict
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Rate limited
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Internal error
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final
Service unavailable
R15 canonical error envelope. Every 4xx/5xx JSON body carries these five keys, plus x-request-id header; 4xx machine fields (e.g. available_balance) merge in alongside and never shadow them.
object
Machine code (SCREAMING_SNAKE)
Example
VALIDATION_ERRORHuman-readable detail
Example
amount_ghs must be greater than zeroMirrors the x-request-id response header
True for 429/502/503/504 only; 400/401/403/404/409 are final