Luxor PlatformAPI DocumentationCommanderParts

Create part attachment upload URL

Reserves an attachment record and returns a presigned URL. Upload the file bytes with an HTTP PUT to upload_url.

POST
/v2/commander/parts/{part_id}/attachments/upload-url

Authorization

LuxorAPIKey
authorization<token>

Use your API key here.

In: header

Path Parameters

part_id*string

Part id (uuid).

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v2/commander/parts/497f6eca-6276-4993-bfeb-53cbbbba6f08/attachments/upload-url" \  -H "Content-Type: application/json" \  -d '{    "filename": "invoice.pdf",    "content_type": "application/pdf",    "size_bytes": 20481  }'
{  "upload_url": "string",  "attachment": {    "id": "b1a2c3d4-e5f6-7890-abcd-ef1234567890",    "part_id": "28c660ae-a12c-4da7-9243-03385b104cf1",    "filename": "invoice.pdf",    "content_type": "application/pdf",    "size_bytes": 20481,    "download_url": "string",    "uploaded_by": "string",    "created_at": "2026-04-20T10:15:00Z"  }}
{  "statusCode": 400,  "code": "FST_ERR_VALIDATION",  "error": "Bad Request",  "message": "body/end_date Required"}
{  "statusCode": 403,  "code": "7",  "error": "Forbidden",  "message": "[permission_denied] site_id does not belong to this workspace"}
{  "statusCode": 404,  "code": "5",  "error": "Not Found",  "message": "[not_found] agent not found"}