Skip to main content
The public API is the machine edge of Hyperlocalise Cloud. It is the contract the CLI uses to upload sources and download translations. Use it from your own scripts when you need the same operations without the CLI. There is no published OpenAPI spec yet. The routes below are the /api/v1 surface Cloud actually serves.

Base URL

The CLI hyperlocalise.api_base_url default is https://hyperlocalise.com/api. Paths below are relative to that host, including /v1.

Authentication

Create a key under SettingsAPI Keys. Send it on every request:
Missing, invalid, or revoked keys return 401 with error: "unauthorized". An archived workspace returns 403 with error: "workspace_archived".

Permissions

New keys receive all four permissions. A key only sees projects the key’s creator can access.

Errors

JSON errors use this envelope:
Branch on error. message is for debugging and may change. File downloads return the raw body instead of JSON.

Files

Upload a source file

POST /v1/files Permission: files:write multipart/form-data. Maximum body size is 25 MiB. 201 response for a native project (resource-keyed):
TMS-backed projects return destination: "external_tms" plus provider fields instead of the stored-file metadata. This is the same upload hyperlocalise sync push performs. It does not create a job.

Download a stored file

GET /v1/files/{fileId}/download Permission: files:read Returns the file bytes with Content-Type and Content-Disposition.

Jobs

Create a job

POST /v1/jobs Permission: jobs:write JSON body. Discriminate on type. String job
File job
sourceFileId must already exist in the project (upload first). Locales must match the project. 201 response:
The CLI does not call this endpoint during sync push. Cloud automations and the UI create jobs after upload.

Latest job for a source path

GET /v1/jobs/latest?projectId={projectId}&sourcePath={sourcePath} Permission: jobs:read Returns the most recent file job for that source path, including outputFiles when the job has finished.

Get a job

GET /v1/jobs/{jobId} Permission: jobs:read

Job status

GET /v1/jobs/{jobId}/status Permission: jobs:read Smaller payload with id, projectId, status, timestamps, and lastError.

Translations and images

These reconstruct current project state. They do not require a job id. That is what sync pull uses.

Download a reconstructed translation

GET /v1/projects/{projectId}/translations/download?sourcePath={sourcePath}&locale={locale} Permission: files:read Returns the translated file bytes for that source path and target locale.

Download an image variant

GET /v1/projects/{projectId}/images/download?sourcePath={sourcePath}&locale={locale} Permission: files:read Returns the localized image variant when one exists for that path and locale.

Example

Upload a source file with curl:
Download the French reconstruction:

Next