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

# List campaigns

> Returns the campaigns of the brands you can read, newest first. A `brand_id` that your API key cannot read returns 404.



## OpenAPI

````yaml /brand-api/openapi.json get /campaigns
openapi: 3.1.0
info:
  title: Clipstake Brand API
  description: >-
    Read the brands, campaigns and clips of your Clipstake account. The API is
    read-only.
  version: 0.1.0
servers:
  - url: https://app.clipstake.com/api/v1/brand
security: []
paths:
  /campaigns:
    get:
      tags:
        - Campaigns
      summary: List campaigns
      description: >-
        Returns the campaigns of the brands you can read, newest first. A
        `brand_id` that your API key cannot read returns 404.
      operationId: campaigns-list
      parameters:
        - in: query
          name: limit
          schema:
            default: 25
            description: How many items to return, from 1 to 100. The default is 25.
            example: 25
            type: integer
            minimum: 1
            maximum: 100
        - in: query
          name: cursor
          schema:
            type: string
            description: >-
              The `next_cursor` from the previous page. Send it with the same
              filters as that request.
            example: MTc1OTgyMDQwMDAwMC5hYmMuMTIzNDU2Nzg5MGFi
        - in: query
          name: brand_id
          schema:
            type: string
            description: >-
              Return only the campaigns of this brand. A brand ID that your API
              key cannot read returns 404.
            example: brd_3f9c0a1b2c3d4e5f60718293a4b5c6d7
        - in: query
          name: status
          schema:
            type: string
            enum:
              - pending_payment
              - ready_to_launch
              - active
              - paused
              - ended
            description: >-
              `pending_payment`: the budget is not paid yet. `ready_to_launch`:
              the budget is paid and the campaign is not live yet. `active`: the
              campaign is live and clips earn. `paused`: the campaign stopped
              paying for new views. `ended`: the campaign is over.
            example: active
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          pattern: ^cmp_[0-9a-f]{32}$
                          description: Campaign ID.
                          example: cmp_8a1d4e2f6b7c4d9e8f0a1b2c3d4e5f60
                        brand_id:
                          type: string
                          pattern: ^brd_[0-9a-f]{32}$
                          description: Brand ID.
                          example: brd_3f9c0a1b2c3d4e5f60718293a4b5c6d7
                        name:
                          type: string
                          description: The campaign name.
                          example: Autumn Roast Launch
                        slug:
                          type: string
                          description: >-
                            The short name of the campaign in ClipStake web
                            addresses.
                          example: autumn-roast-launch
                        status:
                          type: string
                          enum:
                            - pending_payment
                            - ready_to_launch
                            - active
                            - paused
                            - ended
                          description: >-
                            `pending_payment`: the budget is not paid yet.
                            `ready_to_launch`: the budget is paid and the
                            campaign is not live yet. `active`: the campaign is
                            live and clips earn. `paused`: the campaign stopped
                            paying for new views. `ended`: the campaign is over.
                          example: active
                        budget_cents:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: >-
                            The campaign budget for clips, in cents. It does not
                            include the ClipStake fee.
                          example: 500000
                        platforms:
                          type: array
                          items:
                            type: object
                            properties:
                              platform:
                                type: string
                                description: >-
                                  The platform: `instagram`, `x`, `tiktok` or
                                  `youtube`. More values can be added. Accept
                                  values that you do not know.
                                example: instagram
                              cpm_cents:
                                anyOf:
                                  - type: integer
                                    minimum: -9007199254740991
                                    maximum: 9007199254740991
                                  - type: 'null'
                                description: >-
                                  The amount the campaign pays for 1,000 views
                                  on this platform, in cents. Null when no rate
                                  is set. When geo targeting is on, the country
                                  rates in `geo_targeting` apply instead.
                                example: 200
                            required:
                              - platform
                              - cpm_cents
                            additionalProperties: false
                            description: A platform that the campaign accepts clips from.
                          description: >-
                            The platforms that the campaign accepts clips from,
                            each with its rate.
                        geo_enabled:
                          type: boolean
                          description: >-
                            True when the campaign pays by the country of the
                            viewers.
                          example: false
                        geo_targeting:
                          type: array
                          items:
                            type: object
                            properties:
                              kind:
                                type: string
                                enum:
                                  - include
                                  - exclude
                                description: >-
                                  `include`: the campaign pays `cpm_cents` for
                                  views from these countries. `exclude`: the
                                  campaign does not pay for views from these
                                  countries.
                                example: include
                              cpm_cents:
                                anyOf:
                                  - type: integer
                                    minimum: -9007199254740991
                                    maximum: 9007199254740991
                                  - type: 'null'
                                description: >-
                                  The amount the campaign pays for 1,000 views
                                  from these countries, in cents. For an
                                  `exclude` rule, this is the rate for views
                                  from every country that is not in the list, or
                                  null when there is no such rate.
                                example: 350
                              countries:
                                type: array
                                items:
                                  type: string
                                description: >-
                                  Two-letter ISO 3166-1 country codes, in upper
                                  case.
                                example:
                                  - US
                                  - CA
                                  - GB
                            required:
                              - kind
                              - cpm_cents
                              - countries
                            additionalProperties: false
                            description: One group of countries and its rate.
                          description: >-
                            The country rules of the campaign, `include` rules
                            first, in the order the campaign shows them. A
                            campaign has `include` rules or one `exclude` rule,
                            never both. With `include` rules, views from other
                            countries earn nothing. Empty when geo targeting is
                            off.
                          example: []
                        max_payout_per_clip_cents:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: >-
                            The most that one clip can earn from the campaign,
                            in cents.
                          example: 50000
                        start_date:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                          description: When the campaign starts.
                          example: '2026-09-15T00:00:00.000Z'
                        end_date:
                          anyOf:
                            - type: string
                              format: date-time
                              pattern: >-
                                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                            - type: 'null'
                          description: >-
                            When the campaign ends. Null if the campaign has no
                            end date.
                          example: '2026-10-15T00:00:00.000Z'
                        launched_at:
                          anyOf:
                            - type: string
                              format: date-time
                              pattern: >-
                                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                            - type: 'null'
                          description: >-
                            When the campaign went live. Null if it never went
                            live.
                          example: '2026-09-15T09:00:00.000Z'
                        created_at:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                          description: When the campaign was created.
                          example: '2026-09-10T14:20:00.000Z'
                        balance:
                          type: object
                          properties:
                            available_cents:
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              description: >-
                                The amount that the campaign holds now and has
                                not paid out, in cents.
                              example: 312500
                            paid_cents:
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              description: >-
                                The total amount paid out of the campaign for
                                clips, in cents. This is what left the campaign
                                budget.
                              example: 187500
                          required:
                            - available_cents
                            - paid_cents
                          additionalProperties: false
                          description: The money in the campaign.
                      required:
                        - id
                        - brand_id
                        - name
                        - slug
                        - status
                        - budget_cents
                        - platforms
                        - geo_enabled
                        - geo_targeting
                        - max_payout_per_clip_cents
                        - start_date
                        - end_date
                        - launched_at
                        - created_at
                        - balance
                      additionalProperties: false
                      description: A campaign that you can read.
                  next_cursor:
                    description: >-
                      Send this as `cursor` to get the next page. It is null on
                      the last page.
                    type:
                      - string
                      - 'null'
                required:
                  - data
                  - next_cursor
                additionalProperties: false
              example:
                data:
                  - id: cmp_8a1d4e2f6b7c4d9e8f0a1b2c3d4e5f60
                    brand_id: brd_3f9c0a1b2c3d4e5f60718293a4b5c6d7
                    name: Autumn Roast Launch
                    slug: autumn-roast-launch
                    status: active
                    budget_cents: 500000
                    platforms:
                      - platform: instagram
                        cpm_cents: 200
                      - platform: x
                        cpm_cents: 150
                    geo_enabled: false
                    geo_targeting: []
                    max_payout_per_clip_cents: 50000
                    start_date: '2026-09-15T00:00:00.000Z'
                    end_date: '2026-10-15T00:00:00.000Z'
                    launched_at: '2026-09-15T09:00:00.000Z'
                    created_at: '2026-09-10T14:20:00.000Z'
                    balance:
                      available_cents: 312500
                      paid_cents: 187500
                next_cursor: MTc1NzUxNDAwMDAwMC5hYmMuMTIzNDU2Nzg5MGFi
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.BAD_REQUEST'
              example:
                error:
                  code: invalid_request
                  message: >-
                    The cursor is not valid for this request. Start again
                    without a cursor, or repeat the previous request with the
                    same filters.
                  request_id: 6f1c2a9e-4b7d-4c1a-9e2f-3a8b5c7d9e10
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.UNAUTHORIZED'
              example:
                error:
                  code: unauthorized
                  message: >-
                    Provide a valid API key as `Authorization: Bearer
                    cb_live_...`.
                  request_id: 0b7e4d2c-9a1f-4e3b-8c6d-5f2a1b9c7e34
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.NOT_FOUND'
              example:
                error:
                  code: not_found
                  message: No such brand.
                  request_id: 3c9a8b7d-2e1f-4a6b-9c8d-7e6f5a4b3c21
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.INTERNAL_SERVER_ERROR'
              example:
                error:
                  code: internal_error
                  message: An unexpected error occurred.
                  request_id: 5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c19
      security:
        - Authorization: []
components:
  schemas:
    error.BAD_REQUEST:
      type: object
      title: Bad request error (400)
      description: The error envelope every failed request returns.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_request
              description: A stable, machine-readable error code.
            message:
              type: string
              description: What went wrong, in words a person can act on.
            request_id:
              type: string
              description: The id of this request. Quote it when you contact support.
          required:
            - code
            - message
            - request_id
          additionalProperties: false
      required:
        - error
      additionalProperties: false
    error.UNAUTHORIZED:
      type: object
      title: Unauthorized error (401)
      description: The error envelope every failed request returns.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - unauthorized
              description: A stable, machine-readable error code.
            message:
              type: string
              description: What went wrong, in words a person can act on.
            request_id:
              type: string
              description: The id of this request. Quote it when you contact support.
          required:
            - code
            - message
            - request_id
          additionalProperties: false
      required:
        - error
      additionalProperties: false
    error.NOT_FOUND:
      type: object
      title: Not found error (404)
      description: The error envelope every failed request returns.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - not_found
              description: A stable, machine-readable error code.
            message:
              type: string
              description: What went wrong, in words a person can act on.
            request_id:
              type: string
              description: The id of this request. Quote it when you contact support.
          required:
            - code
            - message
            - request_id
          additionalProperties: false
      required:
        - error
      additionalProperties: false
    error.INTERNAL_SERVER_ERROR:
      type: object
      title: Internal server error error (500)
      description: The error envelope every failed request returns.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - internal_error
              description: A stable, machine-readable error code.
            message:
              type: string
              description: What went wrong, in words a person can act on.
            request_id:
              type: string
              description: The id of this request. Quote it when you contact support.
          required:
            - code
            - message
            - request_id
          additionalProperties: false
      required:
        - error
      additionalProperties: false
  securitySchemes:
    Authorization:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.