Deterministic
The same inputs and the same pack version always return the same decision. Arithmetic is decimal, and the clock and timezone are inputs you provide, not read from the system.
Opaline
Evaluate versioned rule packs against your data. Get the same decision every time, recorded in a trail you can verify.
Opaline runs your rules and writes each decision to an append-only trail as it happens. You can replay any decision later and prove exactly what produced it, without trusting the system that made it.
Why Opaline
The same inputs and the same pack version always return the same decision. Arithmetic is decimal, and the clock and timezone are inputs you provide, not read from the system.
Every decision is written to an append-only hash chain before the response returns. Signed checkpoints are anchored outside the engine, so you can verify your history yourself.
No UI, no document parsing, no domain logic built in. You publish the rules as versioned packs, and your apps and agents build on the API, SDK, or MCP.
Performance
Opaline compiles every pack to bytecode the moment you publish. Decisions run compiled, not interpreted, fast enough to call inline in the transaction that needs the answer.
Use cases
Send the facts, get a decision back. The shape is the same in every domain.
Check an invoice against the rules in effect on its date before it posts.
Resolve the rate and treatment for a transaction, and see the rule that set it.
Turn an application into a clear pass, review, or reject, with the reason attached.
Score a transaction and see exactly which rules moved the number.
How it works
Publish your rules as an immutable, versioned pack. Each publish is linted, compiled, and tested before it is accepted.
Send your facts and get a decision back, including the outcome of every rule behind it. One call, from any language.
Every live decision is written to the trail before the response returns. Verify any of them yourself, anytime.
curl -X POST https://api.opaline.dev/v1/decide \
-H "Authorization: Bearer opl_live_…" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"pack": "acme.bill.validity",
"version": "1.2.0",
"facts": { "vat_rate": "0.1", "total": "1250.00" },
"context": { "transaction_date": "2026-06-12" }
}'Proof
Every decision is recorded the moment it is made, and the record cannot be changed afterward without it showing. You can check it yourself, so you never have to trust the system that produced it.
All three are caught the moment you verify.
Opaline has no domain logic of its own. It runs whatever rules you publish, the same way every time, whatever the decision.