> ## Documentation Index
> Fetch the complete documentation index at: https://docs.snappy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get gift by ID

> Use this endpoint to retrieve a specific Gift by its ID. Useful for tracking delivery status, retrieving final gift cost, or reviewing the recipient and campaign context.

###### Required fields:
- `giftId` - the Gift identifier, passed as a path parameter

###### Optional parameters:
- `companyId` query parameter - Company ID (when not inferable from the calling key)
- `expand` - comma-separated objects to inline (`finalCost`, `deliveryDetails`, `estimatedCost`, `recipient`, `orders`, `customization`)
- `Request-Source` header - source of the request

###### Please note:
- Use `expand=orders` to retrieve the full order history including cancelled orders.
- Use `expand=finalCost` to retrieve the actual cost after the gift has been claimed.

#### Permissions
- Requires: `gifts:read:masked` or `gifts:read:unmasked`



## OpenAPI

````yaml get /v2/gifts/{giftId}
openapi: 3.0.0
info:
  title: Snappy Public API
  version: 2.0.0
  contact:
    name: Snappy Support
    email: info@snappy.com
  description: >-
    Welcome to the Snappy API reference documentation!

    You can use this API to integrate with Snappy and spread smiles to your
    employees/clients/customers and much more.

    In just 3 simple steps you can start sending gifts today: pull the relevant
    campaign, send gifts to your recipients and track gift statuses.

    So let's get started!
servers:
  - url: https://api.snappy.com/public-api
    description: Base API URL
  - url: https://mtls-api.snappy.com/public-api
    description: >-
      ## mTLS URL

      You can also use mTLS to enhance your API security. To get your specific
      certificates please contact our support.

      Once you configure the certificated correctly, you need to also update
      endpoints to use the following secure api base URL:
security: []
tags:
  - name: Authentication
    description: >-
      API keys authenticate requests to the Snappy API. Use these endpoints to
      list active keys for your Company, create new keys, or delete keys you no
      longer need.
  - name: Accounts
    description: >-
      An **Account** is a sub-entity that lives within a **Company**. Accounts
      are used to separate and organize your company's campaigns and gift sends
      for different teams, departments or budget owners.
  - name: Campaigns
    description: >-
      A **Campaign** is the primary organizational object used to configure and
      send a batch of gifts. It acts as a template for all the settings of a
      single gifting initiative, including the target **Recipient** list, the
      selected **Collection** or **product**, the budget, branding, and
      notification messages.
  - name: Collections
    description: >-
      A **Collection** is a curated catalog of gift items tailored to a specific
      theme, budget range, and audience (e.g., "Birthday Gifts Under $50"). The
      gift recipient then chooses their preferred item directly from this
      collection.


      Use these endpoints to:

      - Get available collections based on budget and country requirements

      - Retrieve budget ranges for specific collections

      - Access collection details and products


      Please note: Swag collections can only be retrieved by specifying the
      accountId in the request.
  - name: Products & Variants
    description: >-
      Use these endpoints to search for and retrieve products and variants
      (including by collection and budget), and to list product tags for
      building catalog and filtering experiences in your UI.
  - name: Gifts
    description: >-
      A **Gift** is the core transactional object in the Snappy system. It
      represents the entire gifting experience for a **Recipient** within a
      **Campaign**, from initial creation to final delivery.


      The **Gift** object tracks the status and details through each stage of
      its lifecycle:

      1. **Creation:** The gift is initiated and associated with a recipient and
      campaign.

      2. **Notification:** The recipient is notified about their gift via email
      or other channels.

      3. **Selection:** The recipient selects a specific product from the gift
      collection (if applicable).

      4. **Order Generation:** An order is created based on the selected product
      and the recipient's shipping address.

      5. **Delivery:** The physical product is shipped and its delivery status
      is tracked to completion.
  - name: Orders
    description: >-
      Endpoints for programmatically claiming gifts (ordering on behalf of
      recipients), cancelling orders before they ship, and validating or
      autocompleting shipping addresses as part of your checkout or fulfillment
      flow.
  - name: Recipients
    description: A **Recipient** is the end-user who receives a **Gift**.
paths:
  /v2/gifts/{giftId}:
    get:
      tags:
        - Gifts
      summary: Get gift by ID
      description: >-
        Use this endpoint to retrieve a specific Gift by its ID. Useful for
        tracking delivery status, retrieving final gift cost, or reviewing the
        recipient and campaign context.


        ###### Required fields:

        - `giftId` - the Gift identifier, passed as a path parameter


        ###### Optional parameters:

        - `companyId` query parameter - Company ID (when not inferable from the
        calling key)

        - `expand` - comma-separated objects to inline (`finalCost`,
        `deliveryDetails`, `estimatedCost`, `recipient`, `orders`,
        `customization`)

        - `Request-Source` header - source of the request


        ###### Please note:

        - Use `expand=orders` to retrieve the full order history including
        cancelled orders.

        - Use `expand=finalCost` to retrieve the actual cost after the gift has
        been claimed.


        #### Permissions

        - Requires: `gifts:read:masked` or `gifts:read:unmasked`
      operationId: getGift
      parameters:
        - schema:
            type: string
            pattern: ^[A-Za-z0-9]{8,}$
            description: Gift ID
            example: abc123de
          required: true
          description: Gift ID
          name: giftId
          in: path
        - schema:
            type: string
            pattern: ^[A-Za-z0-9]{8,}$
            description: Company ID
            example: '12345678'
          required: false
          description: Company ID
          name: companyId
          in: query
        - schema:
            type: array
            items:
              $ref: '#/components/schemas/ExpandQueryParameter'
            minItems: 1
            uniqueItems: true
            description: >-
              The fields that can be returned for the gift.

              comma-separated format without whitespace in between.

              valid values are: finalCost, deliveryDetails, estimatedCost,
              recipient, customization, orders.
          required: false
          description: >-
            The fields that can be returned for the gift.

            comma-separated format without whitespace in between.

            valid values are: finalCost, deliveryDetails, estimatedCost,
            recipient, customization, orders.
          style: form
          explode: false
          name: expand
          in: query
        - schema:
            $ref: '#/components/schemas/RequestSourceHeader'
          required: false
          description: Source of the request
          name: Request-Source
          in: header
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Gift'
              examples:
                GuaranteedGift:
                  summary: Gift with a guaranteed gift fallback (daysFromSend)
                  value:
                    id: abc123de
                    companyId: '12345678'
                    campaignId: '87654321'
                    status: sent
                    createdAt: '2024-01-15T10:30:00.000Z'
                    link: https://snappy.gifts/redeem/abc123de
                    customization:
                      giftProperties:
                        budget:
                          max: 100
                          min: 76
                        guaranteedGift:
                          type: daysFromSend
                          numberOfDays: 30
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ApiError'
                  - example:
                      status: 401
                      errorCode: 401001
                      message: Unauthorized
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ApiError'
                  - example:
                      status: 403
                      errorCode: 403001
                      message: Forbidden
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ApiError'
                  - example:
                      status: 404
                      errorCode: 404001
                      message: Not Found
      security:
        - CompanyLevelAuthentication: []
        - BearerAuthentication: []
components:
  schemas:
    ExpandQueryParameter:
      type: string
      enum:
        - finalCost
        - deliveryDetails
        - estimatedCost
        - recipient
        - orders
        - customization
      description: Fields that can be returned for the gift
    RequestSourceHeader:
      type: string
      enum:
        - api_native
        - api_zapier
        - api_salesforce
        - api_ftp
        - api_make
      description: Source of the request
      example: api_native
    Gift:
      type: object
      properties:
        id:
          type: string
          description: The gift identifier
        companyId:
          type: string
          description: The company id
          example: '12345678'
        campaignId:
          type: string
          description: The campaign identifier
        status:
          type: string
          description: The status of the gift.
        budgetPlan:
          type: number
          deprecated: true
          description: >-
            The budget plan of the gift.

            This field is deprecated, use "customization.giftProperties.budget"
            instead.
        tyn:
          type: string
          description: A Thank You Note sent by the end client.
        estimatedCost:
          $ref: '#/components/schemas/GiftEstimatedCost'
        expirationDate:
          type: string
          deprecated: true
          description: >-
            When the gift will be expired.

            Date Format: YYYY-MM-DDThh:mm:ss.sZ.

            This field is deprecated, use
            "customization.giftProperties.expiration" instead.
          example: '2022-12-06T09:50:38.536Z'
        createdAt:
          type: string
          description: |-
            When the gift was originally created.
            Date Format: YYYY-MM-DDThh:mm:ss.sZ. e.g. 2022-12-06T09:50:38.536Z
        link:
          type: string
          description: The link used to redeem the gift.
        success:
          type: boolean
          description: The success of the gift creation
        deliveryDetails:
          $ref: '#/components/schemas/GiftDeliveryDetails'
        finalCost:
          $ref: '#/components/schemas/GiftFinalCost'
        recipient:
          $ref: '#/components/schemas/Recipient'
        orders:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The order id
              status:
                type: string
                enum:
                  - active
                  - notActive
                description: The order status
              orderedProducts:
                type: array
                items:
                  type: object
                  properties:
                    selectedProduct:
                      type: object
                      properties:
                        variantId:
                          type: string
                          description: Id of the selected variation
                        orderStatus:
                          type: string
                          enum:
                            - processing
                            - fulfilled
                            - cancelled
                            - returned
                            - partially fulfilled
                          description: The order status for this specific selected product
                        title:
                          type: string
                          description: Name of the selected product
                        type:
                          type: string
                          enum:
                            - physicalGift
                            - physicalSwag
                            - digitalGift
                            - digitalActivity
                          description: The type of the product selected
                      required:
                        - variantId
                        - orderStatus
                    deliveryDetails:
                      type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - orderReceived
                            - processing
                            - inTransit
                            - outForDelivery
                            - delivered
                          description: The status of the order delivery
                        carrier:
                          type: string
                          description: The delivery carrier
                        trackingNumber:
                          type: string
                          description: The tracking number for the order
                        trackingLink:
                          type: string
                          description: The tracking link for the order
                        deliveryDates:
                          type: object
                          properties:
                            outForDelivery:
                              type: string
                              format: date-time
                            estimated:
                              type: string
                              format: date-time
                            deliveredAt:
                              type: string
                              format: date-time
                          description: Delivery dates for the order
                description: The products included in this order
              orderRecipient:
                $ref: '#/components/schemas/PartialOrderRecipient'
            required:
              - id
              - status
        customization:
          $ref: '#/components/schemas/GiftCustomization'
      required:
        - id
      description: The Gift object.
    ApiError:
      type: object
      properties:
        status:
          type: integer
          description: The HTTP status code.
          example: 400
        errorCode:
          anyOf:
            - type: number
            - type: string
          description: >-
            Internal error code, helps Snappy's technical team to troubleshoot
            if needed.
          example: 10000
        message:
          type: string
          description: The error message.
          example: Unauthorized
        errors:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
                description: The path of the field that caused the error.
                example: body.recipients.0.email
              message:
                type: string
                description: The error message.
                example: Invalid email.
              errorCode:
                anyOf:
                  - type: number
                  - type: string
                description: >-
                  Internal error code, helps Snappy's technical team to
                  troubleshoot if needed.
                example: 10000
            required:
              - path
              - message
              - errorCode
          description: >-
            An array of client errors. This field is being returned only for
            errors the client should fix, usually with status code 400.
      required:
        - status
        - errorCode
        - message
      description: Standard API error response with optional client error details
      example:
        status: 400
        errorCode: 400001
        message: Bad Request
    GiftEstimatedCost:
      type: object
      properties:
        budget:
          type: number
          description: The gift budget as defined in the campaign.
          example: 100
        estimatedFee:
          type: number
          description: The estimated fee cost according to the gift budget.
          example: 2
        estimatedTax:
          type: number
          description: The estimated tax cost according to the gift budget.
          example: 7
        estimatedTotalCost:
          type: number
          description: The estimated cost of the gift including tax and fee.
          example: 109
      required:
        - budget
        - estimatedFee
        - estimatedTax
        - estimatedTotalCost
      description: The estimated cost of the gift including estimated tax and fee.
      example:
        budget: 100
        estimatedFee: 2
        estimatedTax: 7
        estimatedTotalCost: 109
    GiftDeliveryDetails:
      type: object
      properties:
        carrier:
          type: string
          description: The specific carrier for the claimed gift.
        trackingNumber:
          type: string
          description: The tracking number identifier.
        status:
          type: string
          enum:
            - orderReceived
            - processing
            - inTransit
            - outForDelivery
            - delivered
          description: The shipping status.
        trackingLink:
          type: string
          description: A link to track the gift for the specific carrier.
        deliveredAt:
          type: string
          description: |-
            The date the gift was actually delivered by the carrier.
            Date Format: YYYY-MM-DDThh:mm:ss.sZ.
            Relevant only when the status is delivered.
          example: '2022-12-06T09:50:38.536Z'
        outForDelivery:
          type: string
          description: |-
            The date the gift was sent out for delivery by the carrier.
            Date Format: YYYY-MM-DDThh:mm:ss.sZ.
            Relevant only when the status is outForDelivery.
          example: '2022-12-06T09:50:38.536Z'
        outForDeliveryDate:
          type: string
          description: |-
            The date the gift was sent for delivery by the carrier.
            Date Format: YYYY-MM-DDThh:mm:ss.sZ.
            Relevant only when the status is outForDelivery.
          example: '2022-12-06T09:50:38.536Z'
      required:
        - carrier
        - trackingNumber
        - status
        - trackingLink
      additionalProperties: false
      description: The Delivery Details object.
      deprecated: true
    GiftFinalCost:
      type: object
      properties:
        cost:
          type: number
          description: >-
            The actual cost of the specific gift that was chosen by the gift
            receiver.
          example: 100
        finalFee:
          type: number
          description: The final fee cost.
          example: 2
        finalTax:
          type: number
          description: >-
            The final tax cost according to the address provided by the gift
            receiver.
          example: 7
        totalFinalCost:
          type: number
          description: The final cost of the gift including tax and fee.
          example: 109
      required:
        - cost
        - finalFee
        - finalTax
        - totalFinalCost
      description: The final cost of the gift including tax and fee.
      example:
        cost: 100
        finalFee: 2
        finalTax: 7
        totalFinalCost: 109
    Recipient:
      type: object
      properties:
        firstname:
          type: string
          pattern: >-
            ^(?=.{1,50}$)[a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]*([\s\(\)\.\-_'\u2018\u2019]*[a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]*)*[
            \(\)\.\-_'\u2018\u2019]*$
          description: The first name of the recipient.
          example: John
        lastname:
          type: string
          pattern: >-
            ^(?=.{1,50}$)[a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]*([\s\(\)\.\-_'\u2018\u2019]*[a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF\u0400-\u04FF\u0500-\u052F\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\uAC00-\uD7AF\u0E00-\u0E7F\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]*)*[
            \(\)\.\-_'\u2018\u2019]*$
          description: The last name of the recipient.
          example: Doe
        phone:
          type: string
          description: |-
            The phone number that the gift will be sent to.
            ( at the beginning is optional). Format: E.164.
          example: '+1234567890'
        email:
          type: string
          pattern: >-
            ^(?=.{1,60}$)(?!.*[.]{2})(?!\.)[a-zA-Z0-9._%+\-\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F']+(?<!\.)@(?!-)[a-zA-Z0-9.-\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01FF\u0100-\u017F\u0180-\u024F]+\.(?!(?:con|cim|ocm|cmo)$)[a-zA-Z]{2,}$/i
          description: The email address that the gift will be sent to.
          example: example@domain.com
        key:
          type: string
          description: >-
            An optional unique identifier for the gift sending, used to avoid
            duplicated gifts sending to the same recipients when not intending
            to. For example, if you implement a retry mechanism and want to
            avoid sending the same gift.
          example: abc123
        externalId:
          type: string
          description: The id of the recipient in your own system.
          example: '1234567890'
      required:
        - firstname
      additionalProperties: false
      description: The gift recipient object.
      example:
        firstname: John
        lastname: Doe
        externalId: '1234567890'
        phone: '+1234567890'
        email: example@domain.com
        key: abc123
    PartialOrderRecipient:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        country:
          type: string
      required:
        - firstName
        - country
      additionalProperties: false
      example:
        firstName: John
        lastName: Doe
        country: US
    GiftCustomization:
      type: object
      properties:
        giftProperties:
          $ref: '#/components/schemas/GiftProperties'
        recipientNotifications:
          $ref: '#/components/schemas/NotificationPolicy'
        recipientExperience:
          $ref: '#/components/schemas/RecipientExperience'
      description: Complete gift customization configuration
    GiftProperties:
      type: object
      properties:
        budget:
          $ref: '#/components/schemas/Budget'
        expiration:
          $ref: '#/components/schemas/Expiration'
        guaranteedGift:
          $ref: '#/components/schemas/GuaranteedGift'
        selectedGiftType:
          type: string
          enum:
            - collection
            - product
        collection:
          $ref: '#/components/schemas/GiftCollectionResponse'
        product:
          allOf:
            - $ref: '#/components/schemas/Product'
            - type: object
              properties:
                name:
                  type: string
              additionalProperties: false
          description: |-
            Product configuration for campaign gifts.
            Required when selectedGiftType is product, otherwise not allowed.
          example:
            id: '12345678'
            displayType: displayAsSurprise
      additionalProperties: false
      description: >-
        Gift properties determine the core characteristics of your gift - budget
        constraints, expiration settings, and content type (collection or
        specific product).

        These settings influence what options will be available to your
        recipient.
      example:
        budget:
          max: 100
          min: 76
    NotificationPolicy:
      type: object
      properties:
        sendingChannels:
          type: array
          items:
            type: string
            enum:
              - mail
              - sms
              - link
              - code
              - slack
              - teams
          minItems: 1
          description: List of channels to send notifications through
          example:
            - mail
            - sms
        disableReminders:
          type: boolean
          description: Whether reminder notifications are disabled
          example: false
      additionalProperties: false
      description: >-
        Notification settings control how recipients are informed about their
        gift - via email, SMS, link sharing or other channels.

        Also manages reminder behavior to optimize engagement rates.
      example:
        sendingChannels:
          - mail
          - sms
        disableReminders: false
    RecipientExperience:
      type: object
      properties:
        type:
          type: string
          enum:
            - enterAddress
          description: >-
            The type of recipient experience.

            Currently, we support 'enterAddress' type.

            In the future, we plan to support the 'ship to address' feature and
            will add another type.
          example: enterAddress
        visualElements:
          $ref: '#/components/schemas/VisualElements'
        postClaim:
          $ref: '#/components/schemas/PostClaim'
      additionalProperties: false
      description: >-
        Defines the interactive journey recipients experience when receiving
        your gift - from the initial unwrapping animation to greeting message
        presentation and delivery address collection process.
      example:
        type: enterAddress
        visualElements:
          reveal:
            type: snowGlobe
            primaryColor: '#000000'
            secondaryColor: '#000000'
          greeting:
            content:
              ops:
                - insert: Happy Birthday!
            banner:
              text: Happy Birthday!
              color: '#000000'
              mediaItems:
                background:
                  - type: image
                    url: https://example.com/image.jpg
          postClaim:
            redirectAfterClaim: https://example.com/redirect
    Budget:
      type: object
      properties:
        max:
          type: number
          minimum: 1
          maximum: 20000
          description: Maximum budget allowed for gifts (between 1-20,000)
          example: 100
        min:
          type: number
          minimum: 1
          maximum: 10000
          description: Minimum budget allowed for gifts (between 1-10,000)
          example: 76
      required:
        - max
      additionalProperties: false
      description: Budget constraints for gifts
      example:
        max: 100
        min: 76
    Expiration:
      type: object
      properties:
        type:
          type: string
          enum:
            - unlimited
            - specificDate
            - daysFromSend
          default: unlimited
          description: Type of expiration
          example: daysFromSend
        date:
          type: string
          format: date-time
          description: Required when type is specificDate, otherwise not allowed
        numberOfDays:
          type: number
          minimum: 1
          maximum: 365
          description: Required when type is daysFromSend, otherwise not allowed
      additionalProperties: false
      description: >-
        Flexible expiration options let you set a specific end date, number of
        days from sending, or unlimited usage period.

        This helps manage campaign relevance and encourages timely recipient
        action while maintaining control over your gifting program timeline.
      example:
        type: daysFromSend
        numberOfDays: 30
    GuaranteedGift:
      type: object
      properties:
        type:
          type: string
          enum:
            - specificDate
            - daysFromSend
          description: Type of guaranteed gift expiration
          example: daysFromSend
        date:
          type: string
          format: date-time
          description: Required when type is specificDate, otherwise not allowed
        numberOfDays:
          type: number
          minimum: 1
          maximum: 365
          description: Required when type is daysFromSend, otherwise not allowed
      required:
        - type
      additionalProperties: false
      description: >-
        Flexible guaranteed gift options mirror campaign expiration settings and
        allow specific date or days from send configuration.
      example:
        type: daysFromSend
        numberOfDays: 30
    GiftCollectionResponse:
      allOf:
        - $ref: '#/components/schemas/GiftCollection'
        - type: object
          properties:
            name:
              type: string
          additionalProperties: false
      description: |-
        Collection configuration for campaign gifts.
        Required when selectedGiftType is collection, otherwise not allowed.
      example:
        id: '12345678'
        featuredProductId: '12345678'
    Product:
      type: object
      properties:
        id:
          type: string
          description: The id of the product.
          example: '12345678'
        displayType:
          type: string
          enum:
            - displayAsSurprise
            - displayProduct
          default: displayProduct
          example: displayAsSurprise
      required:
        - id
      additionalProperties: false
      description: |-
        Product configuration for campaign gifts.
        Required when selectedGiftType is product, otherwise not allowed.
      example:
        id: '12345678'
        displayType: displayAsSurprise
    VisualElements:
      type: object
      properties:
        reveal:
          $ref: '#/components/schemas/Reveal'
        greeting:
          $ref: '#/components/schemas/Greeting'
      required:
        - reveal
        - greeting
      additionalProperties: false
      description: Visual elements of recipient experience.
      example:
        reveal:
          type: snowGlobe
          primaryColor: '#000000'
          secondaryColor: '#000000'
          mediaItems:
            background:
              - type: image
                url: https://example.com/image.jpg
            logo:
              - type: image
                url: https://example.com/image.jpg
        greeting:
          content:
            ops:
              - attributes:
                  font: pacifico
                insert: Happy Birthday!
          banner:
            text: Happy Birthday!
            color: '#000000'
            mediaItems:
              background:
                - type: image
                  url: https://example.com/image.jpg
              logo:
                - type: image
                  url: https://example.com/image.jpg
    PostClaim:
      type: object
      properties:
        redirectAfterClaim:
          type: string
          format: uri
          description: URL to direct to after the recipient claims the gift.
          example: https://example.com/redirect
      required:
        - redirectAfterClaim
      additionalProperties: false
      description: An object defining the customizations in the postClaim step.
      example:
        redirectAfterClaim: https://example.com/redirect
    GiftCollection:
      type: object
      properties:
        id:
          type: string
          description: The id of the collection.
          example: '12345678'
        featuredProductId:
          type: string
          description: The id of the featured product.
          example: '12345678'
      required:
        - id
      additionalProperties: false
      description: |-
        Collection configuration for campaign gifts.
        Required when selectedGiftType is collection, otherwise not allowed.
      example:
        id: '12345678'
        featuredProductId: '12345678'
    Reveal:
      type: object
      properties:
        type:
          type: string
          enum:
            - noReveal
            - snowGlobe
            - snowMan
            - pinata
            - boxTap
            - growingPlant
            - mountainClimbMask
            - elegantBoxMask
            - newHireMask
            - casinoMachineMask
            - anniversaryBottleMask
            - happyBirthdayMask
            - newbornEggMask
            - nostalgiaMask
            - cozyHolidayMask
            - thanksgivingMask
            - customImageScratch
            - brandScratch
            - customVideo
            - specialDeliveryMask
            - newYearMask
            - appreciationDayMask
            - magicalMask
            - thinkingOfYouMask
            - winterKnittingMask
            - starMask
            - winterTrainMask
          description: Type of reveal experience.
          example: snowGlobe
        primaryColor:
          type: string
          format: hex
          pattern: ^#[0-9A-Fa-f]{6}$
          description: Primary color of reveal experience.
          example: '#000000'
        secondaryColor:
          type: string
          format: hex
          pattern: ^#[0-9A-Fa-f]{6}$
          description: Secondary color of reveal experience.
          example: '#000000'
        mediaItems:
          $ref: '#/components/schemas/RevealMediaItems'
      required:
        - type
        - primaryColor
        - secondaryColor
      additionalProperties: false
      description: >-
        The reveal animation creates an emotional moment of surprise.

        Choose the animation type, color scheme, and branded elements to
        personalize the recipient's first impression and enhance gift
        anticipation.
      example:
        type: snowGlobe
        primaryColor: '#000000'
        secondaryColor: '#000000'
        mediaItems:
          background:
            - type: image
              url: https://example.com/image.jpg
          logo:
            - type: image
              url: https://example.com/image.jpg
    Greeting:
      type: object
      properties:
        content:
          type: object
          properties:
            ops:
              type: array
              items:
                nullable: true
                additionalProperties: true
          required:
            - ops
          additionalProperties:
            nullable: true
          description: Quill formatted JSON with ops array and any additional properties.
          example:
            ops:
              - attributes:
                  font: pacifico
                insert: Happy Birthday!
            customProperty: customValue
        banner:
          type: object
          properties:
            text:
              type: string
            color:
              type: string
              pattern: ^#[0-9A-Fa-f]{6}$
            mediaItems:
              $ref: '#/components/schemas/BannerMediaItems'
          required:
            - text
            - color
            - mediaItems
          additionalProperties: false
          description: >-
            The banner serves as the main visual element of the gift page.

            Customize background, logo, text, and colors to create a unique
            branded experience.
          example:
            text: Happy Birthday!
            color: '#000000'
            mediaItems:
              background:
                - type: image
                  url: https://example.com/image.jpg
              logo:
                - type: image
                  url: https://example.com/image.jpg
      required:
        - content
        - banner
      additionalProperties: false
      description: >-
        A personalized greeting with customizable fonts, colors, and media
        elements.

        Craft an emotional message that accompanies your gift and conveys your
        sentiment to the recipient.
      example:
        content:
          ops:
            - attributes:
                font: pacifico
              insert: Happy Birthday!
        banner:
          text: Happy Birthday!
          color: '#000000'
          mediaItems:
            background:
              - type: image
                url: https://example.com/image.jpg
            logo:
              - type: image
                url: https://example.com/image.jpg
    RevealMediaItems:
      type: object
      properties:
        background:
          type: array
          items:
            $ref: '#/components/schemas/MediaItems'
          maxItems: 1
        logo:
          type: array
          items:
            $ref: '#/components/schemas/MediaItems'
          maxItems: 1
      additionalProperties: false
      description: Media items of reveal experience.
      example:
        background:
          - type: image
            url: https://example.com/image.jpg
        logo:
          - type: image
            url: https://example.com/image.jpg
    BannerMediaItems:
      type: object
      properties:
        background:
          type: array
          items:
            $ref: '#/components/schemas/MediaItems'
          minItems: 0
          maxItems: 1
        logo:
          type: array
          items:
            $ref: '#/components/schemas/MediaItems'
          maxItems: 1
      required:
        - background
      additionalProperties: false
      description: Media items of banner.
      example:
        background:
          - type: image
            url: https://example.com/image.jpg
        logo:
          - type: image
            url: https://example.com/image.jpg
    MediaItems:
      type: object
      properties:
        type:
          type: string
          enum:
            - image
            - video
          description: Type of media item.
          example: image
        url:
          type: string
          format: uri
          description: URL of the media item.
          example: https://example.com/image.jpg
      required:
        - type
        - url
      additionalProperties: false
      description: Media item object.
      example:
        type: image
        url: https://example.com/image.jpg
  securitySchemes:
    CompanyLevelAuthentication:
      type: apiKey
      in: header
      name: X-Api-Key
      description: >
        ## Company Level Authentication


        Company level authentication provides access to all resources under your
        company, including accounts, campaigns, gifts, and recipients.


        ### Getting Your API Key


        1. **Create an API Key**: Use the `POST /v2/authentication/apiKeys`
        endpoint to generate a new API key

        2. **Set Expiration**: Choose from 30, 60, 90, or 180 days (default: 90
        days)

        3. **Optional mTLS**: Enable mutual TLS for enhanced security

        4. **Name Your Key**: Provide a descriptive name for easy identification


        ### Using Your API Key


        Include your API key in the `X-Api-Key` header for every request:

        ```

        X-Api-Key: YOUR_24_CHARACTER_API_KEY

        ```


        ### API Key Management


        - **Maximum Keys**: Up to 3 active API keys per company

        - **Rotation**: Delete old keys before creating new ones when at the
        limit

        - **Security**: Keys are hashed and cannot be retrieved after creation


        ### Enhanced Security (mTLS)


        For production environments, enable mutual TLS authentication:

        1. Set `enforceMtls: true` when creating the API key

        2. Contact support to obtain your client certificates

        3. Use the mTLS endpoint: `https://mtls-api.snappy.com/public-api`
    BearerAuthentication:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Bearer authentication provides access to all resources under your
        company, including accounts, campaigns, gifts, and recipients.

````