Skip to Content
Results & Artifacts

Results & artifacts

Every job ends in structured JSON that you can read programmatically, plus any files that your tasks uploaded as artifacts. This page covers results, live logs, 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. Result JSON cannot override that. result_quality and result_warnings are reserved response fields (currently null and []). The API accepts and ignores legacy object-shaped result_schema metadata. Non-object values return 422.

Logs and live output

While a task runs, 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. Their logs then 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 facts help when you debug:

  • During auto-retry, /output keeps the output and error of the most recent failed attempt until the new attempt writes its own. You never lose the failure that you chase.
  • If the worker failed before your command started, the visible text is platform preflight stderr, not your process output.

Artifacts

Artifacts are content-addressed file storage. They move data between jobs (datasets in, checkpoints and reports out). There are two ways in: relay uploads through the controller (up to 2 GiB), or registration of a URL where the object already lives. Retired direct and 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. The API validates ownership and records the reference at submission, before it creates work or a billing hold.

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.
  • Computalot deduplicates content by hash within your account. A repeat upload of the same bytes does not double-count. A relay upload that exceeds the quota returns 507 with code artifact_quota_exceeded.
  • GET /api/v1/artifacts reports the authoritative quota limit_bytes, used_bytes, and remaining_bytes with the artifact page.
  • Deletion is reference-safe. DELETE returns 409 artifact_in_use only while a producing job or a job input belongs to a non-terminal job. Completed, failed, cancelled, lost, and partial jobs do not block owner deletion.
  • An accepted deletion releases account quota and hides metadata immediately. Computalot removes namespaced backing data after the default 24-hour garbage-collection grace period. 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