SettleFlow API

Payment

Authorize and capture a card payment with POST /v1/payment/direct

Endpoint

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.

Request

Headers

HeaderValue
epro-api-keyYour API key (see Authentication)
Content-Typeapplication/json

Body

All fields below are sent as JSON strings unless stated otherwise. Required fields are marked .

Transaction

FieldReq.TypeDescription
AmountstringInteger amount in the smallest currency unit (e.g. "1234" = €12.34).
UidstringYour stable identifier for the end customer (max 64 chars).
TidstringYour unique transaction / order reference (max 64 chars).
EmailstringCustomer email.
DescriptionstringFree-text order description (max 256).
CustomerIdstringMerchant-side customer ID (stored for reconciliation).

Card

FieldReq.TypeDescription
CardNumberstring13–19 digits, Luhn-checked.
CardMonthstringExpiry month, 112 (1–2 digits).
CardYearstringExpiry year (2 or 4 digits).
CardCVVstring3 or 4 digits.
CardOwnerstringCardholder name (max 64).

Billing details (optional)

FieldTypeDescription
FirstnamestringCustomer first name (max 64).
LastnamestringCustomer last name (max 64).
AddressstringStreet address (max 128).
ZipCodestringPostal code (max 16).
CitystringCity (max 64).
CountrystringISO 3166-1 Alpha-3 country code (e.g. FRA).
PhonestringPhone number (max 32).
BirthDatestringYYYY-MM-DD (max 10).
BirthPlacestringBirth city / place (max 64).
ClientIpstringCustomer IP address (max 15).

Flow control

FieldTypeDescription
ReturnUrlURLBrowser redirect URL after a 3DS challenge. Required if 3DS=yes.
CallbackUrlURLWebhook URL for async notifications on this payment. See Webhooks.
3DSyes/noForce 3D Secure authentication.
OneClickyes/noStore the card token for later one-click payments.
OriginalAmountstringAmount before currency conversion.
OriginalCurrencystringISO 4217 code for OriginalAmount.
ConvertCurrencyyes/noEnable currency conversion (EUR accounts only).

Field-name normalization

The API accepts common casing variants. Each of the following groups is collapsed to the canonical name before validation:

CanonicalAlso accepted
FirstnameFirstName, firstName, firstname
LastnameLastName, lastName, lastname
ZipCodeZipcode, zipCode, zipcode
BirthDateBirthdate, birthDate, birthdate
BirthPlaceBirthplace, birthPlace, birthplace
ClientIpIp, IP, clientIp, ClientIP
CallbackUrlcallbackUrl, callbackurl
CustomerIdcustomerId, customerID

Use the canonical casing whenever possible.

Example request

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"
  }'

Response

Success envelope

{
  "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"
  }
}

Result fields

FieldTypeDescription
OperationTypestringAlways "payment" for this endpoint.
StatusstringSee Status values below.
TidstringYour reference, echoed back.
ReferencestringSettleFlow payment request ID — use it for refunds and status queries.
AmountnumberAmount in major currency units (e.g. 49.99).
CurrencystringISO 4217 currency code.
UserIdstringYour Uid, echoed back.
MessagestringHuman-readable status message.
DatestringYYYY-MM-DD HH:mm:ss server time (UTC).
3DSecureyes/noWhether 3DS was applied.
3DSecureUrlstringPresent only when a 3DS challenge is required. Redirect the customer's browser here. See 3D Secure.
AliasstringStored card alias — present only when OneClick=yes was accepted.

Status values

StatusMeaning
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

Errors are returned as HTTP 200 with a non-zero Code:

{ "Code": 206, "Error": "Invalid parameter CardNumber, check format or Luhn algorithm" }

Common codes:

CodeMeaning
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 transaction
106ReturnUrl is mandatory with 3DS=yes
200221Parameter validation failures (one per field)
300Amount exceeds merchant's per-transaction limit

The full catalog is on the Error codes page.

Notes

  • 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.

On this page