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:
Field | Description |
---|---|
paymentMethod | TWINT |
paymentMedium | POS |
amount.value | The amount to be paid in the smallest units of the currency used. |
amount.currency | CHF |
consumer.country | The 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
- Render the code using one of the techniques available.
- The consumer will scan the code to complete the payment.
Handling the payment result
SCAN_CODE
- You'll be notified of the payment outcome via Webhook.
- You can check the payment status at any time by making a GET /v1/payment-charges/{paymentChargeId}.
- 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.
Updated 2 days ago