Asynchronous Support Gifting

Allows an admin to gift a single entity (points, visits, currency or rewards) to a specific user. This API can handle higher volumes of support gifting requests, as it processes them in the background rather than immediately.

For bulk gifting use cases (points or rewards), we recommend using this API, which supports up to 4,000 requests per minute (RPM) and is optimized for high-volume gifting scenarios.

Authentication Note: This is a Dashboard API endpoint. It uses a business admin API key. The business admin must have "Dashboard API access" permission.

Recurring Redeemable Behavior

If the gifted redeemable is configured with a recurrence cycle, the following behavior applies:

  • Gifting activates the native recurrence cycle automatically.
  • No repeated API calls are needed from the brand.
  • The original administrator identity is carried forward across all subsequent recurrences.
  • A reward notification is triggered on every recurrence cycle, not just the initial gift.
  • All recurrence cycles are grouped under the same original reward entry in the guest's activity timeline.

Membership Tier Boost

Membership Tier gifting is also supported through this API. Administrators can gift a temporary membership tier boost to users directly through the Asynchronous Support Gifting API.

The API accepts two request parameters: tier_id to specify the membership tier to be gifted and duration to specify the gift duration in days.

The specified tier must be a valid, active tier configured under the program. The gift duration must be within the program's configured minimum and maximum gift duration limits.

All existing parameters and behavior remain unchanged. On success, the gift is applied immediately, with the expiry calculated as the start time plus the specified duration. The loyalty member's effective tier is recalculated immediately to reflect the gifted tier.

To gift a membership tier to a user for a specified duration, the business admin must have "Gift & force redeem" permission. Additionally, the "Membership Levels" and "Membership Tier Boost" features must be enabled for the business. Contact your Punchh representative to update this Punchh platform configuration.

Validation and Error Handling

The following error messages are returned when the request fails validation:

  • If tier_id does not match a valid program tier: "The specified tier does not exist for this program."
  • If duration is outside the allowed range: "Validity must be between {min} and {max} days as configured for this program."
  • If the selected tier is lower than or equal to the member's current effective tier: "The selected tier is equal to or lower than the member's current effective tier. Please select a higher tier."
  • If Membership Levels or Tier Boost is not enabled for the program: "Tier Boost is not enabled for this program."
  • If the admin lacks the required permission: "You do not have permission to perform this action. Contact your Punchh representative to update this Punchh platform configuration."
Headers
  • Content-Type
    Type: string
    required

    The media type of the request body. Must be application/json.

  • Accept
    Type: string
    required

    The media type the client expects in the response. Must be application/json.

  • Authorization
    Type: string
    required

    Bearer token for admin authorization. Send the API key in the following format: "Authorization: Bearer BUSINESS_ADMIN_KEY_GOES_HERE".

Body
application/json
  • duration
    Type: integer
    required

    The duration of the gift, in days. Must be within the program-configured minimum and maximum gift duration. Required when tier_id is provided.

  • user_id
    Type: integer
    required

    Unique ID of the user who will receive the gift or message. This is a unique ID assigned to the user by Punchh.

  • end_date
    Type: string Format: date

    Expiration date for the gifted redeemable. If provided, the redeemable will expire on the earlier of this date or the default configuration’s expiration date. The actual expiration will be whichever is earlier: the date you provide, or the system’s default expiration for that reward.

  • gift_count
    Type: integer

    In a points-based business, gift_count represents the number of points to be gifted to guests. In a visit-based business, it is the number of visits to be gifted. Gifting is optional. You can include either gift_count (for points or visits) or redeemable_id (for rewards) in the request. At least one of these parameters must be provided.

    • If both gift_count and redeemable_id are blank, the system returns: "Please specify any one entity for gifting".
    • If both gift_count and redeemable_id are present, the system returns: "Please specify a single entity for gifting".
  • gift_reason
    Type: string

    Reason these points or rewards are being gifted to the user. If no value is provided, the default system value of "Support Activity" will be provided.

  • location_id
    Type: integer

    Unique ID of the location associated with the gift. This is for reference purposes. If no location ID is provided, the ID of the headquarters location will be used.

  • message
    Type: string

    Message that will be sent to the user

  • redeemable_id
    Type: integer

    Unique ID of the redeemable that you want to gift to the user. To send a gift, include either gift_count (for points) or redeemable_id (for rewards) in the request. At least one of these parameters must be provided.

    • If both gift_count and redeemable_id are blank, the system returns: "Please specify any one entity for gifting".
    • If both gift_count and redeemable_id are present, the system returns: "Please specify a single entity for gifting".

    Note: Recurring Redeemables - If the redeemable_id refers to a redeemable configured with a recurrence cycle, gifting it via this API will activate the native recurrence cycle. The reward will automatically re-issue on each recurrence interval without requiring additional API calls. The administrator identity from the initial gift is carried forward to all subsequent recurrence entries, and the guest receives a reward notification on each recurrence.

  • reset_guest_last_activity
    Type: boolean

    Resets the guest's last activity timestamp to the current time

  • reward_amount
    Type: integer

    Currency amount that will be gifted to the user.

  • subject
    Type: string

    Subject of the message that you want to send to the user. If no value is provided, the default system value will be used.

  • tier_id
    Type: string

    The ID of the tier to be gifted as a tier boost. The value must be a valid, active tier configured for the program. When tier_id is provided, duration must also be provided.

Responses
  • 202

    OK - Request was accepted and processed successfully.

  • application/json
  • application/json
Request Example for post/api2/dashboard/users/support_gifting
curl https://SERVER_NAME_GOES_HERE.punchh.com/api2/dashboard/users/support_gifting \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: ' \
  --data '{
  "user_id": 111111111,
  "subject": "Gifts from us.",
  "message": "Thank you for contacting us. Here are 50 extra points to make your day.",
  "gift_reason": "Admin Generosity",
  "gift_count": 50,
  "location_id": 310969,
  "tier_id": "708",
  "duration": 3330
}'
No Body