Freepik Uploads API
The uploads API from Freepik — 2 operation(s) for uploads.
The uploads API from Freepik — 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/freepik:freepik-uploads-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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:
description: The Magnific API is your gateway to a vast collection of high-quality digital resources for your applications and projects. As a leading platform, it offers a wide range of graphics, including vectors, photos, illustrations, icons, PSD templates, and more, all curated by talented designers from around the world.
title: Magnific Uploads API
version: 1.0.0
servers:
- description: B2B API Production V1
url: https://api.magnific.com
security:
- magnificApiKey: []
tags:
- name: Uploads
paths:
/v1/ai/uploads/request-url:
post:
description: 'Request one or more pre-signed URLs to upload your own files (image, video or audio) and reference them in other AI endpoints.
Flow:
1. Call this endpoint with the `content_type` of each file. You get, per file, an `upload_url` (pre-signed PUT), an opaque `file_id`, and a readable `asset_url`.
2. PUT the raw file bytes to each `upload_url`, including ALL the returned `headers`. The `upload_url` expires quickly (`expires_in`).
3. Reference the upload by `file_id` (preferred on AI endpoints) or by `asset_url` (a plain URL usable anywhere a URL is accepted).'
operationId: create_upload_urls
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/upload-request-body'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/upload-response'
description: OK - Pre-signed upload URLs generated.
'400':
$ref: '#/components/responses/400-bad-request'
'401':
$ref: '#/components/responses/401-unauthorized'
'500':
$ref: '#/components/responses/500-internal-server-error'
'503':
$ref: '#/components/responses/503-service-unavailable'
summary: Request pre-signed URLs to upload files
tags:
- Uploads
/v1/ai/uploads:
get:
description: Lists the files you have uploaded, each identified by its opaque `file_id`, with size and expiration metadata plus a freshly-signed readable `asset_url`.
operationId: get_uploads
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/upload-list-response'
description: OK - The list of uploaded files.
'401':
$ref: '#/components/responses/401-unauthorized'
'500':
$ref: '#/components/responses/500-internal-server-error'
'503':
$ref: '#/components/responses/503-service-unavailable'
summary: List your uploaded files
tags:
- Uploads
components:
schemas:
inline_object:
example:
message: message
properties:
message:
type: string
type: object
upload-request-body:
properties:
files:
description: List of files to generate upload URLs for
items:
$ref: '#/components/schemas/upload-file-request'
maxItems: 14
minItems: 1
type: array
required:
- files
type: object
inline_object_3:
example:
message: Service Unavailable. Please try again later.
properties:
message:
example: Service Unavailable. Please try again later.
type: string
type: object
upload-list-item:
example:
size_bytes: 0
expires_at: 2000-01-23 04:56:07+00:00
content_type: content_type
file_id: upl_a1b2c3d4e5f6
ttl_seconds: 6
created_at: 2000-01-23 04:56:07+00:00
asset_url: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
asset_url_expires_in: 86400
properties:
file_id:
description: Opaque identifier of the uploaded file. Use this value in reference_images, image_url, video_url, or similar fields.
example: upl_a1b2c3d4e5f6
type: string
content_type:
description: MIME type of the file
type: string
size_bytes:
description: File size in bytes
type: integer
created_at:
description: Upload timestamp
format: date-time
type: string
expires_at:
description: Expiration timestamp (based on bucket lifecycle)
format: date-time
type: string
ttl_seconds:
description: Seconds until the file becomes eligible for auto-deletion (bucket lifecycle). Deletion is eventual, so the file may persist a little past this.
type: integer
asset_url:
description: Readable URL for the file (image, video or audio), serving the original file. A fresh URL is signed on each listing and stays valid for about a day (asset_url_expires_in); an expired URL returns 403, so just list again to get a new one. Once the file itself is deleted (see ttl_seconds) no URL works. Use it as image_url/video_url/audio_url/reference in any endpoint that accepts a URL. Prefer file_id on AI endpoints when available.
example: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
format: uri
type: string
asset_url_expires_in:
description: Seconds until asset_url expires (counted from this listing response).
example: 86400
type: integer
type: object
inline_object_1_problem_invalid_params_inner:
properties:
name:
description: Name of the invalid parameter.
example: page
type: string
field:
description: Field of the invalid parameter. Mirrors `name`.
example: page
type: string
reason:
example: Parameter 'page' must be greater than 0
type: string
required:
- field
- name
- reason
type: object
inline_object_1:
properties:
problem:
$ref: '#/components/schemas/inline_object_1_problem'
type: object
upload-file-request:
properties:
content_type:
$ref: '#/components/schemas/upload-content-type'
required:
- content_type
type: object
upload-list-response:
example:
files:
- size_bytes: 0
expires_at: 2000-01-23 04:56:07+00:00
content_type: content_type
file_id: upl_a1b2c3d4e5f6
ttl_seconds: 6
created_at: 2000-01-23 04:56:07+00:00
asset_url: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
asset_url_expires_in: 86400
- size_bytes: 0
expires_at: 2000-01-23 04:56:07+00:00
content_type: content_type
file_id: upl_a1b2c3d4e5f6
ttl_seconds: 6
created_at: 2000-01-23 04:56:07+00:00
asset_url: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
asset_url_expires_in: 86400
properties:
files:
items:
$ref: '#/components/schemas/upload-list-item'
type: array
required:
- files
type: object
upload-response:
example:
files:
- headers:
Content-Type: image/png
x-goog-content-length-range: 0,1073741824
file_id: upl_a1b2c3d4e5f6
upload_url: https://openapi-generator.tech
asset_url: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
expires_in: 120
asset_url_expires_in: 86400
- headers:
Content-Type: image/png
x-goog-content-length-range: 0,1073741824
file_id: upl_a1b2c3d4e5f6
upload_url: https://openapi-generator.tech
asset_url: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
expires_in: 120
asset_url_expires_in: 86400
properties:
files:
items:
$ref: '#/components/schemas/upload-file-response'
type: array
required:
- files
type: object
inline_object_1_problem:
properties:
message:
example: Validation error
type: string
invalid_params:
items:
$ref: '#/components/schemas/inline_object_1_problem_invalid_params_inner'
type: array
required:
- invalid_params
- message
type: object
upload-file-response:
example:
headers:
Content-Type: image/png
x-goog-content-length-range: 0,1073741824
file_id: upl_a1b2c3d4e5f6
upload_url: https://openapi-generator.tech
asset_url: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
expires_in: 120
asset_url_expires_in: 86400
properties:
upload_url:
description: Pre-signed URL for PUT upload. Send the raw file bytes including ALL the headers returned in 'headers'.
format: uri
type: string
file_id:
description: Opaque identifier of the uploaded file. Use this value in reference_images, image_url, video_url, or similar fields. It is NOT a URL and can only be used through the API by the same user that uploaded it.
example: upl_a1b2c3d4e5f6
type: string
headers:
additionalProperties:
type: string
description: Headers that MUST be included in the PUT request (they are part of the URL signature).
example:
Content-Type: image/png
x-goog-content-length-range: 0,1073741824
type: object
expires_in:
description: Seconds until the upload_url expires
example: 120
type: integer
asset_url:
description: Readable URL for the uploaded file (image, video or audio), serving the original file. Valid once the PUT to upload_url completes. Use it as image_url/video_url/audio_url/reference in any endpoint that accepts a URL. Prefer file_id on AI endpoints when available.
example: https://cdn-magnific.freepik.com/uploads/109580722/upl_img_a1b2c3?token=exp=1783147635~hmac=...
format: uri
type: string
asset_url_expires_in:
description: Seconds until asset_url expires (counted from this response, not from upload).
example: 86400
type: integer
required:
- asset_url
- asset_url_expires_in
- expires_in
- file_id
- headers
- upload_url
type: object
inline_object_2:
example:
message: Internal Server Error
properties:
message:
example: Internal Server Error
type: string
type: object
upload-content-type:
description: MIME type of the file to upload
enum:
- image/png
- image/jpeg
- image/webp
- video/mp4
- video/webm
- video/quicktime
- audio/mpeg
- audio/wav
- audio/mp4
- audio/webm
- audio/ogg
type: string
responses:
401-unauthorized:
content:
application/json:
examples:
invalid_api_key:
summary: API key is not valid
value:
message: Invalid API key
missing_api_key:
summary: API key is not provided
value:
message: Missing API key
schema:
$ref: '#/components/schemas/inline_object'
description: Unauthorized - The client must authenticate itself to get the requested response.
500-internal-server-error:
content:
application/json:
schema:
$ref: '#/components/schemas/inline_object_2'
description: Internal Server Error - The server has encountered a situation it doesn't know how to handle.
400-bad-request:
content:
application/json:
examples:
invalid_page:
summary: Parameter 'page' is not valid
value:
message: Parameter 'page' must be greater than 0
invalid_query:
summary: Parameter 'query' is not valid
value:
message: Parameter 'query' must not be empty
invalid_filter:
summary: Parameter 'filter' is not valid
value:
message: Parameter 'filter' is not valid
generic_bad_request:
summary: Bad Request
value:
message: Parameter ':attribute' is not valid
schema:
$ref: '#/components/schemas/inline_object'
application/problem+json:
examples:
invalid_page:
summary: Parameter 'page' is not valid
value:
message: Validation error
invalid_params:
- field: page
reason: Parameter 'page' must be greater than 0
- field: per_page
reason: Parameter 'per_page' must be greater than 0
schema:
$ref: '#/components/schemas/inline_object_1'
description: Bad Request - The server could not understand the request due to invalid syntax.
503-service-unavailable:
content:
application/json:
schema:
$ref: '#/components/schemas/inline_object_3'
description: Service Unavailable
securitySchemes:
magnificApiKey:
description: 'Your Magnific API key. Required for authentication. [Learn how to obtain an API key](https://docs.magnific.com/quickstart)
'
in: header
name: x-magnific-api-key
type: apiKey
x-provenance:
method: harvested
publisher: Freepik
source: https://storage.googleapis.com/fc-freepik-pro-rev1-eu-api-specs/magnific-api-v1-openapi.yaml?v=46\
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)