Skip to content

Public API

Audits over HTTP

Everything the page above does goes through a public JSON API. Create an audit, poll it until it finishes, download the PDF, then update or delete it with the edit token you were given on creation.

Base URL https://steelabs.tech/api/v1

Open API documentation

Explore endpoint details, request examples and an interactive API client in our GitBook documentation.

Endpoints

MethodPathTokenWhat it does
GET/auditsNoneList publicly listed audits. Query: q, status, device, sort (created_at | score | name), order, limit (1–100), offset.
POST/auditsNoneCreate an audit (JSON, or multipart with an attachment). Returns 201 and the editToken, once.
GET/audits/{id}NoneOne audit, including the full findings once it is done.
PATCH/audits/{id}BearerChange any field. Changing url, device, maxPages, checkAccessibility or scheduledFor re-runs it.
DELETE/audits/{id}BearerDelete the audit, its PDF report and its attachment. Returns 204.
POST/audits/{id}/runBearerQueue a fresh run with the current settings. Returns 202.
GET/audits/{id}/reportNoneThe PDF report, once the status is done.
GET/audits/{id}/attachmentNoneThe uploaded attachment, if any.
GET/openapi.jsonNoneOpenAPI 3.1 description of all of the above.

Fields and validation

FieldTypeRule
urlstring (URL)Required on create. Public http(s) only; private, loopback and metadata hosts are refused.
namestring2–80 characters. Defaults to the domain.
deviceenumdesktop or mobile. Default desktop.
maxPagesinteger1–10. Default 3.
passThresholdnumber0–100 in steps of 0.5. Default 70.
checkAccessibilitybooleanDefault true.
scheduledFordate-timeISO 8601 with offset, from now up to 7 days ahead. Default now.
notesstringUp to 1,000 characters.
listedbooleanShow in the public list (GET /audits). Default false: reachable only by id.
attachmentfileMultipart only. PNG, JPEG, WebP or PDF, 4 MB or less, checked by content.

Errors use one shape: { ok: false, error, message?, fields? }, with status 400, 401, 403, 404, 413, 415, 429 or 503. Writes are limited per network and site-wide per hour.

Examples

Create an audit

curl -s -X POST https://steelabs.tech/api/v1/audits \
  -H 'content-type: application/json' \
  -d '{"url":"https://example.com","device":"mobile","maxPages":2,"passThreshold":72.5,"checkAccessibility":true}'
# → 201 {"ok":true,"data":{"id":"…","status":"queued",…},"editToken":"…"}

With an attachment

curl -s -X POST https://steelabs.tech/api/v1/audits \
  -F url=example.com -F name='Landing page' -F attachment=@brief.pdf

Poll until done, then fetch the report

curl -s https://steelabs.tech/api/v1/audits/$ID | jq '.data.status, .data.score'
curl -s -o report.pdf https://steelabs.tech/api/v1/audits/$ID/report

Update and delete with the edit token

curl -s -X PATCH https://steelabs.tech/api/v1/audits/$ID \
  -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
  -d '{"name":"Renamed","passThreshold":80}'

curl -s -X DELETE https://steelabs.tech/api/v1/audits/$ID -H "authorization: Bearer $TOKEN"   # → 204

Validation errors name the field

curl -s -X POST https://steelabs.tech/api/v1/audits -H 'content-type: application/json' \
  -d '{"url":"http://127.0.0.1","maxPages":40,"passThreshold":"high"}'
# → 400 {"ok":false,"error":"validation","fields":{
#     "url":"That address points to a private or local network.",
#     "maxPages":"Crawl at most 10 pages.",
#     "passThreshold":"Enter a number."}}

openapi.json