Skip to content

Server-owned catalog of payment methods

GET
/billing/payment-methods
curl --request GET \
--url https://api.flotera.com/api/v1/billing/payment-methods \
--cookie __Host-erm_session=<__Host-erm_session>

Asset/network pairs the merchant account actually accepts, with the confirmed provider minimum (14 §6.1). The panel must never hardcode this list: an unconfirmed method is reported available: false rather than omitted, so the UI can explain why it is greyed out.

Payment methods.

Media typeapplication/json
object
items
required
Array<object>
<= 64 items
object
code
required

Code from the server-owned catalogue, e.g. card or usdt_tron. The catalogue depends on which providers the operator has enabled, so a code that worked yesterday may be absent today — always take the list from GET /billing/payment-methods.

string
<= 32 characters /^[a-z][a-z0-9_]{1,31}$/
kind
required

What kind of instrument this is. card has neither an asset nor a network; crypto has both. Clients render the two differently, and deriving the kind from code would put a copy of the server-owned catalogue into every client.

string
Allowed values: card crypto
asset

Crypto asset. Always null for card.

string | null
<= 16 characters
network

Crypto network. Always null for card.

string | null
<= 16 characters
provider
required
string
<= 32 characters
available
required

False when the merchant account has not confirmed the network or the provider minimum is stale. An unavailable method is still listed so the UI can say why it is greyed out. Methods of a provider the operator has switched off are not listed at all — “greyed out” and “withdrawn” are different answers.

boolean
min_amount_usd

Confirmed provider minimum; null until it is confirmed.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
Example
{
"items": [
{
"kind": "card"
}
]
}

Missing/invalid credentials (code=unauthorized).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}

Authenticated but not permitted. code=forbidden — role/scope mismatch; code=feature_not_entitled — the plan does not include the capability; code=account_frozen — the account is frozen and this operation is declared x-ermeon-frozen: deny. The three are deliberately distinct: only the last one is fixed by a top-up (13 §5.6).

Media typeapplication/problem+json

RFC 9457 problem document with a stable machine code.

object
type
required
string format: uri
title
required
string
<= 256 characters
status
required
integer
>= 100 <= 599
code
required

Stable machine-readable error code (03 §2.4).

string
Allowed values: unauthorized forbidden csrf_rejected not_found conflict idempotency_conflict validation_failed rate_limited payload_too_large unsupported_agent_version temporarily_unavailable offline_queue_full online_queue_full plan_required server_limit_reached feature_not_entitled account_in_grace account_frozen payment_pending payment_expired payment_amount_mismatch change_already_pending change_already_applied change_effective reserve_not_covered direction_changed
detail
string
<= 2048 characters
instance
string
<= 512 characters
request_id

UUID (v7 for new entities; v4 accepted during migration).

string format: uuid
errors
Array<object>
<= 100 items
object
path
required

JSON Pointer to the offending field.

string
<= 512 characters
code
required
string
<= 64 characters
Example
{
"type": "https://ermeon.com/problems/validation",
"code": "unauthorized"
}