Get Cheap Games Mailing API

The mailing API from Get Cheap Games — 5 operation(s) for mailing.

GitHub OpenAPI

Operations 5

GET /api/admin/mailing/lists Lists #
GET /api/admin/mailing/summary Summary #
GET /api/admin/mailing/subscribers Subscribers #
GET /api/admin/mailing/giveaways Giveaways #
GET /api/admin/mailing/export.csv Export Csv #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/getcheapgames-com:getcheapgames-com-mailing-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

getcheapgames-com-mailing-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: getcheapgames Mailing API
  description: Game key price comparison. All money is integer cents; rankings are on the price each store lists, without the service fee a marketplace adds at checkout.
  version: 0.1.0
tags:
- name: mailing
paths:
  /api/admin/mailing/lists:
    get:
      tags:
      - mailing
      summary: Lists
      description: 'This site''s email lists, in `alerts.LISTS`'' order: each `id` is a

        `?list=` the other routes take, its `name` how the admin shows it.'
      operationId: lists_api_admin_mailing_lists_get
      parameters:
      - name: authorization
        in: header
        required: false
        schema:
          type: string
          default: ''
          title: Authorization
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ListOut'
                title: Response Lists Api Admin Mailing Lists Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/admin/mailing/summary:
    get:
      tags:
      - mailing
      summary: Summary
      description: 'How big the list is, how it moved in the last thirty days, where it signed

        up and what it was sent; and the free games, whichever list is asked for

        (they are the site''s, not a list''s).'
      operationId: summary_api_admin_mailing_summary_get
      parameters:
      - name: list
        in: query
        required: false
        schema:
          enum:
          - giveaways
          - sales
          - news
          type: string
          default: giveaways
          title: List
      - name: authorization
        in: header
        required: false
        schema:
          type: string
          default: ''
          title: Authorization
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SummaryOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/admin/mailing/subscribers:
    get:
      tags:
      - mailing
      summary: Subscribers
      description: 'One page of the list, newest signup first unless sorted otherwise, each

        row with that list''s emails to it (`alertsSent`, `lastAlertAt`).


        `q` is a case-insensitive piece of the address, matched literally: `_`

        and `%` are characters here, not wildcards. `counts` is per status for

        the same search, for the filter chips.'
      operationId: subscribers_api_admin_mailing_subscribers_get
      parameters:
      - name: q
        in: query
        required: false
        schema:
          type: string
          maxLength: 200
          default: ''
          title: Q
      - name: status
        in: query
        required: false
        schema:
          enum:
          - all
          - subscribed
          - pending
          - unsubscribed
          type: string
          default: all
          title: Status
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 250
          minimum: 1
          default: 50
          title: Limit
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          maximum: 2147483647
          minimum: 0
          default: 0
          title: Offset
      - name: sort
        in: query
        required: false
        schema:
          type: string
          maxLength: 32
          default: ''
          title: Sort
      - name: dir
        in: query
        required: false
        schema:
          enum:
          - asc
          - desc
          type: string
          default: desc
          title: Dir
      - name: list
        in: query
        required: false
        schema:
          enum:
          - giveaways
          - sales
          - news
          type: string
          default: giveaways
          title: List
      - name: authorization
        in: header
        required: false
        schema:
          type: string
          default: ''
          title: Authorization
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscribersOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/admin/mailing/giveaways:
    get:
      tags:
      - mailing
      summary: Giveaways
      description: 'One page of the free games, newest giveaway first unless sorted otherwise:

        one row per game per store, so a game free on Steam and on the Epic Games

        Store at once is two rows.


        `q` is a case-insensitive piece of the title (the store''s, else the

        game''s), matched literally as on the subscribers. `counts` is per status

        and per store for the same search; see `GiveawayCounts`.'
      operationId: giveaways_api_admin_mailing_giveaways_get
      parameters:
      - name: q
        in: query
        required: false
        schema:
          type: string
          maxLength: 200
          default: ''
          title: Q
      - name: status
        in: query
        required: false
        schema:
          enum:
          - open
          - ended
          - all
          type: string
          default: all
          title: Status
      - name: platform
        in: query
        required: false
        schema:
          enum:
          - all
          - steam
          - epic
          - gog
          type: string
          default: all
          title: Platform
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 250
          minimum: 1
          default: 50
          title: Limit
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          maximum: 2147483647
          minimum: 0
          default: 0
          title: Offset
      - name: sort
        in: query
        required: false
        schema:
          type: string
          maxLength: 32
          default: ''
          title: Sort
      - name: dir
        in: query
        required: false
        schema:
          enum:
          - asc
          - desc
          type: string
          default: desc
          title: Dir
      - name: authorization
        in: header
        required: false
        schema:
          type: string
          default: ''
          title: Authorization
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/gcg__routers__mailing__GiveawaysOut'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/admin/mailing/export.csv:
    get:
      tags:
      - mailing
      summary: Export Csv
      description: 'The list as a spreadsheet: subscribed addresses unless asked otherwise.

        The same columns for either list; `alerts_sent` is the row''s

        `alertsSent`, so on the weekly deals the digests it was sent.


        UTF-8, RFC 4180 (CRLF, fields quoted where they need it), formula-safe.

        Streamed from a server-side cursor, so a large list is never held in

        memory whole. The query runs before the answer starts, so a failure is

        still a plain 500 rather than a cut-off file.'
      operationId: export_csv_api_admin_mailing_export_csv_get
      parameters:
      - name: status
        in: query
        required: false
        schema:
          enum:
          - all
          - subscribed
          - pending
          - unsubscribed
          type: string
          default: subscribed
          title: Status
      - name: list
        in: query
        required: false
        schema:
          enum:
          - giveaways
          - sales
          - news
          type: string
          default: giveaways
          title: List
      - name: authorization
        in: header
        required: false
        schema:
          type: string
          default: ''
          title: Authorization
      responses:
        '200':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    ListOut:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
      type: object
      required:
      - id
      - name
      title: ListOut
      description: 'One of this site''s email lists: what `?list=` takes, and its name.'
    BreakdownRow:
      properties:
        key:
          type: string
          title: Key
        count:
          type: integer
          title: Count
      type: object
      required:
      - key
      - count
      title: BreakdownRow
    Counts:
      properties:
        subscribed:
          type: integer
          title: Subscribed
        pending:
          type: integer
          title: Pending
        unsubscribed:
          type: integer
          title: Unsubscribed
        total:
          type: integer
          title: Total
      type: object
      required:
      - subscribed
      - pending
      - unsubscribed
      - total
      title: Counts
    Breakdown:
      properties:
        label:
          type: string
          title: Label
        rows:
          items:
            $ref: '#/components/schemas/BreakdownRow'
          type: array
          title: Rows
      type: object
      required:
      - label
      - rows
      title: Breakdown
    GiveawayCounts:
      properties:
        open:
          type: integer
          title: Open
        ended:
          type: integer
          title: Ended
        all:
          type: integer
          title: All
        byPlatform:
          $ref: '#/components/schemas/PlatformCounts'
      type: object
      required:
      - open
      - ended
      - all
      - byPlatform
      title: GiveawayCounts
      description: 'What each chip would show, for the same search. Each row of chips is

        counted under the OTHER row''s choice: the status chips on the store

        chosen, the store chips in the status chosen; so the chip that is lit

        always reads the table''s `total`.'
    PlatformCounts:
      properties:
        steam:
          type: integer
          title: Steam
        epic:
          type: integer
          title: Epic
        gog:
          type: integer
          title: Gog
      type: object
      required:
      - steam
      - epic
      - gog
      title: PlatformCounts
    gcg__routers__mailing__GiveawayOut:
      properties:
        id:
          type: integer
          title: Id
        gameId:
          type: integer
          title: Gameid
        title:
          type: string
          title: Title
        platform:
          type: string
          title: Platform
        claimUrl:
          anyOf:
          - type: string
          - type: 'null'
          title: Claimurl
        startedAt:
          type: string
          format: date-time
          title: Startedat
        endsAt:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Endsat
        endedAt:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Endedat
        alertsSent:
          type: integer
          title: Alertssent
        sourceId:
          anyOf:
          - type: string
          - type: 'null'
          title: Sourceid
      type: object
      required:
      - id
      - gameId
      - title
      - platform
      - claimUrl
      - startedAt
      - endsAt
      - endedAt
      - alertsSent
      - sourceId
      title: GiveawayOut
    Sends:
      properties:
        total:
          type: integer
          title: Total
        lastAt:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Lastat
        last30d:
          type: integer
          title: Last30D
      type: object
      required:
      - total
      - lastAt
      - last30d
      title: Sends
    gcg__routers__mailing__GiveawaysOut:
      properties:
        items:
          items:
            $ref: '#/components/schemas/gcg__routers__mailing__GiveawayOut'
          type: array
          title: Items
        total:
          type: integer
          title: Total
        limit:
          type: integer
          title: Limit
        offset:
          type: integer
          title: Offset
        counts:
          $ref: '#/components/schemas/GiveawayCounts'
      type: object
      required:
      - items
      - total
      - limit
      - offset
      - counts
      title: GiveawaysOut
    SubscriberOut:
      properties:
        id:
          type: integer
          title: Id
        email:
          type: string
          title: Email
        status:
          type: string
          title: Status
        source:
          type: string
          title: Source
        createdAt:
          type: string
          format: date-time
          title: Createdat
        confirmedAt:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Confirmedat
        unsubscribedAt:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Unsubscribedat
        accountSub:
          anyOf:
          - type: string
          - type: 'null'
          title: Accountsub
        alertsSent:
          type: integer
          title: Alertssent
        lastAlertAt:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Lastalertat
      type: object
      required:
      - id
      - email
      - status
      - source
      - createdAt
      - confirmedAt
      - unsubscribedAt
      - alertsSent
      - lastAlertAt
      title: SubscriberOut
    SummaryOut:
      properties:
        list:
          type: string
          title: List
        listId:
          type: string
          enum:
          - giveaways
          - sales
          - news
          title: Listid
        name:
          type: string
          title: Name
        counts:
          $ref: '#/components/schemas/Counts'
        joined30d:
          type: integer
          title: Joined30D
        left30d:
          type: integer
          title: Left30D
        breakdown:
          $ref: '#/components/schemas/Breakdown'
        sends:
          anyOf:
          - $ref: '#/components/schemas/Sends'
          - type: 'null'
        giveaways:
          anyOf:
          - $ref: '#/components/schemas/GiveawaysSummary'
          - type: 'null'
      type: object
      required:
      - list
      - listId
      - name
      - counts
      - joined30d
      - left30d
      - breakdown
      - sends
      - giveaways
      title: SummaryOut
    GiveawaysSummary:
      properties:
        open:
          type: integer
          title: Open
        last30d:
          type: integer
          title: Last30D
      type: object
      required:
      - open
      - last30d
      title: GiveawaysSummary
    SubscribersOut:
      properties:
        items:
          items:
            $ref: '#/components/schemas/SubscriberOut'
          type: array
          title: Items
        total:
          type: integer
          title: Total
        limit:
          type: integer
          title: Limit
        offset:
          type: integer
          title: Offset
        counts:
          $ref: '#/components/schemas/TabCounts'
        listId:
          type: string
          enum:
          - giveaways
          - sales
          - news
          title: Listid
      type: object
      required:
      - items
      - total
      - limit
      - offset
      - counts
      - listId
      title: SubscribersOut
    TabCounts:
      properties:
        all:
          type: integer
          title: All
        subscribed:
          type: integer
          title: Subscribed
        pending:
          type: integer
          title: Pending
        unsubscribed:
          type: integer
          title: Unsubscribed
      type: object
      required:
      - all
      - subscribed
      - pending
      - unsubscribed
      title: TabCounts
      description: 'Per status, for the same search: what each filter chip would show.'