Docs

Start here

A signed read URL for a file you uploaded

GET/v1/uploads/{path}on https://api.auray.ai/v1

The second step of an upload, and a separate one by measurement: storage refuses to sign a read for an object that does not exist, so the read URL cannot come back beside the upload URL without pro…

The second step of an upload, and a separate one by measurement: storage refuses to sign a read for an object that does not exist, so the read URL cannot come back beside the upload URL without promising a file nobody has sent. PUT the bytes to upload_url, then ask here. The URL is good for twenty-four hours — long enough for any model's fetch and any queue — and is what a catalogue model's _url field takes.

path is the <user_id>/<file> the upload answered; another account's folder, or a file that was never PUT, is 404 not_found. address picks the bucket the way it did on the upload, and any scope that may upload for that address reads back through it the account's files of the kinds that address takes — the kind it makes (image:write, 3d:write, …) or the older product name; the upload's read link names it, and a path of another kind is 404 not_found through it. The deprecated product picks a bucket by name and takes the scopes the upload by that product took — for external, external:write, or a kind's scope for the kinds of file some address of that kind takes, a path of another kind refused 403 insufficient_scope naming the scopes that would reach it. Naming neither looks only in the buckets whose own scope the key holds — the catalogue models' with external:write, then 3D's with 3d:write or threed:write. A key without external:write, as every key Account mints is, is refused 403 insufficient_scope there, with the address as the way out, unless our 3D's bucket holds the file and the key holds 3d:write or threed:write; so keep the query the read link carries. assets:read alone reads nothing back: it fetches what a job made, and an upload is something the caller sent.

#Authentication

Authorization: Bearer auray_sk_… — Through address, a scope that may upload for it — the kind it makes or the older product name — for a file of a kind it takes. Through product, the scopes the upload by that product takes. Naming neither address nor product, the bucket's own: external:write for the catalogue models' inputs, 3d:write or threed:write for 3D's. assets:read alone does not.

#Request

#Path parameters

NameTypeRequiredDescription
pathstringyes<user_id>/<file>, as the upload answered it.

#Query parameters

NameTypeRequiredDescription
addressstringnoThe address the file was uploaded for — what the upload's read link carries.
productstringnoDeprecated: name the address. Which product's bucket the path is in. One of "threed", "external".

#Example request

curl "https://api.auray.ai/v1/uploads/86e97633-…/chair-scan-3.glb?address=hitem3d%2Fhi3d%2Fsplit" \
  -H "Authorization: Bearer $AURAY_API_KEY"

#Responses

#200 OK

A signed read URL.

FieldTypeRequiredDefaultDescription
objectstringyes—One of "upload".
pathstringyes—
bucketstringyes—
urlstringyes—Signed; fetchable by anyone who holds it, for twenty-four hours. A URL.
expires_atstringyes—
request_idstringyes—

#400 Bad Request

A refusal.

The error body: error, message, docs (the entry that explains it) and request_id.

#401 Unauthorized

A refusal.

The error body: error, message, docs (the entry that explains it) and request_id.

#403 Forbidden

A refusal.

The error body: error, message, docs (the entry that explains it) and request_id.

#404 Not Found

A refusal.

The error body: error, message, docs (the entry that explains it) and request_id.

#429 Too Many Requests

A refusal.

The error body: error, message, docs (the entry that explains it) and request_id.

#503 Service Unavailable

A refusal.

The error body: error, message, docs (the entry that explains it) and request_id.

#Status codes

StatusMeaning
200A signed read URL.
400A refusal.
401A refusal.
403A refusal.
404A refusal.
429A refusal.
503A refusal.

Every refusal names its code, and every code is explained at Errors.

Start typing to search every page of the documentation.

Up arrow Down arrow to moveEnter to openEscape to close