Record a merchant decision for underpaid, overpaid, late or review states
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.feitpay.com/v1/payment-intents/example/resolve"
payload := strings.NewReader("{ \"resolution\": \"accepted\", \"note\": \"example\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://api.feitpay.com/v1/payment-intents/example/resolve';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"resolution":"accepted","note":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.feitpay.com/v1/payment-intents/example/resolve \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "resolution": "accepted", "note": "example" }'Allowed resolutions depend on the current state (underpaid, overpaid, late_payment, manual_review) and require a note of at least 10 characters. Chain evidence and earlier events are preserved.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Header Parameters
Section titled “Header Parameters”Active organization for dashboard sessions. Ignored for API keys (the key determines the organization).
Request Bodyrequired
Section titled “Request Bodyrequired”object
Responses
Section titled “Responses”Resolved. Original chain evidence is preserved.
object
Machine-readable reason recorded with a payment intent state change (status_reason, state-event and timeline reason, webhook data.status_reason). created and quote_refreshed appear in state events; additional_payment_after_settlement only in payment.review_required event data for a transfer that arrived after the intent was settled; inconsistent_evidence marks evidence that supports no allowed transition (the state is held and operators are alerted). bitcart_* reasons mirror the Bitcart invoice status of intents processed through the platform’s Bitcart account.
Decimal string. Never a float.
object
object
object
Decimal string. Never a float.
Decimal string. Never a float.
Integer amount in the asset’s smallest unit.
Fiat major units per one whole asset unit.
True when the rate is a labelled illustrative value, not market data.
object
Decimal string. Never a float.
Integer amount in the asset’s smallest unit.
BIP21 / EIP-681 style URI for wallet apps and QR codes.
object
Decimal string. Never a float.
Integer amount in the asset’s smallest unit.
Decimal string. Never a float.
Integer amount in the asset’s smallest unit.
Decimal string. Never a float.
Integer amount in the asset’s smallest unit.
Decimal string. Never a float.
Integer amount in the asset’s smallest unit.
True only when the expected amount is final on-chain (confirmed / overpaid, or resolved as accepted).
Present when the intent is processed through the platform’s Bitcart account: custodial, the customer pays platform wallets and the funds are owed to the merchant (see /v1/balances).
object
Bitcart invoice status: not_started until the checkout opens the invoice, then pending, paid, confirmed, complete, expired, invalid or refunded.
None, paid_partial, paid_over or failed_confirm.
The received funds were credited to the merchant balance.
object
Asset key: coin symbol, plus the chain for tokens (btc, usdt-eth).
Exact decimal amount to send in this asset.
Exchange rate Bitcart used (invoice currency per unit of the asset).
Wallet URI (BIP21 / EIP-681 style) for QR codes.
Example
{ "object": "payment_intent", "status": "created", "status_reason": "created", "amount": "59.90", "allowed_methods": [ "crypto" ], "source": "api", "quote": { "object": "quote", "fiat_amount": "59.90", "asset_amount": "59.90", "asset_amount_base_units": "99834", "rounding_policy": "ceil_to_asset_base_unit", "status": "active", "network_fee_paid_by": "customer", "platform_fee_billed_separately": true }, "payment_instructions": { "amount": "59.90", "amount_base_units": "99834" }, "totals": { "expected": "59.90", "expected_base_units": "99834", "received": "59.90", "received_base_units": "99834", "confirmed": "59.90", "confirmed_base_units": "99834", "remaining": "59.90", "remaining_base_units": "99834" }, "resolution": { "kind": "accepted" }, "processor": { "name": "bitcart" }}Missing or invalid credentials.
object
object
Example
{ "error": { "type": "invalid_request_error" }}Authenticated but not permitted.
object
object
Example
{ "error": { "type": "invalid_request_error" }}Resource not found (or not visible to this tenant).
object
object
Example
{ "error": { "type": "invalid_request_error" }}State conflict.
object
object
Example
{ "error": { "type": "invalid_request_error" }}Validation failed.
object
object
Example
{ "error": { "type": "invalid_request_error" }}Too many requests. See Retry-After.
object
object
Example
{ "error": { "type": "invalid_request_error" }}