> ## 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.

# Get one of your campaigns

> Returns one campaign. A campaign that your API key cannot submit to returns 404.



## OpenAPI

````yaml /creator-api/openapi.json get /campaigns/{campaign_id}
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/{campaign_id}:
    get:
      tags:
        - Campaigns
      summary: Get one of your campaigns
      description: >-
        Returns one campaign. A campaign that your API key cannot submit to
        returns 404.
      operationId: campaigns-get
      parameters:
        - in: path
          name: campaign_id
          schema:
            type: string
            description: >-
              Campaign ID. Format: cmp_ followed by 32 lowercase hexadecimal
              characters.
            example: cmp_8a1d4e2f6b7c4d9e8f0a1b2c3d4e5f60
          required: true
          description: >-
            Campaign ID. Format: cmp_ followed by 32 lowercase hexadecimal
            characters.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                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.
              example:
                id: cmp_2c4e6a8b0d1f4e3a9b7c5d3e1f0a2b4c
                name: Cold Brew Summer
                slug: cold-brew-summer
                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: true
                invite_accepted: true
                platforms:
                  - platform: instagram
                    cpm_cents: null
                geo_enabled: true
                geo_rates:
                  - kind: include
                    cpm_cents: 300
                    countries:
                      - US
                      - CA
                  - kind: include
                    cpm_cents: 150
                    countries:
                      - GB
                      - IE
                      - AU
                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
        '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
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.NOT_FOUND'
              example:
                error:
                  code: not_found
                  message: No such campaign.
                  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.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.