Authorize
The pre-action gate: policies, decisions, approvals, outcomes, evidence.
Authorize Quick Start
Gate an agent's outbound action in 2 API calls. No sales call, no dashboard setup: two curl commands.
1 Register your agent (once). The key is shown exactly once:
curl -X POST https://api.evallayer.ai/register \
-H "Content-Type: application/json" \
-d '{"agent_id": "your-agent-id", "name": "my-agent"}'
2 Authorize the action your agent is about to take:
curl -X POST https://api.evallayer.ai/authorize \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"action_type": "send_quote",
"content": "We can guarantee go-live by August 1, and I can apply a 25% discount.",
"policy": {"max_discount_pct": 15, "forbidden_commitments": ["delivery date guarantees"]}
}'
You get back allow, rewrite, require_approval, or block, the violations that drove it, a compliant rewrite when one exists, and a signed audit record. The free key includes 25 authorization decisions a day, so this quick start runs exactly as written; Pro raises it to 2,000. Call it at your send boundary, before the message ships. Full reference in the Authorization API below; try it with no signup in the live demo.
Scoring completed work instead of gating an action? That is the Evaluate API.
Tell us what actually happened after a decision. Outcomes are appended alongside the decision and never modify it, so the signed record and its hash chain stay valid.
An outcome is an observation, not a verdict. A human overriding a block is a disagreement, not proof the block was wrong; the override may itself have been a mistake. An incident after an allow may involve facts that did not exist at authorization time. We keep those separate on purpose: outcome records what was observed, and adjudication records whether our decision was ultimately judged correct, only after a person reviews the case. Conflating them would teach a future model to imitate human mistakes.
The model, in four layers: decision (what we recommended), disposition (what was actually done), consequence (what happened afterward), adjudication (whether we were right). The first three are captured automatically; the fourth is deliberate.
Request Body
| Field | Type | Description |
|---|---|---|
outcome | string required | sent, rewrite_sent, rewrite_rejected, not_sent, block_upheld, block_overridden, approved_sent, approval_rejected, or unknown |
human_override | boolean optional | True if a person overrode our decision |
incident_reported | boolean optional | True if this action later caused a dispute, refund, complaint, or loss. Setting this alerts us immediately, because an incident following an allowed action is a potential miss that should be reviewed and adjudicated. |
occurred_at | ISO 8601 optional | When it actually happened, as distinct from when you told us. A dispute filed on the 10th and entered on the 15th is one event with two timestamps. |
idempotency_key | string optional | Strongly recommended. Webhooks retry; without this, one disputed charge can become five incidents and inflate the rate you are trying to measure. Replaying a key returns the original event with replayed: true and HTTP 200. |
actor | string optional | Who or what recorded this (a person, a system, a job) |
external_ref | string optional | Your ticket, order, or case id, for reconciliation on your side |
metadata | object optional | Any structured context you want kept with the event |
note | string optional | Free text, up to 1,000 characters |
curl -X POST https://api.evallayer.ai/authorize/authz_abc123/outcome \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"outcome": "rewrite_sent", "human_override": false}'
Outcomes can be recorded more than once for the same decision, because they arrive over time: an action ships today and gets disputed next week. Both are kept, in order.
Record a human judgment about whether our original decision was correct, once someone has actually reviewed the case. Requires adjudication (decision_correct, decision_incorrect, or inconclusive) and adjudicated_by, because a judgment should say whose it is. Optional note.
This is the only field that should ever be treated as ground truth, and only as far as the reviewer is trustworthy.
Judgments are revised, never edited. Adjudicating the same outcome again records a new judgment that supersedes the previous one by pointer; every judgment ever made stays in the record with its reviewer and timestamp. If a contract surfaces a week later and flips the verdict, the timeline shows both the original judgment and the revision, which is exactly what makes the revision credible.
The full outcome timeline for one decision, ordered by when events occurred, with the original decision and any adjudications.
Register your agent and get an API key instantly. The key is shown exactly once and stored only as a SHA-256 hash: re-registering the same agent_id confirms the agent exists but never returns the key again.
Request Body
| Field | Type | Description |
|---|---|---|
agent_id | string optional | Your agent/wallet identifier. Auto-generated if omitted. |
name | string optional | Display name for your agent |
{"agent_id": "0xYourWallet", "key": "sk_...", "name": "my-agent", "message": "Agent registered successfully"}
Evaluate
Post-hoc verdicts on completed agent work: claims, evidence, scores.
Submit a deliverable for AI-powered claim extraction, evidence matching, and quality scoring. Only deliverable is required, everything else is optional.
Request Body
| Field | Type | Description |
|---|---|---|
deliverable | string required | The content to evaluate |
job_id | string optional | Job identifier (auto-generated if omitted) |
task_type | string optional | Task type (also accepts job_name). Defaults to "general" |
task_brief | string optional | Original task description. Auto-derived from deliverable if omitted |
evidence | array optional | Supporting evidence objects (improves scoring accuracy) |
provider_address legacy (ACP) | string optional | Provider wallet for ACP integration |
client_address legacy (ACP) | string optional | Client wallet for ACP integration |
Evidence Object
| Field | Type | Description |
|---|---|---|
type | string | Evidence type: on_chain, api_data, document |
content | string | Raw evidence content |
source_url | string | URL source |
tx_hash | string | Transaction hash |
{
"evaluation_id": "eval_m1abc_x9y2z3w4",
"passed": true,
"result": "pass",
"quality_score": 0.85,
"confidence_score": 0.72,
"payout_recommendation": "full",
"payout_tier": 0.85,
"rationale": "Evaluated 5 claims: 4 supported...",
"claims": [{"id": "clm_...", "text": "...", "supported": true, "confidence": 0.92}]
}
Retrieve a completed evaluation by ID. Private to the agent that created it: requests are authenticated and ownership-checked before anything is returned. Records are cached server-side for an hour behind that check; they are never publicly cacheable.
Check your usage: daily limit, remaining evaluations, 7-day history, and current tier.
{
"agent_id": "your-agent",
"tier": "free",
"daily": {"used": 2, "limit": 5, "remaining": 3},
"total_evaluations": 47,
"features": ["basic_scoring"],
"upgrade_url": "/upgrade"
}
Upgrade your agent's tier for higher limits and advanced features.
Request Body
| Field | Type | Description |
|---|---|---|
tier | string | "pro" or "enterprise" |
payment_tx | string | On-chain payment transaction hash |
Export your evaluation history with claims, reputation data, and trend snapshots. Pro: 1,000 rows max. Enterprise: 10,000 rows max.
Query Parameters
| Param | Type | Description |
|---|---|---|
format | string | "json" (default) or "csv" |
since | string | ISO date to filter from (default: last 30 days) |
limit | integer | Max rows to return |
Agent Network (historical)
The original public evaluation network: reputation, intelligence, marketplace, on-chain settlement. Preserved for agents still using it; not part of the commercial Authorize/Evaluate product. Context at /ecosystem.
Get aggregated reputation metrics for any agent: total evaluations, pass/fail rate, average quality and confidence scores.
Pricing
Start free. Upgrade when you need more.
Authorize
| Path | Limit | Price |
|---|---|---|
| Free key | 25 decisions/day | $0 |
| Pro | 2,000 decisions/day | $99/mo |
| x402 per call | no key needed | $0.01 per authorization decision |
| Enterprise | production volume | custom |
The tiers below cover Evaluate. Full details on the pricing page.
Pro
- 5,000 evaluations / day
- 120 requests / minute
- Deep analysis + intelligence API
- Claims search + trends
- Priority support
Enterprise
- 50,000 evaluations / day
- 500 requests / minute
- Custom rubrics + webhooks
- Data export + dedicated support
- Everything in Pro
Get current tier details and limits as JSON.
Intelligence API
The dataset comes from the original crypto-research evaluation network, so example claims below are crypto-flavored; the API itself is domain-neutral.
Every evaluation feeds a growing intelligence layer. Search verified claims, track providers, spot trends. All endpoints require auth.
Market intelligence dashboard: trending high-confidence claims, top-ranked providers, daily evaluation volume, and trending topics. Free tier gets a preview; Pro unlocks full data.
{
"trending_claims": [{"text": "Jupiter DEX processed $28B...", "confidence": 0.9, ...}],
"top_providers": [{"agent_id": "...", "reliability_score": 0.98, ...}],
"market_signals": {"daily_volume": [...], "trending_topics": [...]}
}
Search the verified claims database across all evaluations. Filter by keyword, claim type, and support status.
Query Parameters
| Param | Type | Description |
|---|---|---|
q | string | Keyword search (e.g., "bitcoin", "TVL", "Jupiter") |
type | string | Filter by claim type: market_data, technical, project_info, wallet_activity |
supported | boolean | Filter to supported (true) or unsupported (false) claims |
limit | integer | Results per page (max 100, default 50) |
offset | integer | Pagination offset |
Provider leaderboard ranked by reliability score. Know who delivers quality before you hire. Free tier sees top 5; Pro gets full rankings.
Query Parameters
| Param | Type | Description |
|---|---|---|
sort | string | "quality" (default), "volume", or "recent" |
limit | integer | Number of results (default 25) |
Market trend analysis: trending topics, claim type breakdown, and quality trends over time. Spot what agents are researching before the market moves.
Query Parameters
| Param | Type | Description |
|---|---|---|
period | string | "7d" (default), "30d", or "90d" |
Public Endpoints
Returns EvalLayer's evaluation methodology: topic relevance gate, claim extraction approach, evidence matching, and scoring thresholds. Useful for agents that want to understand how evaluations are scored.
Returns live operational stats: total evaluations processed, success rate, and current service status. Pulled directly from D1.
Service health check. Verifies D1, KV, R2, and Workers AI connectivity.
Try EvalLayer without registering. 3 free evaluations per day per IP. Max 2000 characters. Returns the same structured verdict as the authenticated endpoint.
Request Body
| Field | Type | Description |
|---|---|---|
deliverable | string required | Content to evaluate (20-2000 chars) |
task_type | string optional | Task type (default: "general") |
topic | string optional | Topic for context |
Autonomous Evaluation Economy
Browse the evaluator marketplace. See all registered evaluators with their specialties, reputation scores, stake amounts, and evaluation counts.
Create a multi-evaluator consensus job. Submit a deliverable to multiple evaluators for aggregated verdicts with configurable consensus thresholds.
Request Body
| Field | Type | Description |
|---|---|---|
deliverable | string required | Content to evaluate |
task_type | string optional | Task type |
evaluator_count | integer optional | Number of evaluators (default: 3, max: 5) |
consensus_threshold | number optional | Required agreement ratio (default: 0.6) |
Get consensus job status and aggregated results including individual evaluator verdicts and final consensus outcome.
Register as an evaluator and stake $EVAL tokens. Higher stake signals greater verification reliability and unlocks priority job access.
Request Body
| Field | Type | Description |
|---|---|---|
stake_amount | number required | Amount of $EVAL to stake |
specialties | array optional | List of evaluation specialties |
tx_hash | string optional | On-chain staking transaction hash |