List downloadable files for a resource
/resources/{ref}/filesReturns the original file (when present and downloadable at the
linked user's access level — null otherwise) and all alternative
files attached to the resource (e.g. formatted_extract entries
produced by the formatted-document-extract feature, audio samples,
supplementary files). Each entry carries a downloadUrl you can
fetch directly with the same api-key. Requires the read scope.
Authorization
apiKey Issued to you when your integration is provisioned. Determines which catalogue resources are visible and which AI tools are available.
In: header
Path Parameters
Resource ref.
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/resources/0/files"{ "success": true, "status": "success", "message": "Success", "data": { "original": { "fileName": "my-book.epub", "extension": "epub", "fileSize": 5480329, "contentType": "application/epub+zip", "downloadUrl": "https://example.veristage.com/api/external/resources/42/file" }, "alternativeFiles": [ { "id": 7, "name": "Formatted extract", "description": null, "fileName": "alt_42_6864f0.docx", "fileExtension": "docx", "fileSize": 128034, "altType": "formatted_extract", "creationDate": "2026-07-15 10:00:00", "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "downloadUrl": "https://example.veristage.com/api/external/resources/42/files/7" } ] }}{ "success": false, "status": "fail", "message": "API key is required", "error": { "code": "NO_API_KEY", "message": "API key is required" }}{ "success": false, "status": "fail", "message": "string", "error": { "message": "API key is required", "code": "NO_API_KEY" }}{ "success": false, "status": "fail", "message": "string", "error": { "message": "API key is required", "code": "NO_API_KEY" }}Download an alternative file GET
Streams a specific alternative file as raw bytes with the correct `Content-Type` and a `Content-Disposition: attachment` filename (the file's display name, falling back to its stored filename). Supports HTTP `Range` requests. Requires the **read** scope.
Attach or replace the file on a resource POST
Uploads a file onto an existing resource, replacing any current file. Requires the **write** scope and a linked user with edit access to the resource. This runs the same pipeline as an interactive upload: the file extension is validated against the resource type's allowed list, the original filename is stored as resource metadata, previews are regenerated, document text is re-extracted, and any configured AI extraction job is queued. The maximum file size follows the server's upload limit (typically reported by the error when exceeded); oversized uploads fail with `413 FILE_TOO_LARGE`.