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

# List open campaigns

> Returns the campaigns open to this creator in Discover, newest first. Each one matches the creator's categories and audience reach, and the creator hasn't applied to it yet. Discover is open to creators with payouts set up, and anyone else gets `DISCOVER_UNAVAILABLE`.



## OpenAPI

````yaml /openapi/creator.yaml get /discover/campaigns
openapi: 3.1.0
info:
  title: Passionfroot Creator API
  version: 1.0.0-alpha
  description: >
    Access a creator's own partners, collaborations, placements, catalog,
    proposals, and conversations, and the open campaigns in Discover.

    The API is in alpha. Every operation is restricted to the creator account
    that owns the API key.
servers:
  - url: https://workspace.passionfroot.me/api/creators/v1
security:
  - bearerAuth: []
tags:
  - name: Placements
  - name: Partners
  - name: Collaborations
  - name: Conversations
  - name: Catalog
  - name: Requests
  - name: Proposals
  - name: Discover
paths:
  /discover/campaigns:
    get:
      tags:
        - Discover
      summary: List open campaigns
      description: >-
        Returns the campaigns open to this creator in Discover, newest first.
        Each one matches the creator's categories and audience reach, and the
        creator hasn't applied to it yet. Discover is open to creators with
        payouts set up, and anyone else gets `DISCOVER_UNAVAILABLE`.
      operationId: listCreatorDiscoverCampaigns
      parameters:
        - $ref: '#/components/parameters/PublishedAfter'
        - $ref: '#/components/parameters/Limit100'
        - $ref: '#/components/parameters/Cursor'
      responses:
        '200':
          description: A page of open campaigns.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscoverCampaignPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  parameters:
    PublishedAfter:
      name: publishedAfter
      in: query
      description: Include campaigns published on or after this date or timestamp.
      schema:
        type: string
    Limit100:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 50
    Cursor:
      name: cursor
      in: query
      description: Opaque cursor returned by the previous page.
      schema:
        type: string
  schemas:
    DiscoverCampaignPage:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/DiscoverCampaign'
        pagination:
          $ref: '#/components/schemas/Pagination'
    DiscoverCampaign:
      type: object
      required:
        - id
        - name
        - brief
        - briefLink
        - minAudienceReach
        - maxAudienceReach
        - categories
        - publishedAt
        - status
        - partner
      properties:
        id:
          type: string
        name:
          type: string
        brief:
          type: string
          description: The brief as plain text.
        briefLink:
          type:
            - string
            - 'null'
          format: uri
          description: A link to the full brief, such as a Google Doc.
        minAudienceReach:
          type:
            - integer
            - 'null'
          description: The smallest audience reach the campaign accepts.
        maxAudienceReach:
          type:
            - integer
            - 'null'
          description: The largest audience reach the campaign accepts.
        categories:
          type: array
          items:
            type: string
        publishedAt:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - open
            - closed
          description: '`open` campaigns take applications. `closed` campaigns no longer do.'
        partner:
          $ref: '#/components/schemas/Partner'
    Pagination:
      type: object
      required:
        - hasMore
      properties:
        nextCursor:
          type:
            - string
            - 'null'
        hasMore:
          type: boolean
    Error:
      type: object
      additionalProperties: false
      required:
        - error
      description: >-
        The body of every error response. Branch on `code`; messages can be
        reworded.
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: >-
                Stable, machine-readable reason. New codes may be added;
                existing ones never change meaning.
              enum:
                - INVALID_REQUEST
                - INVALID_QUERY_PARAMETER
                - INVALID_BODY
                - INVALID_ID
                - INVALID_CURSOR
                - INVALID_IDEMPOTENCY_KEY
                - UNAUTHENTICATED
                - MISSING_SCOPE
                - DISCOVER_UNAVAILABLE
                - NOT_ELIGIBLE
                - NOT_FOUND
                - METHOD_NOT_ALLOWED
                - CONFLICT
                - CAMPAIGN_CLOSED
                - IDEMPOTENCY_IN_PROGRESS
                - UNPROCESSABLE
                - IDEMPOTENCY_KEY_REUSED
                - RATE_LIMITED
                - INTERNAL_ERROR
                - SERVICE_UNAVAILABLE
            message:
              type: string
              description: >-
                What went wrong and what to do next, written for a developer or
                agent.
            details:
              description: >-
                Present only when there is something structured to act on, such
                as one entry per invalid field (`{ field, message }`).
    Partner:
      type: object
      required:
        - id
        - name
        - websiteUrl
      properties:
        id:
          type: string
        name:
          type: string
        websiteUrl:
          type:
            - string
            - 'null'
          format: uri
  responses:
    BadRequest:
      description: Invalid parameters or body.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: >-
        Missing, invalid, expired, or revoked API key, or a creator account that
        is not approved.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        The key lacks the required scope, the creator has no payouts set up for
        Discover (`DISCOVER_UNAVAILABLE`), or the creator doesn't match the
        campaign they apply to (`NOT_ELIGIBLE`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: RATE_LIMITED
              message: >-
                This API key is over its rate limit. Wait for Retry-After before
                sending more.
              details:
                limit: 2
                windowSeconds: 1
    ServerError:
      description: Unexpected server failure. Re-read state before retrying a write.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServiceUnavailable:
      description: >-
        Temporary key-verification or write-lock infrastructure failure. Retry
        after the indicated delay.
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  headers:
    RetryAfter:
      description: Seconds to wait before retrying.
      schema:
        type: integer
        minimum: 1
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Passionfroot API key
      description: >-
        Create an API key from Settings → AI agents & API in an approved Creator
        workspace.

````

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