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

# Update promotion

> Update an existing promotion

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



## OpenAPI

````yaml https://api.ofauth.com/openapi.json put /v2/access/promotions/:promotionId
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/:promotionId:
    put:
      tags:
        - Promotions
      summary: Update promotion
      description: |-
        Update an existing promotion

        **Permission Required:** `promotions:write`
      parameters:
        - schema:
            type: string
            nullable: true
            minLength: 1
            description: Promotion ID
          required: false
          description: Promotion ID
          name: promotionId
          in: path
      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
                      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
                      description: >-
                        Offer expiration in days (0-30). Use 0 for no
                        expiration.
                  description: Offer limits and expiration.
                message:
                  type: string
                  maxLength: 1000
                  description: Optional promotion message.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                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
        '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.

````