---
title: "Create a card invitation"
method: POST
path: "/card-invitations"
tags: ["Card invitations"]
---

# Create a card invitation

`POST /card-invitations`

## Request

- Base URL: `https://b2b.revolut.com/api/1.0`
- URL: `https://b2b.revolut.com/api/1.0/card-invitations`
- Auth: HTTP bearer

Create an invitation for a virtual [team member card](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) for a new, not-yet-onboarded team member.
When the team member completes onboarding before the invitation's expiry date, the invitation will automatically be claimed, and the card will then be issued for the team member immediately.

:::note
To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
:::

For more information, see the guides: [Manage card invitations](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-card-invitations).

## Request body

- object
  - `request_id` string, required: A unique ID of the request that you provide. There is no strict requirement on the format of this ID, but we suggest using v4 UUIDs. :::warning This ID is used to prevent duplicate card creation requests in case of a lost connection or client error, so make sure you use the same `request_id` for requests related to the same card invitation. The deduplication is limited to 24 hours counting from the first request using a given ID. ::: For more information, see the guides: [Manage card invitations - Idempotency](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-card-invitations#idempotency).
  - `expiry_period` string: The period after which the card invitation expires if it hasn't been claimed or cancelled. Must be specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) duration format. The duration is counted from the card invitation creation. - **Minimum duration:** 1 day (`P1D`) - **Maximum duration:** 90 days (`P90D`) - **Default duration:** 90 days (`P90D`)
  - `holder_id` string, uuid, required: The ID of the team member who will be assigned as the holder of the card after the invitation is claimed. :::tip To retrieve a team member's ID, use the [`GET /team-members` operation](https://developer.revolut.com/docs/api/business#get-team-members). :::
  - `virtual` true, required: Specifies the type of the card. Must be set to `true`, as with the API, you can create only virtual cards. :::tip To create physical cards, use the [Revolut Business app](https://business.revolut.com). :::
  - `label` string: The label for the card to be issued, displayed in the UI to help distinguish between cards. If not specified, the default label will be set according to the card's type. For card invitations created via API, it's always `Virtual`.
  - `spending_limits` SpendingLimitsSchema
    - `single` SpendingLimitSingleTransaction: The limit for a single transaction.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `day` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `week` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `month` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `quarter` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `year` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `all_time` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_period` union
    - object
      - `start_date` string, date, required: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate': The action to take after the end date of the spending period.
    - object
      - `start_date` string, date: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date, required: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate', required: The action to take after the end date of the spending period.
  - `categories` BusinessMerchantCategory[]: The list of merchant categories to be available for card spending. If not specified, all categories will be allowed.
  - `merchant_controls` MerchantControlsSchema: The merchant-level controls for card spending.
    - `control_type` 'block' | 'allow', required: The type of control to apply. Possible values: | Value | Description | | --- | --- | | **`allow`** | Permits only the specified merchants. | | **`block`** | Blocks the specified merchants. |
    - `merchant_ids` string[], required: The list of IDs of merchants to which the control applies. :::tip To find merchant IDs, check transaction details (→ `merchant.id`). You can fetch transaction details for a [specific transaction](https://developer.revolut.com/docs/api/business#get-transaction#response) or for [all transactions](https://developer.revolut.com/docs/api/business#get-transactions#response). :::
  - `mcc_controls` MccControlsSchema: The MCC controls for card spending. They restrict card spending to merchants with the specified [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes (MCCs). :::tip MCCs are 4-digit codes used by payment card networks to classify businesses by the type of goods or services they provide — for example, `5411` for grocery stores or `7011` for hotels. :::
    - `control_type` 'allow', required: The type of control to apply.
    - `mccs` string[], required: The list of [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes to which the control applies.
  - `countries` string[]: Restricts card use to specified countries, provided as 2-letter [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) codes.
  - `accounts` string[]: The list of accounts to link to the card. If not specified, all accounts will be linked. To retrieve account IDs, use the [`GET /accounts` operation](https://developer.revolut.com/docs/api/business#get-accounts).

## Response `200`

Successfully created card invitation

- CardInvitationCreatedResponse
  - `id` string, uuid, required: The ID of the card invitation.
  - `state` 'created' | 'expired' | 'failed' | 'redeemed', required: The current state of the card invitation: | Value | Description | | --- | --- | | **`created`** | Invitation has been created but not yet claimed. | | **`expired`** | Invitation has expired due to expiry date being reached or manual cancellation. | | **`failed`** | Invitation claim attempt failed. | | **`redeemed`** | Invitation has been successfully claimed. | To learn more about card invitation lifecycle, see the guide: [Manage card invitations → Card invitation state](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-card-invitations#card-invitation-state).
  - `created_at` string, date-time, required: The date and time the card invitation was created in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `updated_at` string, date-time, required: The date and time the card invitation was last updated in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
  - `expiry_date` string, date-time: The date and time after which this card invitation expires if not claimed or cancelled before then. Specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. :::note Only returned for invitations in state `created`. :::tip For other states, to find out when a card invitation transitioned to its [final state](https://developer.revolut.com/docs/guides/manage-accounts/cards/manage-card-invitations#card-invitation-state), check the `updated_at` value. :::
  - `holder_id` string, uuid: The ID of the team member to be assigned as the holder of the card after the invitation is claimed.
  - `virtual` boolean, required: Specifies whether the issued card will be a virtual (`true`) or physical (`false`) one.
  - `label` string: The label of the card.
  - `spending_limits` SpendingLimitsSchema
    - `single` SpendingLimitSingleTransaction: The limit for a single transaction.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `day` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `week` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `month` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `quarter` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `year` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    - `all_time` SpendingLimitPeriodic: The limit for transactions within a given period.
      - `amount` number, double, required: The value of the spending limit.
      - `currency` string, required: The currency of the spending limit, provided as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
  - `spending_period` union
    - object
      - `start_date` string, date, required: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate': The action to take after the end date of the spending period.
    - object
      - `start_date` string, date: The start date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date` string, date, required: The end date (inclusive) of the spending period, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`). Uses the [timezone set by the business](https://business.revolut.com/settings/appearance), or defaults to `Europe/London`.
      - `end_date_action` 'lock' | 'terminate', required: The action to take after the end date of the spending period.
  - `categories` BusinessMerchantCategory[]: The list of merchant categories that will be available for card spending. If this parameter is not specified, categories are not restricted.
  - `merchant_controls` MerchantControlsSchema: The merchant-level controls for card spending.
    - `control_type` 'block' | 'allow', required: The type of control to apply. Possible values: | Value | Description | | --- | --- | | **`allow`** | Permits only the specified merchants. | | **`block`** | Blocks the specified merchants. |
    - `merchant_ids` string[], required: The list of IDs of merchants to which the control applies. :::tip To find merchant IDs, check transaction details (→ `merchant.id`). You can fetch transaction details for a [specific transaction](https://developer.revolut.com/docs/api/business#get-transaction#response) or for [all transactions](https://developer.revolut.com/docs/api/business#get-transactions#response). :::
  - `mcc_controls` MccControlsSchema: The MCC controls for card spending. They restrict card spending to merchants with the specified [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes (MCCs). :::tip MCCs are 4-digit codes used by payment card networks to classify businesses by the type of goods or services they provide — for example, `5411` for grocery stores or `7011` for hotels. :::
    - `control_type` 'allow', required: The type of control to apply.
    - `mccs` string[], required: The list of [ISO 18245](https://en.wikipedia.org/wiki/ISO_18245) merchant category codes to which the control applies.
  - `countries` string[]: The list of countries where the team member will be able to use the card. Specified as 2-letter [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) codes.
  - `accounts` string[], required: The list of accounts that will be linked to the card.

## Other responses

- `400`: Bad Request Returned, for example, when your request is malformed, missing required fields, or when it contains fields that cannot co-exist or unsupported values. If the invalid value is an array item, the error might indicate the array index of this faulty item, counting from `0`. For example, if you provide the list of countries, such as `"countries": ["GB", "USA", ...]`, the first item (`GB`) has index `0`, the second item (`USA`) has index `1`, and so on. In the example, `USA` is invalid, because it should be a 2-letter code. In such a case, the error will indicate that `countries[1]` is invalid, thus pointing to the second item in the array, i.e. `USA`.
- `401`: Unauthorised Returned, for example, when the credentials you used to make the request are invalid. For more information, see the **Authorization** section.
- `404`: Team member not found Returned when the team member specified as cardholder in `holder_id` does not exist.
- `422`: Unprocessable Entity For example, you try to set more than one periodic limit at a time, create an invitation for a deleted team member, or an unexpected error occurred when the initial request with the same `request_id` was sent.
- `429`: Concurrent requests with the same idempotency key
- `default`: Unexpected error

---

[API](https://skmtc.dev/revolut/apis/business-api.md) - [All operations](https://skmtc.dev/revolut/apis/business-api/llms.txt) - [OpenAPI document](https://skmtc.dev/revolut/apis/business-api/revisions/be089d9fa8b4?raw)
