Freepik Uploads API

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

Operations 2

POST /v1/ai/uploads/request-url Request pre-signed URLs to upload files #
GET /v1/ai/uploads List your uploaded files #

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/freepik:freepik-uploads-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

freepik-uploads-api-openapi.yml Raw ↑
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)