---
title: "Create a wallet campaign"
method: POST
path: "/companies/{company_key}/campaigns/wallet"
tags: ["Wallet Campaign API"]
---

# Create a wallet campaign

`POST /companies/{company_key}/campaigns/wallet`

Create a new mobile wallet campaign. The campaign `type` determines the kind of pass it issues (`offer`, `loyalty`, or `event_ticket`) and cannot be changed after creation.

## Path parameters

- `company_key` string, required

## Headers

- `X-API-Version` string
- `Content-Type` string, required

## Request body

- WalletCampaignRequest
  - `campaign` object, required
    - `name` string, required — Descriptive name of the mobile wallet campaign.
    - `description` string — Optional longer description of the campaign.
    - `type` 'offer' | 'loyalty' | 'event_ticket', required — The kind of pass this campaign issues. One of `offer` (coupon), `loyalty` (store/loyalty card), or `event_ticket`. Immutable after the campaign is created.
    - `expiration_date` string — When the campaign expires, in ISO-8601 format. Required for `offer` and `event_ticket` campaigns; optional for `loyalty`.
    - `redirect_link` string — Optional URL that end users are redirected to after the campaign has expired.
    - `ignore_unsecure_params` boolean — When `true`, only values from a signed (JWT) payload are trusted when personalizing passes; unsigned query parameters are ignored.
    - `security_configuration` object — Optional JWT signing configuration used to verify personalization payloads sent on the SmartLink.
      - `public_key` string — Public key used to verify the JWT signature.
      - `jwt_algorithm` 'RS256' | 'HS256' — Algorithm used to verify the JWT signature. Defaults to `RS256` (asymmetric); `HS256` is symmetric.

## Response `201`

The wallet campaign was created.

- WalletCampaignResponse
  - `wallet_id` string — The `wallet_id` is the SmartLink token for the campaign. Use it to identify the campaign in all other Wallet API calls.
  - `name` string — Descriptive name of the mobile wallet campaign.
  - `description` string — Optional longer description of the campaign. Returned only when set.
  - `type` 'offer' | 'loyalty' | 'event_ticket' — The kind of pass this campaign issues. One of `offer` (coupon), `loyalty` (store/loyalty card), or `event_ticket`.
  - `smartlink_url` string — Public SmartLink URL used to distribute the pass to end users (the "Add to Wallet" link).
  - `url` string — REST API reference to this wallet campaign, as a relative URL on the API domain.
  - `redirect_link` string — URL that end users are redirected to after the campaign has expired. Returned only when set.
  - `expiration_date` string — When the campaign expires, in ISO-8601 format. Returned only when set.
  - `ignore_unsecure_params` boolean — When `true`, only values from a signed (JWT) payload are trusted when personalizing passes. Returned only when configured.
  - `security_configuration` object — JWT signing configuration used to verify personalization payloads. Returned only when configured.
    - `public_key` string — Public key used to verify the JWT signature. Redacted in responses.
    - `jwt_algorithm` 'RS256' | 'HS256' — Algorithm used to verify the JWT signature. `RS256` (asymmetric) is the default; `HS256` is symmetric.
  - `created_at` string — When the campaign was created, in ISO-8601 format.
  - `updated_at` string — When the campaign was last updated, in ISO-8601 format.

---

[API](https://skmtc.net/vibes/apis/vibes-platform-api.md) · [All operations](https://skmtc.net/vibes/apis/vibes-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/vibes/vibes-platform-api/revisions/2d5797ce1b84/schema)
