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

# Get signed URLs for a range of upload parts

> Return presigned URLs for a contiguous range of part numbers in a single request, for a creator's media upload session.

Prefer this over `GET /creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/{partNumber}/url`
for anything but a single-part retry: one call covers a whole upload (up to 256
parts, the maximum a file of the supported size can have), and costs one request against your rate
limit instead of one per part.

URLs are signed when the request is served and are valid for a limited time, so for a slow upload
request the range you are about to send rather than the whole file up front.

> [!NOTE]
>
> **Required scopes**
>
> * `write:creator` — Modify creator profiles, settings, and creator-specific data.
> * `write:media` — Upload, modify, and manage media files and content assets. Also required for vault folder management.


## OpenAPI

````yaml /openapi-v1.json get /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/urls
openapi: 3.1.0
info:
  title: Fanvue API
  version: '0.1'
servers:
  - url: https://api.fanvue.com
security: []
paths:
  /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/urls:
    get:
      summary: Get signed URLs for a range of upload parts
      description: >-
        Return presigned URLs for a contiguous range of part numbers in a single
        request, for a creator's media upload session.


        Prefer this over `GET
        /creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/{partNumber}/url`

        for anything but a single-part retry: one call covers a whole upload (up
        to 256

        parts, the maximum a file of the supported size can have), and costs one
        request against your rate

        limit instead of one per part.


        URLs are signed when the request is served and are valid for a limited
        time, so for a slow upload

        request the range you are about to send rather than the whole file up
        front.
      operationId: getCreatorUploadPartUrls
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - schema:
            type: string
            format: uuid
          required: true
          name: creatorUserUuid
          in: path
        - schema:
            type: string
          required: true
          name: uploadId
          in: path
        - schema:
            type: integer
            exclusiveMinimum: 0
            default: 1
            description: First part number to sign, 1-based.
            example: 1
          required: false
          description: First part number to sign, 1-based.
          name: from
          in: query
        - schema:
            type: integer
            exclusiveMinimum: 0
            description: >-
              Last part number to sign, inclusive. Must not be lower than
              `from`, and no higher than 256 — a part beyond the maximum
              supported file size is refused with 413, as on the single-part
              route.
            example: 161
          required: true
          description: >-
            Last part number to sign, inclusive. Must not be lower than `from`,
            and no higher than 256 — a part beyond the maximum supported file
            size is refused with 413, as on the single-part route.
          name: to
          in: query
      responses:
        '200':
          description: Signed URLs for the requested parts
          content:
            application/json:
              schema:
                type: object
                properties:
                  partSize:
                    type: integer
                    description: >-
                      Size in bytes of every part except the final one (which
                      may be smaller).
                  parts:
                    type: array
                    items:
                      type: object
                      properties:
                        partNumber:
                          type: integer
                        url:
                          type: string
                          format: uri
                      required:
                        - partNumber
                        - url
                    description: >-
                      Signed URLs in ascending part order, one per part in the
                      requested range.
                required:
                  - partSize
                  - parts
              example:
                partSize: 6291456
                parts:
                  - partNumber: 1
                    url: >-
                      https://s3.amazonaws.com/fanvue-uploads/media/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a?partNumber=1&uploadId=abc123XYZ789multipart&X-Amz-Signature=...
                  - partNumber: 2
                    url: >-
                      https://s3.amazonaws.com/fanvue-uploads/media/d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a?partNumber=2&uploadId=abc123XYZ789multipart&X-Amz-Signature=...
        '400':
          description: Bad Request - API version not supported OR validation failed
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/UnsupportedVersionError'
                  - $ref: '#/components/schemas/ValidationError'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '410':
          $ref: '#/components/responses/SunsetVersionResponse'
        '413':
          description: Requested a part beyond the maximum supported file size
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - error
                  - message
        '429':
          $ref: '#/components/responses/RateLimitResponse'
      security:
        - BearerAuth:
            - write:creator
            - write:media
components:
  parameters:
    ApiVersionHeader:
      name: X-Fanvue-API-Version
      in: header
      required: true
      schema:
        type: string
        default: '2025-06-26'
        example: '2025-06-26'
      description: API version to use for the request
  schemas:
    UnsupportedVersionError:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
      required:
        - error
        - message
      description: API version not supported
    ValidationError:
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
      required:
        - errors
      description: Request validation failed
  responses:
    UnauthorizedResponse:
      description: Unauthorized Response
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
            required:
              - error
    NotFoundResponse:
      description: Not Found Response
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
            required:
              - message
    SunsetVersionResponse:
      description: API version no longer supported (sunset)
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
              message:
                type: string
              nextVersion:
                type: string
            required:
              - error
              - message
    RateLimitResponse:
      description: Too many requests - rate limit exceeded
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying the request
          schema:
            type: integer
        X-RateLimit-Limit:
          description: The maximum number of requests allowed in the current window
          schema:
            type: integer
        X-RateLimit-Remaining:
          description: The number of requests remaining in the current window
          schema:
            type: integer
        X-RateLimit-Reset:
          description: The Unix timestamp (seconds) when the rate limit window resets
          schema:
            type: integer
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
            required:
              - error
  securitySchemes:
    BearerAuth:
      type: oauth2
      description: >-
        OAuth 2.0 access token, presented as a JWT bearer token in the
        `Authorization` header. Obtain a token via the authorization-code flow;
        the scopes granted to the token determine which operations it may call.
      flows:
        authorizationCode:
          authorizationUrl: https://auth.fanvue.com/oauth2/auth
          tokenUrl: https://auth.fanvue.com/oauth2/token
          refreshUrl: https://auth.fanvue.com/oauth2/token
          scopes:
            read:self: >-
              Access your own user profile information, including basic account
              details and settings.
            read:chat: >-
              Read chat conversations, messages, and chat-related data. This
              includes viewing chat lists and message history.
            write:chat: >-
              Create new chats and send messages. This scope is required for any
              chat-related actions that modify data.
            read:experience: >-
              Exchange a fan's experience token for the resolved experience and
              the fan's identity, so an embedded fan-facing experience can
              render the right content.
            write:experience: >-
              Request that the creator publish or unpublish a fan-facing
              experience. The app mints a request token; the creator confirms
              and Fanvue performs the change.
            read:fan: Access fan-related data and information within the platform.
            read:post: Read posts, including post details, comments, likes, and tips.
            write:post: Create, edit, and manage posts and content on behalf of users.
            read:media: Access media files, images, videos, and other content assets.
            write:media: >-
              Upload, modify, and manage media files and content assets. Also
              required for vault folder management.
            read:creator: >-
              Access creator profiles, content, and creator-specific
              information.
            write:creator: Modify creator profiles, settings, and creator-specific data.
            read:insights: >-
              Access analytics, metrics, and insights data for performance
              tracking.
            read:tracking_links: >-
              Read tracking links and the users associated with them, including
              per-user tracking metadata.
            write:tracking_links: Create and delete tracking links.
            read:agency: Read agency information, including the agency's team members.
            write:agency: >-
              Manage agency team members and invites, including inviting new
              team members and creators.

````

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