Appcharge Offers API

The Offers API from Appcharge — 5 operation(s) for offers.

OpenAPI Specification

appcharge-offers-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Appcharge Assets Offers API
  version: 1.0.0
  description: Appcharge is a monetization platform for mobile games, providing a direct-to-consumer (D2C) web store, mobile Checkout SDK, and Payment Links so publishers can sell in-game offers outside the app stores. This API covers checkout sessions, refunds, coupons and promo codes, price localization, financial and analytics reporting, web store offers (bundles, daily bonuses, rolling/special offers, progress bars, reward calendars, triggered popups), offer components (products, badges, offer designs), game-portal content, media assets, translations, and player personalization/authentication callbacks. Authentication uses the x-publisher-token header; webhooks are signed with an HMAC-SHA256 signature.
  contact:
    name: Appcharge Developer Support
    url: https://docs.appcharge.com/
  x-apievangelist-source: https://docs.appcharge.com/api-reference (Mintlify embedded OpenAPI fragments)
  x-apievangelist-method: searched
  x-apievangelist-generated: '2026-07-17'
servers:
- url: https://api.appcharge.com
  description: Production
- url: https://api-sandbox.appcharge.com
  description: Sandbox
tags:
- name: Offers
paths:
  /offering/offer:
    post:
      tags:
      - Offers
      operationId: create-offer
      parameters:
      - name: x-publisher-token
        required: true
        in: header
        description: The publisher token
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOfferDto'
            example:
              publisherOfferId: offer1
              name: Test_Bundle
              type: Bundle
              active: true
              segments:
              - NewUser
              productsSequence:
              - index: 1
                priceInUsdCents: 300
                products: []
              priceDiscount:
                priceBeforeDiscount: 1000
                discount: 10
                type: percentage
      responses:
        '201':
          description: Create a new Offer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfferDtoResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  requestUrl:
                    type: string
                  body:
                    type: string
        '401':
          description: Not Authorized
  /offering/offer/{publisherOfferId}:
    delete:
      tags:
      - Offers
      operationId: delete-offer
      parameters:
      - name: publisherOfferId
        required: true
        in: path
        schema:
          type: string
      - name: x-publisher-token
        required: true
        in: header
        description: The publisher token
        schema:
          type: string
      responses:
        '200':
          description: Delete Offer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfferDtoResponse'
        '401':
          description: Not Authorized
  /offering/offer/get-offers:
    post:
      tags:
      - Offers
      operationId: get-all-offers
      parameters:
      - name: offerType
        required: false
        in: query
        description: Bundle, SpecialOffer, Popup
        example: SpecialOffer
        schema:
          type: string
      - name: recordLimit
        required: false
        in: query
        description: Record limit (0-500). Defaults to 100 if not defined.
        example: 100
        schema:
          minimum: 0
          maximum: 500
          type: number
      - name: offset
        required: false
        in: query
        description: Offset (non-negative value).
        example: 10
        schema:
          minimum: 0
          type: number
      - name: publisherOfferId
        required: false
        in: query
        description: To retrieve specific offers. If adding multiple, use ',' to separate.
        schema:
          type: string
      - name: x-publisher-token
        required: true
        in: header
        description: The publisher token
        schema:
          type: string
      responses:
        '200':
          description: Get all offers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetOffersResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  requestUrl:
                    type: string
                  body:
                    type: string
        '401':
          description: Not Authorized
  /offering/offer/popup/{offerSKU}:
    put:
      tags:
      - Offers
      operationId: update-popup-by-Id
      parameters:
      - name: offerSKU
        required: true
        in: path
        schema:
          type: string
          description: The publisher Id of the offer.
      - name: x-publisher-token
        required: true
        in: header
        description: The publisher token
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateOfferDto'
      responses:
        '200':
          description: Update Offer by Id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfferDtoResponse'
        '401':
          description: Not Authorized
  /offering/offer/{offerSKU}:
    put:
      tags:
      - Offers
      operationId: update-offer-by-Id
      parameters:
      - name: offerSKU
        required: true
        in: path
        schema:
          type: string
          description: The publisher Id of the offer.
      - name: x-publisher-token
        required: true
        in: header
        description: The publisher token
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateOfferDto'
            example:
              publisherOfferId: offer1
              name: Updated_Bundle
              type: Bundle
              active: true
              segments:
              - BigSpender
              productsSequence:
              - index: 1
                priceInUsdCents: 500
                products: []
              priceDiscount:
                priceBeforeDiscount: 1500
                discount: 20
                type: fixed_amount
      responses:
        '200':
          description: Update Offer by Id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfferDtoResponse'
        '401':
          description: Not Authorized
components:
  schemas:
    ProductsSequenceResponse:
      type: object
      properties:
        index:
          type: number
        playerAvailability:
          type: number
        priceInUsdCents:
          type: number
        products:
          type: array
          items:
            $ref: '#/components/schemas/ProductsSetResponse'
    ProductsSequence:
      type: object
      properties:
        index:
          type: number
        priceInUsdCents:
          type: number
        playerAvailability:
          type: number
        products:
          type: array
          items:
            $ref: '#/components/schemas/ProductsSet'
      required:
      - index
      - priceInUsdCents
      - products
    CreateOfferDto:
      type: object
      required:
      - publisherOfferId
      - name
      - type
      - active
      - segments
      - productsSequence
      properties:
        publisherOfferId:
          type: string
          description: The publisher offer Id
        name:
          type: string
          description: The name of the offer (at least 3 letters)
        displayName:
          type: string
          description: If not specified, the offer name will be used
        description:
          type: string
          description: The description of the offer (conditionally returned)
        type:
          type: string
          description: The type of the offer - Bundle, SpecialOffer
        offerUiId:
          type: string
          description: 'Internal ID for the Offer UI (required if offerExternalUiId not provided)

            '
        offerExternalUiId:
          type: string
          description: 'The offer UI ID as configured by the publisher (if provided, offerUiId is not required)

            '
        publisherSectionId:
          type: string
          description: 'The publisher section ID (applies only to Bundle)

            '
        dynamicOfferUi:
          $ref: '#/components/schemas/DynamicOfferUiDto'
        active:
          type: boolean
          description: Whether the offer is active
        segments:
          type: array
          items:
            type: string
          description: 'IDs of player segments (["NewUser", "BigSpender"] etc.)

            '
        productsSequence:
          type: array
          items:
            $ref: '#/components/schemas/ProductsSequence'
        schedule:
          type: object
          properties:
            permanent:
              type: boolean
              default: true
            timeFrames:
              type: array
              items:
                type: object
                properties:
                  startTime:
                    type: string
                    format: date-time
                  endTime:
                    type: string
                    format: date-time
                  notes:
                    type: string
                required:
                - startTime
                - endTime
            intervals:
              type: string
          required:
          - permanent
          - timeFrames
        priceDiscount:
          $ref: '#/components/schemas/PriceDiscountDto'
    ProductsSet:
      type: object
      properties:
        quantity:
          type: number
        publisherProductId:
          type: string
      required:
      - quantity
      - publisherProductId
    PriceDiscountDto:
      type: object
      properties:
        priceBeforeDiscount:
          type: integer
          description: Offer amount in USD before sale is applied
        discount:
          type: integer
          description: Sale amount in percentage
        type:
          type: string
          description: 'Discount type. Defaults to ''percentage''. Optional values: ''percentage'', ''multiplier'', ''fixed_amount''.

            '
          enum:
          - percentage
          - multiplier
          - fixed_amount
    OfferUiDto:
      type: object
      properties:
        offerUiId:
          type: string
        externalId:
          type: string
        active:
          type: boolean
        offerUiType:
          type: string
        name:
          type: string
        description:
          type: string
        backgroundImage:
          type: string
        specialOffer:
          type: object
          properties:
            templateType:
              type: string
            presentOfferEndTimer:
              type: boolean
            title:
              type: string
            fontSize:
              type: number
            fontWeight:
              type: string
            fontColor:
              type: object
              properties:
                colorOne:
                  type: string
                colorTwo:
                  type: string
                direction:
                  type: string
            backgroundColor:
              type: object
              properties:
                colorOne:
                  type: string
                colorTwo:
                  type: string
                direction:
                  type: string
    ProductDto:
      type: object
      properties:
        publisherProductId:
          type: string
        name:
          type: string
        textFontColorHex:
          type: string
        type:
          type: string
        prefix:
          type: string
        suffix:
          type: string
        priority:
          type: string
        images:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              url:
                type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        productId:
          type: string
    GetOffersResponse:
      type: object
      properties:
        result:
          type: object
          properties:
            totalCount:
              type: number
            offers:
              type: array
              items:
                $ref: '#/components/schemas/OfferDtoResponse'
        status:
          type: number
        message:
          type: string
    ProductsSetResponse:
      type: object
      properties:
        quantity:
          type: number
        product:
          $ref: '#/components/schemas/ProductDto'
    OfferDtoResponse:
      type: object
      properties:
        offerId:
          type: string
        publisherOfferId:
          type: string
        name:
          type: string
        displayName:
          type: string
        description:
          type: string
        type:
          type: string
        createdBy:
          type: string
        offerUi:
          $ref: '#/components/schemas/OfferUiDto'
        dynamicOfferUi:
          $ref: '#/components/schemas/DynamicOfferUiDto'
        active:
          type: boolean
        segments:
          type: array
          items:
            type: string
        productsSequence:
          type: array
          items:
            $ref: '#/components/schemas/ProductsSequenceResponse'
        startOver:
          type: boolean
        priority:
          type: number
        showAfter:
          type: string
        triggers:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              eventName:
                type: string
              every:
                type: integer
              rules:
                type: array
                items: {}
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    UpdateOfferDto:
      type: object
      properties:
        publisherOfferId:
          type: string
          description: The new Id of the offer.
          example: Test_Popup_New
        name:
          type: string
          description: The name of the offer. At least 3 letters.
          example: Test_Popup
        displayName:
          type: string
          description: The display name of the offer. If not specified, the offer name will be used.
        description:
          type: string
          description: The description of the offer.
          example: Best offer ever.
        offerUiId:
          type: string
          description: The Internal ID for the Offer UI. The Offer UI is responsible to add UI elements to the offers such as background image and title. Once you create the Offer UI using the dashboard, you will get the internal ID. This must correspond with the type of offer you configure. In this case "Popup".
          example: 64a55b82e06998282d3d9b59
        offerExternalUiId:
          type: string
          description: The offer UI ID as configured by the publisher. If offerExternalUiId is provided, then offerUiId will not be required.
          example: b9c1e7a3d1f8b2a4c6e5d8f3
        dynamicOfferUi:
          $ref: '#/components/schemas/DynamicOfferUiDto'
        active:
          type: boolean
          description: Is the offer active? true/false.
          example: 'true'
        startOver:
          type: boolean
          description: Popup will repeat itself.
        showAfter:
          type: string
          description: 'Optional values: "login", "purchase"'
        triggers:
          type: array
          description: An array of objects specifying the conditions under which the popup should be triggered.
          items:
            type: object
            properties:
              type:
                type: string
                description: Type of trigger.
                enum:
                - event
              eventName:
                type: string
                description: Name of the event that triggers the popup.
                enum:
                - purchase
              every:
                type: integer
                description: Number of purchases required to present the popup.
              rules:
                type: array
                description: Rules to specify conditions under which the popup appears. If it can apply to any offers, leave the array empty.
                items:
                  type: object
                  properties:
                    fieldName:
                      type: string
                      description: Name of the field to evaluate.
                      enum:
                      - publisherOfferId
                    operator:
                      type: string
                      description: Operator to compare the field value.
                      enum:
                      - in
                    value:
                      type: array
                      description: Array of 'publisherOfferId'(s)
                      items:
                        type: string
        segments:
          type: array
          items:
            type: string
          description: 'The Ids of the player segments to be used in the segmentation algorithm. for example: [“NewUser”, “BigSpender”].'
          example: NewUser
        productsSequence:
          type: array
          items:
            $ref: '#/components/schemas/ProductsSequence'
          description: Relevant only for rolling offers, for any other offer (store tile, single promotion) report all products under sequence ‘1’
    DynamicOfferUiDto:
      type: object
      properties:
        badges:
          type: array
          items:
            type: object
            properties:
              publisherBadgeId:
                type: string
              position:
                type: string
          description: The badges of the offer
        salePercentage:
          type: number
        salePercentageDisplayType:
          type: string
          default: percentage
  securitySchemes:
    PublisherTokenAuth:
      type: apiKey
      in: header
      name: x-publisher-token
      description: Publisher token, as displayed in the Publisher Dashboard.