---
title: "Create subscription"
method: POST
path: "/v2/customers/{customerId}/subscriptions"
tags: ["Subscriptions API"]
---

# Create subscription

`POST /v2/customers/{customerId}/subscriptions`

With subscriptions, you can schedule recurring payments to take place at regular intervals.

For example, by simply specifying an `amount` and an `interval`, you can create an endless subscription to charge a
monthly fee, until you cancel the subscription.

Or, you could use the times parameter to only charge a limited number of times, for example to split a big
transaction in multiple parts.

A few example usages:

`amount[currency]="EUR"` `amount[value]="5.00"` `interval="2 weeks"`
Your customer will be charged €5 once every two weeks.

`amount[currency]="EUR"` `amount[value]="20.00"` `interval="1 day" times=5`
Your customer will be charged €20 every day, for five consecutive days.

`amount[currency]="EUR"` `amount[value]="10.00"` `interval="1 month"`
`startDate="2018-04-30"`
Your customer will be charged €10 on the last day of each month, starting in April 2018.

## Headers

- `idempotency-key` string

## Request body

- SubscriptionRequest
  - `resource` string — Indicates the response contains a subscription object. Will always contain the string `subscription` for this endpoint.
  - `id` string
  - `mode` 'live' | 'test' — Whether this entity was created in live mode or in test mode.
  - `status` 'pending' | 'active' | 'canceled' | 'suspended' | 'completed' — The subscription's current status is directly related to the status of the underlying customer or mandate that is enabling the subscription.
  - `amount` Amount — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
    - `currency` string, required — A three-character ISO 4217 currency code.
    - `value` string, required — A string containing an exact monetary amount in the given currency.
  - `times` integer, nullable — Total number of payments for the subscription. Once this number of payments is reached, the subscription is considered completed. Test mode subscriptions will get canceled automatically after 10 payments.
  - `timesRemaining` integer, nullable — Number of payments left for the subscription.
  - `interval` string — Interval to wait between payments, for example `1 month` or `14 days`. The maximum interval is one year (`12 months`, `52 weeks`, or `365 days`). Possible values: `... days`, `... weeks`, `... months`.
  - `startDate` string — The start date of the subscription in `YYYY-MM-DD` format.
  - `nextPaymentDate` string, nullable — The date of the next scheduled payment in `YYYY-MM-DD` format. If the subscription has been completed or canceled, this parameter will not be returned.
  - `description` string — The subscription's description will be used as the description of the resulting individual payments and so showing up on the bank statement of the consumer. **Please note:** the description needs to be unique for the Customer in case it has multiple active subscriptions.
  - `method` 'creditcard' | 'directdebit' | 'paypal' | 'null', nullable — The payment method used for this subscription. If omitted, any of the customer's valid mandates may be used.
  - `applicationFee` object — With Mollie Connect you can charge fees on payments that your app is processing on behalf of other Mollie merchants. Setting an application fee on the subscription will ensure this fee is charged on each individual payment. Refer to the `applicationFee` parameter on the [Get payment endpoint](get-payment) documentation for more information.
    - `amount` Amount, required — In v2 endpoints, monetary amounts are represented as objects with a `currency` and `value` field.
      - `currency` string, required — A three-character ISO 4217 currency code.
      - `value` string, required — A string containing an exact monetary amount in the given currency.
    - `description` string, required
  - `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[]
  - `webhookUrl` string, nullable — We will call this URL for any payment status changes of payments resulting from this subscription. This webhook will receive **all** events for the subscription's payments. This may include payment failures as well. Be sure to verify the payment's subscription ID and its status.
  - `customerId` string
  - `mandateId` string
  - `createdAt` string — The entity's date and time of creation, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `canceledAt` string, nullable — The subscription's date and time of cancellation, in ISO 8601 format. This parameter is omitted if the subscription is not canceled (yet).
  - `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` can be omitted in the creation request. For organization-level credentials such as OAuth access tokens however, the `profileId` parameter is required.
  - `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`.
  - `_links` object — An object with several relevant URLs. Every URL object will contain an `href` and a `type` field.
    - `self` Url, required — 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.
    - `customer` Url, required — 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.
    - `mandate` UrlNullable, nullable — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
      - `href` string — The actual URL string.
      - `type` string — The content type of the page or endpoint the URL points to.
    - `profile` Url, required — 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.
    - `payments` UrlNullable, nullable — In v2 endpoints, URLs are commonly represented as objects with an `href` and `type` field.
      - `href` string — The actual URL string.
      - `type` string — The content type of the page or endpoint the URL points to.
    - `documentation` Url, required — 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 subscription object.

## Other responses

- `404` — No entity with this ID exists.
- `429` — Rate Limit has been reached.

---

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