Skip to main content
POST
Upload a file

Authorizations

Authorization
string
header
required

A Recursion API key, created in the console under API keys.

Body

multipart/form-data

Multipart body for uploading a file. Send the bytes as the file part; the part's filename and Content-Type become the file's name and media type.

expires_in_seconds
integer<int64>

How long the file stays attachable and its content served, from 3600 (an hour) to 7776000 (ninety days); its metadata stays readable, with expires_at in the past, for a grace after that. Omit for a file that does not expire. Set once: a file's expiry cannot be changed.

file
file

The file's bytes. Its part filename is the name the file is stored and mounted under; its part Content-Type is recorded as the media type. Up to 30 MiB; upload a larger file, up to 1 GiB, with startFileUpload.

metadata
string

Caller-owned key/value data as a JSON object, since a form part cannot carry structure. Rejected rather than dropped when it does not parse.

Response

A file object: bytes uploaded once and attachable to any number of sessions as a resource, or bytes a session produced. Attaching a file mounts it read-only into the session's sandbox at a path the session is told about.

A file object: bytes uploaded once and attachable to any number of sessions as a resource, or bytes a session produced. Attaching a file mounts it read-only into the session's sandbox at a path the session is told about.

byte_size
integer<int64>
required

Size of the file in bytes.

created_at
string<date-time>
required

Server-assigned RFC 3339 timestamp of the upload.

downloadable
boolean
required

Whether GET /v1/files/{file_id}/content serves the bytes. True for every live file, upload or session output; expiry, not source, is what closes the content route.

file_id
string
required

Server-assigned id, used to attach the file to a session as a resource.

filename
string
required

The name the file was uploaded under, without any directory. This is the name it is mounted under in a sandbox unless a resource says otherwise.

media_type
string
required

The upload's declared Content-Type. When the part declared none, or declared application/octet-stream, the type is detected from the filename's extension, through a fixed table rather than the host's, and then from the bytes, falling back to application/octet-stream when neither says anything. Informational: the platform does not transcode or validate against it.

organization_id
string
required

Organization that owns the file. Server-assigned from the caller's credentials.

sha256
string
required

SHA-256 of the file's contents, for checking a download.

source
enum<string>
required

How the file came to exist: upload for a file you uploaded, session_output for a deliverable a session saved.

Available options:
upload,
session_output
type
enum<string>
required

Always file.

Available options:
file
expires_at
string<date-time>

When the file stops being attachable and its content stops being served. Its metadata stays readable and listed, with this in the past, for a grace before the file is reclaimed. Absent means it does not expire.

metadata
object

Caller-owned key/value data stored with the file and returned unchanged.

scope_session_id
string

For a session output, the session that produced it. Absent on an upload, which belongs to the organization rather than to any one session.