Abstractor.io

Documentation

Everything you need to deploy your first EU-sovereign AI process in under 5 minutes.

Quick start

Deploy your first AI process in 5 minutes. You will need an Abstractor account (free tier is sufficient) and Node.js 18+.

Terminal
# 1. Install the Abstractor CLI
npm install -g @abstractor/cli

# 2. Authenticate
abstractor login

# 3. Create your first ProcessSpec
cat > invoice-approval.process.json << 'EOF'
{
  "name": "invoice-approval",
  "description": "Review supplier invoices and approve or flag for manual review",
  "triggers": [
    { "type": "http_webhook", "method": "POST", "path": "/invoices" }
  ],
  "outputs": [
    { "type": "json_response", "shape": { "decision": "str", "reason": "str" } }
  ],
  "rules": [
    "Approve invoices under EUR 1000 from known suppliers automatically",
    "Flag invoices over EUR 10000 for manual review regardless of supplier",
    "Reject invoices with missing VAT number"
  ],
  "examples": [
    {
      "label": "small known supplier",
      "input": { "amount": 450, "supplier": "Acme GmbH", "vat": "DE123456789" },
      "expected_output": { "decision": "approved" },
      "blocking": true
    }
  ],
  "constraints": { "max_latency_ms": 200, "receipt_retention_days": 365 }
}
EOF

# 4. Deploy it
abstractor deploy invoice-approval.process.json

# Output:
# [1/3] Generating actor...    1.4s
# [2/3] Compiling...           0.7s
# [3/3] Running tests... 1/1   PASS
# Deployed: invoice-approval@v1
# Endpoint: https://run.abstractor.io/p/inv-a7f3/invoices

# 5. Invoke it
curl -X POST https://run.abstractor.io/p/inv-a7f3/invoices \
  -H "Authorization: Bearer $ABSTRACTOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount": 450, "supplier": "Acme GmbH", "vat": "DE123456789"}'

# Response:
# {
#   "decision": "approved",
#   "reason": "Known supplier, amount below threshold",
#   "hatp": { "receipt_id": "rcpt_01HX...", "sig": "ed25519:3a9f...", "ts": "..." }
# }

ProcessSpec reference

A ProcessSpec is a JSON document (or YAML, if you prefer) that fully describes your AI process. The Abstractor CLI and API both accept ProcessSpec as input.

Field Type Required Description
name string required Unique slug for this process. Must match [a-z0-9-]+. Used in the endpoint URL.
description string required Natural-language description sent to the LLM as context. Be specific about the business domain.
triggers Trigger[] required One or more trigger definitions. At least one is required. See Trigger reference below.
outputs Output[] required Output shape definitions. Must match the shapes returned by your examples.
rules string[] required Plain-language business rules. Write these as sentences. Minimum 1 rule.
examples Example[] optional Concrete input/output pairs used as tests. Blocking examples block deployment on failure.
constraints Constraints optional Runtime constraints. If omitted, defaults apply (200ms latency, 30-day retention).
version string optional Optional semantic version. If omitted, Abstractor increments automatically on each deploy.

API reference

Base URL: https://api.abstractor.io

All requests require an Authorization: Bearer <token> header. Tokens are issued from the dashboard.

POST /v1/processes

Deploy a new process from a ProcessSpec. Returns the process object with endpoint URL.

Body: ProcessSpec JSON
Returns: 201 Created — Process object
GET /v1/processes

List all processes in your account.

Returns: 200 OK — Array of Process objects
GET /v1/processes/{id}

Get a single process by ID.

Returns: 200 OK — Process object
DELETE /v1/processes/{id}

Deactivate a process. The endpoint stops accepting invocations. Receipts are preserved.

Returns: 204 No Content
GET /v1/processes/{id}/export

Export the full ProcessSpec as JSON. Always available, regardless of subscription status.

Returns: 200 OK — ProcessSpec JSON
GET /v1/receipts/{receipt_id}

Retrieve a HATP receipt by ID.

Returns: 200 OK — HATP receipt JSON
GET /v1/receipts

List receipts for a process. Supports ?process_id=, ?since=, ?until=, ?limit= query params.

Returns: 200 OK — Paginated receipt list

HATP receipt format

Every invocation produces a signed HATP (Hardware Attestation Trust Protocol) receipt. Receipts are self-contained and cryptographically verifiable without an Abstractor account.

Field Description
hatp_version Protocol version. Currently "1.0".
receipt_id Globally unique receipt identifier (ULID format).
actor Actor name and version that handled this invocation.
actor_hash SHA-256 hash of the compiled actor binary.
ts ISO 8601 timestamp of the invocation (UTC).
input_hash SHA-256 hash of the request payload.
decision The primary output value (mirrors the first output field).
rationale Human-readable explanation of the decision.
duration_us Actor execution time in microseconds.
region EU region where the actor executed.
sig_alg Signature algorithm. Currently "ed25519".
sig Ed25519 signature over (receipt_id + ts + input_hash + decision + rationale).
pubkey_id Key identifier. Resolve to public key at https://keys.abstractor.io/{pubkey_id}.pub
Verify a receipt (CLI example)
# Download Abstractor's public key
curl -o abst-eu-1.pub https://keys.abstractor.io/abst-eu-1.pub

# Retrieve a receipt
abstractor receipts get rcpt_01HX7KQMN2P3QR4ST5UV6WX7Y > receipt.json

# Verify the signature
abstractor receipts verify receipt.json --pubkey abst-eu-1.pub
# Output: VALID — signature verified against abst-eu-1 (ed25519)