Simplo Uploads API
The Uploads API from Simplo — 2 operation(s) for uploads.
The Uploads API from Simplo — 2 operation(s) for uploads.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/getsimplo-ai:getsimplo-ai-uploads-api"
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.
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: 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)