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.