Payment Authorize and capture a card payment with POST /v1/payment/direct
POST https://api.settleflow.io/v1/payment/direct
Accepts a card, returns an E-PRO response carrying the authorization status and — when 3DS is required — a redirect URL.
Header Value epro-api-keyYour API key (see Authentication ) Content-Typeapplication/json
All fields below are sent as JSON strings unless stated otherwise. Required fields are marked ● .
Field Req. Type Description Amount● string Integer amount in the smallest currency unit (e.g. "1234" = €12.34). Uid● string Your stable identifier for the end customer (max 64 chars). Tid● string Your unique transaction / order reference (max 64 chars). Email● string Customer email. Descriptionstring Free-text order description (max 256). CustomerIdstring Merchant-side customer ID (stored for reconciliation).
Field Req. Type Description CardNumber● string 13–19 digits, Luhn-checked. CardMonth● string Expiry month, 1–12 (1–2 digits). CardYear● string Expiry year (2 or 4 digits). CardCVV● string 3 or 4 digits. CardOwnerstring Cardholder name (max 64).
Field Type Description Firstnamestring Customer first name (max 64). Lastnamestring Customer last name (max 64). Addressstring Street address (max 128). ZipCodestring Postal code (max 16). Citystring City (max 64). Countrystring ISO 3166-1 Alpha-3 country code (e.g. FRA). Phonestring Phone number (max 32). BirthDatestring YYYY-MM-DD (max 10).BirthPlacestring Birth city / place (max 64). ClientIpstring Customer IP address (max 15).
Field Type Description ReturnUrlURL Browser redirect URL after a 3DS challenge. Required if 3DS=yes. CallbackUrlURL Webhook URL for async notifications on this payment. See Webhooks . 3DSyes/noForce 3D Secure authentication. OneClickyes/noStore the card token for later one-click payments. OriginalAmountstring Amount before currency conversion. OriginalCurrencystring ISO 4217 code for OriginalAmount. ConvertCurrencyyes/noEnable currency conversion (EUR accounts only).
The API accepts common casing variants. Each of the following groups is collapsed to the canonical name before validation:
Canonical Also accepted FirstnameFirstName, firstName, firstnameLastnameLastName, lastName, lastnameZipCodeZipcode, zipCode, zipcodeBirthDateBirthdate, birthDate, birthdateBirthPlaceBirthplace, birthPlace, birthplaceClientIpIp, IP, clientIp, ClientIPCallbackUrlcallbackUrl, callbackurlCustomerIdcustomerId, customerID
Use the canonical casing whenever possible.
curl -X POST https://api.settleflow.io/v1/payment/direct \
-H "epro-api-key: sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"Amount": "4999",
"Uid": "customer-42",
"Tid": "order-2026-001",
"Email": "jane@example.com",
"Firstname": "Jane",
"Lastname": "Doe",
"CardNumber": "4111111111111111",
"CardMonth": "12",
"CardYear": "2028",
"CardCVV": "123",
"ReturnUrl": "https://your-shop.com/payment/return",
"CallbackUrl": "https://your-shop.com/webhooks/settleflow",
"3DS": "yes"
}'
{
"Code" : 0 ,
"Result" : {
"OperationType" : "payment" ,
"Status" : "captured" ,
"Tid" : "order-2026-001" ,
"Reference" : "pr_abc123" ,
"Amount" : 49.99 ,
"Currency" : "EUR" ,
"UserId" : "customer-42" ,
"Message" : "Payment was successful" ,
"Date" : "2026-04-22 14:30:45" ,
"3DSecure" : "no"
}
}
Field Type Description OperationTypestring Always "payment" for this endpoint. Statusstring See Status values below. Tidstring Your reference, echoed back. Referencestring SettleFlow payment request ID — use it for refunds and status queries. Amountnumber Amount in major currency units (e.g. 49.99). Currencystring ISO 4217 currency code. UserIdstring Your Uid, echoed back. Messagestring Human-readable status message. Datestring YYYY-MM-DD HH:mm:ss server time (UTC).3DSecureyes/noWhether 3DS was applied. 3DSecureUrlstring Present only when a 3DS challenge is required. Redirect the customer's browser here. See 3D Secure . Aliasstring Stored card alias — present only when OneClick=yes was accepted.
Status Meaning capturedFunds have been captured. Final state. authorizedAuthorization succeeded; capture pending (if manual capture). pendingAwaiting PSP confirmation (e.g. 3DS challenge in progress). failedPayment declined or could not be completed. cancelledAuthorization was voided. rejected_pwRejected by the password (cardholder) step.
Errors are returned as HTTP 200 with a non-zero Code:
{ "Code" : 206 , "Error" : "Invalid parameter CardNumber, check format or Luhn algorithm" }
Common codes:
Code Meaning 3Invalid API key (see Authentication ) 4API key missing 5Missing required parameter 83DSecure not allowed on this account 22Maestro cards require 3DSecure (pass 3DS=yes) 104Tid already used for another transaction106ReturnUrl is mandatory with 3DS=yes200–221Parameter validation failures (one per field) 300Amount exceeds merchant's per-transaction limit
The full catalog is on the Error codes page.
Currency defaults to EUR. The account's configured settlement currency is used — pass OriginalAmount / OriginalCurrency if you charge in a different customer currency.
Idempotency via Tid. Re-submitting the same Tid returns error 104 — use your own unique reference per attempt.
Partial capture is not available on V1. The payment is captured automatically when the PSP authorizes it.
3DS flow : if 3DSecure=yes in the response, redirect the browser to 3DSecureUrl, then poll POST /v1/status/direct after the customer returns.