Read scored articles
curl -H "Authorization: Bearer opt_live_your_key" \ https://vistoa.com/v1/articles?limit=10
API docs
Use Bearer authentication. Query-string API keys are rejected. Sandbox keys return deterministic data without touching quota, Stripe, or production records.
Quickstart
curl -H "Authorization: Bearer opt_live_your_key" \ https://vistoa.com/v1/articles?limit=10
Score requests are async. A new article score increments billable usage only after scoring completes.
curl -X POST https://vistoa.com/v1/articles/score \
-H "Authorization: Bearer opt_live_your_key" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/news/story"}'
curl -H "Authorization: Bearer opt_live_your_key" \
https://vistoa.com/v1/articles/score/{score_request_id}Integration
opt_test_ return deterministic sandbox data for score requests, common reads, and webhook tests.timestamp.body. Reject requests where X-Optiarms-Timestamp is more than five minutes off.const signed = `${timestamp}.${rawBody}`;
const expected = "v1=" + crypto
.createHmac("sha256", webhookSecret)
.update(signed)
.digest("hex");{ error: { code, message } }. Common B2B codes include missing_bearer_token, scope_forbidden, plan_forbidden, quota_exceeded, and rate_limit_exceeded.Endpoint map
GET /v1/articlesPOST /v1/articles/scoreGET /v1/articles/score/{id}GET /v1/articles/{id}GET /v1/articles/by-url?url=...GET /v1/outletsGET /v1/outlets/{slug}GET /v1/methodology/promptsGET /v1/methodology/eval-runsPOST /v1/webhooksGET /v1/webhooksGET /v1/webhooks/{id}PATCH /v1/webhooks/{id}DELETE /v1/webhooks/{id}POST /v1/webhooks/{id}/testPOST /v1/webhooks/{id}/replayGET /v1/webhooks/{id}/deliveriesGET /v1/stream/articlesGET /v1/stream/clusters