head /upload/<uuid>
Head upload
Returns the current state of a resumable upload created by POST /<uuid>/file or PUT /<uuid>/file, without transferring any of the data already uploaded. The response has no body - Upload-Offset, Upload-Length, Upload-Complete, Upload-Limit and Expires are all returned as headers, matching what the creating request or the last PATCH /upload/<uuid> returned.
Only the user who created the upload can query it - even a user with full access to the upload’s target element gets 404 for an upload they did not start themselves.
This endpoint does not support If-Match or If-None-Match; unlike the element endpoints, requesting it with either header has no effect.
Request
curl -I \ -H 'Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc' \ https://api.example.com/upload/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1acimport requests
url = "https://api.example.com/upload/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac"
headers = {"Authorization": "Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc"}
response = requests.head(url, headers=headers)
print(response.json())const url = 'https://api.example.com/upload/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac';const options = { method: 'HEAD', headers: {Authorization: 'Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('HEAD', 'https://api.example.com/upload/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac', [ 'headers' => [ 'Authorization' => 'Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc', ],]);
echo $response->getBody();Response
204 · No Content
Resumable upload found. Its current state is returned entirely through response headers - there is no response body.
404 · Not Found
No resumable upload with this id exists, it already expired or completed, or it belongs to a different user.
response has no body
Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-MethodAccess-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKAccess-Control-Allow-Origin: *Access-Control-Expose-Headers: ETag, LocationAllow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKCache-Control: no-cache, privateUpload-Complete: ?0Upload-Offset: 5242880Upload-Length: 20971520Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176Expires: Sat, 22 Aug 2026 21:22:07 GMTX-Powered-By: Ember Nexus APIno schema available
{ "type": "https://api.example.com/error/401/unauthorized", "title": "Unauthorized", "status": 401, "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)."}Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-MethodAccess-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKAccess-Control-Allow-Origin: *Access-Control-Expose-Headers: ETag, LocationAllow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKCache-Control: no-cache, privateX-Powered-By: Ember Nexus API{ "$schema": "https://spec.openapis.org/oas/3.0/schema/2021-09-28#/definitions/Schema", "type": "object", "description": "RFC 7807 Problem Details object.", "properties": { "type": { "type": "string", "format": "uri" }, "title": { "type": "string" }, "status": { "type": "integer" }, "detail": { "type": "string" } }}{ "type": "https://api.example.com/error/404/not-found", "title": "Not Found", "status": 404, "detail": "Requested element was not found."}Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-MethodAccess-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKAccess-Control-Allow-Origin: *Access-Control-Expose-Headers: ETag, LocationAllow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCKCache-Control: no-cache, privateX-Powered-By: Ember Nexus API{ "$schema": "https://spec.openapis.org/oas/3.0/schema/2021-09-28#/definitions/Schema", "type": "object", "description": "RFC 7807 Problem Details object.", "properties": { "type": { "type": "string", "format": "uri" }, "title": { "type": "string" }, "status": { "type": "integer" }, "detail": { "type": "string" } }}Request Parameters
uuid
required
Id of the resumable upload, as returned in the Location header of the request that created it.
Request Header
Authorization
optional
Bearer token for user authentication. If omitted, the request is processed as an anonymous user; if provided, the associated user account is used.
Response Header
Upload-Complete
always
Structured boolean indicating whether the upload is finished: ?1 for complete, ?0 for still in progress.
Upload-Offset
always
Number of bytes already stored for the resumable upload. On a request, it must match the upload's current offset exactly; on a response, it reflects the offset after the request was processed.
Upload-Length
optional
Total number of bytes the finished file will have. Optional - omitted when the total size is not known ahead of time.
Upload-Limit
always
Structured field listing the server's limits for this upload: max-age (seconds an unfinished upload is kept alive since its first request), max-size (maximum total file size in bytes), min-append-size (minimum size in bytes for a non-final chunk) and max-append-size (maximum size in bytes per chunk).
Expires
always
Point in time after which the unfinished resumable upload is discarded, if it is not completed before then.
Access-Control-Allow-Headers
always
Specifies which HTTP headers can be used during a cross-origin request, returned in preflight responses.
Access-Control-Allow-Methods
always
Indicates which HTTP methods are permitted for cross-origin requests, typically returned in preflight responses.
Access-Control-Allow-Origin
always
Specifies which origin(s) may access the resource.
Access-Control-Expose-Headers
always
Lists the response headers that browsers are allowed to access from JavaScript beyond the default restricted set.
Allow
always
Lists the HTTP methods supported by the endpoint; returned alongside a 405 Method Not Allowed response.
Cache-Control
always
Directives controlling caching behavior for the response.