Simplo Uploads API

The Uploads API from Simplo — 2 operation(s) for uploads.

GitHub OpenAPI

Operations 2

POST /uploads/{token} Upload a file to an upload link #

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/getsimplo-ai:getsimplo-ai-uploads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

getsimplo-ai-uploads-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Simplo Uploads API
  version: 1.0.0
servers:
- url: https://api.getsimplo.ai/v1
security:
- apiKey: []
tags:
- name: Uploads
paths:
  /uploads:
    post:
      operationId: createUploadLink
      summary: Create an upload link
      description: For a file you have on disk and no public URL for. Returns a single-use uploadUrl that takes one file for the project for 15 minutes (24 hours with forPerson), and an uploadId. Opened in a browser, uploadUrl shows a page where a person can drop the file. POST the file to uploadUrl as multipart/form-data in the file field (no API key needed; the link is the credential), then pass uploadId to Create a post or Edit a post. A video is an MP4 or MOV up to 100 MB, a picture a JPEG or PNG up to 5 MB. A file no post uses within 24 hours is deleted.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                projectId:
                  type: string
                  description: The project the file is for.
                kind:
                  type: string
                  enum:
                  - video
                  - image
                  description: video for a video post, image for a picture.
                forPerson:
                  description: 'true when a person will open uploadUrl in a browser, where it shows a page to drop the file on: the link then lasts 24 hours instead of 15 minutes.'
                  type: boolean
              required:
              - projectId
              - kind
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadId:
                    type: string
                  kind:
                    type: string
                    enum:
                    - video
                    - image
                  uploadUrl:
                    type: string
                    description: POST the file here, once, before expiresAt.
                  expiresAt:
                    type: string
                  maxBytes:
                    type: number
                  accepts:
                    type: string
                required:
                - uploadId
                - kind
                - uploadUrl
                - expiresAt
                - maxBytes
                - accepts
                additionalProperties: false
        '400':
          description: 'The request is not valid. Error code: validation_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing or invalid API key. Error code: invalid_api_key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Not allowed. Error code: subscription_inactive.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Not found. Error code: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Too many requests. Error code: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
        '500':
          description: 'Something went wrong on our side. Error code: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Uploads
  /uploads/{token}:
    post:
      operationId: uploadFile
      summary: Upload a file to an upload link
      description: 'Send the file as multipart/form-data in the file field, e.g. curl -F "file=@reel.mp4" . No API key: the link from Create an upload link is the credential, takes one file, and expires 15 minutes after it was made (24 hours for a link made with forPerson). Opened in a browser (GET), the same URL shows a page where a person can drop the file. A refused file (wrong type, too large) leaves the link usable until then. Answers with the uploadId and the hosted file.'
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The video (MP4 or MOV, up to 100 MB) or picture (JPEG or PNG, up to 5 MB) the link was made for
              required:
              - file
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadId:
                    type: string
                    description: Pass to Create a post or Edit a post as uploadId.
                  kind:
                    type: string
                    enum:
                    - video
                    - image
                  status:
                    type: string
                    enum:
                    - waiting
                    - uploading
                    - ready
                  expiresAt:
                    type: string
                    description: When the link stops taking a file.
                  video:
                    description: The hosted video, for a video upload.
                    type: object
                    properties:
                      url:
                        type: string
                      coverUrl:
                        type: string
                      durationSeconds:
                        type: number
                      width:
                        type: number
                      height:
                        type: number
                      bytes:
                        type: number
                    required:
                    - url
                    - coverUrl
                    - durationSeconds
                    - width
                    - height
                    - bytes
                    additionalProperties: false
                  imageUrl:
                    description: The hosted picture, for an image upload.
                    type: string
                required:
                - uploadId
                - kind
                - status
                - expiresAt
                additionalProperties: false
        '400':
          description: 'The request is not valid. Error code: validation_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Not allowed. Error code: subscription_inactive.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Not found. Error code: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: 'Conflict with the current state. Error code: conflict.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '410':
          description: 'Gone. Error code: upload_link_invalid.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: 'Payload too large. Error code: file_too_large.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Too many requests. Error code: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
        '500':
          description: 'Something went wrong on our side. Error code: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: 'A platform or AI provider failed. Error code: upstream_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security: []
      tags:
      - Uploads
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              enum:
              - invalid_api_key
              - forbidden
              - not_found
              - validation_error
              - invalid_schedule_time
              - platform_not_available
              - already_published
              - publishing_in_progress
              - conflict
              - idempotency_key_reused
              - idempotency_in_progress
              - insufficient_credits
              - subscription_inactive
              - video_too_large
              - file_too_large
              - upload_link_invalid
              - rate_limited
              - upstream_error
              - internal_error
              description: A stable machine-readable code, e.g. validation_error.
            message:
              type: string
              description: A human-readable explanation.
            details:
              description: Extra context, such as the failing fields of a validation_error.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: smp_live_… key from Settings → API keys
x-provenance:
  method: harvested
  publisher: Simplo
  source: https://getsimplo.ai/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)