Re-dispatches the email or SMS for an invitation that was previously sent. Use this when the recipient never received the original (filtered, deleted, or wrong inbox) and asks for a copy.
What resend does. Flips the invitation status from sent back to pending, clears sentAt, and enqueues a fresh delivery via the same job pipeline that handled the original send. Status will move pending → sent again as soon as the channel provider accepts the message. If the linked dossier already exists (recipient had partially started before), the link is preserved — only the delivery layer is re-fired.
Eligibility. Only invitations in sent status can be resent. Other statuses are rejected:
pending: original delivery is still in flight; wait for it to settle.delivered,opened,started,completed,rejected: the recipient has already engaged; resending would create confusion.failed: handled by the delivery job's automatic retry — see invitation lifecycle.
Expiration. Expired invitations cannot be resent. Create a new invitation instead.
Per-invitation limits.
- Maximum 10 send attempts per invitation (initial send + each successful resend). Once
deliveryAttemptsreaches 10, this endpoint returns 422max_attempts_reached. Create a new invitation to continue contacting the recipient. - 3-minute cooldown between sends. Resending within 3 minutes of
sentAtreturns 429cooldown_activewith aremaining_secondshint in the error message.
Billing. Resends are billed at the same rate as the original send (send.email for email, send.sms for SMS). Test private keys (the test counterpart of a live key) are not billed.
Authentication. Both JwtAuth and PrivateKey are accepted. Per-IP throttle: 30 requests per minute. Per-organization throttle: 20 resends per minute (separate bucket from invitation creation).
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||