Skip to content

Launcher API

The Launcher API has two distinct audiences: users registering and managing launchers, and launcher workers claiming jobs and reporting execution. They share the /launchers prefix but use different credentials and request models. All paths are relative to the API base URL.

Operations Credential
Registration, listing, rotation, and management User API credential in Authorization: Bearer ….
/launchers/me worker operations and launcher data access Issued launcher token in Authorization: Bearer ….

The worker authenticator uses the Bearer header; do not assume the user API's alternative header works here. Missing or invalid launcher tokens return 401; expired launcher tokens return 403. A launcher ID is not an authentication token.

Management operations

Method Path Success Request and response
GET /launchers/ 200 Array of LauncherInfo, filtered by identity, groups, and administrator access.
POST /launchers/ 201 LauncherPostRequest → LauncherTokenResponse.
POST /launchers/rotate 200 LauncherRotateRequest → LauncherTokenResponse.
PATCH /launchers/{id_launcher} 200 LauncherPatchRequest → LauncherInfo.
DELETE /launchers/{id_launcher} 200 Removes the registration; JSON response with detail.

id_launcher is the id from LauncherInfo. Management updates and deletion require ownership or administrator access; inaccessible registrations return 404. Deleting a registration does not stop an already running launcher process or guarantee cancellation of its infrastructure jobs.

LauncherPostRequest

Field Type Required Meaning
name string Yes Launcher registration name.
expiration_date date-time or null Personal launchers: yes Token expiration. Use an explicit time zone.
is_transverse boolean No; default false Register a shared rather than personal launcher.
groups array of strings or null No Group restrictions for shared launchers.

Personal registrations are owned by the authenticated user, require an expiration date, and cannot supply groups. Only administrators may create transverse launchers. A transverse launcher's expiration is optional; empty or absent groups have no group restriction. Group names are normalized to paths when the instance enables that setting.

A duplicate registration name in the applicable ownership scope returns 409. Personal registrations missing expiration or specifying groups return 400; non-administrators requesting a transverse registration get 403.

For the UI and a runnable registration request, follow Launcher registration.

LauncherRotateRequest

Field Type Required Meaning
name string Yes Name of the registration to rotate.
expiration_date date-time or null Non-administrators: yes New token expiration.

Rotation selects by name, not launcher ID. Owners rotate their own registrations; administrators have broader lookup access. Only administrators may omit expiration. Rotation replaces the stored token: update the worker's credential before expecting it to reconnect. A missing registration returns 404.

LauncherPatchRequest

Management patch accepts optional nullable name and groups. Supply only the fields you intend to change. groups is invalid for a personal launcher; an empty patch returns 400. This body does not set worker flavors, change execution backends, or rotate the token.

LauncherTokenResponse

Field Type Meaning
name string Registration name.
token string Newly issued launcher credential, returned only at issuance or rotation.
expiration_date date-time or null Expiration, or no expiration where permitted.

Store the token securely. Listing and reading registrations do not retrieve it. Do not log issuance responses or use a launcher token as a user credential.

LauncherInfo

Field Type Meaning
id, name strings Registration identity and display name.
user_id string or null Owner; null for transverse registrations.
flavors array of strings Advertised execution capabilities.
last_seen date-time Last-seen timestamp.
expiration_date date-time or null Credential expiration.
groups array of strings or null Group restrictions.
active boolean Computed from last-seen time and configured launcher TTL.
expired boolean Computed from expiration date.

active and expired are different checks. A registration can exist while its worker is unavailable. Process eligibility also considers group access and requested flavors; listing a registration does not guarantee it can run a particular workflow.

Worker operations

Method Path Success Request and response
GET /launchers/me 200 Authenticated worker's LauncherInfo.
PATCH /launchers/me 200 LauncherSelfPatchRequest → LauncherInfo.
GET /launchers/me/queue 200 Array of Job; claims and assigns queued work.
GET /launchers/me/jobs 200 Array of assigned Job; updates last-seen time.
GET /launchers/me/jobs/{job_id} 200 One Job; rejects work assigned to another launcher with 403.
GET /launchers/me/jobs/{job_id}/package 200 Worker ApplicationPackage; requires assignment to this launcher.
PUT /launchers/me/jobs/{job_id} 201 Worker Job JSON body → updated Job.

Queue reads assign work

GET /launchers/me/queue is part of the worker protocol, not a read-only diagnostic endpoint. Calling it can assign jobs to the authenticated launcher. Use /launchers/me or the registration list when inspecting configuration.

LauncherSelfPatchRequest has one optional nullable field, flavors (array of strings). An empty patch returns 400. Only advertise capabilities that the configured worker can actually satisfy; patching flavors does not install software or change its runner.

Worker query parameters

The queue accepts optional message, limit (1–10000), and repeated order_by JSON strings. The assigned-job list also accepts repeated list_status, repeated process_id_list, project_path, project_ref, before, and after. Unlike the user list, it has no query or tags parameter. Sorting values use the Job API sorting format.

Job

The worker model uses internal lifecycle states, not just the five user-facing OGC statuses. A worker update is a validated job object, not a partial user annotation body:

Field Type Required Meaning
type string Yes process.
jobID string Yes Assigned job identifier.
status string Yes Internal state from the list below.
project_path, project_ref strings Yes Workflow repository and submitted reference.
processID string Yes Process identifier.
progress integer, 0–100 Yes Reported execution progress.
message string or null No Worker status/error message.
created, started, finished, updated date-time or null No Lifecycle timestamps.
user_id, s3_path string or null No Submitting user and publication path.
application_package Worker ApplicationPackage or null No Package when included.

Additional job metadata is allowed. Internal states are accepted, pending_run, running, finalizing_run, successful, pending_dismissed, dismissed, and failed. See status mapping for how users observe these states.

Workers must only report jobs assigned to them. Update bodies cannot modify env, secrets, execution_content, or application_package: those fields are removed before persistence. A running update does not override a pending or completed dismissal. Do not assume arbitrary state transitions are a supported public job-control interface.

Worker ApplicationPackage

Field Type Meaning
main string Main CWL workflow identifier.
content string Serialized CWL for execution.
env object Execution environment.

This differs from the user package's source field. Retrieval uses the job's stored commit when available. Repository credentials and fallback follow Token use after submission. Worker responses and packages can contain sensitive execution data: never log their complete bodies.

Worker data access

Launcher storage URLs use /launchers/{id_launcher}/data/{job_id}/{file_path}. Use the registration ID and issued launcher token, not a user token. They share the proxy, redirect, upload, and probe behavior documented in Data access, including its server-token requirement for launcher storage access. Package retrieval and publication storage access are distinct operations.