Transactions

This section provides reference information about payment transactions. Every payment request in the API will generate a new Transaction.

📘

Note

Each Transaction is uniquely identified by a CURO Transaction ID (transaction_id): TYYM12345678

  • T from "Transaction"
  • YY year number
  • M month as hexadecimal (1-9, A=10, B=11, C=12)
  • 12345678 8 digit unique number
    The total length is always 12 characters.

You are required to provide a Transaction Reference (reference) to identify this transaction in your own system.
Please see Transaction Flow for a schematic overview of the standard transaction processing.

Transactions can have several status codes during their lifetime; the complete list of Status Codes is shown below. A Transaction is considered to be "Completed" (final) if the status code is in the 2XX range (200 or 210 mostly).

📘

Note

  • It is technically possible to create multiple transactions for the same Transaction Reference (reference).
  • Please make sure your system can handle this correctly, for example by ignoring multiple notifications for the same reference if the transaction has already been completed (i.e. a 2XX code has been received).

REST request


Entry point: /rest/v1/curo/payment/<chosen payment method>/


[request] container — generic items

Field nameType LengthRequiredDescription
site_idinteger ≤ 10requiredMerchant's site ID.
url_successstring ≤ 255requiredValid return URL beginning with http:// or https:// where a consumer will be redirected after payment.
url_pendingstring ≤ 255optionalOptional return URL for pending payments. The url_success will be used if not specified.
url_failurestring ≤ 255requiredReturn URL for failed payments.
url_cancelstring ≤ 255optionalOptional return URL for cancelled payments. The url_failure will be used if not specified.
url_callbackstring ≤ 255recommendedURL which will receive transaction updates automatically; please check Callback for more information.
referencestring ≤ 255requiredUnique merchant identification for a transaction.
amountinteger ≤ 10requiredThe amount in cents (with no decimal separator).
currency_idstring 3requiredCurrency in which payment should be effected, expressed using the three-letter international currency code as per ISO-4217.
descriptionstring ≤ 128requiredTransaction description which will be presented to the user if supported by the payment method. (Maximum length for iDEAL is 32 characters. For credit card always uses a fixed descriptor on the consumer's card statement.)
infostring ≤ 255requiredExtra information to store with the transaction.
ipstring ≤ 40requiredConsumer's IP address. Although IPv6 is supported by CURO, most payment methods (still) don't support it.
country_idstring 2optionalISO country code of the consumer.
language_idstring 2optionalConsumer's preferred language.
Possible options:

Czech (cz),
Croatian (hr),
Danish (da/dk),
Dutch (nl),
English (en) default,
French (fr),
Finnish (fi),
German (de),
Greek (gr),
Hungarian (hu),
Italian (it),
Norwegian (no),
Polish (pl),
Portuguese (pt),
Russian (ru),
Spanish (es),
Swedish (se),
Turkish (tr).
📘

Consumer information for this transaction.

[consumer] container — generic items

Field nameType LengthRequiredDescription
firstnamestring ≤ 32required (default)Consumer's first name.
initialsstring ≤ 64required for some methods (e.g. Afterpay, Klarna)Consumer's initials.
lastnamestring ≤ 64required (default)Consumer's last name.
genderstring 1required for some methods (e.g. AfterPay)Consumer's gender (F or M).
dobstring ≤ 10required for some methods (e.g. Klarna)Consumer's date of birth (YYYYMMDD or DD-MM-YYYY).
ssnstring ≤ 64required for some methods (e.g. Klarna)Consumer's social security number.
companystring ≤ 64optionalConsumer's company name.
addressstring ≤ 128optionalConsumer's address.
citystring ≤ 128optionalConsumer's city.
statestring ≤ 32optionalConsumer's state.
zipcodestring ≤ 16optionalConsumer's postal code.
country_idstring 2optionalTwo letter country code of a consumer, according to ISO-3166.
phonestring ≤ 16optionalConsumer's phone number.
emailstring ≤ 64required (default) / recommendedConsumer's email address.
agentstring ≤ 255recommendedConsumer's User-Agent string. Recommended for recurring/card-on-file payments.
refererstring ≤ 255recommendedOptional referrer URL for your own reference. Recommended for recurring/card-on-file payments.
📘

Shipping information for this transaction.

Shipping fields (within [consumer])

Field nameType LengthDescription
shipto_firstnamestring ≤ 32Ship to first name.
shipto_initialsstring ≤ 64Ship to initials.
shipto_lastnamestring ≤ 64Ship to last name.
shipto_genderstring ≤ 64Ship to gender (F or M).
shipto_dobstring ≤ 64Ship to date of birth (YYYYMMDD or DD-MM-YYYY).
shipto_companystring ≤ 128Ship to company.
shipto_addressstring ≤ 128Ship to address.
shipto_citystring ≤ 128Ship to city.
shipto_statestring ≤ 32Ship to state.
shipto_zipcodestring ≤ 16Ship to postal code.
shipto_country_idstring 2Two letter country code of a consumer, according to ISO-3166.
📘

The cart items of the webshop order. Each cart item is wrapped in an [item] sub container (XML only).

[cartitems] container — generic items

Field nameType LengthRequiredDescription
quantityinteger ≤ 5optionalQuantity. 1 is used if no value is specified.
skustring ≤ 64requiredArticle number / Stock Keeping Unit.
namestring ≤ 64requiredArticle name / description.
priceinteger ≤ 10requiredArticle price per item in cents.
vatnumeric ≤ 10,2requiredVAT percentage.
vat_amountinteger ≤ 10recommendedVAT amount included/excluded in the price per item in cents. NB when omitted it will be calculated automatically; however for prices excluding VAT, rounding errors may occur which can lead to transaction failure for Klarna or Afterpay.
vat_incboolean 1optionalSpecify whether prices are in- or excluding VAT:
0 excluding VAT (default),
1 including VAT.
typeinteger 1optionalType of item:
1 normal product (default),
2 shipping costs,
3 administrative costs (not used by Klarna),
4 discounts,
5 handling costs.
stockinteger ≤ 5optionalAmount in stock for this article. Specify this to prevent auto-capture of an order if items are out of stock. NB completely omit this parameter if you don't want or need stock checking; otherwise the stock value might become 0 and prevent auto-captures.


REST response elements

📘

Note

  • The exact response details depend on the chosen payment method (if one is indicated); please check the appropriate module documentation for more information.
Field nameType LengthDescription
[payment]containerGeneral container for this resource.
transaction_idstring ≤ 12Newly created transaction ID.
urlstring ≤ 255Complete URL to which the consumer must be redirected to complete the transaction.
(1) Depending on the provided information and payment method, you will also receive a URL if the provided information was invalid or incomplete; in that case the URL will point to the default payment gateway page.
(2) It is your responsibility to redirect the consumer to the provided url address.


Transaction Details

Entry point: /rest/v1/curo/transaction/<transaction_id>

To verify whether a transaction was successful, send a transaction detail GET request to the API. This can be done after the consumer returns to the merchant's website (after the redirect from the payment method), or after a specified amount of time (for example 5 or 10 minutes from starting the payment transaction).

⚠️

Important

To avoid unnecessary system load it is recommended not to repeat the status request every minute, and to minimize the status request after a certain period of time.

Reminder: It is highly recommended to use the Callback option via url_callback. You can pass it dynamically for each transaction or enter a fixed URL in the Merchant Backoffice. The URL will automatically receive transaction status updates so you don't need to set up a custom status request procedure.


REST response elements

Field nameType LengthDescription
[transaction]containerGeneral container for this resource.
idstring ≤ 12Transaction ID.
merchant_idinteger ≤ 10Merchant's ID.
site_idinteger ≤ 10Merchant's site ID.
site_namestring ≤ 10Merchant's site name.
codeinteger ≤ 3Status code of the transaction.
country_idstring 2Country code.
currency_idstring 3Transaction currency.
amountinteger ≤ 10The amount in cents (with no decimal separator).
referencestring ≤ 255Unique merchant identification for a transaction.
parent_transaction_idstring ≤ 12Unique transaction_id, or 'master' when it's a single payment.
payment_type_idinteger ≤ 2ID of the payment type.
payment_typestring ≤ 32Name of the payment type.
optionstring ≤ 32Gateway option used for this transaction.
typestring ≤ 32Type of the payment (e.g. payment, refund, etc.).
descriptionstring ≤ 32Description for this transaction.
tinfostring ≤ 255Additional transaction information from the payment method. May be null.
testmodestring 1 Whether the transaction is in test mode.
ipstring ≤ 15IP address of the consumer.
registeredstring ≤ 19Registration time of the transaction, in 'YYYY-MM-DD HH:MM:SS' format (Europe/Amsterdam).
updatedstring ≤ 19Last update time of the transaction, in 'YYYY-MM-DD HH:MM:SS' format (Europe/Amsterdam).
finishedstring ≤ 19Whether the transaction is finished.
📘

Consumer associated with this transaction, which was sent to the API earlier for this transaction.

[consumer] (response) — optional

Field nameType LengthDescription
firstnamestring ≤ 32Consumer's first name.
lastnamestring ≤ 64Consumer's last name.
namestring ≤ 96Consumer's first and last name combined.
companystring ≤ 64Consumer's company name.
addressstring ≤ 128Consumer's address.
streetstringConsumer's street (separated address).
housenumberstringConsumer's housenumber (separated address).
citystring ≤ 128Consumer's city.
zipcodestring ≤ 16Consumer's postal code.
country_idstring 2Two letter country code of a consumer, according to ISO 3166.
phonestring ≤ 16Consumer's phone number.
emailstring ≤ 64Consumer's email address.
shipto_firstnamestring ≤ 32Ship to first name.
shipto_initialsstring ≤ 64Ship to initials.
shipto_lastnamestring ≤ 64Ship to last name.
shipto_genderstring ≤ 64Ship to gender.
shipto_dobstring ≤ 64Ship to Date Of Birth.
shipto_companystring ≤ 128Ship to company.
shipto_addressstring ≤ 128Ship to address.
shipto_citystring ≤ 128Ship to city.
shipto_statestring ≤ 32Ship to state.
shipto_zipcodestring ≤ 16Ship to postal code.
shipto_country_idstring 2Two letter country code of a consumer, according to ISO 3166.
📘

Optional: Payout details if this option is enabled for the Merchant. Will contain multiple items.

[payouts]

Field nameTypeDescription
payout_type_idintegerInternal payout type identifier (see list below).
ID Description
1 Processed payment (full consumer amount)
2 Transaction costs
3 (Rolling) Reserves
4 Reserves payout
5 Referral fee
6 Refund buffer
7 Processed payments (correction)
9 Refund fee
10 Refund
11 Failed transactions fee
18 Processed payments (distributing)
19 Transaction costs (distributing)
24 Chargeback fee
25 Chargeback
26 Reseller commission
28 Transaction costs (correction)
29 Anti-fraud check
30 SMS fee
type_descriptionstringTextual payout type description.
currencystringPayout currency (3 char ISO code).
amountnumericPayout amount in cents. Will be negative for fees!
due_datedate (YYYY-MM-DD)Scheduled payout date. Usually the same day, but some payment methods (credit card, OU) have a delay.
invoice_numberstring

Number of the invoice the payout/fee is on. Assigned when the payout is picked up by a payout-run (usually on Mondays and Thursdays).
Each run will create a Statement, Invoice, and a Settlement.

Statement (SYYM.<merchant-id>.123456789) = gross consumer transaction amount to be paid out.
Invoice (CYYM.<merchant-id>.123456789) = costs and fees.
Settlement (RYYM.<merchant-id>.123456789) = reconciliation of Statement + Invoice.

invoice_datedate (YYYY-MM-DD)Date of the invoice/statement/settlement (YYYY-MM-DD).
📘

Optional: This container contains information from the payment method about this transaction. The exact contents depend on the payment method used.

[info] container — optional

Field nameType LengthPayment methodDescription
cardnumber_maskedstring ≤ 16BancontactCard number (masked).
referencestring ≤ 5BanktransferReference (the value is usually: MANUAL).
consumer_namestring ≤ 32BanktransferConsumer's first and last name combined.
consumer_ibanstring ≤ 32BanktransferAccount IBAN number.
consumer_bicstring ≤ 10BanktransferAccount BIC code.
book_datestring ≤ 10BanktransferBook date of the transaction.
recipient_namestring ≤ 32Banktransfer(Company) Name of the recipient.
recipient_ibanstring ≤ 20BanktransferAccount IBAN number of the recipient.
recipient_bicstring ≤ 10BanktransferAccount BIC code of the recipient.
result_codeinteger ≤ 5Credit cardResult code, where 0 is OK, otherwise it is the error code.
card_holder / account_namestring ≤ 32Credit cardCard holder's name.
card_issuerstringCredit card (optional)Card issuer name.
card_typestringCredit card (optional)Card type.
card_expirydate (YYYY-MM-DD)Credit card (optional)Card expiry date (day is always 01).
account_numberstring ≤ 16Credit cardAccount number (masked).
card_brandstring ≤ 32Credit cardCredit card brand.
card_securestring ≤ 3Credit cardIndicates whether transaction is 3D-Secure (Yes / No). The value between parentheses means:
U = unknown,
Yes = merchant is liable,
No = issuer/bank is liable.
XML example: <card_secure>No (U)</card_secure>.
mandate_idstring ≤ 12DirectDebitMandate id.
mandate_datestring ≤ 10DirectDebitMandate date.
consumer_namestring ≤ 32DirectDebitConsumer's first and last name combined.
consumer_ibanstring ≤ 32DirectDebitAccount IBAN number.
consumer_bicstring ≤ 10DirectDebitAccount BIC code.
book_datestring ≤ 10DirectDebitBook date of the transaction.
execute_datestring ≤ 10DirectDebitExecute date of the transaction.
sequence_typestring ≤ 4DirectDebitSequence type.
recipient_namestring ≤ 32DirectDebit(Company) Name of the recipient.
recipient_ibanstring ≤ 20DirectDebitAccount IBAN number of the recipient.
recipient_bicstring ≤ 8DirectDebitAccount BIC code of the recipient.
recipient_identifierstring ≤ 20DirectDebitIdentification code of the recipient.
issuerstring ≤ 32iDEALiDEAL Issuer/Bank.
ideal_refstring ≤ 32iDEALiDEAL reference.
consumer_namestring ≤ 32iDEALConsumer's first and last name combined.
consumer_ibanstring ≤ 32iDEALAccount IBAN number.
consumer_bicstring ≤ 10iDEALAccount BIC code.
tokenstring ≤ 32PayPalUnique transaction ID (Token).
first_namestring ≤ 32PayPalConsumer's first name.
last_namestring ≤ 32PayPalConsumer's last name.
emailstring ≤ 32PayPalConsumer's email address.
country_idstring 2PayPalCountry code.
error_codeinteger ≤ 3Przelewy24Error code, where
0 is OK, otherwise it is the error code.
error_messagesstring ≤ 32Przelewy24 (optional)Short description of the error.
tokenstring ≤ 32Przelewy24 (optional)Unique transaction ID (Token).
emailstring ≤ 32Przelewy24Consumer's email address.
order_idstring ≤ 32Przelewy24Transaction number received from Przelewy24.
methodinteger ≤ 2Przelewy24Payment method ID used by the Client.
referenceinteger ≤ 5SofortReference from Sofort.
descriptioninteger ≤ 5SofortYour own description.
consumer_namestring ≤ 32SofortConsumer's first and last name combined.
consumer_ibanstring ≤ 32SofortAccount IBAN number.
consumer_bicstring ≤ 10SofortAccount BIC code.
bank_codeinteger ≤ 5SofortBank code.
book_datestring ≤ 20SofortBook date of the transaction.

Transaction detail request — example


JSON request

GET /rest/v1/curo/transaction/T26123456789/ HTTP/1.1
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
Host: secure.curopayments.net
Accept: application/json

JSON response

{
    "success": true,
	  "transaction": {
			"merchant_id": "1234",
			"site_id": "1234",
			"site_name": "Test Site",
			"code": "200",
			"country_id": "NL",
			"currency_id": "EUR",
			"amount": "100",
			"reference": "O1234567890",
			"parent_transaction_id": null,
			"payment_type_id": "18",
			"payment_type": "iDeal",
			"option": "idealpro",
			"type": 1,
			"description": "Order 1",
			"tinfo": null,
    	"testmode": "0",
    	"ip": "1.2.3.4",
    	"registered": "2026-07-27 09:30:00",
    	"updated": "2026-07-27 09:30:31",
    	"finished": "2026-07-27 09:30:31",
		"info": {
			"issuer": null,
			"ideal_ref": "0050000110234217",
			"consumer_name": "Hr E G H K\u00fcppers en\/of MW M.J. K",
			"consumer_iban": "NL53INGB0654422370",
			"consumer_bic": "INGBNL2A"
		},
		"consumer": {
			"name": "Joe Doe",
			"firstname": "Joe",
			"lastname": "Doe",
			"email": "[email protected]",
			"address": "nowhereroad 12",
			"street": "nowhereroad",
			"housenumber": "12",
			"city": "NonVille",
			"zipcode": "12345",
			"country_id": "NL",
			"phone": "1234567890",
			"account_name": "Hr E G H K\u00fcppers en\/of MW M.J. K\u00fcppers-Veeneman",
			"account_number": "NL53INGB0654422370",
			"account_code": "INGBNL2A",
			"user_agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Mobile Safari/537.36"
		},
		"payouts": [
            {
                "payout_type_id": "2",
                "type_description": "Transaction costs",
                "currency": "EUR",
                "amount": "-45.00",
                "due_date": "2026-07-27",
                "invoice_number": null,
                "invoice_date": null
            },
            {
                "payout_type_id": "1",
                "type_description": "Processed payments",
                "currency": "EUR",
                "amount": "100.00",
                "due_date": "2026-07-27",
                "invoice_number": null,
                "invoice_date": null
            }
        ],
        "can_refund": true,
        "refund_remainder": 100,
        "refund_extra_limit": 0,
		"id": "T26123456789"
	}
}

Transaction Capture, Cancel, Recurring, Refund

These operations are documented in the corresponding sections of the CURO API reference:
Generic Capture,
Generic Cancel,
Generic Recurring/SEPA,
Generic Refund,
Generic Void.

See the source documentation for full details.


Transaction Status Codes

A transaction is considered "Completed" (final) when the status code is in the 2XX range (typically 200 or 210).

Newly created transactions will initially have a status code of 0. Depending on the payment method the status will be updated to reflect the current status. Every update to the transaction is registered in the Transaction History (visible in the backoffice).

The global status code ranges are:

  • 0 - pending; waiting for acquirer.
  • 1XX - authorisation phase 1 codes (credit card).
  • 2XX - transaction completed successfully.
  • 3XX - transaction failed.
  • 4XX - refunds and reversals. These codes will be linked to a separate Refund/Chargeback/Reversal transaction.
  • 6XX - informational code for fraud or retrieval notifications. These codes will only be visible in Transaction History.
  • 7XX - waiting for confirmation or receiving of the transaction.

List of Status Codes

Status CodeDescription
0Transaction in progress
100Authorization successful
120Authorisation cancelled
130Authorisation failed
140Authorisation rejected
1503D secure status 'Y' (yes), waiting for 3D secure authentication
1523D secure status 'N' (no)
1543D secure status 'U' (unknown)
1563D secure status 'E' (error)
200Transaction successful
210Recurring transaction successful
220Authorisation successful
300Transaction failed
301Transaction failed due to anti fraud system
302Transaction rejected
3033DS declined
305Do not honour
308Transaction was expired
309Transaction was cancelled
310Recurring transaction failed
330Authorization failed
333Card expired
334Suspicion of manipulation
341Lost card (was reported lost by owner)
343Hot card (known fraud with this card)
344Pickup card (card is flagged/blocked)
350Transaction failed, time-out for 3D secure authentication
351Transaction failed, non-3DS transactions are not allowed
352Transaction failed 3DS verification
370Wait time expired
399Acquirer request error
400Refund to consumer
404Reversal by system (transaction was never received or bounced)
410Chargeback by consumer
412Chargeback reversal
420Chargeback (2nd attempt)
450Authorization cancelled
700Transaction is waiting for user action
701Waiting for capture
702Waiting for execution date
710Waiting for confirmation recurring
750Waiting for confirmation (from external party like a bank)
751Underpaid, waiting for merchant action

Did this page help you?