API reference

File request API

A file request asks named people for named documents — the diligence checklist, the onboarding paperwork. Each assignee gets their own upload link, reminders go out on a schedule, and whatever arrives becomes a document, filed where you said.

Base URL https://xdocs.io/api/v1, with Authorization: Bearer xdk_… on every request. Pagination, rate limits, scopes and error codes are the same for every endpoint and are described once, in how the API behaves.

File requests

Ask named people for named documents. Each assignee gets their own upload link, and whatever arrives becomes a document in the workspace, filed where the request says.

GET/api/v1/requestsrequests:read

File requests, most recently changed first, with progress counts.

Returns

{ data: Request[] } — id, slug, url, title, description, dataRoomId, folderId, requireEmail, dueAt, remindEveryDays, notifyOnUpload, active, closedAt, createdAt, updatedAt, counts{items, assignees, completed, uploads}. url is the open upload page; each assignee is mailed their own.

GET/api/v1/requests/:idrequests:read

The request with its items, assignees and what has arrived.

Returns

{ data: Request & { items: [{ id, name, description, required, position }], assignees: Assignee[], uploads: [{ id, itemId, assigneeId, uploaderEmail, uploaderName, filename, contentType, byteSize, sha256, documentId, uploadedAt }] } } — an upload is read as the document named by documentId; assignee tokens and storage URLs are never included

POST/api/v1/requestsrequests:write

Ask for files. Assignees are mailed their own link at once.

Body (JSON)

titlestringrequired
1–200 characters.
descriptionstring
Up to 5,000 characters.
items{name, description?, required?}[]
What is wanted, up to 50. required defaults to true.
dataRoomIdstring | null
Room uploads are filed into.
folderIdstring | null
A folder in that room. Needs dataRoomId.
dueAtISO 8601 datetime | null
remindEveryDaysinteger 1–60 | null
Reminder cadence for whoever has not finished.
requireEmailboolean
Ask an anonymous uploader who they are. Defaults to true.
notifyOnUploadboolean
Email you when something arrives. Defaults to true.
assignees{email, name?}[]
Up to 50, each mailed their own link.

Returns

201 { data: Request & { items[], assignees[], uploads[] } }

  • 404 No such room, or no such folder in it.
  • 422 A `folderId` without a `dataRoomId`.
PATCH/api/v1/requests/:idrequests:write

Change any setting. active: false closes it, and the link says so instead of accepting files.

Body (JSON)

…same as POST
title, description, dueAt, remindEveryDays, requireEmail, notifyOnUpload and active, all optional. The room, folder, items and assignees are fixed once a request exists.

Returns

{ data: Request }

DELETE/api/v1/requests/:idrequests:write

Delete the request. Uploads stay: they are documents in the workspace now.

Returns

204

POST/api/v1/requests/:id/assigneesrequests:write

Add people and mail each their link. Idempotent per address: somebody already on the request has their name updated and is mailed again rather than added twice.

Body (JSON)

assignees{email, name?}[]required
1–50 people.

Returns

201 { data: Assignee[] } — every assignee on the request: id, email, name, delivery, deliveryError, sentAt, remindedAt, reminderCount, uploadedAt, completedAt, createdAt

DELETE/api/v1/requests/:id/assignees/:assigneeIdrequests:write

Remove somebody. Their link stops working; what they already sent stays. Idempotent.

Returns

204

POST/api/v1/requests/:id/assignees/:assigneeId/resendrequests:write

Mail their link again — a fresh invitation if the first never arrived, otherwise a reminder.

Returns

{ data: Assignee, delivered: boolean }

  • 404 No such assignee on this request.
← The whole API referenceNext: Webhooks API →