Punchh · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for Punchh Pos API

16 actions 16 updates phrasing extends openapi/punchh-pos-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Punchh's API. It is a proposal applied on top of the contract, not a document Punchh publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 16

$.info
$.paths['/api/pos/redemptions/possible'].post
$.paths['/api/pos/redemptions'].post
$.paths['/api/pos/redemptions'].delete
$.paths['/api/pos/redemptions/multiple_destroy'].delete
$.paths['/api/pos/redemptions/applicable_offers'].post
$.paths['/api/pos/users/active_redemptions'].get
$.paths['/api/pos/users/find'].get
$.paths['/api/pos/discounts/auto_select'].post
$.paths['/api/pos/discounts/lookup'].post
$.paths['/api/pos/discounts/select'].post
$.paths['/api/pos/discounts/unselect'].delete
$.paths['/api/pos/batch_redemptions'].post
$.paths['/api/pos/batch_redemptions/{redemption_ref}'].delete
$.paths['/api/pos/discounts/active'].get
$.paths['/api/pos/discounts/unlock'].put

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for Punchh Pos API
  version: 1.0.0
extends: openapi/punchh-pos-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-10-01'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 15
- target: $.paths['/api/pos/redemptions/possible'].post
  update:
    x-apievangelist-phrasing:
      intent: Check if a redemption can apply to a check
      effect: read
      questions:
      - Can the POS verify a reward will work on a check before redeeming it?
      - Why would a redemption check return a 422 at some locations?
      instructions:
      - text: Check whether redemption code {redemption_code} can apply to check {transaction_no}.
        slots:
          redemption_code: requestBody.redemption_code
          transaction_no: requestBody.transaction_no
      - text: Verify reward {reward_id} is redeemable on a {receipt_amount} receipt before committing.
        slots:
          reward_id: requestBody.reward_id
          receipt_amount: requestBody.receipt_amount
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/redemptions'].post
  update:
    x-apievangelist-phrasing:
      intent: Redeem a reward or discount on a receipt
      effect: write
      questions:
      - How does the POS redeem a guest's reward against a receipt in Redemptions 1.0?
      - Which guest identifiers can a POS redemption use?
      instructions:
      - text: Redeem {discount_type} {reward_id} on transaction {transaction_no}.
        slots:
          discount_type: requestBody.discount_type
          reward_id: requestBody.reward_id
          transaction_no: requestBody.transaction_no
      - text: Apply redemption code {redemption_code} to the {receipt_amount} check for {email}.
        slots:
          redemption_code: requestBody.redemption_code
          receipt_amount: requestBody.receipt_amount
          email: requestBody.email
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/redemptions'].delete
  update:
    x-apievangelist-phrasing:
      intent: Void one processed redemption
      effect: destructive
      questions:
      - How do I undo a single redemption and give the offer back to the guest?
      - Are there time limits on voiding coupon redemptions?
      instructions:
      - text: Void redemption {redemption_id} on transaction {transaction_no}.
        slots:
          redemption_id: requestBody.redemption_id
          transaction_no: requestBody.transaction_no
      - text: Cancel redemption code {redemption_code} and return the reward to {email}.
        slots:
          redemption_code: requestBody.redemption_code
          email: requestBody.email
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/redemptions/multiple_destroy'].delete
  update:
    x-apievangelist-phrasing:
      intent: Void several redemptions at once
      effect: destructive
      questions:
      - Can the POS void multiple redemptions in one request?
      - What happens to the rewards when a batch of Redemptions 1.0 redemptions is voided?
      instructions:
      - text: Void all the redemptions {redemption_id} on check {transaction_no} together.
        slots:
          redemption_id: requestBody.redemption_id
          transaction_no: requestBody.transaction_no
      - text: Bulk-cancel the redemptions for guest {email} on order {transaction_no}.
        slots:
          email: requestBody.email
          transaction_no: requestBody.transaction_no
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/redemptions/applicable_offers'].post
  update:
    x-apievangelist-phrasing:
      intent: List offers that apply to a check
      effect: read
      questions:
      - Which of a guest's offers apply to the items on their current check?
      - Can the POS ask what offers fit an order before choosing one to redeem?
      instructions:
      - text: List offers applicable to {email}'s {receipt_amount} check.
        slots:
          email: requestBody.email
          receipt_amount: requestBody.receipt_amount
      - text: 'Find offers for {email} that fit these menu items: {menu_items}.'
        slots:
          email: requestBody.email
          menu_items: requestBody.menu_items
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/users/active_redemptions'].get
  update:
    x-apievangelist-phrasing:
      intent: List a guest's active redemptions at the POS
      effect: read
      questions:
      - Which redemptions does a guest currently have open?
      - Can the POS look up active redemptions by phone number?
      instructions:
      - text: Show active redemptions for {email}.
        slots:
          email: query.email
      - text: Get the open redemptions for the guest with phone {phone}.
        slots:
          phone: query.phone
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/users/find'].get
  update:
    x-apievangelist-phrasing:
      intent: Identify a guest at the POS
      effect: read
      questions:
      - How does the POS find a loyalty guest before applying Redemptions 2.0 discounts?
      - Which fields can I use to look a guest up at the register?
      instructions:
      - text: Find the guest whose {lookup_field} is {lookup_value}.
        slots:
          lookup_field: requestBody.lookup_field
          lookup_value: requestBody.lookup_value
      - text: Look up the loyalty member by phone {lookup_value} at the POS.
        slots:
          lookup_value: requestBody.lookup_value
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/discounts/auto_select'].post
  update:
    x-apievangelist-phrasing:
      intent: Auto-fill a guest's discount basket
      effect: write
      questions:
      - Can discounts be queued into a guest's basket automatically at checkout?
      - Who decides which discounts auto-redemption picks?
      instructions:
      - text: Auto-select discounts for user {user_id} on a {receipt_amount} receipt.
        slots:
          user_id: requestBody.user_id
          receipt_amount: requestBody.receipt_amount
      - text: Run auto-redemption for guest {user_id} with subtotal {subtotal_amount}.
        slots:
          user_id: requestBody.user_id
          subtotal_amount: requestBody.subtotal_amount
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/discounts/lookup'].post
  update:
    x-apievangelist-phrasing:
      intent: Look up a guest's discounts and lock the basket
      effect: write
      questions:
      - What discounts does a guest have available against this receipt?
      - How do I lock a guest's discount basket so another channel can't change it?
      instructions:
      - text: Look up discounts for user {user_id} against a {receipt_amount} receipt.
        slots:
          user_id: requestBody.user_id
          receipt_amount: requestBody.receipt_amount
      - text: Check user {user_id}'s basket and lock it with external ID {external_uid}.
        slots:
          user_id: requestBody.user_id
          external_uid: requestBody.external_uid
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/discounts/select'].post
  update:
    x-apievangelist-phrasing:
      intent: Add discounts to a guest's basket
      effect: write
      questions:
      - How does a cashier add a chosen reward to the guest's discount basket?
      - Can a guest have more than one active discount basket?
      instructions:
      - text: Add {items} to user {user_id}'s discount basket.
        slots:
          items: requestBody.discount_basket_items_attributes
          user_id: requestBody.user_id
      - text: Select discounts {items} for guest {user_id} on locked basket {external_uid}.
        slots:
          items: requestBody.discount_basket_items_attributes
          user_id: requestBody.user_id
          external_uid: requestBody.external_uid
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/discounts/unselect'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove discounts from a guest's basket
      effect: destructive
      questions:
      - How do I take a discount back out of a guest's basket before checkout?
      - Can several discounts be removed from the basket in one call?
      instructions:
      - text: Remove basket items {item_ids} from user {user_id}'s basket.
        slots:
          item_ids: requestBody.discount_basket_item_ids
          user_id: requestBody.user_id
      - text: Unselect discount {item_ids} for guest {user_id}.
        slots:
          item_ids: requestBody.discount_basket_item_ids
          user_id: requestBody.user_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/batch_redemptions'].post
  update:
    x-apievangelist-phrasing:
      intent: Commit the discount basket as a redemption
      effect: write
      questions:
      - How do I finalize the discounts in a guest's basket when the order is paid?
      - Does the batch redemption revalidate the receipt before committing?
      instructions:
      - text: Commit user {user_id}'s discount basket on a {receipt_amount} receipt.
        slots:
          user_id: requestBody.user_id
          receipt_amount: requestBody.receipt_amount
      - text: Process batch redemption for guest {user_id} with line items {line_items}.
        slots:
          user_id: requestBody.user_id
          line_items: requestBody.line_items
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/batch_redemptions/{redemption_ref}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Void a committed discount basket
      effect: destructive
      questions:
      - How do I reverse a whole Redemptions 2.0 batch redemption?
      - Where do I get the redemption reference needed to void a basket?
      instructions:
      - text: Void batch redemption {redemption_ref} for user {user_id}.
        slots:
          redemption_ref: path.redemption_ref
          user_id: requestBody.user_id
      - text: Reverse the committed basket {redemption_ref}.
        slots:
          redemption_ref: path.redemption_ref
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/discounts/active'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a guest's active discount basket
      effect: read
      questions:
      - Which discounts has a guest already selected in their basket?
      - What happens to a basket discount that expires before checkout?
      instructions:
      - text: Show the active discount basket for user {user_id}.
        slots:
          user_id: requestBody.user_id
      - text: Get guest {user_id}'s basket locked under {external_uid}.
        slots:
          user_id: requestBody.user_id
          external_uid: requestBody.external_uid
      method: generated
      generated: '2026-10-01'
- target: $.paths['/api/pos/discounts/unlock'].put
  update:
    x-apievangelist-phrasing:
      intent: Unlock a guest's discount basket
      effect: write
      questions:
      - How do I release a locked discount basket so another channel can use it?
      - When does a discount basket need to be unlocked?
      instructions:
      - text: Unlock user {user_id}'s discount basket held by {external_uid}.
        slots:
          user_id: requestBody.user_id
          external_uid: requestBody.external_uid
      - text: Release the basket lock {external_uid} for guest {user_id}.
        slots:
          external_uid: requestBody.external_uid
          user_id: requestBody.user_id
      method: generated
      generated: '2026-10-01'