Appcharge Portal Content API
The Portal Content API from Appcharge — 4 operation(s) for portal content.
The Portal Content API from Appcharge — 4 operation(s) for portal content.
openapi: 3.0.3
info:
title: Appcharge Assets Portal Content 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: Portal Content
paths:
/v1/portal-content:
post:
tags:
- Portal Content
summary: Create Content
description: Creates a new content item.
operationId: create-content
parameters:
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateContentRequest'
responses:
'200':
description: Content created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/ContentItem'
'400':
description: Invalid request body or validation error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: BAD_REQUEST
requestUrl: /v1/portal-content
body: Invalid request body or validation error.
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content
body: Invalid or missing publisher token.
'409':
description: Slug already exists.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: CONFLICT
requestUrl: /v1/portal-content
body: Slug already exists.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content
body: Server error.
get:
tags:
- Portal Content
summary: Get Content
description: Retrieves a list of all content items.
operationId: get-content
parameters:
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
responses:
'200':
description: Content retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/GetContentResponse'
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content
body: Invalid or missing publisher token.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content
body: Server error.
/v1/portal-content/{contentId}:
delete:
tags:
- Portal Content
summary: Delete Content
description: Deletes a content item.
operationId: delete-content
parameters:
- name: contentId
in: path
required: true
description: Content ID.
schema:
type: string
example: 507f1f77bcf86cd799439011
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
responses:
'200':
description: Content deleted successfully.
'400':
description: Invalid content ID or deletion error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: BAD_REQUEST
requestUrl: /v1/portal-content/{contentId}
body: Invalid content ID or deletion error.
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content/{contentId}
body: Invalid or missing publisher token.
'404':
description: Content not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: NOT_FOUND
requestUrl: /v1/portal-content/{contentId}
body: Content not found.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content/{contentId}
body: Server error.
get:
tags:
- Portal Content
summary: Get Content By ID
description: Retrieves a specific content item by its ID.
operationId: get-content-by-id
parameters:
- name: contentId
in: path
required: true
description: Content ID.
schema:
type: string
example: 507f1f77bcf86cd799439011
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
responses:
'200':
description: Content retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/ContentItem'
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content/{contentId}
body: Invalid or missing publisher token.
'404':
description: Content not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: NOT_FOUND
requestUrl: /v1/portal-content/{contentId}
body: Content not found.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content/{contentId}
body: Server error.
put:
tags:
- Portal Content
summary: Update Content
description: Updates a content item.
operationId: update-content
parameters:
- name: contentId
in: path
required: true
description: Content ID.
schema:
type: string
example: 507f1f77bcf86cd799439011
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateContentRequest'
responses:
'200':
description: Content updated successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/ContentItem'
'400':
description: Invalid request body or validation error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: BAD_REQUEST
requestUrl: /v1/portal-content/{contentId}
body: Invalid request body or validation error.
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content/{contentId}
body: Invalid or missing publisher token.
'404':
description: Content not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: NOT_FOUND
requestUrl: /v1/portal-content/{contentId}
body: Content not found.
'409':
description: Slug already exists.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: CONFLICT
requestUrl: /v1/portal-content/{contentId}
body: Slug already exists.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content/{contentId}
body: Server error.
/v1/portal-content/{contentId}/translations:
get:
tags:
- Portal Content
summary: Get Content Translations
description: Retrieves all existing translations for a content item.
operationId: get-content-translations
parameters:
- name: contentId
required: true
in: path
description: Content ID.
schema:
type: string
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
responses:
'200':
description: Translations retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/GetContentTranslationsResponse'
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content/{contentId}/translations
body: Invalid or missing publisher token.
'404':
description: Content not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: NOT_FOUND
requestUrl: /v1/portal-content/{contentId}/translations
body: Content not found.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content/{contentId}/translations
body: Server error.
/v1/portal-content/{contentId}/translations/{isoCode}:
put:
tags:
- Portal Content
summary: Upsert Content Translation
description: Creates or updates a translation for a content item in a specific locale. <br/><br/>This operation doesn't modify translations in other locales or other content fields.<br /> <Note>You must first [add the locale in the Publisher Dashboard](/../../guides/translations/add-and-manage-languages) before adding its translation.</Note>
operationId: upsert-content-translation
parameters:
- name: contentId
required: true
in: path
description: Content ID.
schema:
type: string
- name: isoCode
required: true
in: path
description: The locale code. Both [ISO-639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code and [ISO-3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code formats are supported.
schema:
type: string
- name: x-publisher-token
required: true
in: header
description: Publisher token.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpsertContentTranslationRequest'
responses:
'200':
description: Translation upserted successfully. Returns the full updated content item.
content:
application/json:
schema:
$ref: '#/components/schemas/ContentItem'
'400':
description: Invalid request body or validation error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: BAD_REQUEST
requestUrl: /v1/portal-content/{contentId}/translations/{isoCode}
body: Invalid request body or validation error.
'401':
description: Invalid or missing publisher token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: UNAUTHORIZED
requestUrl: /v1/portal-content/{contentId}/translations/{isoCode}
body: Invalid or missing publisher token.
'404':
description: Content not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: NOT_FOUND
requestUrl: /v1/portal-content/{contentId}/translations/{isoCode}
body: Content not found.
'409':
description: Slug conflict.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: CONFLICT
requestUrl: /v1/portal-content/{contentId}/translations/{isoCode}
body: Slug already exists.
'413':
description: Request payload is too large.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: PAYLOAD_TOO_LARGE
requestUrl: /v1/portal-content/{contentId}/translations/{isoCode}
body: Request payload is too large.
'500':
description: Server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
message: INTERNAL_SERVER_ERROR
requestUrl: /v1/portal-content/{contentId}/translations/{isoCode}
body: Server error.
components:
schemas:
CreateContentRequest:
type: object
required:
- title
- headerImage
- thumbnailImage
- contentType
properties:
title:
type: string
description: Content title.
example: Welcome to Our Game
subTitle:
type: string
description: 'Content description. '
example: Everything you need to know
bodyText:
type: string
description: Content body text.
example: This is the main content body with detailed information about getting started...
headerImage:
type: string
description: Content header image URL. Can be an external link or the URL of an image from the Assets Library.
example: https://cdn.example.com/images/header.jpg
thumbnailImage:
type: string
description: Content thumbnail image URL. Can be an external link or the URL of an image from the Assets Library.
example: https://media.appcharge.com/media/25cb4861ec8924a6b69a0f59/book-shelf1920.jpg
labels:
type: array
items:
type: string
description: List of labels associated with the content.
example:
- tutorial
- beginner
state:
type: string
description: Current state of the content.
default: visible
enum:
- visible
- hidden
- scheduled
example: visible
contentType:
type: string
enum:
- article
- news
description: Content type.
example: article
publishDate:
type: string
format: date-time
description: Content publish date. Use for scheduling content.
example: '2025-10-20T00:00:00.000Z'
pages:
type: array
items:
type: string
description: "List of page IDs where this content will appear. The Page ID can be found in the Pages section of the Publisher Dashboard. \n\n **Note:** If you don't pass this property, or if you assign the content to a page that doesn't exist, the content will be created but won't be displayed in the Game Portal."
example:
- 6850249eb5bd5c59b9bab7e2
- 692eb70d0293e07ab4895518
slug:
type: string
description: Content slug. If not provided, this value is auto-generated.
example: welcome-to-our-game
visibility:
type: string
enum:
- public
- private
description: Content visibility level.
default: public
example: public
tag:
type: string
description: Internal tag for organizing your content. Not visible to players.
example: spring2025
translations:
type: array
items:
$ref: '#/components/schemas/TranslationRequest'
description: "List of translations for the content item. Each object represents a locale and its translations. \n\n **Note:** You must first [add the locale in the Publisher Dashboard](/../../guides/translations/add-and-manage-languages) before adding its translations."
UpsertContentTranslationRequest:
type: object
required:
- title
- subTitle
- bodyText
- headerImage
- thumbnailImage
- labels
properties:
title:
type: string
description: Translated title.
example: Bienvenue dans notre jeu
subTitle:
type: string
description: Translated subtitle.
example: Tout ce que vous devez savoir
bodyText:
type: string
description: Translated body text.
example: Ceci est le contenu principal de l'article en français...
headerImage:
type: string
description: Translated header image URL. Can be an external link or the URL of an image from the Assets Library.
example: https://cdn.example.com/images/header-fr.jpg
thumbnailImage:
type: string
description: Translated thumbnail image URL. Can be an external link or the URL of an image from the Assets Library.
example: https://media.appcharge.com/media/25cb4861ec8924a6b69a0f59/book-shelf1920.jpg
labels:
type: array
items:
type: string
description: Translated labels.
example:
- tutoriel
- débutant
GetContentTranslationsResponse:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/TranslationResponse'
description: List of translations for the content item. Each item represents a locale and its translations.
GetContentResponse:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/ContentItemList'
description: List of content objects.
TranslationResponse:
type: object
properties:
isoCode:
type: string
description: The locale code. Both [ISO-639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code and [ISO-3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code formats are supported.
example: fr-FR
title:
type: string
description: Translated title.
example: Bienvenue dans notre jeu
subTitle:
type: string
description: Translated description.
example: Tout ce que vous devez savoir
bodyText:
type: string
description: Translated body text.
example: Ceci est le contenu principal de l'article en français...
headerImage:
type: string
description: Translated header image URL.
example: https://cdn.example.com/images/header-fr.jpg
thumbnailImage:
type: string
description: Translated thumbnail image URL.
example: https://media.appcharge.com/media/25cb4861ec8924a6b69a0f59/book-shelf1920.jpg
labels:
type: array
items:
type: string
description: Translated labels.
example:
- tutoriel
- débutant
UpdateContentRequest:
type: object
properties:
title:
type: string
description: Content title.
example: Welcome to Our Game - Updated
subTitle:
type: string
description: 'Content description. '
bodyText:
type: string
description: Content body text.
headerImage:
type: string
description: 'Content header image URL. '
thumbnailImage:
type: string
description: 'Content thumbnail image URL. '
labels:
type: array
items:
type: string
description: List of labels associated with the content.
example:
- tutorial
- beginner
- featured
state:
type: string
description: Current state of the content.
default: visible
enum:
- visible
- hidden
- scheduled
example: visible
contentType:
type: string
enum:
- article
- news
description: 'Type: article or news.'
publishDate:
type: string
format: date-time
description: Content publish date. Use for scheduling content.
pages:
type: array
items:
type: string
description: List of pages where this content appears.
slug:
type: string
description: Content slug. If not provided, this value is auto-generated.
visibility:
type: string
enum:
- public
- private
description: Content visibility level.
default: public
example: public
tag:
type: string
description: Internal tag for organizing your content. Not visible to players.
example: spring2025
translations:
type: array
items:
$ref: '#/components/schemas/TranslationRequest'
description: "List of translations for the content item. Each object represents a locale and its translations. \n\n **Note:** You must first [add the locale in the Publisher Dashboard](/../../guides/translations/add-and-manage-languages) before adding its translations."
ErrorResponse:
type: object
properties:
errorCode:
type: integer
format: int32
description: Error code indicating the type of failure.
default: 0
errorMessage:
type: string
description: Detailed message describing the error.
TranslationRequest:
type: object
required:
- isoCode
- title
- subTitle
- bodyText
- headerImage
- thumbnailImage
- labels
properties:
isoCode:
type: string
description: The locale code. Both [ISO-639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code and [ISO-3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code formats are supported.
example: fr-FR
title:
type: string
description: Translated title.
example: Bienvenue dans notre jeu
subTitle:
type: string
description: Translated subtitle.
example: Tout ce que vous devez savoir
bodyText:
type: string
description: Translated body text.
example: Ceci est le contenu principal de l'article en français...
headerImage:
type: string
description: Translated header image URL. Can be an external link or the URL of an image from the Assets Library.
example: https://cdn.example.com/images/header-fr.jpg
thumbnailImage:
type: string
description: Translated thumbnail image URL. Can be an external link or the URL of an image from the Assets Library.
example: https://media.appcharge.com/media/25cb4861ec8924a6b69a0f59/book-shelf1920.jpg
labels:
type: array
items:
type: string
description: Translated labels.
example:
- tutoriel
- débutant
Page:
type: object
properties:
id:
type: string
description: Page ID.
example: 6850249eb5bd5c59b9bab7e2
pageName:
type: string
description: Page name.
example: faq
ContentItemList:
type: object
properties:
id:
type: string
description: Content ID.
example: 507f1f77bcf86cd799439011
title:
type: string
description: Content title.
example: Welcome to Our Game
subTitle:
type: string
description: Content description.
example: Everything you need to know
bodyText:
type: string
description: Content body text.
example: This is the main content body with detailed information...
headerImage:
type: string
description: Content header image URL.
example: https://cdn.example.com/images/header.jpg
thumbnailImage:
type: string
description: Content thumbnail image URL.
example: https://media.appcharge.com/media/25cb4861ec8924a6b69a0f59/book-shelf1920.jpg
labels:
type: array
items:
type: string
description: List of labels associated with the content.
example:
- tutorial
- beginner
state:
type: string
description: Current state of the content.
default: hidden
enum:
- visible
- hidden
- scheduled
example: hidden
contentType:
type: string
enum:
- article
- news
description: Content type.
example: article
publishDate:
type: string
format: date-time
description: Content publish date. Use for scheduling content.
example: '2025-10-20T00:00:00.000Z'
slug:
type: string
description: Content slug. If not provided, this value is auto-generated.
example: welcome-to-our-game
visibility:
type: string
enum:
- public
- private
description: Content visibility level.
default: public
example: public
tag:
type: string
description: Internal tag for organizing your content. Not visible to players.
example: spring2025
createdAt:
type: string
format: date-time
description: Created date.
example: '2025-10-15T10:30:00.000Z'
updatedAt:
type: string
format: date-time
description: Updated date.
example: '2025-10-19T14:20:00.000Z'
pages:
type: array
items:
$ref: '#/components/schemas/Page'
description: List of pages where this content appears.
example:
- id: 68b0249eb5bd5c59b9bab7e2
pageName: FAQs
- id: 692eb70d0293e07ab4895518
pageName: Events
ContentItem:
type: object
properties:
id:
type: string
description: Content ID.
example: 507f1f77bcf86cd799439011
title:
type: string
description: Content title.
example: Welcome to Our Game
subTitle:
type: string
description: Content description.
example: Everything you need to know
bodyText:
type: string
description: Content body text.
example: This is the main content body with detailed information...
headerImage:
type: string
description: Content header image URL.
example: https://cdn.example.com/images/header.jpg
thumbnailImage:
type: string
description: Content thumbnail image URL.
example: https://media.appcharge.com/media/25cb4861ec8924a6b69a0f59/book-shelf1920.jpg
labels:
type: array
items:
type: string
description: List of labels associated with the content.
example:
- tutorial
- beginner
state:
type: string
description: Current state of the content.
default: hidden
enum:
- visible
- hidden
- scheduled
example: hidden
contentType:
type: string
enum:
- article
- news
description: Content type.
example: article
publishDate:
type: string
format: date-time
description: Content publish date. Use for scheduling content.
example: '2025-10-20T00:00:00.000Z'
slug:
type: string
description: Content slug. If not provided, this value is auto-generated.
example: welcome-to-our-game
visibility:
type: stri
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/appcharge/refs/heads/main/openapi/appcharge-portal-content-api-openapi.yml