multipart/form-data with two parts: a JSON metadata object and the binary file.
1
Choose a CDN type
Every upload is classified by a
type that determines the storage path prefix in the CDN. Use the value that matches the purpose of the file you are uploading:The final CDN path for your file will be
{type}/{targetName} — for example, uploading with type: "TRACK" and targetName: "spa-francorchamps.svg" stores the file at TRACK/spa-francorchamps.svg.2
Upload the file
Send a A successful upload returns
POST request to /api/v1/cdn as multipart/form-data. The request must include exactly two parts:cdnRequest— a JSON object withtypeandtargetName, sent with content typeapplication/jsoncdnFile— the binary file to upload
201 Created with the plain text body "Success". If the upload fails (for example, due to a storage error), the response is 400 Bad Request with the body "Failed".3
Reference the uploaded asset
After a successful upload, the file is available in the CDN at the path formed by
{type}/{targetName}. Reference this path in the relevant resource — for example, set a brand’s logo field to BRAND/redbull-logo.png or a track’s image field to TRACK/spa-francorchamps.svg.The exact mechanism for linking CDN assets to Chrono resources (cars, tracks, brands, simulators) is configured through their respective create or update endpoints.targetName can include forward slashes to create sub-directories within the type prefix — for example "2026/spa-francorchamps.svg" would be stored at TRACK/2026/spa-francorchamps.svg. Use sub-paths to keep assets organized when you have many files of the same type.