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

# Upload extension

> Upload an extension ZIP using multipart file and name fields. The response returns uuid at the top level. Load it through extensions on a browser start request. Limits are 100 uploads per account and 5 extensions per browser.



## OpenAPI

````yaml /api-reference/openapi.json post /extensions
openapi: 3.1.0
info:
  title: Surfsky API
  version: 0.1.0
  description: >-
    Start cloud browsers, control them through CDP, and manage the profiles,
    proxies, and fingerprints they run with.
servers:
  - url: '{baseUrl}'
    variables:
      baseUrl:
        default: https://YOUR_API_HOST
        description: API base URL from your Surfsky dashboard, including https://.
security:
  - ApiToken: []
tags:
  - name: profiles
    description: >-
      Start, stop, and manage browsers. A one-time profile is discarded when it
      stops; a persistent profile keeps its cookies, storage, and fingerprint
      according to its storage settings.
  - name: proxies
    description: >-
      Look up what the premium and shared pools can offer before you pin a
      location, and read your traffic quota.
  - name: fingerprints
    description: >-
      The value sets a fingerprint field accepts. Use these to pin a renderer,
      screen, or device model instead of guessing at a string.
  - name: extensions
    description: Upload Chrome extensions once and load them into any browser you start.
  - name: captcha
    description: Balance on the CAPTCHA solver behind your account.
paths:
  /extensions:
    post:
      tags:
        - extensions
      summary: Upload extension
      description: >-
        Upload an extension ZIP using multipart file and name fields. The
        response returns uuid at the top level. Load it through extensions on a
        browser start request. Limits are 100 uploads per account and 5
        extensions per browser.
      operationId: upload_extension_extensions_post
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_upload_extension_extensions_post'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExtensionUploadResponse'
        '401':
          description: Missing or invalid API token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Account or feature access denied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
components:
  schemas:
    Body_upload_extension_extensions_post:
      properties:
        file:
          type: string
          contentMediaType: application/octet-stream
          title: File
        name:
          type: string
          title: Name
      type: object
      required:
        - file
        - name
      title: Body_upload_extension_extensions_post
    ExtensionUploadResponse:
      properties:
        uuid:
          type: string
          title: Uuid
        name:
          type: string
          title: Name
        message:
          type: string
          title: Message
      type: object
      required:
        - uuid
        - name
        - message
      title: ExtensionUploadResponse
    ApiError:
      type: object
      properties:
        success:
          type: boolean
          const: false
        msg:
          type: string
        code:
          type: string
        data: {}
        detail: {}
        error: {}
      description: >-
        Error fields vary for forwarded responses. Check HTTP status and code
        when present.
  securitySchemes:
    ApiToken:
      type: apiKey
      in: header
      name: X-Cloud-Api-Token
      description: API token from your dashboard.

````