---
title: "Resend an invitation"
method: POST
path: "/v1/company_memberships/{id}/resend_invitation"
tags: ["Company membership"]
---

# Resend an invitation

`POST /v1/company_memberships/{id}/resend_invitation`

## Request

- Base URL: `https://api.cardda.com`
- URL: `https://api.cardda.com/v1/company_memberships/{id}/resend_invitation`
- Auth: HTTP bearer

Resends the invitation email for a pending membership. Rate-limited by a
5-minute cool-down (returns `400` with `reason: cool_down` if invoked again
too soon), and only valid while the membership is still `pending` (otherwise
`400` with `reason: user_already_accepted`). If the invitation token covers
several companies, the bulk invitation email is resent.

## Path parameters

- `id` string, required

## Parameters

- `#/paths/~1v1~1users/get/parameters/0` (unresolved $ref)

## Response `200`

Invitation resent.

- CompanyMembership: Links a user (or a pending email invitation) to a company with a role and KYC-related attributes (legal representative, partner, participation rate).
  - `id` string, uuid, required
  - `user_id` string, nullable: Firebase UID of the member. Null while the invitation is still pending.
  - `company_id` string, uuid, required
  - `email` string, nullable
  - `role` string: Role name (e.g. `owner`, `admin`, `member`, or a custom company role name).
  - `status` 'pending' | 'active' | 'canceled'
  - `legal_representative` boolean
  - `has_powers_to_act` boolean, nullable
  - `partner` boolean
  - `partner_type` integer, nullable
  - `participation_rate` number, nullable: Ownership participation percentage (0-100).
  - `is_indirect_participation_corporate` boolean, nullable
  - `company_role_id` string, uuid, nullable
  - `permissions` object[]: Permissions granted to the membership (only `id` and `name` are returned). **Only included by the list endpoint** (`GET /v1/company_memberships`); the create/update/destroy/resend/create_many responses do not embed it.
    - `id` string, uuid
    - `name` string
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: Cool-down active or invitation already accepted.
- `401`: Unauthorized
- `404`: Membership not found

---

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