For the complete documentation index, see llms.txt. This page is also available as Markdown.

Token QR Request iDeal

Use this endpoint to initiate an outgoing iDEAL payment from a bunq user's account. The user presents a token obtained from an iDEAL merchant website or QR code, and bunq creates a payment request on their behalf.

Endpoint

POST /v1/user/{userID}/token-qr-request-ideal

Request body

Field
Type
Required
Description

token

string

Yes

The iDEAL token obtained from the merchant website or QR code

Response

Returns a RequestResponse object with:

Field
Description

status

Always PENDING on creation

amount_responded

The payment amount

redirect_url

URL to complete the iDEAL flow

time_expiry

Token expiry timestamp

How it works

  1. bunq validates the token — it must be active, unexpired, and of type IDEAL

  2. bunq selects the appropriate account for the payment (standard, light, or joint account in the correct currency)

  3. The iDEAL transaction is assigned to the user

  4. The token is marked as used

  5. A payment request is created and returned with status PENDING

The user then completes the payment by following the redirect_url.

Important notes

Single-use tokens — each token can only be used once. A second attempt with the same token returns an error: Token was used previously and cannot be used again.

Account requirements — the bunq user must have a standard, light, or joint account in the correct currency. Savings accounts cannot be used for iDEAL payments.

Token expiry — tokens expire after a set period. An expired token cannot be used and returns a not found error.

Next step

After creating the request, accept it using the request-response endpoint:

Set status to ACCEPTED to confirm the payment.

post
/user/{userID}/token-qr-request-ideal

Create a request from an ideal transaction.

Path parameters
userIDintegerRequired
Header parameters
Cache-ControlstringOptional

The standard HTTP Cache-Control header is required for all signed requests.

User-AgentstringRequired

The User-Agent header field should contain information about the user agent originating the request. There are no restrictions on the value of this header.

X-Bunq-LanguagestringOptional

The X-Bunq-Language header must contain a preferred language indication. The value of this header is formatted as a ISO 639-1 language code plus a ISO 3166-1 alpha-2 country code, separated by an underscore. Currently only the languages en_US and nl_NL are supported. Anything else will default to en_US.

X-Bunq-RegionstringOptional

The X-Bunq-Region header must contain the region (country) of the client device. The value of this header is formatted as a ISO 639-1 language code plus a ISO 3166-1 alpha-2 country code, separated by an underscore.

X-Bunq-Client-Request-IdstringOptional

This header must specify an ID with each request that is unique for the logged in user. There are no restrictions for the format of this ID. However, the server will respond with an error when the same ID is used again on the same DeviceServer.

X-Bunq-GeolocationstringOptional

This header must specify the geolocation of the device. The format of this value is longitude latitude altitude radius country. The country is expected to be formatted of an ISO 3166-1 alpha-2 country code. When no geolocation is available or known the header must still be included but can be zero valued.

X-Bunq-Client-AuthenticationstringRequired

The authentication token is used to authenticate the source of the API call. It is required by all API calls except for POST /v1/installation. It is important to note that the device and session calls are using the token from the response of the installation call, while all the other calls use the token from the response of the session-server call

Body
tokenstringWrite-onlyRequired

The token passed from a site or read from a QR code.

Responses
200

Using this call you create a request for payment from an external token provided with an ideal transaction. Make sure your iDEAL payments are compliant with the iDEAL standards, by following the following manual: https:/www.bunq.com/terms-idealstandards. It's very important to keep these points in mind when you are using the endpoint to make iDEAL payments from your application.

application/json
post/user/{userID}/token-qr-request-ideal
POST /v1/user/{userID}/token-qr-request-ideal HTTP/1.1
Host: public-api.sandbox.bunq.com
User-Agent: text
X-Bunq-Client-Authentication: text
Content-Type: application/json
Accept: */*
Content-Length: 16

{
  "token": "text"
}
{
  "id": 1,
  "time_responded": "text",
  "time_expiry": "text",
  "monetary_account_id": 1,
  "amount_inquired": {
    "value": "text",
    "currency": "text"
  },
  "amount_responded": {
    "value": "text",
    "currency": "text"
  },
  "alias": {
    "iban": "text",
    "display_name": "text",
    "avatar": {
      "uuid": "text",
      "anchor_uuid": "text",
      "image": [
        {
          "attachment_public_uuid": "text",
          "content_type": "text",
          "height": 1,
          "width": 1
        }
      ],
      "style": "text"
    },
    "label_user": {
      "uuid": "text",
      "display_name": "text",
      "country": "text",
      "avatar": {
        "uuid": "text",
        "anchor_uuid": "text",
        "image": [
          {
            "attachment_public_uuid": "text",
            "content_type": "text",
            "height": 1,
            "width": 1
          }
        ],
        "style": "text"
      },
      "public_nick_name": "text"
    },
    "country": "text",
    "bunq_me": {
      "type": "text",
      "value": "text",
      "name": "text"
    },
    "is_light": true,
    "swift_bic": "text",
    "swift_account_number": "text",
    "transferwise_account_number": "text",
    "transferwise_bank_code": "text",
    "merchant_category_code": "text"
  },
  "counterparty_alias": {
    "iban": "text",
    "display_name": "text",
    "avatar": {
      "uuid": "text",
      "anchor_uuid": "text",
      "image": [
        {
          "attachment_public_uuid": "text",
          "content_type": "text",
          "height": 1,
          "width": 1
        }
      ],
      "style": "text"
    },
    "label_user": {
      "uuid": "text",
      "display_name": "text",
      "country": "text",
      "avatar": {
        "uuid": "text",
        "anchor_uuid": "text",
        "image": [
          {
            "attachment_public_uuid": "text",
            "content_type": "text",
            "height": 1,
            "width": 1
          }
        ],
        "style": "text"
      },
      "public_nick_name": "text"
    },
    "country": "text",
    "bunq_me": {
      "type": "text",
      "value": "text",
      "name": "text"
    },
    "is_light": true,
    "swift_bic": "text",
    "swift_account_number": "text",
    "transferwise_account_number": "text",
    "transferwise_bank_code": "text",
    "merchant_category_code": "text"
  },
  "description": "text",
  "attachment": [
    {
      "description": "text",
      "content_type": "text",
      "urls": [
        {
          "type": "text",
          "url": "text"
        }
      ]
    }
  ],
  "status": "text",
  "minimum_age": 1,
  "require_address": "text",
  "address_shipping": {
    "street": "text",
    "house_number": "text",
    "po_box": "text",
    "postal_code": "text",
    "city": "text",
    "country": "text",
    "extra": "text",
    "mailbox_name": "text",
    "province": "text",
    "is_user_address_updated": true
  },
  "address_billing": {
    "street": "text",
    "house_number": "text",
    "po_box": "text",
    "postal_code": "text",
    "city": "text",
    "country": "text",
    "extra": "text",
    "mailbox_name": "text",
    "province": "text",
    "is_user_address_updated": true
  },
  "geolocation": {
    "latitude": 1,
    "longitude": 1,
    "altitude": 1,
    "radius": 1
  },
  "redirect_url": "text",
  "type": "text",
  "sub_type": "text",
  "eligible_whitelist_id": 1
}

Last updated

Was this helpful?