This endpoint can be accessed with the following API type: pos-payment
.Don't have an API key? Create one in your Customer Area with the type pos-payment
, go to Developers -> Api Credentials.
When creating a payment, the API key needs to have the same store ID as the linked Adyen POS terminal, otherwise it will fail to create a payment. Use Connected Terminals to get the linked terminals to a store. Creating a POS Payment#
Please refer to the Body Params for every value you need to pass along.A minimum payment amount of 35 cents needs to be met. This amount just deems as reserve for the payment fee. The payment fee is calculated afterwards by Adyen (after the payment is fulfilled).
Currency#
The amount
of the payment is given in cents.
The only currency
we support right now is EUR.Synchronous method#
There are two options: asynchronous & synchronous. We strongly advise implementing the asynchronous method.Receiving a synchronous result#
Your POS app needs to make HTTPS requests to the endpoint with the synchronous_method
value sync
. This request must use an extended timeout of more than 150 seconds. During this time the connection is kept alive, and a synchronous response will follow.
Optionally, show display notifications in your POS app. During a tender, the payment terminal generates display notifications. You can show these in your POS app to keep your staff up-to-date on the progress of the tender. For example, whether the customer has selected Dynamic Currency Conversion, or finished entering their PIN. Receiving an asynchronous result#
Your POS app needs to make HTTPS requests to the endpoint with the synchronous_method
value async
. The time between making the request and receiving the event
depends on the quality of the terminal's internet connection.
To asynchronously receive the actual Payment response, you need to set up event notifications. The terminal will send the Payment response over the webhook to your event webhook endpoint.
Optionally, show display notifications in your POS app. During a tender, the payment terminal generates display notifications. You can show these in your POS app to keep your staff up-to-date on the progress of the tender. For example, whether the customer has selected Dynamic Currency Conversion, or finished entering their PIN. Check the payment status#
We recommend that your integration should automatically check the status of a payment any time it fails to receive a payment response.Payment requests time out after a while. If you do not receive a payment response (or you receive a response indicating a time-out) after 150 seconds and the internet connection hasn't dropped, your integration should automatically check the payment status.Webhooks#
Event webhooks are only used for asynchronous payments, for synchronous and asynchronous payments the display webhook will still function if provided.For an asynchronous payment an event webhook is required, a display webhook is optional.To use a webhook you need to specify the type object in the webhook object.In the type object, provide the url
, authentication_type
and the authentication type specific values.Authentication types#
3.
no_auth
(We do not endorse this authentication type)
Splits#
When a payment amount needs to be split between balance accounts or between different parties, you can easily provide a split on a per payment basis.For a split to a specific balance account, you need a SpliToken that has the correct balance account configured. The SpliToken can be safely shared.Under the splits
array, you can provide splits that are desired. These values are required in a split object:splitoken
Used to direct the funds to the correct balance account.
amount
The amount in cents.
description
This will be shown in your Customer Area under the payment.
The remaining of the split will be booked to the balance account specified in the API key.The remaining amount always needs to be higher than the minimum payment amount.
Tipping#
Tipping is easily done by adding the object tip
: {amount
: *}.When the amount
is 0, it will ask on the terminal to enter their desired amount, that way the customer has full control.
When 0 is provided, and you have configured predefined tips in the terminal settings of the store or terminal, those options will be shown and can be picked right from the terminal display.You can also provide the amount
in cents, it will autofill the amount, and it will ask for confirmation on the terminal display.Split#
Split the tip amount into a different balance account using the splitoken
field.tip
: {amount
: *, splitoken
: "splitoken"}Under the metadata
value, you can store miscellaneous values. These values will be returned with the following:Webhook event notifications
Webhook display notifications
Responses#
The Adyen response is wrapped in our response, for extra information on the Adyen response, please refer to these Adyen docs.Response event
statuses#
Asynchronous#
inprogress
(200) A payment is started and ongoing
failure
(400) Failed to create a payment
Synchronous#
success
(200) A payment has been successfully paid
failure
(400) Failed to create a payment OR A terminal has failed to complete the payment
Other scenarios#
When using the asynchronous method and a payment is still open on the terminal, and you start another payment, it will fail. But Adyen still returns a null
(200) (while using the asynchronous method) so we are none the wiser, and thus we still send a inprogress
(200), the failure will be immediately send via the event webhook afterwards.