Simulate an outcome
curl --request POST \
--url https://api.pay.flipeet.io/api/v1/sandbox/simulate \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"reference": "inv_2201",
"outcome": "success"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reference: 'inv_2201', outcome: 'success'})
};
fetch('https://api.pay.flipeet.io/api/v1/sandbox/simulate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pay.flipeet.io/api/v1/sandbox/simulate"
payload = {
"reference": "inv_2201",
"outcome": "success"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"message": "Successful",
"status": "success",
"statusCode": 200,
"data": {
"id": "6f1c2b9e-3a4d-4e8f-9b0a-1c2d3e4f5a6b",
"type": "crypto",
"reference": "inv_2201",
"status": "completed",
"currency": "usdc",
"network": "base",
"amount": 100,
"expectedAmount": 100,
"feeAmount": 0.6,
"address": "0x3c5b0e8d1f6a4b2c9e7d0a1b2c3d4e5f60718293",
"txHash": "0x77aa3f0c9b1e2d4f6a8c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b19be",
"metadata": {
"customerId": "cus_77"
},
"livemode": false,
"createdAt": "2026-11-04T10:21:09.000Z",
"updatedAt": "2026-11-04T10:21:09.000Z"
}
}{
"message": "Amount must be a positive number",
"status": "error",
"statusCode": 400,
"code": "invalid_request",
"details": {
"errors": [
"Amount must be a positive number"
]
},
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Invalid or inactive API key",
"status": "error",
"statusCode": 401,
"code": "authentication_failed",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Sandbox endpoints need a sandbox key (fpay_test_…)",
"status": "error",
"statusCode": 403,
"code": "permission_denied",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Transaction not found",
"status": "error",
"statusCode": 404,
"code": "not_found",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Reference payout_5510 already exists",
"status": "error",
"statusCode": 409,
"code": "conflict",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Too many requests. Slow down and try again shortly.",
"status": "error",
"statusCode": 429,
"code": "rate_limited",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Internal server error",
"status": "error",
"statusCode": 500,
"code": "internal_error",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}Sandbox
Simulate an outcome
Settles a sandbox deposit, withdrawal, ramp order or checkout as success or failed, as if the customer paid or the payout cleared. Your sandbox balance changes as it would live, fees included, and the webhook is sent. For a deposit you can pass amount to test under- and over-payment.
Sandbox keys only. Each payment settles once; a second call gets 409.
POST
/
api
/
v1
/
sandbox
/
simulate
Simulate an outcome
curl --request POST \
--url https://api.pay.flipeet.io/api/v1/sandbox/simulate \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"reference": "inv_2201",
"outcome": "success"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reference: 'inv_2201', outcome: 'success'})
};
fetch('https://api.pay.flipeet.io/api/v1/sandbox/simulate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pay.flipeet.io/api/v1/sandbox/simulate"
payload = {
"reference": "inv_2201",
"outcome": "success"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"message": "Successful",
"status": "success",
"statusCode": 200,
"data": {
"id": "6f1c2b9e-3a4d-4e8f-9b0a-1c2d3e4f5a6b",
"type": "crypto",
"reference": "inv_2201",
"status": "completed",
"currency": "usdc",
"network": "base",
"amount": 100,
"expectedAmount": 100,
"feeAmount": 0.6,
"address": "0x3c5b0e8d1f6a4b2c9e7d0a1b2c3d4e5f60718293",
"txHash": "0x77aa3f0c9b1e2d4f6a8c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b19be",
"metadata": {
"customerId": "cus_77"
},
"livemode": false,
"createdAt": "2026-11-04T10:21:09.000Z",
"updatedAt": "2026-11-04T10:21:09.000Z"
}
}{
"message": "Amount must be a positive number",
"status": "error",
"statusCode": 400,
"code": "invalid_request",
"details": {
"errors": [
"Amount must be a positive number"
]
},
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Invalid or inactive API key",
"status": "error",
"statusCode": 401,
"code": "authentication_failed",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Sandbox endpoints need a sandbox key (fpay_test_…)",
"status": "error",
"statusCode": 403,
"code": "permission_denied",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Transaction not found",
"status": "error",
"statusCode": 404,
"code": "not_found",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Reference payout_5510 already exists",
"status": "error",
"statusCode": 409,
"code": "conflict",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Too many requests. Slow down and try again shortly.",
"status": "error",
"statusCode": 429,
"code": "rate_limited",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}{
"message": "Internal server error",
"status": "error",
"statusCode": 500,
"code": "internal_error",
"details": null,
"requestId": "req_5f0c2a9b8d7e4c1f9a3b6d2e1c0f7a8b",
"timestamp": "2026-11-04T10:00:00.000Z"
}Authorizations
Body
application/json
