---
title: "Create order"
method: POST
path: "/orders"
tags: ["Orders API"]
deprecated: true
---

# Create order

`POST /orders`

> **Deprecated.**

**⚠️ We no longer recommend using the Orders API. Please refer to the [Payments API](payments-api) instead.**

When creating an order, a payment will automatically be created to allow your customer to pay for the order. You can then redirect your customer to the URL in the `_links.checkout` property from the response, similar to the Payments API.

Unlike the Payments API, if a payment fails, expires, or is canceled, you can create a new payment under the same order using the [Create order payment endpoint](create-order-payment). This is only possible for orders that still have the `created` status.

> 🔑 Access with
>
> [API key](/reference/authentication)
>
> [Advanced access token with **orders.write**](/reference/authentication)
>
> [OAuth access with **orders.write**](/reference/authentication)

## Query parameters

- `embed` 'payments' | 'refunds' | 'shipments'

## Request body

- object
  - `resource` string — Indicates the response contains an order object. Will always contain the string `order` for this endpoint.
  - `id` string — The identifier uniquely referring to this order. Mollie assigns this identifier at payment creation time. Mollie will always refer to the order by this ID. Example: `ord_vsKJpSsabw`.
  - `mode` string — Whether this entity was created in live mode or in test mode. Possible values: `live` `test`
  - `orderNumber` string, required — The order number for this order. We recommend each order number to be unique.
  - `amount` object, required — The amount that you want to charge, e.g. `{currency:"EUR", value:"1000.00"}` if you would want to charge €1000.00. You can find the minimum and maximum amounts per payment method in our help center. Additionally, they can be retrieved using the Get method endpoint.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `amountRefunded` object — The total amount that is already refunded. Only available when refunds are available for this order.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `amountCaptured` object — The total amount that is already captured for this order. Only available when this order supports captures.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `redirectUrl` string, nullable — The URL your customer will be redirected to after the payment process. It could make sense for the redirectUrl to contain a unique identifier – like your order ID – so you can show the right page referencing the order when your customer returns. The parameter is normally required, but can be omitted for recurring payments (`sequenceType: recurring`) and for Apple Pay payments with an `applePayPaymentToken`.
  - `cancelUrl` string — The URL your customer will be redirected to when the customer explicitly cancels the payment. If this URL is not provided, the customer will be redirected to the `redirectUrl` instead — see above. Mollie will always give you status updates via webhooks, including for the canceled status. This parameter is therefore entirely optional, but can be useful when implementing a dedicated customer-facing flow to handle payment cancellations.
  - `webhookUrl` string — The webhook URL where we will send order status updates to. The webhookUrl is optional, but without a webhook you will miss out on important status changes to your order. The webhookUrl must be reachable from Mollie's point of view, so you cannot use `localhost`. If you want to use webhook during development on `localhost`, you must use a tool like ngrok to have the webhooks delivered to your local machine.
  - `billingAddress` object, required — The customer's billing address details. The billing address is required, unless a fast checkout method like PayPal Express Checkout is providing the billing address.
    - `title` string — The title of the person, for example *Mr.* or *Mrs.*.
    - `givenName` string — The given name (first name) of the person should be at least two characters and cannot contain only numbers.
    - `familyName` string — The given family name (surname) of the person should be at least two characters and cannot contain only numbers.
    - `organizationName` string — The name of the organization, in case the addressee is an organization.
    - `streetAndNumber` string — A street and street number.
    - `streetAdditional` string — Any additional addressing details, for example an apartment number.
    - `postalCode` string — A postal code. This field may be required if the provided country has a postal code system.
    - `email` string — The email address of the customer. If the domain contains non-ASCII characters, encode it as Punycode per [RFC 3492](https://www.rfc-editor.org/rfc/rfc3492).
    - `phone` string — If provided, it must be in the [E.164](https://en.wikipedia.org/wiki/E.164) format. For example: +31208202070.
    - `city` string
    - `region` string
    - `country` string — A country code in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format.
  - `shippingAddress` object — The customer's shipping address details. We advise to provide these details to improve fraud protection and conversion. This is particularly relevant for card payments.
    - `title` string — The title of the person, for example *Mr.* or *Mrs.*.
    - `givenName` string — The given name (first name) of the person should be at least two characters and cannot contain only numbers.
    - `familyName` string — The given family name (surname) of the person should be at least two characters and cannot contain only numbers.
    - `organizationName` string — The name of the organization, in case the addressee is an organization.
    - `streetAndNumber` string — A street and street number.
    - `streetAdditional` string — Any additional addressing details, for example an apartment number.
    - `postalCode` string — A postal code. This field may be required if the provided country has a postal code system.
    - `email` string — The email address of the customer. If the domain contains non-ASCII characters, encode it as Punycode per [RFC 3492](https://www.rfc-editor.org/rfc/rfc3492).
    - `phone` string — If provided, it must be in the [E.164](https://en.wikipedia.org/wiki/E.164) format. For example: +31208202070.
    - `city` string
    - `region` string
    - `country` string — A country code in [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format.
  - `locale` string, required — Allows you to preset the language to be used in the hosted payment pages shown to the customer. Setting a locale is highly recommended and will greatly improve your conversion rate. When this parameter is omitted the browser language will be used instead if supported by the payment method. You can provide any `xx_XX` format ISO 15897 locale, but our hosted payment pages currently only support the specified languages. For bank transfer payments specifically, the locale will determine the target bank account the customer has to transfer the money to. We have dedicated bank accounts for Belgium, Germany, and The Netherlands. Having the customer use a local bank account greatly increases the conversion and speed of payment. Possible values: `ca_ES` `cs_CZ` `da_DK` `de_AT` `de_CH` `de_DE` `de_LU` `en_GB` `en_US` `es_ES` `fi_FI` `fr_BE` `fr_FR` `fr_LU` `hu_HU` `is_IS` `it_IT` `lt_LT` `lv_LV` `nb_NO` `nl_BE` `nl_NL` `pl_PL` `pt_PT` `sk_SK` `sv_SE` `null`
  - `method` string, nullable — Normally, a payment method screen is shown. However, when using this parameter, you can choose a specific payment method and your customer will skip the selection screen and is sent directly to the chosen payment method. The parameter enables you to fully integrate the payment method selection into your website. You can also specify the methods in an array. By doing so we will still show the payment method selection screen but will only show the methods specified in the array. For example, you can use this functionality to only show payment methods from a specific country to your customer `['bancontact', 'belfius']`. Possible values: `applepay` `bancomatpay` `bancontact` `banktransfer` `belfius` `billie` `creditcard` `directdebit` `eps` `giftcard` `ideal` `in3` `kbc` `klarna` `klarnapaylater` `klarnapaynow` `klarnasliceit` `mybank` `paypal` `paysafecard` `przelewy24` `riverty` `satispay` `trustly` `twint` `voucher`
  - `shopperCountryMustMatchBillingCountry` boolean — For digital goods, you must make sure to apply the VAT rate from your customer's country in most jurisdictions. You can use this parameter to restrict the payment methods available to your customer to methods from the billing country only. This field is similar to the `restrictPaymentMethodsToCountry` field in the Payments API.
  - `metadata` union — Provide any data you like, for example a string or a JSON object. We will save the data alongside the entity. Whenever you fetch the entity with our API, we will also include the metadata. You can use up to approximately 1kB.
    - string
    - number
    - object
    - string[]
  - `status` string — The order's status. Refer to the [documentation regarding statuses](order-status-changes) for more info about which statuses occur at what point. Possible values: `created` `pending` `authorized` `paid` `shipping` `canceled` `expired` `completed`
  - `isCancelable` boolean — Whether the order can be canceled. This parameter is omitted if the order reaches a final state.
  - `profileId` string — The identifier referring to the [profile](get-profile) this entity belongs to. Most API credentials are linked to a single profile. In these cases the `profileId` must not be sent in the creation request. For organization-level credentials such as OAuth access tokens however, the `profileId` parameter is required.
  - `createdAt` string — The entity's date and time of creation, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `authorizedAt` string — The date and time the order became authorized, in ISO 8601 format. This parameter is omitted if the order is not authorized (yet).
  - `paidAt` string — The date and time the order became paid, in ISO 8601 format. This parameter is omitted if the order is not completed (yet).
  - `canceledAt` string — The date and time the order was canceled, in ISO 8601 format. This parameter is omitted if the order is not canceled (yet).
  - `expiresAt` string — The date the order should expire in `YYYY-MM-DD` format. The minimum date is tomorrow and the maximum date is 100 days after tomorrow. It is not possible to use Klarna when your expiry date is more than 28 days in the future, unless you agreed on a different maximum with Klarna.
  - `expiredAt` string — The date and time the order was expired, in ISO 8601 format. This parameter is omitted if the order did not expire (yet).
  - `completedAt` string — The date and time the order was completed, in ISO 8601 format. This parameter is omitted if the order is not completed (yet).
  - `consumerDateOfBirth` string — The date of birth of the consumer in `YYYY-MM-DD` format.
  - `testmode` boolean, nullable — Whether to create the entity in test mode or live mode. Most API credentials are specifically created for either live mode or test mode, in which case this parameter must not be sent. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting `testmode` to `true`.
  - `lines` object[], required — The order lines for the order. Each line contains details such as a description of the item ordered and its price. All lines must have the same currency as the payment.
    - `resource` string — Indicates the response contains an order line object. Will always contain the string `orderline`.
    - `id` string — The identifier uniquely referring to this order line. Mollie assigns this identifier at order line creation time. Example: `odl_jp31jz`.
    - `type` string — The type of product purchased. For example, a physical or a digital product. Possible values: `physical` `digital` `discount` `shipping_fee` `store_credit` `gift_card` `surcharge` (default: `physical`)
    - `name` string, required — A description of the line item. For example *LEGO 4440 Forest Police Station*.
    - `quantity` integer, required — The number of items.
    - `quantityShipped` integer — The number of items shipped.
    - `amountShipped` object — The amount shipped.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `quantityRefunded` integer — The number of items refunded.
    - `amountRefunded` object — The amount refunded.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `quantityCanceled` integer — The number of items canceled.
    - `amountCanceled` object — The amount canceled.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `shippableQuantity` integer — The number of items that can be shipped.
    - `refundableQuantity` integer — The number of items that can be refunded.
    - `cancelableQuantity` integer — The number of items that can be canceled.
    - `unitPrice` object, required — The price of a single item including VAT. For example: `{"currency":"EUR", "value":"89.00"}` if the box of LEGO costs €89.00 each. For types `discount`, `store_credit`, and `gift_card`, the unit price must be negative. The unit price can be zero in case of free items.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `discountAmount` object — Any line-specific discounts, as a positive amount. Not relevant if the line itself is already a discount type.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `totalAmount` object, required — The total amount of the line, including VAT and discounts. Should match the following formula: `(unitPrice × quantity) - discountAmount`. The sum of all `totalAmount` values of all order lines should be equal to the full payment amount.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `vatRate` string — The VAT rate applied to the line, for example `21.00` for 21%. The vatRate should be passed as a string and not as a float, to ensure the correct number of decimals are passed.
    - `vatAmount` object — The amount of value-added tax on the line. The `totalAmount` field includes VAT, so the `vatAmount` can be calculated with the formula `totalAmount × (vatRate / (100 + vatRate))`. Any deviations from this will result in an error. For example, for a `totalAmount` of SEK 100.00 with a 25.00% VAT rate, we expect a VAT amount of `SEK 100.00 × (25 / 125) = SEK 20.00`.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `sku` string — The SKU, EAN, ISBN or UPC of the product sold.
    - `category` 'eco' | 'gift' | 'meal' | 'sport_culture' | 'additional' | 'consume' — The voucher category, in case of an order line eligible for a voucher. See the [Integrating Vouchers](https://docs.mollie.com/docs/integrating-vouchers/) guide for more information.
    - `status` 'created' | 'authorized' | 'paid' | 'canceled' | 'shipping' | 'completed' — The status of the order line.
    - `isCancelable` boolean — Whether the order line can still be canceled.
    - `metadata` union — Provide any data you like, for example a string or a JSON object. We will save the data alongside the entity. Whenever you fetch the entity with our API, we will also include the metadata. You can use up to approximately 1kB.
      - string
      - number
      - object
      - string[]
    - `orderId` string — The unique identifier of the order this order line belongs to. For example: `ord_8wmqcHMN4U`.
    - `imageUrl` string — A link pointing to an image of the product sold.
    - `productUrl` string — A link pointing to the product page in your web shop of the product sold.
    - `createdAt` string — The entity's date and time of creation, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
    - `_links` object — An object with several relevant URLs. Every URL object will contain an `href` and a `type` field.
      - `self` object — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
        - `href` string, required — The actual URL string.
        - `type` string, required — The content type of the page or endpoint the URL points to.
      - `imageUrl` object — A link pointing to an image of the product sold.
        - `href` string, required — The actual URL string.
        - `type` string, required — The content type of the page or endpoint the URL points to.
      - `productUrl` object — A link pointing to the product page in your web shop of the product sold.
        - `href` string, required — The actual URL string.
        - `type` string, required — The content type of the page or endpoint the URL points to.
  - `_links` object — An object with several relevant URLs. Every URL object will contain an `href` and a `type` field.
    - `self` object — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
      - `href` string, required — The actual URL string.
      - `type` string, required — The content type of the page or endpoint the URL points to.
    - `checkout` object, nullable — The URL your customer should visit to make the payment. This is where you should redirect the customer to.
      - `href` string — The actual URL string.
      - `type` string — The content type of the page or endpoint the URL points to.
    - `dashboard` object — Direct link to the order in the Mollie dashboard.
      - `href` string, required — The actual URL string.
      - `type` string, required — The content type of the page or endpoint the URL points to.
    - `documentation` object — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
      - `href` string, required — The actual URL string.
      - `type` string, required — The content type of the page or endpoint the URL points to.

## Response `201`

The newly created order object.

## Other responses

- `422` — The request contains issues. For example, if the order number is missing, or if the specified amount is higher than the maximum allowed amount.
- `429` — Rate Limit has been reached.

---

[API](https://skmtc.net/mollie/apis/accepting-payments.md) · [All operations](https://skmtc.net/mollie/apis/accepting-payments/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mollie/accepting-payments/revisions/4b45df3039ef/schema)
