Redeem Swag

​

The Swag Redemption API allows an authenticated loyalty member to redeem saved loyalty points for a branded swag item. The API handles the full redemption flow end-to-end — including eligibility checks, point deduction, inventory decrement, reward creation, and optional shipping detail capture.

Conditions for Redeeming Swag

For a swag redemption request to be processed successfully, the following conditions must be met:

  1. Inventory Availability:
    • Location-Level Inventory: If the swag item is tracked at the location level, the available inventory for the selected location_id must be greater than zero (> 0).
    • Global Inventory: If the swag item is tracked globally, total global inventory must be greater than zero (> 0).
  2. Participating Location Validation:
    • For globally tracked swag, the selected location_id must be listed as a participating location (or part of an included Location Group). If the location is excluded, redemption is blocked.
  3. Location Approval Status:
    • If location-level redemption approval is enabled for the business in the Punchh platform, redemptions cannot be processed at disabled or disapproved locations. Contact your Punchh representative to update this Punchh platform configuration.
  4. Account and Feature Authorization:
    • Authentication: A valid user access token is required (returns 401 Unauthorized if missing/invalid).
    • Feature Flag: The Save points for swag redemption feature must be enabled for the business (returns 422 Unprocessable Entity if disabled). Contact your Punchh representative to update this Punchh platform configuration.

See Get User's Save Points for Swag Settings and Balance, Fetch Available User's Swag, Update User's Save Points for Swag Settings, and Get Swag Shipping Details.

Headers

  • Used to authorize the request with access_token. It should be supplied as Bearer ACCESS_TOKEN_GOES_HERE.

  • The signature for the API call

  • Set this header to application/json.

  • Advertises which content types the client is able to understand

  • Preferred language

Body

application/json
  • OAuth client ID assigned to the business

  • Delivery method. Possible values: STORE_PICKUP or HOME_DELIVERY (case-insensitive)

  • ID of the swag item to redeem

  • ID of the store location. If not provided, the business's primary location is used.

  • Required when fulfillment_method is HOME_DELIVERY. Ignored when fulfillment_method is STORE_PICKUP.

    Properties: 9

Responses

  • application/json
  • Bad Request

    • Missing location_id — "Required parameter missing or the value is empty: location_id"
  • Unauthorized

    • Missing or invalid access token — "You need to sign in or sign up before continuing."
  • Not Found

    • Item not available as swag (redeemable ID passed) — "Swag item not found."
    • Invalid/Deactivated swag ID — "Swag item not found."
    • Unknown or cross-business location_id — "Location not found."
  • Unprocessable Entity

    • Save Points for Swag feature disabled — "Your current configuration does not support this feature. Please connect with your Customer Success representative for resolution of the issue."
    • Per-member redemption limit exceeded — "Redemption limit reached for the member."
    • Insufficient saved points — "Insufficient points to redeem this SWAG."
    • Item out of stock (quantity = 0 or NULL) — "Item is currently out of stock."
    • Invalid fulfillment method value — "Invalid fulfilment type specified."
    • Missing required field(s) — "Missing required field(s): {field_name}."
Request Example for post/api2/mobile/swag_redemptions
curl https://SERVER_NAME_GOES_HERE.punchh.com/api2/mobile/swag_redemptions \
  --request POST \
  --header 'Authorization: Bearer ACCESS_TOKEN_GOES_HERE' \
  --header 'x-pch-digest: {{$$.env.signature}}' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Accept-Language: en' \
  --data '{
  "swag_id": 73072,
  "location_id": "353291",
  "fulfillment_method": "HOME_DELIVERY",
  "shipping_info": {
    "full_name": "NAME_GOES_HERE",
    "email": "test@example.com",
    "phone_number": "1111111111",
    "address_line_1": "Street 1",
    "address_line_2": "Street 2",
    "delivery_instructions": "please deliver it asap",
    "city": "New York",
    "state": "USA",
    "zipcode": "12344"
  }
}'
{
  "message": "Swag redeemed successfully."
}