Optimizely Uploader API

The Uploader API from Optimizely — 4 operation(s) for uploader.

Operations 4

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /upload-url Get a presigned URL to upload a file · GET /upload-url #
Ask an LLM
“How do I get a presigned URL for uploading a single file?”
“How long is an upload URL valid before it expires?”
Tell an agent
Get a presigned upload URL for a file.
Give me a one-time upload URL and its meta fields for a single file.
POST /multipart-uploads Start a multipart upload for a large file · POST /v3/multipart-uploads #
Ask an LLM
“How do I upload a very large file in parts?”
“Can I choose the part size when starting a multipart upload?”
Tell an agent
Start a multipart upload for a file of {file_size} bytes.
Create multipart upload URLs for a {file_size}-byte file split into {part_size}-byte parts.
GET /multipart-uploads/{id}/status Check a multipart upload's status · GET /v3/multipart-uploads/{id}/status #
Ask an LLM
“How do I check the progress of a multipart upload?”
“Has my large-file multipart upload finished processing yet?”
Tell an agent
Get the status of multipart upload {id}.
Check whether multipart upload {id} is complete.
POST /multipart-uploads/{id}/complete Finish a multipart upload · POST /v3/multipart-uploads/{id}/complete #
Ask an LLM
“What do I call after all parts of a large file are uploaded?”
“Can I finalize a multipart upload once every part is in?”
Tell an agent
Complete multipart upload {id}.
Finalize multipart upload {id} now that all parts are uploaded.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/optimizely:optimizely-uploader-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

optimizely-uploader-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: V3
  title: Optimizely CMP Open API Documentation Uploader API
servers:
- url: https://api.cmp.optimizely.com/v3
  description: v3 version of Optimizely CMP Open API
security:
- OAuth2:
  - openid
  - profile
  - offline_access
tags:
- name: Uploader
paths:
  /upload-url:
    get:
      operationId: getUploadUrl
      tags:
      - Uploader
      summary: GET /upload-url
      description: Get a presigned URL and related meta fields to upload a file. **The validity time for this URL is 60 minutes**.
      responses:
        '200':
          description: Fetched presigned upload URL and related meta fields
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  url:
                    description: Presigned URL to use for uploading a file with an **HTTP POST** request as `multipart/form-data`
                    type: string
                    example: https://cmp-files.s3-accelerate.amazonaws.com/
                  upload_meta_fields:
                    description: Related meta fields to upload a file. **Items within this field must be sent along as paylod of the POST request, along with the file, to the presigned upload URL**
                    type: object
                    additionalProperties: false
                    properties:
                      key:
                        description: Unique identifier of the file. **This key will be needed for various file / attachment addition to different CMP resources using endpoints e.g. `POST /v3/assets`, `POST /v3/campaigns/{id}/attachments` etc.**
                        type: string
                        example: ce8995aea58b11ea8cd90242ac120005
                      policy:
                        type: string
                        example: eyJleHBpcmF0aW9uIjogIjIwMjAtMDYtMDNUMTY6MTc6NTbbbbbbImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAibmV3c2NyZWQtY21wLWZpbGVzIn0sIHsia2V5IjogIjY3Y2NhMzcxYTVhZDExZWFiNDNhMGExMjlmMDhlZWQ5In0sIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFTSUFVTlVMQkwzV082RDdSWkZILzIwMjAwNjAzL3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1kYXRlIjogIjIwMjAwNjAzVDE1MTc1N1oifSwgeyJ4LWFtei1zZWN1cml0eS10b2tlbiI6ICJJUW9KYjNKcFoybHVYMlZqRUE4YUNYVnpMV1ZoYzNRdE1TSkhNRVVDSUQrc2FrelZIK05zN0Z4UmtsaW9CZFdldjdZRXlIcHBoVjEyNnRsL0ZadjNBaUVBODFOV1l5TUt1L0UvZ1FyaUlhaVhMaXpxSFFuNnlxTWlWSzQzeU9xYTUaaaaaaU1JZHhBQUdnd3pNRFF4TmpBMU16QXhOVFlpRERxMlN3dVJTR2ZGL2hGRXpDcVJBMlo4NmpkRzNQczMzY3c5bFpFeVBpbmdWSnV0WUQ0RXZuU291NFR1NG9WaGhEZUwyS0QxdFREZmMrNHJmVWRMQ2Y1SWpzb3VRYldMekIzczRXZ2xMQUJFOFJ0VUM5K0o1bVpJUTlYNzJVa0xOUjA0UURpVlliSjdxNS95S25VNUFSZWUzQXdqVHp3UWZPS3dsTnRFODYyVWo4MXlWbDhMdS81d3kwaU5hZFpvbkZPcVBONldJWURpdi9MVzlLKzhWNjRNS2E5bDhtcG1kVll3RWJ2dTRiMENJVFIxQ0tjUHlzVkFNODBKdnZ0aklvQTZXc3RDcWxiM0ZHZEFGVmlnaDdId3JKL3greFNZVU5YVzFvaFNlUExDNXFPSCtoZ2ZqRFVOSDMvbXhEV2V4dWhQbDFGSjF6VlpZQzBMY2U0Y1F6dEtPbTgzZFBqcWI4a09pQVBUWVB3MGFmYnl0QUQyVE8vTmhZdHlvU1BzL0xWS1FYWXhyYk5MZ3N6azRMUjdLeUEydlA5NkJRMll6aVhnWDhTTm13bklDcWRiY2dzZitvNnBWOXRlTlJIczdIS3N2Qm9HYVFESTVhUDQrcmQ1K0h0aWM3RUZqSDlDUkk1bnBpL3cvTVlodkc0dXljWDR4cEJSeE5iSURWbFpuYTBEaUkvVkxmV3JjOWtkUFBhdm10QVhtVHR1U2c4aFFVMnNzMSt0dEJqaE1NRGkzdllGT3VzQnJEMDMyc1BlMWx0QUNRSzlVQUxEUmFYT2VIWjNXbThTVjZlMTErWVhnd3JKZkloQlp2a053OGxHdkRuN2FSK2hXUkpPazljY3pHOC9DTzRqZk8xVlpkZ3N2YU5PaEhpc01sQXVOMVJXallXUGJWRkRoajV3ekZ0OTQrcmJwdFd3dk9vamtXVElUM0o5SWtSNTF6SWJhc1VqTW4rOHRiSjFJbHJnWVFOaDVaaUVPTGZ1bFVHZWl1L2xXdERFbFhKUy9sS0pUTnV1YU1DRnU0NnBocTlvVE9EMWtmSVYrUEFxZEZYV2xQbVZKK3lXeGRLellSV1creDdERjJ6dnZmZm1nc0JBWU01eDh6aEJ3YWIrSXkvTGR6eWdQVUFnaTFTUE9oSktFRjNBejU4aVArdGFDbUxhdmo5cGFRPT0ifV19
                      x-amz-algorithm:
                        type: string
                        example: AWS4-HMAC-SHA256
                      x-amz-credential:
                        type: string
                        example: REDACTED_AWS_ACCESS_KEY_ID/20343603/us-east-1/s3/aws4_request
                      x-amz-date:
                        type: string
                        example: 20200603T151757Z
                      x-amz-security-token:
                        type: string
                        example: IQoJb3JpZ2luX2VjEA8ccccccWVhc3QtMSJHMEUCID+sakzVH+Ns7FxRklioBdWev7YEyHpphV126tl/FZv3AiEA81NWYyMKu/E/gQriIaiXLizqHQn6yqMiVK43yOqa52AqtAMIdxAAGgwzMDQxNjA1MzAxNTYiDDq2SwuRSGfFddddddqRA2Z86jdG3Ps33cw9lZEyPingVJutYD4EvnSou4Tu4oVhhDeL2KD1tTDfc+4rfUdLCf5IjsouQbWLzB3s4WglLABE8RtUC9+J5mZIQ9X72UkLNR04QDiVYbJ7q5/yKnU5ARee3AwjTzwQfOKwlNtE862Uj81yVl8Lu/5wy0iNadZonFOqPN6WIYDiv/LW9K+8V64MKa9l8mpmdVYwEbvu4b0CITR1CKcPysVAM80JvvtjIoA6WstCqlb3FGdAFVigh7HwrJ/x+xSYUNXW1ohSePLC5qOH+hgfjDUNH3/mxDWexuhPl1FJ1zVZYC0Lce4cQztKOm83dPjqb8kOiAPTYPw0afbytAD2TO/NhYtyoSPs/LVKQXYxrbNLgszk4LR7KyA2vP96BQ2YziXgX8SNmwnICqdbcgsf+o6pV9teNRHs7HKsvBoGaQDI5aP4+rd5+Htic7EFjH9CRI5npi/w/MYhvG4uycX4xpBRxNbIDVlZna0DiI/VLfWrc9kdPPavmtAXmTtuSg8hQU2ss1+ttBjhMMDi3vYFOusBrD032sPe1ltACQK9UALDRaXOeHZ3Wm8SV6e11+YXgwrJfIhBZvkNw8lGvDn7aR+hWRJOk9cczG8/CO4jfO1VZdgsvaNOhHisMlAuN1RWjYWPbVFDhj5wzFt94+rbptWwvOojkWTIT3J9IkR51zIbasUjMn+8tbJ1IlrgYQNh5ZiEOLfulUGeiu/lWtDElXJS/lKJTNuuaMCFu46phq9oTOD1kfIV+PAqdFXWlPmVJ+yWxdKzYRWW+x7DF2zvvffmgsBAYM5x8zhBwab+Iy/LdzygPUAgi1SPOhJKEF3Az58iP+taCmLavj9paQ==
                      x-amz-signature:
                        type: string
                        example: 0e67ede744d4aed62aaaaaa8e87648b3e98a3e611ccccccc89963bcf70bd02f9
                    required:
                    - key
                    - policy
                    - x-amz-algorithm
                    - x-amz-credential
                    - x-amz-date
                    - x-amz-signature
                required:
                - url
                - upload_meta_fields
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /multipart-uploads:
    post:
      operationId: createMultipartUpload
      tags:
      - Uploader
      summary: POST /v3/multipart-uploads
      description: Experimental Create pre-signed URLs for multipart upload of large files
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_size:
                  type: integer
                  description: Size of the file in bytes
                  minimum: 1
                  maximum: 5497558138880
                  example: 104857600
                part_size:
                  type: integer
                  description: The size of each part of the file to be uploaded. The size of the last part can be smaller and hence can be ignored. `upload_part_count` is calculated based on `file_size` and `part_size`. **The maximum allowed `upload_part_count` is 10000.** So use larger `part_size` for larger files to keep `upload_part_count` under 10000.
                  default: 5242880
                  minimum: 5242880
                  maximum: 5368709120
                  example: 6000000
              required:
              - file_size
      responses:
        '201':
          description: Successful operation
          headers:
            Content-Encoding:
              schema:
                type: string
                enum:
                - gzip
                description: Response is always gzip compressed
              example: gzip
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: ID of the multipart upload
                    example: abcdef1234567890
                  expires_at:
                    type: string
                    format: date-time
                    description: Expiration time of the upload URLs
                    example: '2025-03-03T12:00:00Z'
                  upload_part_count:
                    type: integer
                    description: Number of parts for the upload
                    example: 10
                  upload_part_urls:
                    type: array
                    items:
                      type: string
                      format: uri
                    description: Array of pre-signed URLs for each part. **Each file part must be uploaded to the URL using PUT requests following the order of the URLs**
                    example:
                    - https://s3.amazonaws.com/xyz/abcdef1234567890/0
                    - https://s3.amazonaws.com/xyz/abcdef1234567890/1
                  links:
                    type: object
                    properties:
                      complete:
                        type: string
                        format: uri
                        description: URL to complete the upload
                        example: https://api.cmp.optimizely.com/v3/multipart-uploads/abcdef1234567890/complete
                      status:
                        type: string
                        format: uri
                        description: URL to check the upload status
                        example: https://api.cmp.optimizely.com/v3/multipart-uploads/abcdef1234567890/status
                    required:
                    - complete
                    - status
                required:
                - id
                - expires_at
                - upload_part_count
                - upload_part_urls
                - links
        '400':
          $ref: '#/components/responses/ClientError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /multipart-uploads/{id}/status:
    get:
      operationId: getMultipartUploadStatus
      tags:
      - Uploader
      summary: GET /v3/multipart-uploads/{id}/status
      description: Experimental Retrieve the current status of a multipart upload
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: ID of the multipart upload to check status for
        example: abcdef1234567890
      responses:
        '200':
          description: Successfully retrieved upload status
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: ID of the multipart upload
                    example: abcdef1234567890
                  key:
                    type: string
                    description: Unique identifier of the file combining all parts. **This key will be needed for various file / attachment addition to different CMP resources using endpoints e.g. `POST /v3/assets`, `POST /v3/campaigns/{id}/attachments` etc.**
                    example: ce8995aea58b11ea8cd90242ac120005/abcdef1234567890
                  status:
                    type: string
                    enum:
                    - UPLOAD_COMPLETION_NOT_STARTED
                    - UPLOAD_COMPLETION_IN_PROGRESS
                    - UPLOAD_COMPLETION_SUCCEEDED
                    - UPLOAD_COMPLETION_FAILED
                    description: Current status of the upload
                    example: UPLOAD_COMPLETION_IN_PROGRESS
                  status_message:
                    type:
                    - string
                    - 'null'
                    description: Detailed status message
                    example: Some error message related to the status
                  expires_at:
                    type: string
                    format: date-time
                    description: Expiration time of the upload
                    example: '2025-03-03T12:00:00Z'
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                        format: uri
                        description: URL to this status endpoint
                        example: https://api.cmp.optimizely.com/v3/multipart-uploads/abcdef1234567890/status
                    required:
                    - self
                required:
                - id
                - key
                - status
                - status_message
                - expires_at
                - links
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /multipart-uploads/{id}/complete:
    post:
      operationId: completeMultipartUpload
      tags:
      - Uploader
      summary: POST /v3/multipart-uploads/{id}/complete
      description: Experimental Initiate completion of a multipart upload after all parts have been uploaded
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: ID of the multipart upload to complete
        example: abcdef1234567890
      responses:
        '202':
          description: Upload completion initiated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  key:
                    type: string
                    description: Unique identifier of the file combining all parts. **This key will be needed for various file / attachment addition to different CMP resources using endpoints e.g. `POST /v3/assets`, `POST /v3/campaigns/{id}/attachments` etc.**
                    example: ce8995aea58b11ea8cd90242ac120005/abcdef1234567890
                  links:
                    type: object
                    properties:
                      status:
                        type: string
                        format: uri
                        description: URL to check upload status
                        example: https://api.cmp.optimizely.com/v3/multipart-uploads/abcdef1234567890/status
                    required:
                    - status
                required:
                - key
                - links
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
components:
  responses:
    NotFound:
      description: Not found error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Resource not found
    ClientError:
      description: Client error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: 'Unsupported arguments: a,b,c'
    UnprocessableEntity:
      description: Unprocessable entity error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Resource cannot be processed
    Unauthorized:
      description: Authorization error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Unauthorized
    Forbidden:
      description: Permission error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: You do not have the permission to perform this operation
  schemas:
    Error:
      type: object
      additionalProperties: true
      description: Error payload
      properties:
        message:
          type: string
          description: Message describing the error
          example: Not found
        errors:
          type: object
          description: Additional information
          additionalProperties: true
          properties: {}
      required:
      - message
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/auth
          tokenUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/token
          scopes:
            openid: Grants the ability to receive a unique identifier for the user.
            profile: Grants access to user profile information.
            offline_access: Grants the ability to refresh access_token using the refresh token even when user is not present (not logged in).
        clientCredentials:
          tokenUrl: https://accounts.cmp.optimizely.com/o/oauth2/v1/token
          scopes: {}
x-tagGroups:
- name: API
  tags:
  - Uploader
  - Library
  - Labels
  - Brand Compliance
  - Tasks
  - Task Step
  - Campaigns
  - Publishing
  - Templates
  - Users
  - Work Requests
  - Structured Contents
  - Assets
  - Milestones
  - Teams
  - Settings
  - Workflows
  - Fields
  - Events