GenuineAIGenuineAI
For usersFor developers
  • Overview
  • Guides
  • How-to
  • API reference
Documentation
  • Quickstart
  • Authentication
  • Errors
  • Rate limits
  • API reference
Platform
  • Platform overview
  • Solutions
  • Pricing
  • Sign in
Company
  • Status
  • Trust Center
  • Contact
  • Terms of Service
  • Privacy Policy

© 2026 GenuineAI Ventures LLC

support@genuinehq.com
Overview
Core
Media library
    Files
    Uploads
    Stock photos
    Downloads
      Start a download jobpostGet a download jobgetCancel a download jobdeleteGet a download URLgetStream font bytesgetStream image bytesgetGet a version URLgetDownload files as a ZIPpost
    File versions
    File analysis
    Media analysis schemas
    Faces
    Albums
    People
    Media tags
    Share links
    Publications
    Distribution control
AI
Documents
Knowledge
Creative
Website & content
Automation
Customer channels
Administration
Schemas
GenuineAI API
GenuineAI API

Downloads

Getting bytes back out: a signed URL for one file, a stream for the kinds a browser shows inline, and a job for a whole selection at once.


Start a download job

POST
https://api.genuineai.app/api/v1
/download-jobs

For selections too large to stream in one response: packs them in the background and returns a job to poll.

Start a download job › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Start a download job › Request Body

file_ids
​string[] · required
size
​string · enum
Enum values:
original
small
medium
large

Start a download job › Responses

Success

No data returned
POST/download-jobs
curl https://api.genuineai.app/api/v1/download-jobs \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ], "size": "original" }'
Example Request Body
{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ], "size": "original" }
json
Example Responses
No example specified for this content type

Get a download job

GET
https://api.genuineai.app/api/v1
/download-jobs/{id}

Reports where a download job has got to. Poll it until the status is completed, at which point the response carries the URL to fetch.

Get a download job › path Parameters

id
​string · uuid · required

Get a download job › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Get a download job › Responses

Success

job_id
​string · uuid
status
​string
file_count
​integer
download_url
​string · uri

Present once the status is completed.

GET/download-jobs/{id}
curl https://api.genuineai.app/api/v1/download-jobs/:id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "job_id": "00000000-0000-0000-0000-000000000000", "status": "status", "file_count": 0, "download_url": "https://www.example.com/path/to/resource" }
json
application/json

Cancel a download job

DELETE
https://api.genuineai.app/api/v1
/download-jobs/{id}

Stops a download job that has not finished. A job already completed is left alone.

Cancel a download job › path Parameters

id
​string · uuid · required

Cancel a download job › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Cancel a download job › Responses

Success

job_id
​string · uuid
status
​string
DELETE/download-jobs/{id}
curl https://api.genuineai.app/api/v1/download-jobs/:id \ --request DELETE \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "job_id": "00000000-0000-0000-0000-000000000000", "status": "status" }
json
application/json

Get a download URL

GET
https://api.genuineai.app/api/v1
/files/{id}/download-url

A signed, expiring URL for the file's bytes.

Requires any one of media:download, document:download, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

Get a download URL › path Parameters

id
​string · uuid · required

Get a download URL › query Parameters

size
​string · enum
Enum values:
small
medium
large

Get a download URL › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Get a download URL › Responses

Success

string · uri

A signed URL, valid for a short window. The bytes never pass through the API.

GET/files/{id}/download-url
curl https://api.genuineai.app/api/v1/files/:id/download-url \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
https://www.example.com/path/to/resource
json
application/json

Stream font bytes

GET
https://api.genuineai.app/api/v1
/files/{id}/font-data

Streams the font's bytes. Fonts come through the API rather than a signed URL so a browser can load them with FontFace without a cross-origin round trip.

Requires any one of media:download, document:download, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

Stream font bytes › path Parameters

id
​string · uuid · required

Stream font bytes › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Stream font bytes › Responses

Success

No data returned
GET/files/{id}/font-data
curl https://api.genuineai.app/api/v1/files/:id/font-data \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Stream image bytes

GET
https://api.genuineai.app/api/v1
/files/{id}/image-data

Streams the image through the API rather than redirecting — for callers that cannot follow a signed URL, such as a canvas that would otherwise be tainted by a cross-origin fetch. Ask for a thumbnail or large rendition instead of the original where one exists.

Requires any one of media:download, document:download, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

Stream image bytes › path Parameters

id
​string · uuid · required

Stream image bytes › query Parameters

replica
​string · maxLength: 256

Stream image bytes › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Stream image bytes › Responses

Success

No data returned
GET/files/{id}/image-data
curl https://api.genuineai.app/api/v1/files/:id/image-data \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Get a version URL

GET
https://api.genuineai.app/api/v1
/files/{id}/versions/{version_id}/download-url

Returns a signed URL for one earlier version of a file. It expires shortly; fetch a new one rather than storing it.

Requires any one of media:download, document:download, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

Get a version URL › path Parameters

id
​string · uuid · required
version_id
​string · uuid · required

Get a version URL › query Parameters

size
​string · enum
Enum values:
small
medium
large

Get a version URL › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Get a version URL › Responses

Success

string · uri

A signed URL for that version, valid for a short window.

GET/files/{id}/versions/{version_id}/download-url
curl https://api.genuineai.app/api/v1/files/:id/versions/:version_id/download-url \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
https://www.example.com/path/to/resource
json
application/json

Download files as a ZIP

POST
https://api.genuineai.app/api/v1
/files/actions/download

Zips a selection and returns it. Large selections should go through POST /download-jobs instead, which does the same work in the background.

Requires any one of media:download, document:download, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

Download files as a ZIP › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Download files as a ZIP › Request Body

file_ids
​string[] · required

Download files as a ZIP › Responses

Success

No data returned
POST/files/actions/download
curl https://api.genuineai.app/api/v1/files/actions/download \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ] }'
Example Request Body
{ "file_ids": [ "00000000-0000-0000-0000-000000000000" ] }
json
Example Responses
No example specified for this content type

Stock photosFile versions