---
title: "POST /sales"
slug: "post-sales"
updated: 2025-11-10T17:12:54Z
published: 2025-11-10T17:12:54Z
canonical: "api-docs.blinkpayment.co.uk/post-sales"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.blinkpayment.co.uk/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /sales

This API endpoint processes card-present sales transactions for a POS system. It accepts payment details, including terminal and operator information, and returns a response with the transaction ID, payment status, and card details.

> [!NOTE]
> ## Guide
> 
> 1. Enter the sale request
> 2. Perform the transaction on the terminal: insert/swipe/tap the card to complete the transaction
> 3. Based on the response from the terminal/external terminal simulator, the POS Cloud will send back the response

## Step 1 - Request

Code SnippetData Dictionary

```json
POST /v1/card-present/sales HTTP/1.1                         
Host: api.blinkpayment.co.uk                     
Content-Type: application/json
Authorization: Basic ACCESS_TOKEN    # from Blink pos_api_key:pos_api_secret
User-Agent: AcmeApp/1.2.0 (ReactNative; Android 11+; POS2.0+; Build/123)

{
  "site_branch_id": "London",
  "pos_location": "POS-25",
  "terminal_id": "T650P-451-863-867-MADAN",
  "operator_id": "28465",
  "order_number": "2780576984",
  "metadata": {},
  "currency": "GBP",
  "requested_amount": "45.87",
  "request_timestamp": "2025-06-19T12:46:45+01:00",
  "is_receipt_required": true,
  "request_tips": false
}
```

| **Field Name** | **Type** | **Description** | **Nullable** |
| --- | --- | --- | --- |
| **Content-Type (header)** | varchar(50) | `application/json` | NO |
| **Authorization (header)** | varchar(512) | Authorization header for authenticating the request made up of **pos_api_key** and **pos_api_secret**. (e.g., `Basic ZjdkNDcxNjYtMThhYy00????`) | NO |
| **User-Agent (header)** | varchar(255) | A brief overview of the app or software, version and comments related to the software stack and minimum client specifications. e.g. `AcmeApp/1.2.0 (ReactNative; Android 11+; POS2.0+; Build/123)` | NO |
| **site_branch_id** | varchar(16) | Site or branch ID (e.g., `London - Oxford Street`) | NO |
| **pos_location** | varchar(16) | POS identifier (e.g., `POS 5`) | NO |
| **terminal_id** | varchar(35) | Unique terminal ID made up of model and serial number. (e.g., `T650m-451-962-212`) | NO |
| **operator_id** | varchar(255) | ID of the operator (e.g., user, staff member) who processed the payment. (e.g., `440010051-Mohsin`, numeric (16)) | YES |
| **order_number** | varchar(25) | Optional field that can be used by client to send a reference string value. (e.g,. `841754987AB`) | YES |
| **metadata** | json(1024) | Optional field that can be used for debugging, filtering linking to other systems. It contains custom vendor, POS, customer or order details in JSON format. (e.g. `{"note": "Refund for overcharge"}`, `{"salesforce_id": "SF123456"}`, `{"server": "dev"}`, `{"partner": "Shopify", "order_id": "98765"}`) | YES |
| **currency** | varchar(3) | The currency must be a valid ISO 4217 code (e.g., `GBP`, `USD`, `EUR`). | NO |
| **requested_amount** | decimal(8,2) | Requested amount must be between `0.01` and `999,999.99` | NO |
| **request_timestamp** | datetime | The request_timestamp must be a valid ISO 8601 datetime string (e.g., `2025-02-02T14:43:59+01:00`) | NO |
| **is_receipt_required** | boolean | The is_receipt_required filed must be a boolean value either `true` or `false` | YES |
| **request_tips** | boolean | The request_tips filed must be a boolean value either `true` or `false` | NO |

## Step 2 - Response

> [!WARNING]
> **The****POST /sales****endpoint can return different responses depending on whether the card is tapped, inserted, or swiped.**
> 
> There are seven responses that can be handled.

### Response 1 - Tap card

Code SnippetData Dictionary

```json
HTTP/1.1 201 Created
Content-Type: application/json

{
    "result": "SUCCESS",
    "transaction_id": "BL-6XMMWGY4G12PYR4X",
    "card_type": "MasterCard",
    "card_number": "54609784****4213",
    "card_mode": "tap",
    "receipt_text": "\nVerifone\nTest Address\nTest City\nUnited Kingdom\nhelpdesk@verifone.com\nMERCHANT COPY\nMASTERCARD\nCAP1 MASTERCARD\n************4213\nSALE\nContactless\nPlease debit my account\nTotal Amount\nGBP 49.30\nApproved\nNO CARDHOLDER VERIFICATION\nPLEASE RETAIN RECEIPT\nDID\n0200373650010652\nMID\n12345678\nTID\n37622781\nDATE\n07/08/2025\nTIME\n16:43:27\nEFTSN\n3240\nAuth Code\n789DE\nRef\n071643003240\nMerchant Ref\nBL-6XMMWGY4G12PYR4X\nAID\nA0000000041010\nApp Eff01/24\nApp Seq01@#Verifone\nTest AddressTest CityUnited Kingdomhelpdesk@verifone.com\nCARDHOLDER COPY\nMASTERCARD\nCAP1 MASTERCARD\n************4213\nSALE\nContactless\nPlease debit my account\nTotal Amount                   GBP 49.30\nApproved\nNO CARDHOLDER VERIFICATION\nPLEASE RETAIN RECEIPT\nDID                     0200373650010652\nMID                             ****5678\nTID                             ****2781\nDATE                          07/08/2025\nTIME                            16:43:27\nAuth Code                          789DE\nRef                         071643003240\nAID                       A0000000041010\nApp Seq                               01\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "753231",
        "order_number": "3037180886",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "49.30",
        "request_timestamp": "2025-08-07T15:43:20+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `SUCCESS` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless). |
| **receipt_text** | text | Provide receipt text (This parameter is only returned in the response if in the request body `is_receipt_required` is set to `True`) |
| **data** | json | Return the payload from the request. |

### Response 2a - Insert card - valid pin

Code SnippetData Dictionary

```json
HTTP/1.1 201 Created
Content-Type: application/json

{
    "result": "SUCCESS",
    "transaction_id": "BL-YX8JG43LRMJKKZQX",
    "card_type": "VISA",
    "card_number": "41654903****9725",
    "card_mode": "insert",
    "receipt_text": "\nVerifone\nTest Address\nTest City\nUnited Kingdom\nhelpdesk@verifone.com\nMERCHANT COPY\nVISA\nRevolut\n************9725\nSALE\nICC\nPlease debit my account\nTotal Amount\nGBP 5.02\nApproved\nPIN VERIFIED\nPLEASE RETAIN RECEIPT\nDID\n0200373650010652\nMID\n12345678\nTID\n37622781\nDATE\n07/08/2025\nTIME\n17:00:38\nEFTSN\n3245\nAuth Code\n789DE\nRef\n071700003245\nMerchant Ref\nBL-YX8JG43LRMJKKZQX\nAID\nA0000000031010\nApp Eff10/24\nApp Seq00@#Verifone\nTest AddressTest CityUnited Kingdomhelpdesk@verifone.com\nCARDHOLDER COPY\nVISA\nRevolut\n************9725\nSALE\nICC\nPlease debit my account\nTotal Amount                    GBP 5.02\nApproved\nPIN VERIFIED\nPLEASE RETAIN RECEIPT\nDID                     0200373650010652\nMID                             ****5678\nTID                             ****2781\nDATE                          07/08/2025\nTIME                            17:00:38\nAuth Code                          789DE\nRef                         071700003245\nAID                       A0000000031010\nApp Seq                               00\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "734745",
        "order_number": "2299441030",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "5.01",
        "request_timestamp": "2025-08-07T16:00:37+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `SUCCESS` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless). |
| **receipt_text** | text | Provide receipt text(This paramter is only returned in the response if in the request body `is_receipt_required` is set to `True`) |
| **data** | json | Return the payload from the request. |

### Response 2b - Insert card - **invalid****pin**

Code SnippetData Dictionary

```json
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Transaction cancelled."
    "transaction_id": "2780576984",
    "card_type": "MasterCard",
    "card_number": "52993074****5859",
    "card_mode": "insert",
    "receipt_text": "\nVerifone\nTest Address\nTest City\nUnited Kingdom\nhelpdesk@verifone.com\nMERCHANT COPY\nVISA\nRevolut\n************9725\nSALE\nICC\nPlease debit my account\nTotal Amount\nGBP 1,003.00\nApproved\nPIN VERIFIED\nPLEASE RETAIN RECEIPT\nDID\n0200373650010652\nMID\n12345678\nTID\n37622781\nDATE\n07/08/2025\nTIME\n17:03:38\nEFTSN\n3250\nAuth Code\n789DE\nRef\n071703003250\nMerchant Ref\nBL-WX6N7ERZM2NE8L6X\nAID\nA0000000031010\nApp Eff10/24\nApp Seq00@#Verifone\nTest AddressTest CityUnited Kingdomhelpdesk@verifone.com\nCARDHOLDER COPY\nVISA\nRevolut\n************9725\nSALE\nICC\nPlease debit my account\nTotal Amount                GBP 1,003.00\nApproved\nPIN VERIFIED\nPLEASE RETAIN RECEIPT\nDID                     0200373650010652\nMID                             ****5678\nTID                             ****2781\nDATE                          07/08/2025\nTIME                            17:03:38\nAuth Code                          789DE\nRef                         071703003250\nAID                       A0000000031010\nApp Seq                               00\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "946220",
        "order_number": "1720155334",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "1003.00",
        "request_timestamp": "2025-08-07T16:03:37+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `FAILURE` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless). |
| **receipt_text** | text | Provide receipt text(This paramter is only returned in the response if in the request body `is_receipt_required` is set to `True`) |
| **data** | json | Return the payload from the request. |

### Response 2c - Insert card - **pin not entered**

Code SnippetData Dictionary

```json
HTTP/1.1 408 Request Timeout
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Transaction cancelled. Operation Timeout."
    "transaction_id": "2780576984",
    "card_type": "MasterCard",
    "card_number": "52993074****5859",
    "card_mode": "insert",
    "receipt_text": "\nVerifone\nTest Address\nTest City\nUnited Kingdom\nhelpdesk@verifone.com\nMERCHANT COPY\nVISA\nRevolut\n************9725\nSALE\nICC\nPlease debit my account\nTotal Amount\nGBP 1,003.00\nApproved\nPIN VERIFIED\nPLEASE RETAIN RECEIPT\nDID\n0200373650010652\nMID\n12345678\nTID\n37622781\nDATE\n07/08/2025\nTIME\n17:03:38\nEFTSN\n3250\nAuth Code\n789DE\nRef\n071703003250\nMerchant Ref\nBL-WX6N7ERZM2NE8L6X\nAID\nA0000000031010\nApp Eff10/24\nApp Seq00@#Verifone\nTest AddressTest CityUnited Kingdomhelpdesk@verifone.com\nCARDHOLDER COPY\nVISA\nRevolut\n************9725\nSALE\nICC\nPlease debit my account\nTotal Amount                GBP 1,003.00\nApproved\nPIN VERIFIED\nPLEASE RETAIN RECEIPT\nDID                     0200373650010652\nMID                             ****5678\nTID                             ****2781\nDATE                          07/08/2025\nTIME                            17:03:38\nAuth Code                          789DE\nRef                         071703003250\nAID                       A0000000031010\nApp Seq                               00\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "946220",
        "order_number": "1720155334",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "1003.00",
        "request_timestamp": "2025-08-07T16:03:37+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `FAILURE` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless). |
| **receipt_text** | text | Provide receipt text(This paramter is only returned in the response if in the request body `is_receipt_required` is set to `True`) |
| **data** | json | Return the payload from the request. |

### Response 3a: Swipe card - valid signature

Code SnippetData Dictionary

```json
HTTP/1.1 201 Created
Content-Type: application/json

{
    "result": "SUCCESS",
    "is_signature_approved": true,
    "transaction_id": "BL-YX8JG43LPEP32P1X",
    "card_type": "MasterCard",
    "card_number": "54609784****4213",
    "card_mode": "swipe",
    "receipt_text": "\nVerifone\nTest Address\nTest City\nUnited Kingdom\nhelpdesk@verifone.com\nMERCHANT COPY\nMASTERCARD\nMASTERCARD\n************4213\nSALE\nSwipe Card\nPlease debit my account\nTotal Amount\nGBP 110.00\nApproved\nCARDHOLDER'S SIGNATURE\nSIGNATURE VERIFIED\nPLEASE RETAIN RECEIPT\nDID\n0200373650010652\nMID\n12345678\nTID\n37622781\nDATE\n07/08/2025\nTIME\n17:16:09\nEFTSN\n3255\nAuth Code\n789DE\nRef\n071716003255\nMerchant Ref\nBL-YX8JG43LPEP32P1X@#Verifone\nTest AddressTest CityUnited Kingdomhelpdesk@verifone.com\nCARDHOLDER COPY\nMASTERCARD\nMASTERCARD\n************4213\nSALE\nSwipe Card\nPlease debit my account\nTotal Amount                  GBP 110.00\nApproved\nSIGNATURE VERIFIED\nPLEASE RETAIN RECEIPT\nDID                     0200373650010652\nMID                             ****5678\nTID                             ****2781\nDATE                          07/08/2025\nTIME                            17:16:09\nAuth Code                          789DE\nRef                         071716003255\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "321263",
        "order_number": "2060691475",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "110.00",
        "request_timestamp": "2025-08-07T16:16:06+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `SUCCESS` |
| **is_signature_approved** | boolean | `true` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless). |
| **receipt_text** | text | Provide receipt text(This paramter is only returned in the response if in the request body `is_receipt_required` is set to `True`) |
| **data** | json | Return the payload from the request. |

### Response 3b: Swipe card - **invalid****signature**

Code SnippetData Dictionary

```json
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
    "result": "FAILURE",
    "is_signature_approved": false,
    "message": "Transaction declined. Signature Mismatch.",
    "transaction_id": "BL-6XMMWGY4J9G77MLX",
    "card_type": "MasterCard",
    "card_number": "54609784****4213",
    "card_mode": "swipe",
    "receipt_text": "\nVerifone\nTest Address\nTest City\nUnited Kingdom\nhelpdesk@verifone.com\nMERCHANT COPY\nMASTERCARD\nMASTERCARD\n************4213\nSALE\nSwipe Card\nPlease debit my account\nTotal Amount\nGBP 115.00\nDeclined\nPLEASE RETAIN RECEIPT\nDID\n0200373650010652\nMID\n12345678\nTID\n37622781\nDATE\n07/08/2025\nTIME\n17:17:17\nEFTSN\n3256\nRef\n071717003256\nMerchant Ref\nBL-6XMMWGY4J9G77MLX@#Verifone\nTest AddressTest CityUnited Kingdomhelpdesk@verifone.com\nCARDHOLDER COPY\nMASTERCARD\nMASTERCARD\n************4213\nSALE\nSwipe Card\nPlease debit my account\nTotal Amount                  GBP 115.00\nDeclined\nPLEASE RETAIN RECEIPT\nDID                     0200373650010652\nMID                             ****5678\nTID                             ****2781\nDATE                          07/08/2025\nTIME                            17:17:17\nRef                         071717003256\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "228269",
        "order_number": "9358526126",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "115.00",
        "request_timestamp": "2025-08-07T16:17:16+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `FAILURE` |
| **is_signature_approved** | boolean | `false` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless). |
| **data** | json | Return the payload from the request. |

### Response 4: Abort

Code SnippetData Dictionary

```json
HTTP/1.1 202 Accepted
Content-Type: application/json
{
    "result": "ABORTED",
    "message": "Aborted by POS",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650M-451-962-212-MOHSIN",
        "operator_id": "851579",
        "order_number": "1194574331",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "56.08",
        "request_timestamp": "2025-08-07T16:18:26+01:00",
        "is_receipt_required": true,
        "request_tips": false
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `ABORTED` |
| **message** | varchar(50) | Abort message |
| **data** | json | Return the payload from the request. |

d

### Response 5: TipAmount

Code SnippetData Dictionary

```json
HTTP/1.1 201 Created
Content-Type: application/json

{
    "result": "SUCCESS",
    "transaction_id": "BL-ZX9ZKM7NV2J66785",
    "card_type": "MasterCard",
    "card_number": "52993074****5859",
    "card_mode": "tap",
    "authorized_amount": "42.16",
    "tip_amount": "2.01",
    "receipt_text": "\nBlink Payments\n123 Pentonville Rd\nLondon\nGreater London\nUnited Kingdom\nN1 9LG\n+442036685761\na.eder@blinkpayment.co.uk\nMERCHANT COPY\nMASTERCARD\nMASTERCARD\n************5859\nSALE\nContactless\nPlease debit my account\nAmount\nGBP 40.15\nGratuity\nGBP 2.01\nTotal Amount\nGBP 42.16\nApproved\nNO CARDHOLDER VERIFICATION\nPLEASE RETAIN RECEIPT\nDID\n0200373650010647\nMID\n12345678\nTID\n37622782\nDATE\n14/10/2025\nTIME\n11:13:03\nEFTSN\n0756\nAuth Code\n789DE\nRef\n141113000756\nMerchant Ref\nBL-ZX9ZKM7NV2J66785\nAID\nA0000000041010\nApp Eff03/24\nApp Seq01@#Blink Payments\n123 Pentonville RdLondonGreater LondonUnited KingdomN1 9LG+442036685761a.eder@blinkpayment.co.uk\nCARDHOLDER COPY\nMASTERCARD\nMASTERCARD\n************5859\nSALE\nContactless\nPlease debit my account\nAmount                         GBP 40.15\nGratuity                        GBP 2.01\nTotal Amount                   GBP 42.16\nApproved\nNO CARDHOLDER VERIFICATION\nPLEASE RETAIN RECEIPT\nDID                     0200373650010647\nMID                             ****5678\nTID                             ****2782\nDATE                          14/10/2025\nTIME                            11:13:03\nAuth Code                          789DE\nRef                         141113000756\nAID                       A0000000041010\nApp Seq                               01\n",
    "data": {
        "site_branch_id": "London",
        "pos_location": "POS-25",
        "terminal_id": "T650P-451-863-867-MADAN",
        "operator_id": "12345",
        "order_number": "6639492636",
        "metadata": {},
        "currency": "GBP",
        "requested_amount": "40.15",
        "request_timestamp": "2025-10-14T10:13:01+01:00",
        "is_receipt_required": true,
        "request_tips": true
    }
}
```

| Field Name | Type | Description |
| --- | --- | --- |
| **result** | varchar(10) | `SUCCESS` |
| **transaction_id** | varchar(50) | Unique identifier for the pre-auth transaction. |
| **card_type** | varchar(10) | Type of card used for the transaction. |
| **card_number** | varchar(20) | Masked card number for security. |
| **card_mode** | varchar(15) | Mode of transaction (e.g., chip, contactless, tap). |
| **tip_amount** | varchar | TipAmount will be present when the terminal/processor reports a tip ("0.00" when none collected). |
| **receipt_text** | text | Provide receipt text(This paramter is only returned in the response if in the request body `is_receipt_required` is set to `True`) |
| **data** | json | Return the payload from the request. |

## Errors

## **400 Bad Request**

### **Missing authorization header**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "Authorization": "The Authorization header is required and must be provided in the format: Basic <encoded_api_key:secret_key>."
    }
}
```

### **Missing currency**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "currency": "The currency field is required and cannot be empty."
    }
}
```

### **Missing POS_location**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "pos_location": "The pos_location field is required and cannot be empty."
    }
}
```

### **Missing request_timestamp**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "request_timestamp": "The request_timestamp field is required and cannot be empty."
    }
}
```

### **Missing requested_amount**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "requested_amount": "The requested_amount field is required and cannot be empty."
    }
}
```

### **Missing site_branch_id**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "site_branch_id": "The site_branch_id field is required and cannot be empty."
    }
}
```

### **Missing terminal_id**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  
{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "terminal_id": "The terminal_id field is required and cannot be empty."
    }
}
```

### **Missing request_tips**

```json
HTTP/1.1 400 Bad Request  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "request_tips": "The request_tips field is required and cannot be empty."
    }
}
```

## **401 Unauthorized**

### **Acquirer token not found**

```json
HTTP/1.1 401 Unauthorized  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "acquirer_token": "The acquirers_token was not found in our system. Please contact the support team."
    }
}
```

### **Invalid acquirer token**

```json
HTTP/1.1 401 Unauthorized  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "acquirer_token": "The acquirers_token provided is invalid in our system. Please contact the support team."
    }
}
```

### **Invalid authorization header**

```json
HTTP/1.1 401 Unauthorized  
Content-Type: application/json  

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "Authorization": "The provided Authorization header is invalid. Ensure it follows the correct format: Basic <encoded api_key:secret_key>."
    }
}
```

## **403 Forbidden**

### **API key or secret key is invalid**

```json
HTTP/1.1 403 Forbidden  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "Authorization": "The provided api_key or secret_key is invalid. Please ensure the credentials are correct and try again."
    }
}
```

## **404 Not Found**

### **Invalid terminal_id**

```json
HTTP/1.1 404 Not Found
Content-Type: application/json  
{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "terminal_id": "The terminal_id provided is invalid in our system. Please contact the support team."
    }
}
```

### **422 Unprocessable Entity**

### **Invalid currency**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "currency": "The currency must be a valid ISO 4217 code (e.g., GBP, USD, EUR)."
    }
}
```

### **Invalid metadata**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "metadata": "The metadata must be a valid JSON-formatted string with a maximum length of 1024 characters."
    }
}
```

### **Invalid operator_id**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "operator_id": "The operator_id must be a valid string with a maximum length of 255 characters."
    }
}
```

### **Invalid POS_location**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "pos_location": "The pos_location must be a valid string with a maximum length of 16 characters."
    }
}
```

### **Invalid request_timestamp**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "request_timestamp": "The request_timestamp must be a valid ISO 8601 date (e.g., '2024-02-18T12:34:56')."
    }
}
```

### **Invalid requested_amount**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "requested_amount": "The requested_amount must be between 0.01 and 999999.99."
    }
}
```

### **Invalid site_branch_id**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "site_branch_id": "The site_branch_id must be a valid string with a maximum length of 16 characters."
    }
}
```

### **Invalid terminal_id**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json
{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "terminal_id": "The terminal_id must be a valid string with a maximum length of 35 characters."
    }
}
```

### **Invalid request_tips**

```json
HTTP/1.1 422 Unprocessable Entity  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Field validation failed",
    "errors": {
        "request_tips": "The request_tips must be true or false."
    }
}
```

## **429 Too Many Request**

### **Terminal busy**

```json
HTTP/1.1 429 Too Many Requests 
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Terminal is busy",
    "errors": {
        "terminal_id": "The terminal is busy processing another request. Please try again later."
    }
}
```

## **500 Internal Server Error**

### **Generic error**

```json
HTTP/1.1 500 Internal Server Error  
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Something went wrong on our end.",
    "errors": {
        "We're experiencing an issue with our server, but rest assured our team is already working to resolve it. Please try again, and we apologize for the inconvenience."
    }
}
```

## **503 Service Unavailable**

### **Lost connection to the terminal**

```plaintext
HTTP/1.1 503 Service Unavailable
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Lost connection",
    "errors": {
        "terminal_id": "The connection to the terminal was lost. Please try again."
    }
}
```

### **Transaction cancelled - operation timeout**

```json
HTTP/1.1 503 Service Unavailable
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Transaction cancelled - operation timeout",
    "errors": {
        "terminal_id": "The transaction was cancelled due to operation timeout. Please try again."
    }
}
```

### **Terminal disconnected**

```json
HTTP/1.1 503 Service Unavailable
Content-Type: application/json

{
    "result": "FAILURE",
    "message": "Terminal unreachable",
    "errors": {
        "terminal_id": "The terminal is currently offline or unreachable. Please try again."
    }
}
```
