# Delete recipient

Manage canonical campaign recipients without generation, personalization or sending. external_id maps to the existing campaign employee identity. Mutations require the campaign revision. Claimed, rendered, sent or otherwise active recipients cannot be edited or deleted. Contact details appear only in authorized recipient reads; mutation results contain indexed status metadata.

Endpoint: DELETE /v1/campaigns/{id}/recipients/{recipient_id}
Version: 1.0.0
Security: bearerAuth

## Security:

  - `bearerAuth` (unknown)
    http bearer

## Path parameters:

  - `id` (string, required)

  - `recipient_id` (string, required)

## Header parameters:

  - `Idempotency-Key` (string, required)
    Reuse for an uncertain retry of the same intent.

  - `If-Match` (string, required)
    Opaque revision from ETag or a job result.

## Response 200:

  - `200` (unknown)
    Terminal operation job.

## Response 200 fields (application/json):

  - `job` (object, required)

  - `job.id` (string, required)

  - `job.command` (string, required)

  - `job.resourceId` (string, required)

  - `job.state` (string, required)
    Enum: "queued", "running", "waiting_for_approval", "succeeded", "partially_failed", "failed", "cancelling", "cancelled", "recovery_required"

  - `job.createdAt` (string, required)

  - `job.updatedAt` (string, required)

  - `job.result` (any, required)

  - `job.result.resourceId` (string)

  - `job.result.revision` (string)

  - `job.result.insertedTotal` (integer)

  - `job.result.updatedTotal` (integer)

  - `job.result.deletedTotal` (integer)

  - `job.result.items` (array)

  - `job.result.items.index` (integer, required)

  - `job.result.items.id` (string)

  - `job.result.items.status` (string, required)
    Enum: "inserted", "updated", "unchanged", "deleted", "invalid_request", "duplicate_external_id", "recipient_locked", "resource_not_found"

  - `job.result.succeeded` (number)

  - `job.result.failed` (number)

  - `job.result.secretAvailable` (boolean)
    Enum: "false"

  - `job.pollAfterSeconds` (number, required)

  - `secretAvailable` (boolean, required)

  - `secret` (string)

  - `key` (object)

  - `key.id` (string, required)

  - `key.level` (string, required)
    Enum: "platform", "meta_org", "organization"

  - `key.meta_organization_id` (any, required)

  - `key.organization_id` (any, required)

  - `key.name` (string, required)

  - `key.scopes` (array, required)

  - `key.environment` (string, required)
    Enum: "dev"

  - `key.display_prefix` (string, required)

  - `key.created_by` (any, required)

  - `key.issuer_key_id` (any, required)

  - `key.delegation_allowed` (boolean, required)

  - `key.created_at` (string, required)

  - `key.expires_at` (string, required)

  - `key.revoked_at` (any, required)

  - `key.last_used_at` (any, required)

  - `key.revision` (string)

## Response 200 headers (application/json):

  - `X-Request-Id` (string, required)
    Identifier for tracing this response.

  - `Location` (string, required)
    Absolute URL of the operation job, from the trusted server origin.

  - `ETag` (string)
    Quoted opaque revision when the resource or job result has one.

## Response 202:

  - `202` (unknown)
    Nonterminal operation job; poll Location after Retry-After seconds.

## Response 202 fields (application/json):

  - `job` (object, required)

  - `job.id` (string, required)

  - `job.command` (string, required)

  - `job.resourceId` (string, required)

  - `job.state` (string, required)
    Enum: "queued", "running", "waiting_for_approval", "succeeded", "partially_failed", "failed", "cancelling", "cancelled", "recovery_required"

  - `job.createdAt` (string, required)

  - `job.updatedAt` (string, required)

  - `job.result` (any, required)

  - `job.result.resourceId` (string)

  - `job.result.revision` (string)

  - `job.result.insertedTotal` (integer)

  - `job.result.updatedTotal` (integer)

  - `job.result.deletedTotal` (integer)

  - `job.result.items` (array)

  - `job.result.items.index` (integer, required)

  - `job.result.items.id` (string)

  - `job.result.items.status` (string, required)
    Enum: "inserted", "updated", "unchanged", "deleted", "invalid_request", "duplicate_external_id", "recipient_locked", "resource_not_found"

  - `job.result.succeeded` (number)

  - `job.result.failed` (number)

  - `job.result.secretAvailable` (boolean)
    Enum: "false"

  - `job.pollAfterSeconds` (number, required)

  - `secretAvailable` (boolean, required)

  - `secret` (string)

  - `key` (object)

  - `key.id` (string, required)

  - `key.level` (string, required)
    Enum: "platform", "meta_org", "organization"

  - `key.meta_organization_id` (any, required)

  - `key.organization_id` (any, required)

  - `key.name` (string, required)

  - `key.scopes` (array, required)

  - `key.environment` (string, required)
    Enum: "dev"

  - `key.display_prefix` (string, required)

  - `key.created_by` (any, required)

  - `key.issuer_key_id` (any, required)

  - `key.delegation_allowed` (boolean, required)

  - `key.created_at` (string, required)

  - `key.expires_at` (string, required)

  - `key.revoked_at` (any, required)

  - `key.last_used_at` (any, required)

  - `key.revision` (string)

## Response 202 headers (application/json):

  - `X-Request-Id` (string, required)
    Identifier for tracing this response.

  - `Location` (string, required)
    Absolute URL of the operation job, from the trusted server origin.

  - `Retry-After` (integer, required)
    Seconds to wait before polling or retrying.

  - `ETag` (string)
    Quoted opaque revision when the resource or job result has one.

## Response 401:

  - `401` (unknown)
    Missing or invalid Bearer authentication.

## Response 401 fields (application/json):

  - `error` (object, required)

  - `error.code` (string, required)
    Enum: "activation_prerequisites_missing", "asset_storage_unavailable", "batch_limit_exceeded", "catalog_unavailable", "idempotency_conflict", "insufficient_scope", "invalid_asset", "invalid_request", "method_not_allowed", "not_found", "operation_conflict", "operation_failed", "origin_forbidden", "payload_too_large", "precondition_failed", "precondition_required", "rate_limited", "render_source_unavailable", "tenant_disabled", "transaction_retry_required", "unauthorized", "unsupported_media_type", "upload_expired", "upload_incomplete", "upload_revoked"

  - `error.requestId` (string, required)

## Response 401 headers (application/json):

  - `X-Request-Id` (string, required)
    Identifier for tracing this response.

  - `WWW-Authenticate` (string, required)
    Enum: "Bearer"

## Response 405:

  - `405` (unknown)
    Method not allowed for this path.

## Response 405 fields (application/json):

  - `error` (object, required)

  - `error.code` (string, required)
    Enum: "activation_prerequisites_missing", "asset_storage_unavailable", "batch_limit_exceeded", "catalog_unavailable", "idempotency_conflict", "insufficient_scope", "invalid_asset", "invalid_request", "method_not_allowed", "not_found", "operation_conflict", "operation_failed", "origin_forbidden", "payload_too_large", "precondition_failed", "precondition_required", "rate_limited", "render_source_unavailable", "tenant_disabled", "transaction_retry_required", "unauthorized", "unsupported_media_type", "upload_expired", "upload_incomplete", "upload_revoked"

  - `error.requestId` (string, required)

## Response 405 headers (application/json):

  - `X-Request-Id` (string, required)
    Identifier for tracing this response.

  - `Allow` (string, required)
    Comma-separated methods allowed for this path.

## Response 429:

  - `429` (unknown)
    Rate limited; wait before retrying.

## Response 429 fields (application/json):

  - `error` (object, required)

  - `error.code` (string, required)
    Enum: "activation_prerequisites_missing", "asset_storage_unavailable", "batch_limit_exceeded", "catalog_unavailable", "idempotency_conflict", "insufficient_scope", "invalid_asset", "invalid_request", "method_not_allowed", "not_found", "operation_conflict", "operation_failed", "origin_forbidden", "payload_too_large", "precondition_failed", "precondition_required", "rate_limited", "render_source_unavailable", "tenant_disabled", "transaction_retry_required", "unauthorized", "unsupported_media_type", "upload_expired", "upload_incomplete", "upload_revoked"

  - `error.requestId` (string, required)

## Response 429 headers (application/json):

  - `X-Request-Id` (string, required)
    Identifier for tracing this response.

  - `Retry-After` (integer, required)
    Seconds to wait before polling or retrying.

## Response default:

  - `default` (unknown)
    Error. The JSON body contains error.code and error.requestId.

## Response default fields (application/json):

  - `error` (object, required)

  - `error.code` (string, required)
    Enum: "activation_prerequisites_missing", "asset_storage_unavailable", "batch_limit_exceeded", "catalog_unavailable", "idempotency_conflict", "insufficient_scope", "invalid_asset", "invalid_request", "method_not_allowed", "not_found", "operation_conflict", "operation_failed", "origin_forbidden", "payload_too_large", "precondition_failed", "precondition_required", "rate_limited", "render_source_unavailable", "tenant_disabled", "transaction_retry_required", "unauthorized", "unsupported_media_type", "upload_expired", "upload_incomplete", "upload_revoked"

  - `error.requestId` (string, required)

## Response default headers (application/json):

  - `X-Request-Id` (string, required)
    Identifier for tracing this response.

