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

# RevShare Offers

> The RevShare offer catalog — OnlyFans models available for promotion, with their commission terms, payout guarantee and 7-day performance. Mirrors the Offers page of the marketer cabinet.

Filters can be passed as query parameters or as a JSON body.

The RevShare offer catalog: OnlyFans models you can promote, with their commission terms, payout guarantee and performance over the last 7 days. It returns the same data as the **Offers** page in the partner dashboard.

Use it to pick models automatically. For example, you can find every offer that allows your traffic source and where you don't have a campaign running yet.

## Filters

Pass filters as query parameters or in a JSON body. You can combine them.

| Filter                  | Description                                                                                                            |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `search`                | Searches the offer name, plus the OnlyFans username when the model has made it public                                  |
| `of_account_id`         | One specific OnlyFans account                                                                                          |
| `source`                | Only offers where this traffic source isn't prohibited                                                                 |
| `unused_source`         | Same as `source`, but also leaves out models that already have an active campaign from this source (from any marketer) |
| `min_commission`        | Minimum RevShare percent                                                                                               |
| `free_trial=1`          | Only offers that allow free-trial campaigns                                                                            |
| `guaranteed=1`          | Only offers where the client's deposit fully guarantees payouts                                                        |
| `paid_subscription`     | `1` for paid accounts only, `0` for free accounts only                                                                 |
| `available=1`           | Only offers where the model has provided account access, so you can start a campaign                                   |
| `without_my_campaign=1` | Only offers where you don't have an active RevShare campaign yet                                                       |

Sort with `sort` (`date_add`, `commission`, `arpu_w`, `arpu_m`, `arpu_y`, `likes`, `subscribers`, `performer_top`, `income`) and `order` (`asc` / `desc`). By default, the newest offers come first (`date_add`, `desc`).

## Can you start a campaign?

* `can_start_campaign`: whether you can start a new campaign for this model right now. If it's `false`, `cannot_start_reason` explains why.
* `has_access`: `false` means the model hasn't provided account access yet. Their statistics are incomplete and you can't start a campaign.
* `my_campaigns` / `my_campaigns_limit`: how many active campaigns you have for this model, and the most you're allowed per model.
* `available_campaigns_limit` (top level of the response): how many more RevShare campaigns you can start in total. `null` means there's no limit.

<Info>
  Check `prohibited_sources` and `blocked_countries` before you send traffic. Traffic from a prohibited source or a blocked country breaks the offer terms.
</Info>


## OpenAPI

````yaml api/openapi-partners.json GET /api/marketer/revshare/offers
openapi: 3.0.2
info:
  title: OnlyTraffic Marketer API
  version: 2.0.0
  description: >-
    Partner (marketer) API for OnlyTraffic.


    **Authentication:** pass your API key in the `Authorization` header.


    **Pagination:** all list endpoints accept `offset` (default 0) and `limit`
    (default 50, max 1000) as query parameters or JSON body fields.


    **Dates:** every timestamp field has two variants — an ISO 8601 string
    (`*_at`) and a Unix timestamp integer (`*_at_ts` / `*_ts`).


    **Legacy endpoints** (`?do=…`) are still available for backward
    compatibility but are not extended further.
servers:
  - url: https://partner.onlytraffic.com
security: []
tags:
  - name: RevShare
    description: RevShare campaigns and financial data
  - name: CPL
    description: Cost-Per-Lead orders placed against your offers
  - name: CPC
    description: Cost-Per-Click orders
  - name: Subscribers
    description: Fans acquired through your campaigns
  - name: Stats
    description: Dashboard-style statistics widgets (fans, income, conversion)
  - name: Legacy
    description: Old `?do=` endpoints kept for backward compatibility
paths:
  /api/marketer/revshare/offers:
    get:
      tags:
        - RevShare
      summary: List RevShare offers
      description: >-
        The RevShare offer catalog — OnlyFans models available for promotion,
        with their commission terms, payout guarantee and 7-day performance.
        Mirrors the Offers page of the marketer cabinet.


        Filters can be passed as query parameters or as a JSON body.
      parameters:
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/limit'
        - name: of_account_id
          in: query
          schema:
            type: integer
          description: Filter by OnlyFans account numeric id.
        - name: search
          in: query
          schema:
            type: string
          description: >-
            Free-text search over the offer name and, when published, the
            OnlyFans username.
        - name: source
          in: query
          schema:
            type: string
          description: >-
            Traffic source slug. Keeps only offers where this source is not
            prohibited.
        - name: unused_source
          in: query
          schema:
            type: string
          description: >-
            Traffic source slug. Same as `source`, but additionally drops models
            that already have an active campaign from this source (any
            marketer).
        - name: min_commission
          in: query
          schema:
            type: number
          description: Minimum RevShare percent.
        - name: free_trial
          in: query
          schema:
            type: integer
            enum:
              - 0
              - 1
          description: 1 — only offers that allow free-trial campaigns.
        - name: guaranteed
          in: query
          schema:
            type: integer
            enum:
              - 0
              - 1
          description: >-
            1 — only offers whose payouts are fully guaranteed by the client's
            deposit.
        - name: paid_subscription
          in: query
          schema:
            type: integer
            enum:
              - 0
              - 1
          description: 1 — paid accounts only, 0 — free accounts only.
        - name: available
          in: query
          schema:
            type: integer
            enum:
              - 0
              - 1
          description: >-
            1 — only offers with account access provided, i.e. a campaign can be
            started.
        - name: without_my_campaign
          in: query
          schema:
            type: integer
            enum:
              - 0
              - 1
          description: 1 — only offers where you have no active RevShare campaign yet.
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - date_add
              - commission
              - arpu_w
              - arpu_m
              - arpu_y
              - likes
              - subscribers
              - performer_top
              - income
          description: 'Sort field. Default: date_add.'
        - name: order
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
          description: 'Sort direction. Default: desc.'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                oneOf:
                  - title: Success
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - success
                      available_campaigns_limit:
                        type: integer
                        nullable: true
                        description: >-
                          How many more RevShare campaigns you may start in
                          total. null = unlimited.
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/RevShareOffer'
                  - $ref: '#/components/schemas/ErrorResponse'
              example:
                status: success
                available_campaigns_limit: 2
                data:
                  - of_account_id: 456789
                    of_username: modelname
                    name: Sweet Model
                    description: Active girl, daily posts
                    commission_percent: 40
                    payout_guarantee: full
                    subscribe_price: 9.99
                    performer_top: 3.5
                    likes_count: 87000
                    subscribers_count: 3400
                    arpu:
                      week: 4.12
                      month: 12.4
                      year: 31.7
                    stats_7d:
                      clicks: 1240
                      subscribers: 96
                      conversion: 7.74
                      new_subs_per_day: 21.43
                    sfs_level: none
                    campaign_types:
                      - campaign
                      - trial
                    trial_max_days: 7
                    active_campaigns: 12
                    my_campaigns: 1
                    my_campaigns_limit: 3
                    has_access: true
                    can_start_campaign: true
                    cannot_start_reason: null
                    prohibited_sources:
                      - reddit
                    blocked_countries:
                      - RU
                    onlyfans_account: {}
                    created_at: '2026-01-01T00:00:00+00:00'
                    created_at_ts: 1767225600
      security:
        - api_key: []
components:
  parameters:
    offset:
      name: offset
      in: query
      schema:
        type: integer
        default: 0
        minimum: 0
      description: Number of records to skip.
    limit:
      name: limit
      in: query
      schema:
        type: integer
        default: 50
        minimum: 1
        maximum: 1000
      description: Number of records to return.
  schemas:
    RevShareOffer:
      type: object
      properties:
        of_account_id:
          type: integer
          description: OnlyFans account numeric id.
        of_username:
          type: string
          nullable: true
          description: >-
            Real OnlyFans handle. null when the model does not allow publishing
            it.
        name:
          type: string
          description: Public offer name of the model.
        description:
          type: string
          nullable: true
          description: Offer description provided by the model/agency.
        commission_percent:
          type: number
          description: RevShare percent you get from your fans' NET transactions.
        payout_guarantee:
          type: string
          enum:
            - full
            - partial
            - none
          description: >-
            How well the client's deposit covers payouts: full — fully
            guaranteed, partial — deposit of $200+, none — not guaranteed.
        subscribe_price:
          type: number
          description: Regular subscription price. 0 = free account.
        performer_top:
          type: number
          description: OnlyFans top-percent rank. 0 = not ranked.
        likes_count:
          type: integer
        subscribers_count:
          type: integer
        arpu:
          type: object
          description: Average revenue per user. Values are null while not calculated yet.
          properties:
            week:
              type: number
              nullable: true
            month:
              type: number
              nullable: true
            year:
              type: number
              nullable: true
        stats_7d:
          type: object
          description: >-
            Campaign performance for this model over the last 7 days, across all
            marketers.
          properties:
            clicks:
              type: integer
            subscribers:
              type: integer
            conversion:
              type: number
              nullable: true
              description: subscribers / clicks, %. null when there were no clicks.
            new_subs_per_day:
              type: number
              description: Average new subscribers of the model per day.
        sfs_level:
          type: string
          enum:
            - none
            - medium
            - high
          description: >-
            How actively the model does SFS (shout-out) posts: high — 10+
            accounts in 7 days, medium — 2-10, none — 0-1.
        campaign_types:
          type: array
          items:
            type: string
            enum:
              - campaign
              - trial
          description: Campaign types this offer allows.
        trial_max_days:
          type: integer
          description: Max free-trial length in days. 0 = free trials not allowed.
        active_campaigns:
          type: integer
          description: Active campaigns of all marketers for this model.
        my_campaigns:
          type: integer
          description: Your active RevShare campaigns for this model.
        my_campaigns_limit:
          type: integer
          description: Max campaigns you may run per single model.
        has_access:
          type: boolean
          description: >-
            false when the model has not provided account access data yet —
            statistics are incomplete and campaigns cannot be started.
        can_start_campaign:
          type: boolean
        cannot_start_reason:
          type: string
          nullable: true
          description: Human-readable reason, present when can_start_campaign is false.
        prohibited_sources:
          type: array
          items:
            type: string
          description: Traffic source slugs you may NOT use for this model.
        blocked_countries:
          type: array
          items:
            type: string
        onlyfans_account:
          $ref: '#/components/schemas/OnlyfansAccount'
        created_at:
          type: string
          format: date-time
          nullable: true
          description: When the offer was published on the platform.
        created_at_ts:
          type: integer
          nullable: true
    ErrorResponse:
      title: Error
      type: object
      properties:
        status:
          type: string
          enum:
            - error
        message:
          type: string
          description: Human-readable error description.
        error_code:
          type: integer
          description: '422: bad request params. 404: not found. 429: rate limit exceeded.'
    OnlyfansAccount:
      type: object
      description: Cached snapshot of the OnlyFans model profile.
      properties:
        name:
          type: string
        username:
          type: string
        about:
          type: string
        tags:
          type: array
          items:
            type: string
        avatar:
          type: object
          properties:
            original:
              type: string
              format: uri
            thumbnail:
              type: string
              format: uri
            thumbnail_640:
              type: string
              format: uri
        demo_content:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - photo
                  - video
              url:
                type: string
                format: uri
              thumbnail:
                type: string
                format: uri
        regular_price:
          type: number
        promotions:
          type: array
        blocked_countries:
          type: array
          items:
            type: string
        subscribers_count:
          type: integer
        likes_count:
          type: integer
        posts_count:
          type: integer
        photos_count:
          type: integer
        videos_count:
          type: integer
        performer_top:
          type: number
          description: Top percentage among all performers (e.g. 5 = top 5%).
  securitySchemes:
    api_key:
      type: apiKey
      name: Authorization
      in: header

````