Back to declaration
API contract · v1

One call. One decision.

POST a declared set of asset identifiers plus the intended use and budget. Receive a composite decision, quote, obligations, source evidence, and signed receipt.

ALLOW

Every asset policy matches and the stated total is within budget.

DENY

At least one policy contains a hard prohibition for the requested use.

REVIEW

Authority, policy data, or budget alignment needs a human decision.

Endpoint

POST /v1/clearance

Demo asset IDs work without authentication. Publisher assets requireAuthorization: Bearer with a key issued in Studio.

Download OpenAPI YAML
Request
{
  "request_id": "campaign-1042",
  "assets": [{ "asset_id": "asset:original-001" }],
  "use": {
    "purpose": "generation",
    "commercial": true,
    "attribution_supported": true,
    "territory": "worldwide",
    "model": "creative-model-v1"
  },
  "budget": { "max_total_cents": 2000 }
}
Response
{
  "decision": "ALLOW",
  "reason_code": "COMPOSITE_POLICY_RESULT",
  "quote": { "currency": "USD", "total_cents": 850 },
  "obligations": [
    { "type": "attribution", "value": "Sound source: Northline" },
    { "type": "revenue_share", "value": 250 }
  ],
  "receipt": {
    "schema": "iprs.receipt/1",
    "request_id": "campaign-1042",
    "decision": "ALLOW",
    "signature": { "alg": "HS256", "value": "..." }
  }
}
Behavior

Safe defaults

Composite

Any hard prohibition makes the complete request DENY. Any unresolved element makes it REVIEW.

Idempotent

For authenticated calls, repeating the same request_id returns the stored response.

Budget-aware

A quote above the caller maximum produces REVIEW instead of silently rewriting terms.

Evidence-first

Every outcome is signed. The receipt proves evaluation, not ownership or legality.

Source-preserving

Each asset result names the policy source used in the decision.

Bounded

The proof accepts 1–50 declared assets and does not perform similarity detection.

Start with a policy, not an integration meeting.

Sign in, publish an asset, issue a key, and call the endpoint. No other IPRS API is required.

Open publisher studio