Skip to Content
Results & Artifacts

Results & artifacts

Every job ends in structured JSON you can read programmatically, plus any files your tasks uploaded as artifacts. This page covers reading results, watching logs live, and the artifact lifecycle.

Reading results

After a job reaches a terminal state, fetch its structured results:

curl -sS -H "Authorization: Bearer $TOKEN" \ https://computalot.com/api/v1/results/<job_id>

The response includes per-task results plus summary, aggregate_result, aggregate_aliases, completeness, result_persisted, output_persisted, and your submitted metadata (meta / variant).

Task outcomes come from the process exit status: exit 0 completes a task, non-zero fails it, and result JSON cannot override that. result_quality and result_warnings are reserved response fields (currently null and []); non-empty result_schema submissions return 422.

Logs and live output

While a task is running, the fastest log surface is GET /api/v1/jobs/<job_id>/stream (SSE) or GET /api/v1/jobs/<job_id>/tasks — both update live_feedback.output_tail as stdout/stderr arrives. If your code launches child processes, run them unbuffered or flush explicitly so their logs appear immediately.

For the aggregated stdout/stderr after (or during) a run:

curl -sS -H "Authorization: Bearer $TOKEN" \ https://computalot.com/api/v1/jobs/<job_id>/output

Two things worth knowing when debugging:

  • During auto-retry, /output preserves the most recent failed attempt’s output and error until the new attempt writes its own — you never lose the failure you’re chasing.
  • If the worker failed before your command started, the visible text is platform preflight stderr, not your process output.

Artifacts

Content-addressed file storage for moving data between jobs (datasets in, checkpoints and reports out). Two ways in: relay uploads through the controller (up to 2 GiB) or registering a URL where the object already lives. Retired direct/multipart upload endpoints return 410 Gone with migration guidance.

# Upload a file (relay, up to 2 GiB) curl -sS -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/octet-stream" \ -H "X-Artifact-Filename: dataset.parquet" \ --data-binary @dataset.parquet \ https://computalot.com/api/v1/artifacts # Register an existing external object (any size) curl -sS -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"url":"https://storage.example/dataset.parquet","filename":"dataset.parquet"}' \ https://computalot.com/api/v1/artifacts/external # Download curl -sS -H "Authorization: Bearer $TOKEN" \ https://computalot.com/api/v1/artifacts/<id> -o output.bin # List (includes size, timestamps, reference count, deletion eligibility) curl -sS -H "Authorization: Bearer $TOKEN" \ https://computalot.com/api/v1/artifacts # Delete once every referencing job is terminal curl -sS -X DELETE -H "Authorization: Bearer $TOKEN" \ https://computalot.com/api/v1/artifacts/<id>

To use an artifact as a job input, pass its concrete ID in payload._artifacts.download — ownership is verified and the reference recorded at submission, before any work or billing hold is created.

Quota and retention

  • Artifacts stay retained (and count against your quota) until you delete them. The default quota is 100 GiB of retained bytes per account.
  • Content is deduplicated by hash within your account, so re-uploading the same bytes doesn’t double-count; a relay upload that would exceed the quota returns 507 with code artifact_quota_exceeded.
  • GET /api/v1/artifacts reports authoritative quota limit_bytes, used_bytes, and remaining_bytes alongside the artifact page.
  • Deletion is reference-safe: DELETE returns 409 artifact_in_use only while a producing job or job input belongs to a non-terminal job. Completed, failed, cancelled, lost, and partial jobs do not block owner deletion.
  • Accepted deletion releases account quota and hides metadata immediately. Namespaced backing data is removed after the default 24-hour garbage-collection grace; historical job artifact links then return not found.

Streaming (SSE)

# Single job — task deltas with live_feedback.output_tail (rolling logs without polling) curl -sS -N -H "Authorization: Bearer $TOKEN" \ https://computalot.com/api/v1/jobs/<job_id>/stream # Multiple jobs — one stream; frames preserve client_ref, tags, meta, variant, # aggregate summary fields, and result_persisted / output_persisted curl -sS -N -H "Authorization: Bearer $TOKEN" \ "https://computalot.com/api/v1/jobs/watch?ids=<id1>,<id2>" # Whole project curl -sS -N -H "Authorization: Bearer $TOKEN" \ "https://computalot.com/api/v1/projects/<project>/stream"
Last updated on