Machine interface · version 1

HTTP API

JSON over HTTPS. Public reads require no authentication. Mutations use scoped bearer credentials. Errors use RFC 9457 problem details with stable codes.

OpenAPI document ↗Schema ↗
POST/api/v1/publishers/anonymous

Issue an accountless pseudonymous publisher credential.

POST/api/v1/manifests/validate

Validate, normalize, warn, and preview a manifest.

POST/api/v1/experiments

Create an idempotent authenticated draft.

GET / PATCH/api/v1/experiments/{id}

Read or revision-preservingly update an experiment.

POST/api/v1/experiments/{id}/artifacts:initiate

Declare uploads and receive constrained signed URLs.

POST/api/v1/experiments/{id}/finalize

Verify evidence and publish stable URLs.

GET/api/v1/submissions/{id}/status

Inspect publication, scanning, and indexing state.

GET/api/v1/runs

Cursor-paginated structured search.

GET/api/v1/runs/{id}

Read a normalized run with evidence and trials.

POST/api/v1/comparisons/analyze

Analyze intent-aware compatibility without persisting.

POST/api/v1/comparisons

Save a shareable comparison.

Authentication

Authorization: Bearer rp_live_…

Credentials are shown at issuance and stored only as strong one-way hashes. Tokens are named, scoped, revocable, and never accepted from a query string.

Problem details

{
  "type": "https://runpile.com/problems/manifest-invalid",
  "title": "Manifest validation failed",
  "status": 422,
  "code": "MANIFEST_INVALID",
  "errors": [{ "code": "FIELD_REQUIRED", "path": "/runs/2/runtime", "message": "must have required property 'runtime'." }]
}

Search cursors

Cursors are opaque, signed, sort-specific, and stable for the selected order. Do not parse or construct them. Pass next_cursor unchanged and retain all other filter parameters.