SKAVIO AGENT TOOLS
Documentation

API documentation

Base URL https://www.skavio.eu/agent-tools. The live OpenAPI document is at /agent-tools/api/openapi.json.

1 · Authentication

Create an account in the dashboard, then issue an API key. Send the secret in the Authorization header. Keys are scoped to your company and can be revoked at any time; the secret is displayed once.

Authorization: Bearer sk_live_...

2 · Create a job

Submit a document for processing. The response returns the job state and the exact credit quote. Supply an idempotency_key to make submission safe to retry: the same key never starts a second job or charges twice.

POST /agent-tools/api/jobs
Authorization: Bearer sk_live_...
Content-Type: application/json

{
  "tool": "pdf_to_text",
  "idempotency_key": "run-2026-10-13-0001",
  "arguments": { "data_base64": "JVBERi0xLjQK..." }
}

Web operations take a URL instead of a file:

{
  "tool": "web_extract",
  "idempotency_key": "run-2026-10-13-0002",
  "arguments": { "url": "https://example.com/page" }
}
202 Accepted
{ "idempotency_key": "run-2026-10-13-0001",
  "state": "queued",
  "job_id": "…",
  "quote": { "credits": 12, "amount_micro_usd": 12000, "price_usd": "0.012",
             "cost_upper_bound_usd": "0.0078", "gross_margin": "0.35" } }

3 · Web operations

web_fetch, web_extract and web_monitor accept exactly one addressing mode: url for a public HTTPS page, or query for a bounded Google search answered by Serper. Sending both, or neither, is rejected.

{
  "tool": "web_fetch",
  "idempotency_key": "run-2026-10-17-0001",
  "arguments": { "query": "skavio agent tools" }
}

200 OK · result
{ "mode": "query", "query": "skavio agent tools",
  "provider": "serper", "returned": 5,
  "results": [ { "rank": 1, "title": "…", "url": "https://…",
                 "snippet": "…" } ] }

Search results contain only the https source URLs the provider actually returned; no link is ever synthesised. max_results is 1–10 and defaults to 5. web_extract also takes fetch_top (1–5, default 3): it fetches only that many top results through the same SSRF, DNS, TLS and robots policy as the URL mode, and binds each text block to the source_url that really answered. A blocked or unreachable source is reported with an explicit status: "error" and an error code; it is never replaced by generated text.

web_monitor in query mode returns a SHA-256 over the stable search fields (query, rank, title, url, snippet), excluding timestamps and JSON key order. Pass previous_sha256 to get changed: true/false; without it the value is null. One request is one check — there is no background polling, no subscription and no automatic alert.

4 · Optional diagnostics

All three web operations accept "diagnose": true (default false). The result then carries a diagnostic object produced by DeepSeek from the public text or snippets only: a short summary, detected issues, a source-quality rating and evidence with exact URLs. Diagnostics are priced separately and quoted before the job runs.

Model output is a validated, strict JSON interpretation — not a verified fact. Page text is untrusted input, so instructions hidden in a page are never executed. If the model is not configured, rate-limited or otherwise unavailable, the primary fetch/search/monitor result still succeeds and the payload reports "diagnostic_status": "unavailable" with a reason. No diagnosis is ever invented.

5 · Track the job

GET /agent-tools/api/jobs/{idempotency_key}

When available is true, the response lists the result files with their sizes, SHA-256 digests and download paths.

6 · Download a result

GET /agent-tools/api/jobs/{idempotency_key}/results/{result_id}/download

The response is the raw file with a Content-Disposition filename and an X-Result-SHA256 header. Results are retained for 7 days.

7 · Fund credits with USDC

Create a credit order, then submit the transaction hash once the transfer is final.

POST /agent-tools/api/orders
{ "pack_id": "pack_25000", "network": "polygon" }

201 Created
{ "order_id": "ord_...", "amount_usdc": "25.000000",
  "network": "polygon", "chain_id": 137,
  "token": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
  "pay_to": "0x…", "expires": 1791900000 }
POST /agent-tools/api/orders/{order_id}/pay
{ "tx_hash": "0x…" }

Credits are added only after the chain confirms the exact amount to the exact treasury address in native Circle USDC. Wrong network, wrong token, underpayment, an expired order or a reused transaction are rejected.

8 · Errors

Errors return { "error": "…" } with an HTTP status: 400 invalid input, 401 unauthorized, 402 insufficient credits, 404 not found, 409 conflict or unavailable, 410 expired, 503 temporarily unavailable.

MCP

The same catalogue is exposed over MCP at POST /agent-tools/mcp. Supported methods: initialize, tools/list. Authenticate with the same Bearer key.