# Single-Step Payment

This guide explains how to execute a single-step payment using an Integrated POS. A single-step payment completes authorization and capture in one operation via the `Sale` function.

## What is a single-step payment

A single-step payment is a sale that authorizes and captures the transaction in a single request. The automation system sends a `Sale` request with the desired parameters; the POS runs the payment flow and returns a structured response. The same behaviour applies across USB (`CreateUsb`), Network (`CreateHttp`), and Cloud (`CreateCloud`).

## Before you begin

Before performing a payment, ensure that:

* A Connector has been created using a supported connection model
* The terminal has been validated using `Polling`
* Integrated POS Mode is active

## Step 1: Build and execute the sale request

Single-step payments use the `Sale` operation. If a parameter is not provided, the POS displays the corresponding input screen.

| Parameter | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| `Amount` | Long | No | Value in local currency (e.g. `10000` = 100.00). If omitted, the POS requests the amount. |
| `SaleType` | Enum | No | Payment type: `Card` or `QrCode`. If omitted, the POS requests the payment type. |
| `PrintOnPos` | Bool | No | If `true`, receipt is printed on the POS; if `false`, receipt content is returned in the response. |
| `EmployeeId` | Int | No | Waiter or operator identification. |
| `Tip` | Long | No | Tip amount added to the transaction total. |
| `Installments` | Int | No | Number of installments. |
| `SkipReceipt` | Bool | No | If `true`, skips the customer receipt screen after the transaction. |
| `SkipConfirmation` | Bool | No | If `true`, skips the screen that displays amount and installment details for confirmation. |
| `PlanId` | String | No | Installment plan (e.g. Argentina). See [Installment Plans and Plan Ids](/en/integrated-pos/reference/installment-plans). |
| `Interest` | Enum | No | Whether the plan includes interest: `OnPosSelection`, `Interest`, or `NoInterest`. |
| `OperationMode` | Enum | No | Who calculates the final amount: `CalculatedGetnet` (the terminal calculates) or `CalculatedISV` (your application calculates and sends the final amount). |
| `CallerId` | String | No | ID generated by the automation system, required to later query the transaction with Check Status. No special or Unicode characters. |

Here is an example of a single-step payment request:

```csharp
var saleRequest = new SaleRequest
{
    Amount = 10000,
    SaleType = SaleType.Card
};

var saleResult = connector.SaleAsync(saleRequest);
```

During execution, the POS handles all required customer interaction (card read, PIN, confirmation, etc.).

## Step 2: Handle the response

A successful response includes at least the fields below. Always verify `Code` (e.g. `0` = success) before proceeding.

| Field | Type | Description |
| :--- | :--- | :--- |
| `Code` | Int | Response code (see annexes). `0` = success. |
| `Message` | String | Operation result (e.g. `"APPROVED"`). |
| `CommerceCode` | String | Branch code approved by Getnet. |
| `TerminalId` | String | POS terminal code. |
| `AuthorizationCode` | String | Transaction authorization code. |
| `Amount` | Long | Transaction amount in local currency. |
| `OriginalAmount` | Long | Original transaction amount in local currency. |
| `OperationMode` | Enum | Selected operation mode. One of `CalculatedGetnet` or `CalculatedISV`. |
| `Last4Digits` | String | Last four digits of the card. |
| `CardBrand` | String | Card brand used in the transaction (e.g. `"Mastercard"`). |
| `CardType` | String | Type of card (e.g. `"Credit"`). |
| `AccountingDate` | String | Transaction date/time (GMT). |
| `RealDate` | Date | Transaction date/time (local). |
| `SaleType` | Enum | Payment type (e.g. `"Card"`). |
| `ReceiptContent` | Dict | Receipt lines when `PrintOnPos` is `false`. |
| `PlanId`, `Interest`, `Installments` | — | Present when installments were used. |
| `CallerId` | String | ID generated by the automation system. |
| `CardBin` | String | First eight digits of the customer's card (max 8). |

This is an example of a successful response:

```json
{
  "Code": 0,
  "Message": "APPROVED",
  "CommerceCode": "0000081561",
  "TerminalId": "AR001P0B",
  "AuthorizationCode": "551437",
  "Amount": 10000,
  "OriginalAmount": 10000,
  "OperationMode": "CalculatedGetnet",
  "Last4Digits": "7167",
  "CardBrand": "master",
  "CardType": null,
  "AccountingDate": "2025-08-25T16:11:23.0000000+00:00",
  "RealDate": "2025-08-25T13:11:50.8570000-03:00",
  "SaleType": "Card",
  "ReceiptContent": null,
  "PlanId": "contado",
  "Interest": null,
  "Installments": 1,
  "CallerId": "123456-789000",
  "CardBin": "84168075"
}
```

## Next steps

* For details on installments, PlanId, and interest options, see the [Installment Payments](/en/integrated-pos/pos-payment-guides/installment-payment) guide.
* To accept digital wallet payments, refer to the [QR Code Payment](/en/integrated-pos/pos-payment-guides/qr-code-payment) guide.
* If you're new to Integrated POS, start with the [Quick Start](/en/integrated-pos/first-steps-pos/quickstart-integrated-pos) guide.
* For a complete reference of all Sale parameters and response fields, consult the [Methods and Parameters Reference](/en/integrated-pos/reference/methods-parameters).