Vipps for API only
Last updated: June 25, 2025
To accept Vipps payments, follow these steps:
- Request a payment.
- Redirect the customer.
If you process a manual-capture payment, you must also capture the payment.
Call the Request a payment endpoint:
post
https://api.checkout.com/payments/
1{2"source": {3"type": "vipps"4},5"currency": "NOK",6"amount": 1000,7"reference": "ORD-5023-4E89",8"customer": {9"phone": {10"country_code": "47",11"number": "99293473"12}13},14"processing_channel_id": "pc_67nslxo3zumulkoxl6p4c6paay",15"success_url": "http://www.example.com/success.html",16"failure_url": "http://www.example.com/failure.html",17"capture": true18}
1{2"id": "pay_py2itltbdu3ebnvd7heh7u6i4e",3"status": "Pending",4"reference": "ORD-5023-4E89",5"customer": {6"id": "cus_urx7wggzcpzufjjynbn7t6l5mq",7"phone": {8"country_code": "47",9"number": "99293473"10}11},12"_links": {13"self": {14"href": "https://api.checkout.com/payments/pay_py2itltbdu3ebnvd7heh7u6i4e"15},16"redirect": {17"href": "https://apitest.vipps.no/dwo-api-application/v1/redirectURL"18}19}20}
If you receive a 202 Accepted
response, with the status
field set to Pending
, your request was successful.
Redirect the customer to the _links.redirect.href
URL provided in the payment response. The customer can authenticate with Vipps and complete the payment.
A successful authorization places a hold on the customer's funds. With a manual capture flow, you can capture the funds at a later point in time. For example, if you need to verify that the item the customer purchased is still in stock.
Note
Perform the manual capture when you ship the items.
Checkout.com can capture the full amount for the payment or perform multiple partial captures. For partial captures, include information about the items in the items[]
object.
- If the capture amount is equal to the authorized amount, we consider the capture full and final.
- If the capture amount is less than the authorized amount and your capture request:
- Includes
"capture_type": "Non-Final"
, we do not release the remaining authorized amount - Does not include
"capture_type"
, or includes"capture_type": "Final"
, we release the remaining authorized amount
- Includes
For more information on capturing payments, see Capture a payment.
If you want to capture the full amount, call the Capture a payment endpoint, and provide the payment_id
value you received in the Create a payment response as the {id}
path parameter.
post
https://api.checkout.com//payments/{id}/captures
1{2"action_id": "act_y3oqhf46pyzuxjbcn2giaqnb44",3"_links": {4"payment": {5"href": "https://api.sandbox.checkout.com/payments/pay_y3oqhf46pyzuxjbcn2giaqnb44"6}7}8}
If your request is successful, you receive a 202 Success
response code.
To retrieve details about the payment, call the Get payment details endpoint, and provide the payment_id
value you received in the Create a payment response as the {id}
path parameter.
Vipps supports both partial and full refunds.
You can only refund manually captured payments if:
- You performed a final capture.
- The payment was voided after a partial or non-final capture.
For more information, see Refund a payment.
Call the Refund a payment endpoint, and provide the payment_id
value you received in the Create a payment response as the {id}
path parameter.
post
https://api.checkout.com/payments/{id}/refunds
1{2"amount": 1003}
1{2"actionId": "act_cxpffngdvouvabegyy3asiuou",3"_links": {4"payment": {5"href": "https://api.checkout.com/payments/pay_ok7yhvutuylevnatk3x3dxviq4"6}7}8}
To void an authorized payment that you have not captured yet, call the Void a payment endpoint, and provide the payment_id
value you received in the Create a payment response as the {id}
path parameter:
post
https://api.checkout.com/payments/{id}/voids
If you receive a 202 Void accepted
response, your void request has been accepted for processing. To get the full void response, you must subscribe to the payment_voided
webhook.
If there was a problem with your request, you receive an error response such as 422 Invalid data was sent
.
For more information, see Void a payment.
To test your integration, you need the Vipps test app and a test phone number.
To download and configure the Vipps test app:
- Download the test app.
- Install and launch the Vipps MT app.
- Choose Norway in the country selection screen.
- In the age check, select Above 15.
- For the test user, set the following data:
Your normal Vipps or MobilePay user is not available in the test environment.1* Set _national identity number_ to _22054701318_.2* Set _Test phone number_ to _+4799293473_. - On the Verify your number screen, use the PIN
1236
. - Select Next.
- On the Enter your code screen, use the code
1236
. - Enable Touch ID and confirm with PIN
1236
. - Accept push notifications.
After you've registered for the test app, send a payment to the Sandbox environment using the phone number +4799293473
:
1{2"source": {3"type": "vipps"4},5"currency": "NOK",6"amount": 1000,7"reference": "ORD-5023-4E89",8"customer": {9"phone": {10"country_code": "47",11"number": "99293473"12}13},14"processing_channel_id": "pc_67nslxo3zumulkoxl6p4c6paay",15"success_url": "http://www.example.com/success.html",16"failure_url": "http://www.example.com/failure.html",17"capture": true18}
When integrating Vipps payments, you can receive the following response codes:
Response code | Response text | Additional information |
---|---|---|
| Card should be captured | |
| Error / Invalid request parameters | |
| Invalid value/amount | The payment failed due to a technical issue. If the issue persists, contact us. |
| Requested function not supported | |
| Response received too late / Timeout | The payment failed due to a technical issue. Try again with the same card, or use a different card. |
Internal error | ||
| Unsupported currency | |
| Transaction already reversed (voided) | |
The previous message for a repeat or reversal was located, but the repeat or reversal data is inconsistent with the original message. | ||
Capture is larger than initial authorized value | ||
| Authorization completed | |
| Transaction already reversed | The payment reversal has already been processed. |
| Missing / Invalid lifetime | |
| Transaction pending | The payment failed due to a technical issue. If the issue persists, contact us. |
| Invalid customer/user | The payment failed due to a technical issue. If the issue persists, contact us. |
| Requested function not supported by the acquirer | |
| Invalid merchant configurations - Contact Support | |
| Refund validity period has expired | |
| Invalid amount | The payment failed due to a technical issue. If the issue persists, contact us. |