Input & output files
How file data flows in and out of orders, presigned URLs, platform uploads, and external uploads.
Relu Automate supports two ways to get files in, and two ways to get files out.
Input files
Option 1: presigned download URL (recommended)
Include an external_download_url per input file when creating the order. Relu downloads the file directly. Best for integrators whose files already live in S3, GCS, or similar.
"input_data": {
"lower_jaw": {
"external_download_url": "https://s3.amazonaws.com/.../lower.stl",
"extension": ".stl"
}
}The URL must be publicly reachable (we don't support IP allowlists). Set the signed-URL expiry to at least 3 hours, ideally 24 hours — orders can queue before Relu downloads the file.
Option 2: upload to the platform
Get a presigned upload URL, upload your file, then reference the resulting file_id in the order.
POST /input-files
{ "name": "My upper IOS file", "extension": ".stl" }You get back { file_id, upload_url }. PUT the file to upload_url, then reference file_id in the order.
Output files
By default, Relu stores outputs on the platform, where they remain available for download indefinitely. If you want them pushed elsewhere too, include external_upload_url per output in the order body:
"output_data": {
"lower_jaw_model": { "external_upload_url": "https://.../upload" }
}Relu PUTs the result to that URL when the order completes. The output also stays available through the platform, so you get both.
Download a stored output
GET /orders/{order_id}?include_output_download_urls=true includes a temporary
download_url for each available output. If you already have an output file ID,
request a fresh URL directly:
GET /output-files/{file_id}This route requires read:output-files scope and order:view permission on the
file's order. GET /output-files/{file_id}/content downloads the bytes and can
convert mesh files with mesh_format=stl, ply, or obj.
The output-file create, update, upload, and delete routes are also listed in the
API reference. They require the matching
output-file scope and order:edit permission.
Input/output names differ per service
The keys under input_data and output_data (like lower_jaw, volume,
lower_jaw_model) depend on the specific service and are always snake_case.
The fastest way to get them is three-dots menu → View API Example on the
service card in the platform UI, or call GET /services/{id}.
Which to use
- Presigned URLs everywhere if you control your own storage, faster and no data-egress cost from Relu.
- Platform uploads if you're prototyping or don't have storage set up.