Start an upload
Stages a file for a file source: the response's target is a presigned URL to PUT the bytes to, with the headers to send, for 15 minutes. Then complete the upload. Other kinds of source, and a file larger than the snapshot limit, answer 422.
- Scopes
runs:write - Rate classwrite
- Idempotency-Key required
/v1/sources/{id}/uploadsStages a file for a file source: the response's target is a presigned URL to PUT the bytes to, with the headers to send, for 15 minutes. Then complete the upload. Other kinds of source, and a file larger than the snapshot limit, answer 422.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Path Parameters
Source (a vendor connection) ID
^src_[0-9A-Za-z]{22}$Header Parameters
Dated API version; pinned per organisation on first use and overridable per request
Value in
- "2026-10-01"
- "2026-10-04"
The data the request acts on: test is the organisation's sandbox. An OAuth token picks it (live by default); an API key's mode is fixed, and naming the other one is refused
Value in
- "live"
- "test"
Unique key for this operation, reused on retries (24 h)
1 <= length <= 257Preview the write and change nothing: true answers the would-be response, explain a Preview (application/vnd.furniops.preview+json)
Value in
- "true"
- "explain"
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The file about to be uploaded
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/sources/string/uploads" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "filename": "string", "content_type": "text/csv", "bytes": 1 }'{ "object": "upload", "id": "string", "source": "string", "filename": "string", "content_type": "text/csv", "bytes": 1, "status": "pending", "run": "string", "target": { "method": "PUT", "url": "http://example.com", "headers": { "property1": "string", "property2": "string" }, "expires_at": "2019-08-24T14:15:22Z" }, "expires_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z"}Complete an upload POST
Checks that the bytes arrived, at the declared size, and queues a run that reads them. Missing or different bytes answer 422; an expired or already completed upload, a source with an active run, or a paused or disabled one answer 409.
Retrieve an upload GET
One upload: its status and, once completed, the run reading it. No `target`.