> ## 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 your campaigns

> Returns the campaigns that your API key can submit clips to, newest first. ClipStake chooses these campaigns for your account.



## OpenAPI

````yaml /creator-api/openapi.json get /campaigns
openapi: 3.1.0
info:
  title: Clipstake Creator API
  description: >-
    Submit your Instagram and X posts as clips to the campaigns that ClipStake
    opened to your account, and follow your clips.
  version: 0.1.0
servers:
  - url: https://app.clipstake.com/api/v1/creator
security: []
paths:
  /campaigns:
    get:
      tags:
        - Campaigns
      summary: List your campaigns
      description: >-
        Returns the campaigns that your API key can submit clips to, newest
        first. ClipStake chooses these campaigns for your account.
      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: status
          schema:
            type: string
            enum:
              - pending_payment
              - ready_to_launch
              - active
              - paused
              - ended
            description: >-
              `active`: the campaign accepts clips. `paused`: the campaign
              stopped paying for new views and does not accept clips. `ended`:
              the campaign is over. `pending_payment` and `ready_to_launch`: the
              campaign is not live yet.
            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
                        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
                        brand_name:
                          type: string
                          description: The brand that runs the campaign.
                          example: Northwind Coffee
                        status:
                          type: string
                          enum:
                            - pending_payment
                            - ready_to_launch
                            - active
                            - paused
                            - ended
                          description: >-
                            `active`: the campaign accepts clips. `paused`: the
                            campaign stopped paying for new views and does not
                            accept clips. `ended`: the campaign is over.
                            `pending_payment` and `ready_to_launch`: the
                            campaign is not live yet.
                          example: active
                        about:
                          type: string
                          description: What the campaign is about.
                          example: Short clips that show our new autumn roast.
                        instructions:
                          type: string
                          description: What the brand asks your clips to do.
                          example: Show the bag in the first 3 seconds. Tag @northwind.
                        invite_only:
                          type: boolean
                          description: True when only invited creators can submit clips.
                          example: false
                        invite_accepted:
                          type: boolean
                          description: >-
                            True when you accepted your invite to this campaign.
                            An invite-only campaign refuses your clips until you
                            accept it in the ClipStake app.
                          example: false
                        platforms:
                          type: array
                          items:
                            type: object
                            properties:
                              platform:
                                type: string
                                description: >-
                                  The platform: `instagram` or `x`. 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: >-
                                  What you earn for 1,000 views on this
                                  platform, in cents, before the platform fee
                                  (see `platform_fee_bps`). Null when the
                                  campaign pays by country instead (see
                                  `geo_rates`).
                                example: 100
                            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 your rate.
                        geo_enabled:
                          type: boolean
                          description: >-
                            True when the campaign pays by the country of the
                            viewers. Then an Instagram account needs viewer
                            locations to submit (see
                            `viewer_locations_available` on the account).
                          example: false
                        geo_rates:
                          type: array
                          items:
                            type: object
                            properties:
                              kind:
                                type: string
                                enum:
                                  - include
                                  - exclude
                                description: >-
                                  `include`: views from these countries earn
                                  `cpm_cents`. `exclude`: views from these
                                  countries earn nothing.
                                example: include
                              cpm_cents:
                                anyOf:
                                  - type: integer
                                    minimum: -9007199254740991
                                    maximum: 9007199254740991
                                  - type: 'null'
                                description: >-
                                  What you earn for 1,000 views from these
                                  countries, in cents, before the platform fee
                                  (see `platform_fee_bps`). For an `exclude`
                                  rule, the rate for views from every other
                                  country, or null.
                                example: 300
                              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: >-
                            Your rate for each group of countries. Empty when
                            the campaign does not pay by country.
                          example: []
                        max_payout_per_clip_cents:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: >-
                            The most that one clip can pay you, in cents, after
                            the platform fee.
                          example: 40000
                        platform_fee_bps:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: >-
                            The platform fee that ClipStake takes from each
                            payout on this campaign, in basis points. For
                            example, `1500` is 15%. A campaign keeps the same
                            fee for its whole life.
                          example: 2000
                        max_clips:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: The number of clips you can submit to the campaign.
                          example: 50
                        clip_count:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: The number of clips you submitted to the campaign.
                          example: 3
                        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 is not live
                            yet.
                          example: '2026-09-15T09:00:00.000Z'
                        posted_after_launch_only:
                          type: boolean
                          description: >-
                            True when the campaign accepts only posts that you
                            published after `launched_at`.
                          example: true
                        submission_window_hours:
                          anyOf:
                            - type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                            - type: 'null'
                          description: >-
                            When set, the campaign accepts only posts published
                            within this many hours after `launched_at`. Null
                            means no limit.
                          example: null
                      required:
                        - id
                        - name
                        - slug
                        - brand_name
                        - status
                        - about
                        - instructions
                        - invite_only
                        - invite_accepted
                        - platforms
                        - geo_enabled
                        - geo_rates
                        - max_payout_per_clip_cents
                        - platform_fee_bps
                        - max_clips
                        - clip_count
                        - start_date
                        - end_date
                        - launched_at
                        - posted_after_launch_only
                        - submission_window_hours
                      additionalProperties: false
                      description: A campaign that your API key can submit clips to.
                  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
                    name: Autumn Roast Launch
                    slug: autumn-roast-launch
                    brand_name: Northwind Coffee
                    status: active
                    about: Short clips that show our new autumn roast.
                    instructions: Show the bag in the first 3 seconds. Tag @northwind.
                    invite_only: false
                    invite_accepted: false
                    platforms:
                      - platform: instagram
                        cpm_cents: 100
                      - platform: x
                        cpm_cents: 80
                    geo_enabled: false
                    geo_rates: []
                    max_payout_per_clip_cents: 40000
                    platform_fee_bps: 2000
                    max_clips: 50
                    clip_count: 3
                    start_date: '2026-09-15T00:00:00.000Z'
                    end_date: '2026-10-15T00:00:00.000Z'
                    launched_at: '2026-09-15T09:00:00.000Z'
                    posted_after_launch_only: true
                    submission_window_hours: null
                next_cursor: null
        '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
                    cc_live_...`.
                  request_id: 0b7e4d2c-9a1f-4e3b-8c6d-5f2a1b9c7e34
        '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.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.