Back

Recipients API

Add, list, update, and manage recipients and their wallet cards

Recipients API

Recipients are always associated with a campaign. Wallet cards are automatically created when recipients are added to a campaign.

Add Single Recipient

POST
/campaigns/{campaignId}/recipients
Required scope: campaigns:write

Add a single recipient to a campaign. Wallet cards are automatically created in the background.

Request Parameters

ParameterTypeRequiredDescription
emailstringYesRecipient email address
namestringNoRecipient full name
phonestringNoPhone number (E.164 format)
externalIdstringNoYour internal ID for this recipient
recipientDataobjectNoRecipient-specific data (merged with campaign data)
recipientData.barcodeValuestringNoCustom barcode value (required if campaign uses barcodeValueStrategy: "custom")
providerTypesarrayNoOverride: ["all"], ["apple"], ["google"], ["eudiw"] (default: inherits from campaign)
Response
{
  "success": true,
  "data": {
    "id": "recipient_xyz789",
    "campaignId": "campaign_abc123",
    "email": "john@example.com",
    "name": "John Doe",
    "phone": "+1234567890",
    "externalId": "user_123",
    "status": "pending",
    "createdAt": "2025-12-09T10:00:00Z",
    "updatedAt": "2025-12-09T10:00:00Z"
  }
}

Recipients are created with status "pending". Call the /invite endpoint to create the wallet card and send the invitation.

Bulk Add Recipients

POST
/campaigns/{campaignId}/recipients/bulk
Required scope: campaigns:write

Add multiple recipients to a campaign at once.

Request Parameters

ParameterTypeRequiredDescription
recipientsarrayYesArray of recipient objects
recipients[].emailstringYesRecipient email address
recipients[].namestringNoRecipient full name
recipients[].phonestringNoPhone number
recipients[].externalIdstringNoYour internal ID
recipients[].recipientDataobjectNoRecipient-specific data
recipients[].recipientData.barcodeValuestringNoCustom barcode value (required if campaign uses barcodeValueStrategy: "custom")
recipients[].providerTypesarrayNoOverride provider types (default: inherits from campaign)
sendEmailbooleanNoSend invite emails (default: true)

List Recipients

GET
/campaigns/{campaignId}/recipients
Required scope: campaigns:read

List all recipients for a campaign.

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoMaximum results (1-100, default: 20)
offsetintegerNoNumber of results to skip (default: 0)
emailstringNoFilter by email address
statusstringNoFilter by status: pending, created, invited, active, revoked, removed, deleted
includeHistorybooleanNoInclude status change history in response (default: false)
includeStatusbooleanNoInclude detailed status information (cards array) for each recipient (default: false)
includeDownloadUrlsbooleanNoInclude download URLs for each recipient's wallet cards (default: false)
Response
{
  "success": true,
  "data": {
    "recipients": [
      {
        "id": "recipient_xyz789",
        "campaignId": "campaign_abc123",
        "email": "john@example.com",
        "name": "John Doe",
        "phone": "+1234567890",
        "externalId": "user_123",
        "status": "invited",
        "walletCardId": "card_abc123",
        "walletCardStatus": "active",
        "createdAt": "2025-12-09T10:00:00Z",
        "updatedAt": "2025-12-09T11:00:00Z"
      }
    ],
    "pagination": {
      "total": 50,
      "limit": 20,
      "offset": 0,
      "hasMore": true
    }
  }
}

Get Recipient

GET
/campaigns/{campaignId}/recipients/{recipientId}
Required scope: campaigns:read

Retrieve details of a specific recipient in a campaign.

Response
{
  "success": true,
  "data": {
    "id": "recipient_xyz789",
    "campaignId": "campaign_abc123",
    "email": "john@example.com",
    "name": "John Doe",
    "phone": "+1234567890",
    "externalId": "user_123",
    "status": "invited",
    "walletCardId": "card_abc123",
    "walletCardStatus": "active",
    "createdAt": "2025-12-09T10:00:00Z",
    "updatedAt": "2025-12-09T11:00:00Z"
  }
}

Update Recipient

PATCH
/campaigns/{campaignId}/recipients/{recipientId}
Required scope: campaigns:write

Update a recipient. Changes automatically propagate to all active wallet cards for this recipient.

Response
{
  "success": true,
  "data": {
    "id": "recipient_xyz789",
    "campaignId": "campaign_abc123",
    "email": "john@example.com",
    "name": "John Doe Updated",
    "status": "invited",
    "updatedAt": "2025-12-09T12:00:00Z"
  }
}

Delete Recipient

DELETE
/campaigns/{campaignId}/recipients/{recipientId}
Required scope: campaigns:write

Delete a recipient from a campaign. This removes them from the system but keeps their cards in the wallet.

Response
{
  "success": true,
  "data": {
    "id": "recipient_xyz789",
    "deleted": true
  }
}

Invite Recipient

POST
/campaigns/{campaignId}/recipients/{recipientId}/invite
Required scope: campaigns:write

Send an invite to a recipient. This updates their status to invited and optionally sends an email.

Request Parameters

ParameterTypeRequiredDescription
sendEmailbooleanNoSend invite email (default: false)
emailobjectNoCustomize email content (only used if sendEmail: true)
email.subjectstringNoEmail subject line (supports placeholders: {{name}}, {{eventName}}, etc.)
email.bodystringNoEmail body text (supports same placeholders)
email.buttonTextstringNoButton text in email (default: "Add to Wallet")
Response
{
  "success": true,
  "data": {
    "id": "recipient_xyz789",
    "status": "invited",
    "downloadUrl": "https://walletwerk.eu/c/abc123",
    "updatedAt": "2025-12-09T11:00:00Z"
  }
}

Bulk Invite Recipients

POST
/campaigns/{campaignId}/recipients/bulk-invite
Required scope: campaigns:write

Bulk invite recipients with status created (have wallet cards but not yet invited). Processes up to 100 recipients per call.

Request Parameters

ParameterTypeRequiredDescription
sendEmailbooleanNoSend invite emails (default: true)
limitnumberNoMax recipients to invite (1-100, default: 100)
emailobjectNoCustomize email content (only used if sendEmail: true)
Response
{
  "success": true,
  "data": {
    "invited": 10,
    "emailsSent": 10,
    "emailsFailed": 0,
    "remaining": 0,
    "downloadUrls": [
      {
        "recipientId": "recipient_001",
        "email": "john@example.com",
        "downloadUrl": "https://walletwerk.eu/c/abc123"
      }
    ]
  }
}

The response includes downloadUrls for all successfully invited recipients, allowing you to distribute wallet card links without additional API calls.

Revoke Recipient

POST
/campaigns/{campaignId}/recipients/{recipientId}/revoke
Required scope: campaigns:write

Revoke a recipient's cards. This voids all wallet cards for this recipient in this campaign.

Response
{
  "success": true,
  "data": {
    "id": "recipient_xyz789",
    "status": "revoked",
    "updatedAt": "2025-12-09T13:00:00Z"
  }
}