Recipients API
Recipients are always associated with a campaign. Wallet cards are automatically created when recipients are added to a campaign.
Add Single Recipient
/campaigns/{campaignId}/recipientscampaigns:writeAdd a single recipient to a campaign. Wallet cards are automatically created in the background.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | Yes | Recipient email address |
name | string | No | Recipient full name |
phone | string | No | Phone number (E.164 format) |
externalId | string | No | Your internal ID for this recipient |
recipientData | object | No | Recipient-specific data (merged with campaign data) |
recipientData.barcodeValue | string | No | Custom barcode value (required if campaign uses barcodeValueStrategy: "custom") |
providerTypes | array | No | Override: ["all"], ["apple"], ["google"], ["eudiw"] (default: inherits from campaign) |
{
"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
/campaigns/{campaignId}/recipients/bulkcampaigns:writeAdd multiple recipients to a campaign at once.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
recipients | array | Yes | Array of recipient objects |
recipients[].email | string | Yes | Recipient email address |
recipients[].name | string | No | Recipient full name |
recipients[].phone | string | No | Phone number |
recipients[].externalId | string | No | Your internal ID |
recipients[].recipientData | object | No | Recipient-specific data |
recipients[].recipientData.barcodeValue | string | No | Custom barcode value (required if campaign uses barcodeValueStrategy: "custom") |
recipients[].providerTypes | array | No | Override provider types (default: inherits from campaign) |
sendEmail | boolean | No | Send invite emails (default: true) |
List Recipients
/campaigns/{campaignId}/recipientscampaigns:readList all recipients for a campaign.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum results (1-100, default: 20) |
offset | integer | No | Number of results to skip (default: 0) |
email | string | No | Filter by email address |
status | string | No | Filter by status: pending, created, invited, active, revoked, removed, deleted |
includeHistory | boolean | No | Include status change history in response (default: false) |
includeStatus | boolean | No | Include detailed status information (cards array) for each recipient (default: false) |
includeDownloadUrls | boolean | No | Include download URLs for each recipient's wallet cards (default: false) |
{
"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
/campaigns/{campaignId}/recipients/{recipientId}campaigns:readRetrieve details of a specific recipient in a campaign.
{
"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
/campaigns/{campaignId}/recipients/{recipientId}campaigns:writeUpdate a recipient. Changes automatically propagate to all active wallet cards for this recipient.
{
"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
/campaigns/{campaignId}/recipients/{recipientId}campaigns:writeDelete a recipient from a campaign. This removes them from the system but keeps their cards in the wallet.
{
"success": true,
"data": {
"id": "recipient_xyz789",
"deleted": true
}
}
Invite Recipient
/campaigns/{campaignId}/recipients/{recipientId}/invitecampaigns:writeSend an invite to a recipient. This updates their status to invited and optionally sends an email.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
sendEmail | boolean | No | Send invite email (default: false) |
email | object | No | Customize email content (only used if sendEmail: true) |
email.subject | string | No | Email subject line (supports placeholders: {{name}}, {{eventName}}, etc.) |
email.body | string | No | Email body text (supports same placeholders) |
email.buttonText | string | No | Button text in email (default: "Add to Wallet") |
{
"success": true,
"data": {
"id": "recipient_xyz789",
"status": "invited",
"downloadUrl": "https://walletwerk.eu/c/abc123",
"updatedAt": "2025-12-09T11:00:00Z"
}
}
Bulk Invite Recipients
/campaigns/{campaignId}/recipients/bulk-invitecampaigns:writeBulk invite recipients with status created (have wallet cards but not yet invited). Processes up to 100 recipients per call.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
sendEmail | boolean | No | Send invite emails (default: true) |
limit | number | No | Max recipients to invite (1-100, default: 100) |
email | object | No | Customize email content (only used if sendEmail: true) |
{
"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
/campaigns/{campaignId}/recipients/{recipientId}/revokecampaigns:writeRevoke a recipient's cards. This voids all wallet cards for this recipient in this campaign.
{
"success": true,
"data": {
"id": "recipient_xyz789",
"status": "revoked",
"updatedAt": "2025-12-09T13:00:00Z"
}
}