---
title: "Submit payment instruction"
method: POST
path: "/devices/{serialNumber}/payment-instructions"
tags: ["paymentInstructions"]
---

# Submit payment instruction

`POST /devices/{serialNumber}/payment-instructions`

Use this method to submit an instruction request to initiate a sale on a payment device.  

In the request, include the order amount and currency.  

When you send a successful request, our gateway returns information about the payment instruction and a paymentInstructionId, which you need for the following methods:
- [Retrieve payment instruction](https://docs.payroc.com/api/schema/payroc-cloud/payment-instructions/retrieve) - View the details of the payment instruction.
- [Cancel payment instruction](https://docs.payroc.com/api/schema/payroc-cloud/payment-instructions/delete) - Cancel the payment instruction.

## Path parameters

- `serialNumber` string, required

## Headers

- `Authorization` string, required
- `Idempotency-Key` string, uuid, required

## Request body

- PaymentInstructionRequest — Object that contains the instructions for initiating a payment on a physical device.
  - `operator` string — Operator who initiated the request.
  - `processingTerminalId` string, required — Unique identifier that we assigned to the terminal.
  - `order` PaymentInstructionOrder, required — Object that contains information about the payment.
    - `orderId` string, required — Unique identifier that the merchant assigns to the transaction.
    - `dateTime` string, date-time — Date and time that the processor processed the transaction. Our gateway returns this value in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
    - `description` string — Description of the transaction.
    - `amount` integer, required — Total amount of the transaction. The value is in the currency’s lowest denomination, for example, cents.
    - `currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BOV' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHE' | 'CHF' | 'CHW' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'COU' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LTL' | 'LVL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'USN' | 'USS' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', required — Currency of the transaction. The value for the currency follows the [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) standard.
    - `acceptPartialAmount` boolean — Indicates if the merchant accepts a partial authorization for this transaction. - `true` — If the issuer cannot approve the full amount, the gateway accepts a partial authorization and returns the approved amount. The integrator is responsible for collecting the remaining balance via a follow-up payment. - `false` — Standard authorization behavior. If the issuer cannot approve the full amount, the transaction is declined. **Note:** When this field is omitted, the default is `false` and standard authorization behavior applies.
    - `breakdown` BreakdownForPaymentInstructions — Object that contains information about the breakdown of the transaction.
      - `subtotal` integer, required — Amount of the transaction before tax and fees. The value is in the currency’s lowest denomination, for example, cents. Required for [Level 2, Level 3, and CEDP transactions](https://docs.payroc.com/knowledge/card-payments/enhanced-data).
      - `cashbackAmount` integer — Amount of cashback for the transaction.
      - `tip` Tip — Object that contains information about the tip.
        - `type` 'percentage' | 'fixedAmount', required — Indicates if the tip is a fixed amount or a percentage. **Note:** Our gateway applies the percentage tip to the total amount of the transaction after tax.
        - `mode` 'prompted' | 'adjusted' — Indicates how the tip was added to the transaction. - `prompted` – The customer was prompted to add a tip during payment. - `adjusted` – The customer added a tip on the receipt for the merchant to adjust post-transaction.
        - `amount` integer — If the value for type is `fixedAmount`, this value is the tip amount in the currency's lowest denomination, for example, cents.
        - `percentage` number, double — If the value for type is `percentage`, this value is the tip as a percentage.
      - `surcharge` Surcharge — Object that contains information about the surcharge.
        - `bypass` boolean — Indicates if the merchant wants to remove the surcharge fee from the transaction. - `true` - Gateway removes the surcharge fee from the transaction. - `false` - Gateway adds the fee to the transaction.
        - `amount` integer — If the merchant added a surcharge fee, this value indicates the amount of the surcharge fee in the currency’s lowest denomination, for example, cents.
        - `percentage` number, double — If the merchant added a surcharge fee, this value indicates the surcharge percentage.
      - `dualPricing` DualPricing — Object that contains information about dual pricing.
        - `offered` boolean, required — Indicates if the merchant offered dual pricing to the customer.
        - `choiceRate` ChoiceRate — Object that contains information about the choice rate. We return this only if the value for offered was `true`.
          - `applied` boolean, required — Indicates if the merchant applies a choice rate to the transaction amount. Our gateway adds a choice rate to the transaction when the merchant offers an alternative payment type, but the customer chooses to pay by card.
          - `rate` number, double, required — If the customer used a card to pay for the transaction, this value indicates the percentage that our gateway added to the transaction amount. **Note:** Our gateway returns a value for **rate** only if the value for **applied** in the request is `true`.
          - `amount` integer, required — If the customer used a card to pay for the transaction, this value indicates the amount that our gateway added to the transaction amount. This value is in the currency’s lowest denomination, for example, cents. **Note:** Our gateway returns a value for **amount** only if the value for **applied** in the request is `true`.
        - `alternativeTender` 'card' | 'cash' | 'bankTransfer' — Payment method that the merchant presented to the customer as an alternative to their chosen method. **Note:** For requests, if the value for **offered** is `true`, you must send a value for **alternativeTender** in the request.
      - `healthcareExpenses` HealthcareExpense[] — Array of healthcareExpense objects that contain information about healthcare expenses.
        - `type` 'copay' | 'clinic' | 'dental' | 'prescription' | 'transit' | 'vision', required — Type of healthcare expense.
        - `amount` integer, required — Amount of the healthcare expense. The value is in the currency's lowest denomination, for example, cents.
      - `taxes` TaxRate[] — List of taxes.
        - `rate` number, double, required — Tax percentage for the transaction. Required for [Level 3 and CEDP transactions](https://docs.payroc.com/knowledge/card-payments/enhanced-data).
        - `name` string, required — Name of the tax. A tax validation on the stored rate for the tax name is performed.
  - `customer` Customer — Object that contains the customer's contact details and address information. Contains parameters required for [Level 2, Level 3, and CEDP transactions](https://docs.payroc.com/knowledge/card-payments/enhanced-data).
    - `firstName` string — Customer's first name.
    - `lastName` string — Customer's last name.
    - `dateOfBirth` string, date — Customer's date of birth. The format for this value is **YYYY-MM-DD**.
    - `referenceNumber` string — Identifier of the transaction, also known as a customer code. For requests, you must send a value for **referenceNumber** if the customer provides one. Required for [Level 2, Level 3, and CEDP transactions](https://docs.payroc.com/knowledge/card-payments/enhanced-data).
    - `billingAddress` Address — Object that contains information about the address.
      - `address1` string, required — Address line 1.
      - `address2` string — Address line 2.
      - `address3` string — Address line 3.
      - `city` string, required — City.
      - `state` string, required — Name of the state or state abbreviation.
      - `country` string, required — Two-digit country code for the country that the business operates in. The format follows the [ISO-3166-1](https://www.iso.org/iso-3166-country-codes.html) standard.
      - `postalCode` string, required — Zip code or postal code.
    - `shippingAddress` Shipping — Object that contains information about the customer and their shipping address. Contains parameters required for [Level 3 and CEDP transactions](https://docs.payroc.com/knowledge/card-payments/enhanced-data).
      - `recipientName` string — Recipient's name. Required for [Level 3 and CEDP transactions](https://docs.payroc.com/knowledge/card-payments/enhanced-data).
      - `address` Address — Object that contains information about the address.
        - `address1` string, required — Address line 1.
        - `address2` string — Address line 2.
        - `address3` string — Address line 3.
        - `city` string, required — City.
        - `state` string, required — Name of the state or state abbreviation.
        - `country` string, required — Two-digit country code for the country that the business operates in. The format follows the [ISO-3166-1](https://www.iso.org/iso-3166-country-codes.html) standard.
        - `postalCode` string, required — Zip code or postal code.
    - `contactMethods` ContactMethod[] — Array of polymorphic objects, which contain contact information. The value of the type parameter determines which variant you should use: - `email` - Email address - `phone` - Phone number - `mobile` - Mobile number - `fax` - Fax number
      - union
        - object — email variant
          - `type` 'email', required — Discriminator value: email
          - `value` string, required — Email address.
        - object — phone variant
          - `type` 'phone', required — Discriminator value: phone
          - `value` string, required — Phone number.
        - object — mobile variant
          - `type` 'mobile', required — Discriminator value: mobile
          - `value` string, required — Mobile number.
        - object — fax variant
          - `type` 'fax', required — Discriminator value: fax
          - `value` string, required — Fax number.
    - `notificationLanguage` 'en' | 'fr' — Language that the customer uses for notifications. This code follows the [ISO 639-1](https://www.iso.org/iso-639-language-code) alpha-2 standard.
  - `ipAddress` IpAddress — Object that contains the IP address of the device that sent the request.
    - `type` 'ipv4' | 'ipv6', required — Internet protocol version of the IP address.
    - `value` string, required — IP address of the device.
  - `credentialOnFile` SchemasCredentialOnFile — Object that contains information about saving the customer’s payment details.
    - `externalVault` boolean — Indicates if the merchant uses a third-party vault to store the customer’s payment details.
    - `tokenize` boolean — Indicates if our gateway should tokenize the customer’s payment details as part of the transaction.
    - `secureTokenId` string — Unique identifier that the merchant creates for the secure token that represents the customer’s payment details. **Note:** If you do not send a value for the **secureTokenId** parameter, our gateway generates a unique identifier for the token.
    - `mitAgreement` 'unscheduled' | 'recurring' | 'installment' — Indicates how the merchant can use the customer's card details to run future card transactions, as agreed with the customer. If you send a value for the **mitAgreement** parameter, you must also include the **[standingInstructions](https://docs.payroc.com/api/schema/card-payments/payments/create#request.body.order.standingInstructions)** object in your request. - `unscheduled` - Transactions for a fixed or variable amount that the merchant runs at a certain predefined event. - `recurring` - Transactions for a fixed amount that the merchant runs at regular intervals, for example, monthly. Recurring transactions don’t have a fixed duration and run until the customer cancels the agreement. - `installment` - Transactions for a fixed amount that the merchant runs at regular intervals, for example, monthly. Installment transactions have a fixed duration. **Note:** If you send a value for **mitAgreement**, you must send the **standingInstructions** object in the **paymentOrder** object.
  - `customizationOptions` CustomizationOptions — Object that contains available options to customize certain aspects of an instruction.
    - `ebtDetails` EbtDetails — Object that contains information about the Electronic Benefit Transfer (EBT) transaction.
      - `benefitCategory` 'cash' | 'foodStamp', required — Indicates if the balance relates to an EBT Cash account or an EBT SNAP account. - `cash` – EBT Cash - `foodStamp` – EBT SNAP
      - `withdrawal` boolean — Indicates whether the customer wants to withdraw cash. **Note:** Cash withdrawals are available only from EBT Cash accounts.
    - `entryMethod` 'deviceRead' | 'manualEntry' | 'deviceReadOrManualEntry' — Indicates how you want the device to capture the card details. - `deviceRead` - Device prompts the cardholder to tap, swipe, or insert their card. - `manualEntry` - Device prompts the merchant or cardholder to manually enter card details. - `deviceReadOrManualEntry` - Device prompts the cardholder to tap, swipe, or insert their card. The device also displays an option for the merchant or cardholder to manually enter card details.
    - `closedLoopOptions` CustomizationOptionsClosedLoopOptions — mifare variant
      - `type` 'mifare', required — Discriminator value: mifare
  - `autoCapture` boolean — Indicates if we should automatically capture the payment amount. - `true` - Run a sale and automatically capture the transaction. - `false`- Run a pre-authorization and capture the transaction later. **Note:** If you send `false` and the terminal doesn't support pre-authorization, we set the transaction's status to pending. The merchant must capture the transaction to take payment from the customer.
  - `processAsSale` boolean — Indicates if we should immediately settle the sale transaction. The merchant cannot adjust the transaction if we immediately settle it. **Note:** If the value for **processAsSale** is `true`, the gateway ignores the value in **autoCapture**.

## Response `202`

Successful request. We accepted the payment instruction.

- PaymentInstruction
  - `status` 'canceled' | 'completed' | 'failure' | 'inProgress', required — Indicates the current status of the instruction. - `canceled` – The instruction was canceled before it was completed. - `completed` – The instruction has completed. Use the link object to check the resource. - `failure` – The instruction failed. Check the errorMessage field for more information. - `inProgress` – The instruction is currently in progress.
  - `errorMessage` string — Description of the error that caused the instruction to fail. **Note:** We return this field only if the status is `failure`.
  - `link` Link — Object that contains HATEOAS links for the resource.
    - `rel` string, required — Indicates the relationship between the current resource and the target resource.
    - `method` string, required — HTTP method that you need to use with the target resource.
    - `href` string, required — URL of the target resource.
  - `paymentInstructionId` string, required — Unique identifier that we assigned to the payment instruction.

## Other responses

- `400` — Validation error
- `401` — Identity could not be verified
- `403` — Do not have permissions to perform this action
- `404` — Resource not found
- `406` — Not acceptable
- `409` — Conflict
- `415` — Unsupported media type
- `500` — An error has occured

---

[API](https://skmtc.dev/payroc/apis/schema.md) · [All operations](https://skmtc.dev/payroc/apis/schema/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/payroc/schema/revisions/1d9d3e305945/schema)
