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

# Create promotion

> Create one or more promotions using developer-friendly fields for target audience, discount, offer limit, and expiration.

**Permission Required:** `promotions:write`



## OpenAPI

````yaml https://api.ofauth.com/openapi.json post /v2/access/promotions
openapi: 3.1.0
info:
  title: OFAuth API
  version: 1.0.0
  description: >-
    OFAuth API including Account, Connections, Link, Access, Dynamic Rules,
    Vault+, and Realtime webhook contracts
  contact:
    email: support@ofauth.com
    url: https://ofauth.com/
servers:
  - url: https://api.ofauth.com
security:
  - ApiKey: []
tags:
  - name: Account
    description: Account management endpoints.
  - name: Connections
    description: Connection management endpoints.
  - name: Link
    description: Link authentication and session endpoints.
  - name: Access
    description: All Access related endpoints.
  - name: Analytics
    description: 'Access: charts, tops, and performance metrics.'
  - name: Earnings
    description: 'Access: earnings charts, transactions, and chargebacks.'
  - name: Messages
    description: 'Access: messaging, chats, queue, and mass messaging.'
  - name: Posts
    description: 'Access: create, edit, list, and manage posts.'
  - name: Promotions
    description: 'Access: promotions, trials, and bundles.'
  - name: Users
    description: 'Access: user profiles, subscriptions, and actions.'
  - name: Vault
    description: 'Access: vault folders, media, and management.'
  - name: Upload
    description: 'Access: media upload and processing.'
  - name: Self
    description: 'Access: authenticated account details and settings.'
  - name: Stories
    description: 'Access: stories listing and management.'
  - name: Subscriptions
    description: 'Access: subscription offers, discounts, and management.'
  - name: Realtime
    description: >-
      Realtime webhook delivery contracts, including relayed OnlyFans websocket
      events.
  - name: Dynamic Rules
    description: Dynamic signing rules operations.
  - name: Vault+
    description: Vault+ caching and management.
externalDocs:
  description: OFAuth Developer Documentation
  url: https://docs.ofauth.com
paths:
  /v2/access/promotions:
    post:
      tags:
        - Promotions
      summary: Create promotion
      description: >-
        Create one or more promotions using developer-friendly fields for target
        audience, discount, offer limit, and expiration.


        **Permission Required:** `promotions:write`
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                targetAudience:
                  type: string
                  enum:
                    - all_subscribers
                    - new_subscribers
                    - expired_subscribers
                  description: Audience that can claim the promotion.
                discount:
                  oneOf:
                    - type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - free_trial
                          description: Create a free-trial promotion
                        durationDays:
                          type: integer
                          minimum: 1
                          maximum: 30
                          description: >-
                            Duration of the free trial once accepted, in days
                            (1-30).
                      required:
                        - type
                        - durationDays
                    - type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - first_month_discount
                          description: Create a first-month discount promotion
                        percent:
                          type: integer
                          minimum: 5
                          maximum: 65
                          description: >-
                            First-month discount percentage. Options are 5-65 in
                            5% increments.
                          multipleOf: 5
                      required:
                        - type
                        - percent
                  description: Promotion discount configuration.
                offer:
                  type: object
                  properties:
                    limit:
                      type: integer
                      minimum: 0
                      maximum: 100
                      default: 0
                      description: >-
                        Offer limit: number of subscribers who can claim the
                        promotion (0-100). Use 0 for no limit.
                    expirationDays:
                      type: integer
                      minimum: 0
                      maximum: 30
                      default: 0
                      description: >-
                        Offer expiration in days (0-30). Use 0 for no
                        expiration.
                  default:
                    limit: 0
                    expirationDays: 0
                  description: Offer limits and expiration.
                message:
                  type: string
                  maxLength: 1000
                  default: ''
                  description: Optional promotion message.
              required:
                - targetAudience
                - discount
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: Promotion ID
                    message:
                      type: string
                      description: Rendered promotion message
                    rawMessage:
                      type: string
                      description: Original promotion message
                    hasRelatedPromo:
                      type: boolean
                      description: >-
                        True when OF created paired audience promotions from one
                        request
                    price:
                      type: number
                      description: Discounted subscription price in dollars
                    type:
                      type: string
                      enum:
                        - all
                        - expired
                      description: Promotion campaign audience returned by OnlyFans.
                    canClaim:
                      type: boolean
                      description: Whether the promotion can currently be claimed
                    claimsCount:
                      type: integer
                      minimum: 0
                      description: Number of claims so far
                    subscribeCounts:
                      type: integer
                      nullable: true
                      minimum: 0
                      description: Offer limit, or null for no limit
                    subscribeDays:
                      type: integer
                      minimum: 0
                      description: >-
                        Accepted promotion duration in days. OF can return 0 for
                        first-month discounts.
                    createdAt:
                      type: string
                      description: Creation timestamp returned by OF
                    finishedAt:
                      type: string
                      nullable: true
                      description: >-
                        Finish timestamp, or null for promotions without an
                        explicit end date
                    isFinished:
                      type: boolean
                      description: Whether the promotion has ended
                  required:
                    - id
                    - message
                    - rawMessage
                    - hasRelatedPromo
                    - price
                    - type
                    - canClaim
                    - claimsCount
                    - subscribeCounts
                    - subscribeDays
                    - createdAt
                    - finishedAt
                    - isFinished
                description: >-
                  Created promotions. OF returns one item per requested audience
                  type.
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '429':
          description: Rate Limit Exceeded
        '500':
          description: Internal Server Error
        '502':
          description: Bad Gateway
      security:
        - ApiKey: []
          ConnectionId: []
components:
  securitySchemes:
    ApiKey:
      type: apiKey
      name: apiKey
      in: header
      description: >-
        Your OFAuth [API key](/quickstart#2-copy-your-api-key) for
        authenticating requests.
    ConnectionId:
      type: apiKey
      name: x-connection-id
      in: header
      description: >-
        Requires a [connection](/guides/connections) via the x-connection-id
        header.

````