Skip to content

Request a payout

POST
/v1/payouts
curl --request POST \
--url https://api.feitpay.com/v1/payouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Gryphem-Environment: test' \
--data '{ "asset": "example", "amount": "59.90", "destination_id": "example", "note": "example" }'

Holds amount from the available balance and asks for approval: another member of the organization approves it (when four-eyes is on), then a GRYPHEM operator reviews it, then the platform Bitcart hot wallet sends it to the allow-listed destination. Amounts are exact in the asset (no conversion); the network fee is paid by the platform. Honors Idempotency-Key.

Gryphem-Organization
string

Active organization for dashboard sessions. Ignored for API keys (the key determines the organization).

Gryphem-Environment
string
default: test
Allowed values: test live

test (default) or live for dashboard sessions. API keys determine the environment.

Idempotency-Key
string
<= 255 characters

Unique key per logical create operation (max 255 chars). Replays return the original response; reuse with a different body returns idempotency_error.

Media typeapplication/json
object
asset
required
string
amount
required

Decimal string. Never a float.

string
/^(0|[1-9][0-9]*)(\.[0-9]+)?$/
destination_id
required
string
note
string
<= 200 characters

Payout requested; the amount is held.

Media typeapplication/json
object
id
required
string
object
required
string
Allowed value: payout
livemode
required
boolean
asset
required
string
amount
required

Decimal string. Never a float.

string
/^(0|[1-9][0-9]*)(\.[0-9]+)?$/
amount_units
required

Integer amount in the asset’s smallest unit.

string
/^[0-9]+$/
divisibility
required
integer
destination_id
required
string
destination_address
required
string
status
required

Pending_approval (waiting for a second merchant member) → pending_operator (GRYPHEM review) → submitting → submitted (created in Bitcart) → sent (broadcast) → complete (confirmed). Terminal: rejected, canceled, failed.

string
Allowed values: pending_approval pending_operator submitting submitted sent complete rejected canceled failed
note
required
string
requested_by
required
string
requested_via
required
string
Allowed values: session api_key
approved_by
required
string | null
approved_at
required
string | null format: date-time
reviewed_at
required
string | null format: date-time
review_note
required
string | null
processor
required

bitcart: sent by the platform Bitcart hot wallet (live).

string
Allowed values: bitcart simulator
processor_payout_id
required
string | null
processor_status
required
string | null
tx_hash
required
string | null
network_fee
required
string | null
failure_reason
required
string | null
funds_released
required

The held amount went back to the available balance (always for canceled and rejected payouts; for a failed payout only when nothing can have been sent, or after an operator verified that and released it).

boolean
created_at
required
string format: date-time
updated_at
required
string format: date-time
org_id

Operator console only.

string
org_name

Operator console only.

string
operator_id
string | null

Example

{
"object": "payout",
"amount": "59.90",
"amount_units": "99834",
"status": "pending_approval",
"requested_via": "session",
"processor": "bitcart"
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required
object
type
required
string
Allowed values: invalid_request_error authentication_error permission_error not_found_error conflict_error idempotency_error rate_limit_error feature_unavailable_error api_error
code
required
string
message
required
string
param
string
request_id
required
string

Example

{
"error": {
"type": "invalid_request_error"
}
}

Authenticated but not permitted.

Media typeapplication/json
object
error
required
object
type
required
string
Allowed values: invalid_request_error authentication_error permission_error not_found_error conflict_error idempotency_error rate_limit_error feature_unavailable_error api_error
code
required
string
message
required
string
param
string
request_id
required
string

Example

{
"error": {
"type": "invalid_request_error"
}
}

State conflict.

Media typeapplication/json
object
error
required
object
type
required
string
Allowed values: invalid_request_error authentication_error permission_error not_found_error conflict_error idempotency_error rate_limit_error feature_unavailable_error api_error
code
required
string
message
required
string
param
string
request_id
required
string

Example

{
"error": {
"type": "invalid_request_error"
}
}

Validation failed.

Media typeapplication/json
object
error
required
object
type
required
string
Allowed values: invalid_request_error authentication_error permission_error not_found_error conflict_error idempotency_error rate_limit_error feature_unavailable_error api_error
code
required
string
message
required
string
param
string
request_id
required
string

Example

{
"error": {
"type": "invalid_request_error"
}
}

Too many requests. See Retry-After.

Media typeapplication/json
object
error
required
object
type
required
string
Allowed values: invalid_request_error authentication_error permission_error not_found_error conflict_error idempotency_error rate_limit_error feature_unavailable_error api_error
code
required
string
message
required
string
param
string
request_id
required
string

Example

{
"error": {
"type": "invalid_request_error"
}
}
Retry-After
integer