uplim.api.v1.InternalPipelineRunsService
postAbort Blob Upload
Aborts an in-progress multipart upload so its parts stop being billed; the side-car calls it best-effort after any mid-stream failure. object_key must lie under this run/step's scratch prefix (PermissionDenied otherwise). **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postAppend Step Log Chunk
Fans a batch of log lines out to live-tail subscribers of StreamStepLogs through the api's in-process broker. Nothing is persisted and an empty batch is a no-op. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postComplete Blob Upload
Completes a multipart upload from the supplied part numbers and ETags. Writes no metadata — the side-car calls FinaliseBlobOutput next. object_key must lie under this run/step's scratch prefix (PermissionDenied otherwise); at least one part is required. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postEnqueue Run
Atomically creates a QUEUED PipelineRun plus one PENDING StepRun per step in the snapshot, stamping parent_step_id for inlined sub-pipeline steps. Refuses with FailedPrecondition when the integration is not actively installed on a numeric bucket (the system Default integration is exempt) or when a QUEUED/RUNNING run already exists for the resource (checked under a row lock; the coordinator retries this). Returns ResourceExhausted with a `retry-after` header when the per-integration run quota is exceeded, NotFound for an unknown snapshot, and InvalidArgument when no resource is set. Reclassify triggers mark earlier runs on the resource as superseded by the new run. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postFinalise Blob Output
Verifies the blob was PUT at the expected key (upload_token must equal it), relocates it to the permanent metadata path (normalising thumbnails to a 768px square), deletes the scratch object, upserts the live UploadMetadata row, appends the name to the step's ledger and bumps the upload's updated_at. Only valid for upload-bound runs (FailedPrecondition otherwise, or when the object is missing); the same output-name namespace rules as MintBlobOutputUpload apply. Aborted (and the step is marked CANCELLED) when the upload was deleted mid-run. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postFinalise Step Logs
Uploads the step's JSONL log content (up to 10 MiB) to `pipeline-logs/<run_id>/<step_id>/logs.jsonl` and records the key and truncation flag on the step run. A final (non-partial) flush is skipped when a log object is already recorded, so the side-car's own flush wins over the coordinator's pod-log fallback; final flushes also drop the live-tail history. NotFound when the step run is missing. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postGet Active Pipeline For Resource
Resolves the integration from the content-type URN's slug prefix and returns its PUBLISHED pipeline for the URN and resource kind, plus the snapshot for the current version and the resolved integration id. Returns an empty response (no error) when the slug matches no integration, no pipeline exists, it isn't published, or its snapshot is missing. A URN without a `<slug>:` prefix is rejected with InvalidArgument. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postGet Integration Config For Resource
Returns the flat config map used for `${{ integration.config.<name> }}` references. Currently always returns an empty map: the source column was dropped and no replacement exists yet. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postGet Integration Secrets Ciphertext
Returns the named integration secrets as ciphertext plus key id only; the coordinator decrypts them with its private key, which the api never holds. Names with no stored secret are omitted, and an empty name list returns an empty response. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postGet Pipeline Run Status
Cheap status poll the coordinator uses (about every 2 seconds while a step runs) to notice an admin cancel. Returns the run's status and, when set, its failure message (the cancel reason). NotFound for an unknown run. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postGet Render Worker Context
Returns the worker-bridge context the headless renderer needs for this step: the run's resource upload as proto-JSON (with its stored filename re-injected and a browser-fetchable content_url) and the renderer scope JSON. config_json, auth_token and api_base_url are currently always empty. FailedPrecondition when the run has no resource upload; Aborted (and the step is marked CANCELLED) when the upload was deleted mid-run. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postGet Resource Metadata KV
Returns every live KV entry on an upload or folder plus the resource itself as JSON (uploads include a presigned source URL, mime and size so `${{ resource }}` resolves as a blob input). resource_json is empty when the resource isn't found. InvalidArgument when neither upload_id nor folder_id is set. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postGet Step Bundle
Returns a fresh presigned download URL, the step ref and the expected SHA-256 for this step's published JS bundle, resolved from the run's frozen snapshot and fetched from the steps registry (owner integration taken from the ref's slug). NotFound when the run, snapshot or step is missing; FailedPrecondition when the step is not a registry-bundle (js) step, the registry isn't configured, or it returns no bundle URL. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postIncrement Step Attempt
Increments a step run's attempt counter before the coordinator retries a transiently failed step, returning the new value. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postList Step Blob Outputs
Returns 5-minute presigned GET URLs with mime and size for each committed blob output (resolved to its permanent metadata location) and each run-scoped local blob a step recorded. Blobs that can't be found are omitted rather than failing the call. NotFound when the step run is missing. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postList Step KV Outputs
Returns the live KV entries a step recorded (per its KV ledger) on the run's upload, for resolving `${{ steps.<id>.outputs.kv.<key> }}`. Empty for non-upload runs, steps with no KV outputs, or keys since deleted. NotFound when the step run is missing. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postList Step Local Outputs
Returns the typed run-scoped locals a step wrote, as a JSON object ("{}" when none), for resolving `${{ steps.<id>.outputs.locals.<name> }}`. NotFound when the step run is missing. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postMark Run Cancelled
Marks a QUEUED or RUNNING run CANCELLED, stores `reason` as its failure message and stamps finished_at. Terminal runs are left unchanged. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postMark Run Failed
Marks a run FAILED with the failing step id, failure class and message, and stamps finished_at. Never overwrites a run that is already terminal; unknown ids are a no-op. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postMark Run Started
Moves a QUEUED run to RUNNING and stamps started_at. Has no effect on a run in any other status or an unknown id. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postMark Run Succeeded
Marks a run SUCCEEDED and stamps finished_at. Never overwrites a run already SUCCEEDED, FAILED or CANCELLED; unknown ids are a no-op. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postMark Step Failed
Records a step run's terminal failure with the caller-chosen status (FAILED, TIMED_OUT or CANCELLED), failure class and message. Already-terminal step runs are left unchanged. NotFound when no such step run exists. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postMark Step Skipped
Marks a step run SKIPPED, used for the remaining steps after a failure halts the pipeline. NotFound when no such step run exists. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postMark Step Started
Marks the step run identified by (run_id, step_id) as started. NotFound when no such step run exists. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postMark Step Succeeded
Marks the step run SUCCEEDED unless it is already terminal. NotFound when no such step run exists. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postMint Blob Output Upload
Presigns a 15-minute PUT for a step's blob output at `pipeline-runs/<run_id>/<step_id>/<output_name>[/<filename>]` on the upload's storage backend; the object key doubles as the upload token for FinaliseBlobOutput. output_name must match the `<slug>:<local>` grammar and be in `common:*` (except reserved pre-step keys) or the run integration's own namespace (`default:*` for system pipelines). Rejects with InvalidArgument when size_bytes exceeds the manifest's declared max_size_bytes. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postMint Local Blob Upload
Presigns a 15-minute PUT for a run-scoped scratch blob at `runs/<run_id>/locals/<step_id>/<output_name>` on the default storage bucket, where a 7-day lifecycle rule removes it. Nothing is committed to UploadMetadata. Same output-name namespace rules as blob outputs. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postPresign Upload Part
Presigns a 15-minute PUT for one part of an in-progress multipart upload. object_key must lie under this run/step's scratch prefix (PermissionDenied otherwise) and part_number must be 1-10000. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postRecord Step Logs
Stores the persisted log object key and truncation flag on a step run. NotFound when no such step run exists. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postRecord Step Outputs
Overwrites a step run's output ledgers (blob output names, KV keys, local output names, local blob names) with the lists supplied. NotFound when no such step run exists. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postRecord Step Utilisation
Stores the step's resource-utilisation snapshot (JSON-encoded) on its step run. NotFound when no such step run exists. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postReport Step Spans
Buffers OpenTelemetry spans the step runtime captured into a per-step Redis list (1 hour TTL) that the coordinator drains into its trace store. An empty batch is a no-op; more than 1000 spans is refused; attributes_json longer than 16 KiB is truncated. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postResolve Renderer For Content Type
Late-binds a `<slug>:<name>` content type to its current renderer archive upload id, preferring the worker config and falling back to the renderer config. NotFound when the integration or content type doesn't exist; FailedPrecondition when there is no config, the renderer is disabled, or it has no archive upload id. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postSet Step KV Output
Writes a step's KV output to the run's upload. The output name must pass the same namespace rules as blob outputs; when the snapshot binds it to a registered IntegrationMetadataKey the row is written under that key and the value type must match (InvalidArgument otherwise), else the name is used verbatim. The key is appended to the step's KV ledger. Only valid for upload-bound runs (FailedPrecondition otherwise). **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postSet Step Local
Stores a run-scoped typed value under `output_name` in the step run's local outputs (last writer wins) and appends the name to its local-output ledger. The value never reaches UploadMetadataKV. InvalidArgument when the value has no variant set. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.
postSet Upload Common Metadata KV
Pre-step write path the coordinator uses after virus scan and classification: upserts `common:*` KV entries on exactly one of an upload or a folder, bypassing step bindings. Entries without a value are skipped; any key outside `common:*` or a value with no variant set is rejected with InvalidArgument. **Access:** internal only — the pipeline coordinator, authenticated by the shared `X-Upl-Internal-Token` header matching `PIPELINE_INTERNAL_TOKEN` (FailedPrecondition when unset, Unauthenticated on mismatch). No user authentication.
postStart Blob Upload
Starts an S3 multipart upload for a streamed blob output at the same deterministic scratch key MintBlobOutputUpload would use, returning the object key and S3 upload id. The api holds the bucket credentials; the side-car then calls PresignUploadPart, CompleteBlobUpload and FinaliseBlobOutput. Same output-name namespace rules as MintBlobOutputUpload. **Access:** internal only — step-scoped. Requires the per-step JWT in `X-Upl-Step-Token` (HS256 over `PIPELINE_INTERNAL_TOKEN`, unexpired) whose run_id/step_id claims match the request; Unauthenticated otherwise. The shared `X-Upl-Internal-Token` is accepted instead only while `PIPELINE_ALLOW_LEGACY_STEP_TOKEN_FALLBACK` is enabled.