---
title: "Reissue a participant's signing link"
method: POST
path: "/api/v1/envelopes/{id}/participants/{participantId}/resend-link"
tags: ["envelopes"]
---

# Reissue a participant's signing link

`POST /api/v1/envelopes/{id}/participants/{participantId}/resend-link`

## Request

- Base URL: `https://api.atlaswork.ai`
- URL: `https://api.atlaswork.ai/api/v1/envelopes/{id}/participants/{participantId}/resend-link`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Rotates the participant's link credential (a fresh nonce hash replaces the old one, invalidating every outstanding link), appends `participant.link_reissued`, and emits the notification event. The envelope must be in_progress and the participant pending. No link material appears in the response — delivery happens out of band. Supports the `Idempotency-Key` header: a replayed completed key returns the envelope's current graph with the original status code and `Idempotency-Replayed: true` (never re-executing); an in-flight duplicate is rejected 409; reusing a key with a different request is rejected 422.

## Path parameters

- `id` string, required: Envelope id
- `participantId` string, required: Participant id

## Request body

- object
  - `expectedVersion` integer

## Response `200`

The envelope graph after the link rotation

- object
  - `envelope` object, required
    - `id` string, required
    - `organizationId` string, required
    - `teamId` string, required
    - `templateId` string, nullable, required
    - `templateContentHash` string, nullable, required
    - `status` 'draft' | 'detecting' | 'review' | 'in_progress' | 'completed' | 'declined' | 'voided' | 'expired', required
    - `detectionStatus` 'none' | 'running' | 'succeeded' | 'failed' | 'skipped', required
    - `version` integer, required
    - `originalFilename` string, nullable, required
    - `displayName` string, nullable, required
    - `sourceFormat` string, nullable, required
    - `contentHash` string, nullable, required
    - `sizeBytes` number, nullable, required
    - `deliveryMode` string, required
    - `legalFramework` string, nullable, required
    - `consumerDisclosure` boolean, required
    - `expiresAt` string, date-time, nullable, required
    - `scheduledSendAt` string, date-time, nullable, required
    - `reminderPolicy` unknown
    - `sentAt` string, date-time, nullable, required
    - `completedAt` string, date-time, nullable, required
    - `declinedAt` string, date-time, nullable, required
    - `voidedAt` string, date-time, nullable, required
    - `expiredAt` string, date-time, nullable, required
    - `metadata` unknown
    - `senderUserId` string, nullable
    - `senderName` string, nullable
    - `senderEmail` string, nullable
    - `detectedParties` unknown
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `participants` object[], required
    - `id` string, required
    - `envelopeId` string, required
    - `organizationId` string, required
    - `orderIndex` integer, required
    - `name` string, required
    - `email` string, required
    - `company` string, nullable
    - `title` string, nullable
    - `status` 'pending' | 'signed' | 'declined', required
    - `detectedPartyIndex` integer, nullable
    - `consentedAt` string, date-time, nullable, required
    - `signedAt` string, date-time, nullable, required
    - `declinedAt` string, date-time, nullable, required
    - `declineReason` string, nullable, required
    - `lastViewedAt` string, date-time, nullable, required
    - `lastIpAddress` string, nullable, required
    - `lastUserAgent` string, nullable, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `fields` object[], required
    - `id` string, required
    - `envelopeId` string, required
    - `organizationId` string, required
    - `participantId` string, nullable, required
    - `partyIndex` integer, nullable
    - `syntheticRoleId` string, nullable
    - `syntheticRoleName` string, nullable
    - `type` 'signature' | 'initials' | 'date' | 'text' | 'checkbox', required
    - `page` integer, required
    - `x` number, required
    - `y` number, required
    - `width` number, required
    - `height` number, required
    - `label` string, nullable, required
    - `required` boolean, required
    - `group` string, nullable
    - `source` 'detected' | 'manual' | 'template', required
    - `prefillValue` string, nullable, required
    - `locked` boolean, required
    - `autoSource` 'signed_date' | 'participant_name' | 'participant_email' | 'participant_company' | 'participant_title' | 'sender_org_name' | 'null', nullable, required
    - `proposedAutoSource` 'signed_date' | 'participant_name' | 'participant_email' | 'participant_company' | 'participant_title' | 'sender_org_name' | 'null', nullable, required
    - `value` string, nullable, required
    - `filledAt` string, date-time, nullable, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `401`: Missing or invalid API key
- `404`: Envelope or participant not found in this organization
- `409`: Stale expectedVersion
- `422`: Envelope not in_progress or participant not pending

## Changes

- **2026-11-03** `d3b4f91b9bb2`: 1 warning, 4 info
  - added the new `skipped` enum value to the `envelope/detectionStatus` response property for the response status `200`
  - added the optional property `fields/items/group` to the response with the `200` status
  - added the optional property `fields/items/syntheticRoleId` to the response with the `200` status
  - added the optional property `fields/items/syntheticRoleName` to the response with the `200` status
  - …1 more

[Operation history](https://skmtc.dev/atlaswork/apis/atlas-api/changes/api/v1/envelopes/:id/participants/:participantId/resend-link/post.md)

---

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