TWINT Payment Integration
TWINT is the leading mobile payment app in Switzerland. Customers approve the payment in the TWINT app. This guide explains how to accept TWINT payments with the Netvalve Payment Gateway.
| Customer country | Currency | paymentOption |
|---|---|---|
| Switzerland (CH) | CHF | apm_twint |
The order currency must be CHF for TWINT to be offered.
For the shared redirect flow, webhook handling, and Checkout SDK notes, see the European Payment Methods overview.
How to offer TWINT
Contact the Netvalve team to enable TWINT on your account before going live.
Step 1 — Create the order
Send a POST request to the Create Order endpoint with paymentOption set to "apm_twint" and the order currency set to CHF.
{
"amount": 49.90,
"currency": "CHF",
"siteId": "f76fb7ed-3312-4791-a216-45918f899271",
"clientOrderId": "{{clientOrderId}}",
"orderDesc": "Order #12345",
"successUrl": "https://merchantsite.com/success.html",
"cancelUrl": "https://merchantsite.com/cancel.html",
"failedUrl": "https://merchantsite.com/failed.html",
"pendingUrl": "https://merchantsite.com/pending.html",
"paymentOption": "apm_twint",
"customerDetails": {
"customerAddress": "1 Test Street",
"customerCity": "Zurich",
"customerCountryCode": "CH",
"customerEmail": "customer@example.com",
"customerIp": "123.123.123.123",
"customerName": "Luca",
"customerLastName": "Meier",
"customerPhone": "800-1234567",
"customerZipCode": "8001"
}
}
paymentOption accepts a comma-separated list. For example, "card,apm_twint" shows both card and TWINT on the hosted page.
Step 2 — Redirect and handle the outcome
On success the response contains a redirectUrl (verify responseCode === "GTW_1000" first). Send the customer there; Netvalve takes them to TWINT to authorise, then returns them to one of your URLs:
| Outcome | Redirect target |
|---|---|
| Payment succeeded | successUrl |
| Customer cancelled | cancelUrl |
| Payment failed | failedUrl |
| Payment pending | pendingUrl |
Treat the webhook or an Inquiry poll as the source of truth for the final result.
Sandbox testing
TWINT has no shared, self-service test credentials. Contact the Netvalve team to request TWINT sandbox test credentials before you start testing.
Once you have them, the integration itself is unchanged — create the order against the Sandbox / UAT base URL, follow the redirectUrl, approve the payment in the TWINT test app, and confirm the customer lands on the matching return URL and your webhook records the same result.
See Testing in sandbox for the shared setup, amount limits, and how to test the pending path.
Related resources
| Resource | Link |
|---|---|
| European Payment Methods overview | Overview |
| Hosted Payment Page guide | Hosted Payment Page |
| Swagger API reference | API Reference |
| Webhook Message guide | Webhook Message |
| Error Codes reference | Error Codes |