---
title: "Bulk create subscriptions"
method: POST
path: "/api/v1/subscriptions/bulk"
tags: ["Subscriptions"]
---

# Bulk create subscriptions

`POST /api/v1/subscriptions/bulk`

Subscribe a team to multiple plans in one request. Each plan is processed independently — failures do not abort siblings. Required scope: `subscriptions:write` </br>Organization authorization: `supported`

## Request body

- BulkCreateSubscription
  - `teamId` integer — Id of the team that should be subscribed to all selected plans
  - `planIds` integer[], required — Ids of plans the team should be subscribed to. Each plan is processed independently — failures do not abort siblings.
  - `userId` integer, nullable — The user that should be assigned as the purchaser of the subscriptions. If not provided, the subscriptions will be assigned to the default user for this consumer.
  - `nextPurchaseAt` string, date-time, nullable — Date when the wallet will be charged for the first time (ISO8601). Has to be a date in the future.

## Response `200`

Per-plan create results

- BulkCreateSubscriptionResult[]
  - `planId` integer — Plan id this result corresponds to
  - `status` 'created' | 'failed', required
  - `subscription` Subscription
    - `id` integer — Id of the subscription
    - `state` 'pending' | 'active' | 'paused' | 'cancelling' | 'cancelled' | 'unpaid' | 'other', required
    - `nextPurchaseAt` string, date-time, nullable — Date of next purchase
    - `cancelledAt` string, date-time, nullable — Subscription cancellation date
    - `endAt` string, date-time, nullable — Subscription end date
    - `validityPeriod` SubscriptionValidityPeriod — The validity period of the subscription, with optional from (start) and to (end) dates.
      - `from` string, date-time, nullable — Start date of the subscription's validity period
      - `to` string, date-time, nullable — End date of the subscription's validity period
    - `discountPercentage` number, double — Discount percentage
    - `discountAbsolute` number, double — Discount absolute
    - `discountAmount` number, double — Discount amount
    - `originalAmount` number, double — Original amount
    - `totalAmount` number, double — Total amount
    - `purchaseCount` integer — Number of purchases
    - `chargePoints` integer — Number of charge points
    - `customerId` integer — The id of the customer
    - `customerType` 'team' | 'charge-point' | 'operator' | 'other', required — Enumerate the various subscription customer types
    - `planId` integer — Plan id
    - `serviceConfig` union
      - object
        - `serviceType` 'custom' | 'tax-refund' | 'charge-package', required
        - `payoutPerKwh` number, double, required — Amount to pay out per kWh
        - `priceIncludesVat` boolean, required — Indicates whether the VAT is already included in the price
        - `additionalFeeAbsolute` number, double, nullable, required — This absolute value will be added as additional fee, paid by charge point owner.Will be only applied to charge point owned by operator.Note: This uses the default currency of the operator!
        - `roamingAdditionalFeeAbsolute` number, double, nullable — Same as the additional fee absolute, but only applied to roaming sessions.
      - object
        - `serviceType` 'custom' | 'tax-refund' | 'charge-package', required
        - `subscriptionAdditionalFeeApplicationScope` 'all' | 'paid', required
        - `additionalFeePercentage` integer, required — This percentage will be added as additional fee, paid by charge point owner.Will only be applied to charge point owned by operator.
        - `additionalFeeAbsolute` number, double, required — This absolute value will be added as additional fee, paid by charge point owner.Will only be applied to charge point owned by operator.Note: This uses the default currency of the operator!
        - `additionalStartingFee` number, double, required — This absolute value will be added as additional fee, once per charge session, paid by charge point owner.Will only be applied to charge point owned by operator.Note: This uses the default currency of the operator!
        - `roamingAdditionalFeePercentage` integer, nullable — Same as the additional fee percentage, but only applied to roaming sessions.
        - `roamingAdditionalFeeAbsolute` number, double, nullable — Same as the additional fee absolute, but only applied to roaming sessions.
        - `roamingAdditionalStartingFee` number, double, nullable — Same as the additional starting fee, but only applied to roaming sessions.
    - `createdAt` string, date-time, required — Subscription creation date
    - `updatedAt` string, date-time, required — Subscription update date
    - `canCancel` boolean — Indicates if the subscription can be cancelled
    - `note` string, nullable — A note on the subscription
    - `deletedAt` string, date-time, nullable — Subscription marked as deleted date
  - `error` string, nullable — Failure reason, present only when status is `failed`

## Other responses

- `400` — The request is invalid
- `401` — Consumer with provided credentials was not found
- `403` — Operator doesn't have access to resource
- `404` — Entity with the provided id was not found

---

[API](https://skmtc.net/monta/apis/monta-partner-api.md) · [All operations](https://skmtc.net/monta/apis/monta-partner-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/monta/monta-partner-api/versions/517e18f11015/schema)
