Content Operations

Presign a File Upload

Presign an S3 URL for direct upload and register the file. After uploading to the returned URL, call POST /operations/ingest-file to stage it into DuckDB. The staging table is auto-created if missing. Not allowed on entity graphs or shared repositories.

Idempotency: supply an Idempotency-Key header to make safe retries; replays within 24 hours return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.

post/v1/graphs/{graph_id}/operations/create-file-upload

Request

  • Base URL: https://api.robosystems.ai (the document declares no server; this is the origin it was published from)
  • URL: https://api.robosystems.ai/v1/graphs/{graph_id}/operations/create-file-upload
  • Auth: one of:
    • API key in header X-API-Key
    • HTTP bearer

Path parameters

graph_idstring required

Headers

Idempotency-Keystring nullable

Request body

file_namestring required

File name to upload

content_typestring

File MIME type

table_namestring nullable

Table name to associate file with (required for first-class /files endpoint)

file_size_bytesinteger nullable

Size of the file about to be uploaded, in bytes. Optional; when supplied, an over-limit file is rejected here instead of after it has been pushed to S3 and rejected by ingest-file. Advisory only — the authoritative check measures the object after upload.

Example request

{
  "content_type": "application/x-parquet",
  "file_name": "entities.parquet",
  "table_name": "Entity"
}

Response

Successful Response

operationstring required

Kebab-case operation name

operationIdstring required

op_-prefixed ULID for audit and SSE correlation

status'completed' | 'pending' | 'failed' required

Operation lifecycle state

resultunknown
atstring required

ISO-8601 UTC timestamp

createdBystring nullable

User ID that initiated the operation

idempotentReplayboolean

True when this envelope came from the idempotency cache — the underlying command did not execute again. False on fresh executions.

Changes

No recorded changes to this operation across all 1 revision of this API.