Back

Campaigns API

Create, list, update, and delete campaigns

Campaigns API

Campaigns are the primary resource in the API — all recipients and wallet cards are organized under campaigns.

List Campaigns

GET
/campaigns
Required scope: campaigns:read

Retrieve a list of campaigns for your organization.

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoMaximum results (1-100, default: 20)
offsetintegerNoNumber of results to skip (default: 0)
statusstringNoFilter by status: draft, active, completed, archived
campaignTypestringNoFilter by type: event, coupon, loyalty, access, generic
Response
{
  "success": true,
  "data": {
    "campaigns": [
      {
        "id": "campaign_abc123",
        "name": "Tech Conference 2025",
        "campaignType": "event",
        "status": "active",
        "createdAt": "2025-12-01T10:00:00Z"
      }
    ],
    "pagination": {
      "total": 10,
      "limit": 20,
      "offset": 0,
      "hasMore": false
    }
  }
}

Create Campaign

POST
/campaigns
Required scope: campaigns:write

Create a new campaign. Campaigns are the primary resource in the API.

Request Parameters

ParameterTypeRequiredDescription
namestringYesCampaign name
campaignTypestringYesType: event, coupon, loyalty, access, generic
campaignDataobjectYesCampaign-specific data (inherited by recipients)
campaignData.barcodeTypestringNoBarcode type: none, qr (default), aztec, pdf417, code128
campaignData.barcodeValueStrategystringNoBarcode value strategy: auto (default) or custom
startDatestringNoStart date (ISO 8601 format: YYYY-MM-DD)
endDatestringNoEnd date (ISO 8601 format: YYYY-MM-DD)
providerTypesarrayNoProviders: ["all"], ["apple"], ["google"], ["eudiw"] (default: ["all"])
metadataobjectNoCustom metadata (key-value pairs)
Response
{
  "success": true,
  "data": {
    "id": "campaign_abc123",
    "name": "Tech Conference 2025",
    "campaignType": "event",
    "status": "active",
    "campaignData": {
      "location": "San Francisco Convention Center",
      "barcodeType": "qr",
      "barcodeValueStrategy": "auto"
    },
    "startDate": "2025-12-15",
    "endDate": "2025-12-17",
    "providerTypes": ["all"],
    "createdAt": "2025-12-01T10:00:00Z",
    "updatedAt": "2025-12-01T10:00:00Z"
  }
}

Get Campaign

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

Retrieve details of a specific campaign.

Response
{
  "success": true,
  "data": {
    "id": "campaign_abc123",
    "name": "Tech Conference 2025",
    "campaignType": "event",
    "status": "active",
    "campaignData": {
      "location": "San Francisco Convention Center",
      "barcodeType": "qr",
      "barcodeValueStrategy": "auto"
    },
    "startDate": "2025-12-15",
    "endDate": "2025-12-17",
    "providerTypes": ["all"],
    "createdAt": "2025-12-01T10:00:00Z",
    "updatedAt": "2025-12-01T10:00:00Z"
  }
}

Update Campaign

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

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

Response
{
  "success": true,
  "data": {
    "id": "campaign_abc123",
    "name": "Tech Conference 2025 Updated",
    "status": "active",
    "updatedAt": "2025-12-01T11:00:00Z"
  }
}

Immutable Settings: Once a campaign has recipients, barcodeValueStrategy becomes immutable and cannot be changed. Attempting to change this setting will return a 400 Bad Request error with code SETTING_LOCKED.

Campaign Status

Campaigns have four possible status values:

Response Fields

StatusDescriptionWhen SetCan Change To
draftCampaign is being set up, not yet launchedInitial status when campaign is createdactive (when first recipient is invited), archived (manual)
activeCampaign is live and has invited recipientsAutomatically set when first recipient is invited, or manually via APIarchived (manual), completed (if end date passes)
completedEvent end date has passedCalculated in UI based on endDate (not automatically set in database)archived (manual)
archivedCampaign is hidden from main listManually set via API or dashboarddraft (via unarchive)

Delete Campaign

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

Delete a campaign.

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