---
title: "Create Charge [EXPERIMENTAL]"
method: POST
path: "/pos/charges"
tags: ["Create POS Charges"]
---

# Create Charge \[EXPERIMENTAL\]

`POST /pos/charges`

## Request

- Base URL: `https://devices.eu-west-1.api.silverflow.com/v1`
- URL: `https://devices.eu-west-1.api.silverflow.com/v1/pos/charges`
- Auth: API key in header `-`
- TypeScript: <https://skmtc.dev/silverflow/apis/silverflow-api/docs/pos/charges/post.ts> (a function with typed inputs; its response is checked against the schema)

> **Notice:** This endpoint has different server URLs and authorization method than the rest of the API.

Create a new POS charge.

## Headers

- `Idempotency-Key` string: This key is used to deduplicate requests that are retried. For more information see the section on [Idempotency](https://docs.silverflow.com/guides/idempotency).

## Request body

- CreateChargeRequest: Create a charge request
  - `merchantAcceptorResolver` union, required: The resolver is used to select the appropriate merchant acceptor for creating the charge. It can accept either a `merchantAcceptorKey` or a combination of `merchantKey` and an optional `route`. If the optional property for `route` is not provided the default one generated when creating an acceptor will be used.
    - object: Used to select a merchant acceptor by key.
      - `merchantAcceptorKey` string, required: Uniquely identifies a merchant acceptor.
    - object: Used to select a merchant acceptor by merchant key and an optional route.
      - `merchantKey` string, required: Uniquely identifies a merchant.
      - `route` string: Route key used to uniquely reference an acceptor when used in combination with its card network and merchant key.
  - `card` SchemasCardInput, required: Card data
    - `number` string, password, required: Full digits of a card
    - `expiryMonth` integer, required: The month the card expires. January is 1
    - `expiryYear` integer, required: The year the card expires including the century
    - `createProcessorToken` boolean: When set to `true`, Silverflow will [create a processor token](https://docs.silverflow.com/guides/card-tokenization) for the provided `card` and return a processor token key in the response field `card.processorTokenKey`. <a class="experimental-tag-link" href="https://docs.silverflow.com/guides/api-lifecycle#tag/EXPERIMENTAL-Tag"><span class="tag experimental-tag">EXPERIMENTAL</span></a> **This flag is non-blocking.** When failing to create a processor token, the authorization will take place as usual and no `card.processorTokenKey` will be returned.
  - `amount` RequestAmount, required: The amount encoded as an object with a `value` in minor units and a `currency` code. An optional `breakdown` can be provided to indicate specific sub-amounts.
    - `value` integer, required: An amount in minor units. For example `$12.34` should be encoded as `1234`.
    - `currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLP' | 'CNY' | 'COP' | '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' | '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' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | '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' | 'SOS' | 'SRD' | 'SSP' | 'STN' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYU' | 'UZS' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XCG' | 'XOF' | 'XPF' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', required: An alphabetic ISO-4217 currency code.
    - `breakdown` SchemasRequestAmountBreakdown: A breakdown of the transaction `value`. All provided amounts must exactly add up to `value`. Providing a breakdown is only required if any other amounts besides the `baseAmount` are included.
      - `baseAmount` integer, required: An amount in minor units. For example `$12.34` should be encoded as `1234`.
      - `cashback` integer: An amount in minor units. For example `$12.34` should be encoded as `1234`.
      - `gratuity` integer: An amount in minor units. For example `$12.34` should be encoded as `1234`.
  - `type` SchemasChargeType, required: Describes the kind of POS charge the merchant wants to submit.
    - `intent` 'purchase' | 'reservation' | 'refund', required: The intention of the cardholder
    - `cardEntry` 'terminal', required: The method used to capture the card details.
    - `order` 'counter', required: The method used to place the order.
    - `terminalEntryMode` 'contactless' | 'manual-entry' | 'chip' | 'magstripe' | 'magstripe-fallback', required: This field indicates the method used for PAN entry on the terminal to initiate the transaction.
    - `sequence` 'subsequent': This property indicates that the cardholder has entered Online PIN, when required by the issuer for a Mastercard Single Tap transaction.
  - `localTransactionDateTime` string, iso-8601-date-time: Date and time of the transaction in the local timezone.
  - `transactionReference` string: Unique ID assigned by the merchant or payment service provider for the transaction. Used to identify the transaction.
  - `track2Data` string: The information encoded on track 2 of the card magnetic stripe as defined in the ISO 7813 specification, including data element separator but excluding the beginning and ending sentinels and the LRC (Longitudinal Redundancy Check) character. This property is mandatory when the `terminalEntryMode` is `chip`, `contactless`,`magstripe` or `magstripe-fallback`.
  - `emvData` string: This field contains integrated circuit card (ICC) related binary data that is transmitted from the ICC to the card issuer and from the card issuer to the ICC. This field is formatted as 510 hexadecimal characters, which translates to 255 bytes.
  - `cardSequenceNumber` string: Distinguishes among separate cards having the same PAN. This is required if EMV tag 5F34 is present/personalized on the card chip.
  - `pinBlock` union: PIN block related data.
    - object: PIN block related data in `ISO-0` or `ISO-1` format.
      - `format` 'ISO-0' | 'ISO-1', required: Indicates the type of PIN block format used.
      - `block` string, required: Contains encrypted PIN information, formatted as an `ISO-0`/`ISO-1` block of 16 hexadecimal characters.
      - `zoneId` string, required: ID of the encryption zone.
      - `keyId` string, required: Encryption key in the specified zone to use.
    - object: PIN block related data in `ISO-4` format.
      - `format` 'ISO-4', required: Indicates the type of PIN block format used.
      - `block` string, required: Contains encrypted PIN information, formatted as an `ISO-4` block of 32 hexadecimal characters.
      - `zoneId` string, required: ID of the encryption zone.
      - `keyId` string, required: Encryption key in the specified zone to use.
  - `terminal` union, required: Details about the terminal.
    - object
      - `type` 'pos', required
      - `id` string, required: Terminal's ID
      - `attended` boolean, required: Whether the terminal is attended or not.
      - `capabilities` TerminalCapability[], required: The capabilities of the terminal. This can be one or multiple, and if more than one is specified it means that it is capable of all of those things. #### Restrictions If `capabilities` include `keyEntry` or `signature` then `attended` must be set to `true`.
    - object
      - `type` 'mpos', required
      - `id` string, required: Terminal's ID
      - `attended` true, required: Whether the terminal is attended or not.
      - `capabilities` TerminalCapability[], required: The capabilities of the terminal. This can be one or multiple, and if more than one is specified it means that it is capable of all of those things.
    - object
      - `type` 'softpos', required
      - `id` string, required: Terminal's ID
      - `attended` true, required: Whether the terminal is attended or not.
      - `capabilities` SoftPosTerminalCapability[], required: The capabilities of the terminal. This can be one or multiple, and if more than one is specified it means that it is capable of all of those things.
  - `allowPartialApproval` boolean: Indicates whether to allow partial approvals for this charge. If set to `true` the charge's and the authorization action's `amount` field will contain the approved amount. It is only implemented for Visa and Mastercard. It will be ignored for other card networks.
  - `clearAfter` string, iso-8601-date-time: If provided, clearing will not occur before this point in time. From August 13, 2025, `clearAfter` may be at most 6 months in the future from when the charge was created.

## Response `201`

The created charge

- CreateChargeResponse: A POS charge
  - `key` string, required: Uniquely identifies a charge.
  - `merchantAcceptorRef` ComponentsSchemasAcceptorRef, required: Reference key and status of the acceptor
    - `key` string, required: Uniquely identifies a merchant acceptor.
    - `version` integer, required: The version of this object
  - `card` OutputCard, required: Card data
    - `maskedNumber` string, required: The card number used to create this charge, masked according to PCI standards. For card numbers with 16 or more digits, the first 8 and the last 4 digits are visible. For card numbers with 13-15 digits, the first 6 and the last 4 digits are visible. For cards numbers with less than 13 digits, the first 6 and last 2 digits are visible.
    - `processorTokenKey` string: The key to a card tokenized in the [Processor Tokenization](#tag/Processor-Tokenization).
  - `amount` object, required: The amount encoded as an object with a `value` in minor units and a `currency` code. An optional `breakdown` can be provided to indicate specific sub-amounts.
    - `value` integer, required: An amount in minor units. For example `$12.34` should be encoded as `1234`.
    - `currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLP' | 'CNY' | 'COP' | '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' | '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' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | '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' | 'SOS' | 'SRD' | 'SSP' | 'STN' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYU' | 'UZS' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XCG' | 'XOF' | 'XPF' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', required: An alphabetic ISO-4217 currency code.
    - `breakdown` SchemasResponseAmountBreakdown: A breakdown of the transaction `value`. All provided amounts must exactly add up to `value`. Providing a breakdown is only required if any other amounts besides the `baseAmount` are included.
      - `baseAmount` integer, required: An amount in minor units. For example `$12.34` should be encoded as `1234`.
      - `cashback` integer: An amount in minor units. For example `$12.34` should be encoded as `1234`.
      - `gratuity` integer: An amount in minor units. For example `$12.34` should be encoded as `1234`.
  - `type` SchemasChargeType, required: Describes the kind of POS charge the merchant wants to submit.
    - `intent` 'purchase' | 'reservation' | 'refund', required: The intention of the cardholder
    - `cardEntry` 'terminal', required: The method used to capture the card details.
    - `order` 'counter', required: The method used to place the order.
    - `terminalEntryMode` 'contactless' | 'manual-entry' | 'chip' | 'magstripe' | 'magstripe-fallback', required: This field indicates the method used for PAN entry on the terminal to initiate the transaction.
    - `sequence` 'subsequent': This property indicates that the cardholder has entered Online PIN, when required by the issuer for a Mastercard Single Tap transaction.
  - `status` SchemasStatus, required: The status property provides a high-level representation of the lifecycle of a charge. For a complete history, the actions should be used.
    - `authentication` 'none', required: Strong Customer Authentication (SCA) status of the charge
    - `authorization` 'none' | 'approved' | 'declined' | 'reversed', required: Authorization status of the charge
    - `clearing` 'none' | 'manual' | 'pending' | 'completed' | 'canceled' | 'abandoned', required: Clearing status of the charge
  - `localTransactionDateTime` string, iso-8601-date-time, required: Date and time of the transaction in the local timezone.
  - `transactionReference` string: Unique ID assigned by the merchant or payment service provider for the transaction. Used to identify the transaction.
  - `newEmvData` string: This field contains integrated circuit card (ICC) related binary data that is transmitted from the card issuer to the ICC. This field is formatted as 510 hexadecimal characters, which translates to 255 bytes. If this field is present in the response message, it should be passed without modification to the ICC.
  - `terminalAction` 'requestPin' | 'switchInterface': Indicates if the issuer requests a PIN in Single Tap mode, or switching interface.
  - `authorizationIsoFields` SchemasAuthorizationIsoFields, required: Object containing the raw values from the ISO8583 response message received from the network.
    - `responseCode` string, required: Contents of field 39
    - `responseCodeDescription` string, required: The description of the `responseCode`
    - `authorizationCode` string: Contents of field 38
    - `networkCode` string, required: Contents of field 63, subfield 1
    - `systemTraceAuditNumber` string, required: Contents of field 11
    - `retrievalReferenceNumber` string, required: Contents of field 37
    - `eci` '00', required
    - `networkSpecificFields` union, required
      - AmexSpecificFields: American Express-specific ISO8583 raw values
        - `acquirerReferenceData` string, required: Contents of field 31.
        - `cvcResult` string: Contents of field 44, first byte.
        - `avsResult` string: Contents of field 44, second byte.
      - DiscoverSpecificFields: Discover specific ISO8583 raw values
        - `network` 'discover', required: Card network providing these fields
        - `avsResponseCode` string: Contents field 44, usage 2, position 1.
        - `cidResultCode` string: Contents field 44, usage 2, position 2.
        - `networkReferenceId` string: Contents field 48, position 11-25.
      - SchemasMastercardSpecificFields: Mastercard specific ISO8583 raw values
        - `banknetReference` string, required: Contents of field 63, subfield 2
        - `traceId` string, required: The trace ID can be used to refer to the original authorization for subsequent transactions (e.g., reversals, MITs). The value is constructed from the contents of field 63, subfield 1, field 63, subfield 2, and field 15. The value intentionally ends with two spaces.
        - `merchantAdviceCode` string: Contents of field 48, subelement 84
        - `cvcResult` string: Contents of field 48, subelement 87
        - `avsResponse` string: Contents of field 48, subelement 83
        - `paymentAccountReference` string: Contents of field 56, subelement 1, subfield 1
        - `transactionLinkId` string: Contents of field 105, subelement 1
      - SchemasVisaSpecificFields: Visa specific ISO8583 raw values
        - `transactionIdentifier` string, required: Contents of field 62, subfield 2
        - `cvv2ResultCode` string: Contents of field 44, subfield 10
        - `avsResultCode` string: Contents of field 44, subfield 2
        - `paymentAccountReference` string: Contents of field 56, dataset 1, tag 1
        - `aniResults` object: Contents of field 34, dataset 4
          - `status` string, required: Contents of field 34, dataset 4, tag C0
          - `fullNameMatch` string: Contents of field 34, dataset 4, tag C4
          - `firstNameMatch` string: Contents of field 34, dataset 4, tag CA
          - `middleNameMatch` string: Contents of field 34, dataset 4, tag C9
          - `lastNameMatch` string: Contents of field 34, dataset 4, tag C8
        - `vaaiScore` string: Contents of field 104, dataset 5b, tag 85
  - `allowPartialApproval` boolean: Indicates whether to allow partial approvals for this charge. If set to `true` the charge's and the authorization action's `amount` field will contain the approved amount. It is only implemented for Visa and Mastercard. It will be ignored for other card networks.
  - `clearingMode` 'auto' | 'manual': The clearing method for the charge. Charges with `clearingMode` set to `manual` must be manually cleared later.
  - `clearAfter` string, iso-8601-date-time: If provided, clearing will not occur before this point in time. From August 13, 2025, `clearAfter` may be at most 6 months in the future from when the charge was created.
  - `terminal` union, required: Details about the terminal.
    - object
      - `type` 'pos', required
      - `id` string, required: Terminal's ID
      - `attended` boolean, required: Whether the terminal is attended or not.
      - `capabilities` TerminalCapability[], required: The capabilities of the terminal. This can be one or multiple, and if more than one is specified it means that it is capable of all of those things. #### Restrictions If `capabilities` include `keyEntry` or `signature` then `attended` must be set to `true`.
    - object
      - `type` 'mpos', required
      - `id` string, required: Terminal's ID
      - `attended` true, required: Whether the terminal is attended or not.
      - `capabilities` TerminalCapability[], required: The capabilities of the terminal. This can be one or multiple, and if more than one is specified it means that it is capable of all of those things.
    - object
      - `type` 'softpos', required
      - `id` string, required: Terminal's ID
      - `attended` true, required: Whether the terminal is attended or not.
      - `capabilities` SoftPosTerminalCapability[], required: The capabilities of the terminal. This can be one or multiple, and if more than one is specified it means that it is capable of all of those things.
  - `created` string, iso-8601-date-time, required: The date and time this object was created
  - `lastModified` string, iso-8601-date-time: The date and time this object was last modified
  - `version` integer, required: The version of this object

## Other responses

- `400`: Bad Request
- `401`: Authentication information is missing or invalid
- `403`: The authenticated client is forbidden to make the request for the resource identified.
- `409`: Conflict
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/silverflow/apis/silverflow-api.md) - [All operations](https://skmtc.dev/silverflow/apis/silverflow-api/llms.txt) - [OpenAPI document](https://skmtc.dev/silverflow/apis/silverflow-api/revisions/43ecbe4fd6ea?raw)
