In-Store (Point Of Sale)

Private Preview

Twint Supports In-Store payments, and we streamline this process for you with our create payment charge API.

For the merchant to be able to use the Twint In-store solution, they need to onboard a new merchant for In-Store. The type of merchant using this solution differs from other types of existing merchants, as they need to explicitly indicate they are a physical store.

Each merchant onboarded represents a unique terminal. If the merchant has multiple terminals, they must onboard a new merchant for as many terminals as they have.

To learn more about the merchant onboarding, read all about it in our Boarding Platform Documentation.

Make a TWINT In-Store payment

TWINT In-Store payments follow our standardized SCAN_CODE payment flow. Enabling you to offer a seamless in-store QR code to mobile handoff experience. We recommend including all relevant settings for any authentication methods you support.

To create a TWINT payment, you'll need to provide the following data at a minimum when calling our payment charges API:

FieldDescription
paymentMethodTWINT
paymentMediumPOS
amount.valueThe amount to be paid in the smallest units of the currency used.
amount.currencyCHF
consumer.countryThe country where the consumer is shopping.

Request

POST /v1/payment-charges

{
    "paymentMethod": "TWINT",
    "paymentMedium": "POS",
    "amount": {
        "value": 100,
        "currency": "CHF"
    },
    "consumer": {
        "country": "CH",
    }
}

Response

You'll receive our standard payment charge response with the available authentication methods:

{
    "id": "charge_Nt3Y5XZDiQlpTdQmHVKAK",
    "paymentMethod": "TWINT",
    "paymentMedium": "POS",
    "scheduleType": "UNSCHEDULED",
    "instrumentId": "instr_yfx2WNsP5docWRwjH25tl",
    "currency": "CHF",
    "country": "CH",
    "status": "AUTHENTICATION_PENDING",
    "consumer": {
        "country": "CH"
    },
    "authenticationMethods": [
        {
            "details": {
                "codeType": "QR",
                "codeImage": "https://authman.qa.lp-pl.ppro.com/v0/qr-codes?redirection_token=eyJhbGciOiJIUzUxMiJ9.eyJzZXNzaW9uIjp7InIiOiJjaGFyZ2VfTnQzWTVYWkRpUWxwVGRRbUhWS0FLIiwicCI6Imh0dHBzOi8vZ28tcGF0LnR3aW50LmNoLzEvbS90dz90dz1hY3EuT0taTGxCSk1UTEc2YlN5bFhCdzN3Xy1GUjAtM3lUcUVYVEhzUFNESkZ0OC1XRXd2N2I2emJYaWUwVkJBR1Q1QS4_Y2hhcmdlSWQ9Y2hhcmdlX050M1k1WFpEaVFscFRkUW1IVktBSyJ9fQ.GJidOMvl1brK0sg8M0OhtXr56_0xwvDudHX8UKRyE5D53c0XufkZYCv71CwVb6qGIzbM8u2tbK9y-SEnfCbMRQ",
                "codePayload": "https://go-pat.twint.ch/1/m/tw?tw=acq.OKZLlBJMTLG6bSylXBw3w_-FR0-3yTqEXTHsPSDJFt8-WEwv7b6zbXie0VBAGT5A.?chargeId=charge_Nt3Y5XZDiQlpTdQmHVKAK"
            },
            "type": "SCAN_CODE"
        }
    ],
    "authorizations": [
        {
            "id": "authz_bDlm6iegAg0ccGt5DuygC",
            "amount": 100,
            "status": "AUTHENTICATION_PENDING",
            "createdAt": "2025-09-01T11:47:02.040Z",
            "updatedAt": "2025-09-01T11:47:02.040Z"
        }
    ],
    "captures": [],
    "refunds": [],
    "voids": [],
    "createdAt": "2025-09-01T11:46:59.066Z",
    "updatedAt": "2025-09-01T11:47:02.040Z",
    "_links": {
        "authorizations": {
            "href": "/v1/payment-charges/charge_Nt3Y5XZDiQlpTdQmHVKAK/authorizations"
        },
        "captures": {
            "href": "/v1/payment-charges/charge_Nt3Y5XZDiQlpTdQmHVKAK/captures"
        },
        "refunds": {
            "href": "/v1/payment-charges/charge_Nt3Y5XZDiQlpTdQmHVKAK/refunds"
        },
        "voids": {
            "href": "/v1/payment-charges/charge_Nt3Y5XZDiQlpTdQmHVKAK/voids"
        }
    }
}

Pick the desired authentication method

SCAN_CODE

  1. Render the code using one of the techniques available.
  2. The consumer will scan the code to complete the payment.

Handling the payment result

SCAN_CODE

  1. You'll be notified of the payment outcome via Webhook.
  2. You can check the payment status at any time by making a GET /v1/payment-charges/{paymentChargeId}.
  3. Use the Status that you received to display the payment outcome to the consumer.

Payment instrument

A PASSTHROUGH_WALLET instrument will be created for TWINT, with no additional data provided.

Request

GET /v1/payment-instruments/{instrument-id}

Response

{
    "id": "instr_Asu0ig2PXXZSiNrhY44A5",
    "type": "PASSTHROUGH_WALLET"
}

Sandbox testing

Contact your account manager for test credentials.