Provenance
API Reference

Provenance API

Location attestation and tamper-evident audit log.

Base URLhttps://ipscanner.io

Authenticate every request with Authorization: Bearer YOUR_API_KEY. Create a key in your account.

POST/v1/provenance/check

Create an attestation

Classifies the network origin of an IP, applies the jurisdiction policy, and seals a tamper-evident attestation. Call this server-side at your age or geo gate.

ParameterInTypeRequiredDescription
ipbodystringrequiredThe end-user IP to attest (IPv4 or IPv6).
claimed_jurisdictionbodystringoptionalRegion code the request claims to be in, e.g. us-ut, uk, eu. Drives the policy action.
request_contextbodyobjectoptionalFree-form context stored with the attestation (e.g. which gate fired).
Request body
{
  "ip": "203.0.113.24",
  "claimed_jurisdiction": "us-ut",
  "request_context": {
    "gate": "age-verification"
  }
}
Response
{
  "network_origin": "vpn",
  "anonymized": true,
  "method": "ip_state:vpn",
  "confidence": 0.9,
  "policy_action": "block",
  "attestation_id": 80421
}
POST /v1/provenance/check
const apiKey = 'YOUR_API_KEY';

const res = await fetch('https://ipscanner.io/v1/provenance/check', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "ip": "203.0.113.24",
    "claimed_jurisdiction": "us-ut",
    "request_context": {
      "gate": "age-verification"
    }
  })
});

const data = await res.json();
console.log(data);
GET/v1/provenance/verify

Verify the chain

Recomputes every entry hash in your audit log and confirms the chain is intact. brokenAt is the id of the first altered row, or 0 when the chain verifies.

Response
{
  "ok": true,
  "count": 80421,
  "brokenAt": 0
}
GET /v1/provenance/verify
const apiKey = 'YOUR_API_KEY';

const res = await fetch('https://ipscanner.io/v1/provenance/verify', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  }
});

const data = await res.json();
console.log(data);
GET/v1/provenance/export

Export evidence

Returns a signed-evidence CSV of your attestations for a date range, with a chain-verification header. Use it to demonstrate proportionate measures to a regulator.

ParameterInTypeRequiredDescription
fromquerydateoptionalStart date (YYYY-MM-DD or RFC3339). Defaults to the beginning.
toquerydateoptionalEnd date (YYYY-MM-DD or RFC3339). Defaults to now.
Response
# provenance evidence export
# range,2026-01-01,2026-06-30
# chain_verified,true,count,80421
id,ts,ip,claimed_jurisdiction,network_origin,anonymized,method,confidence,policy_action,entry_hash
80421,2026-06-20T00:09:42Z,203.0.113.24,us-ut,vpn,true,ip_state:vpn,0.9000,block,9f2c...

Responds with text/csv as an attachment, not JSON.

GET /v1/provenance/export
const apiKey = 'YOUR_API_KEY';

const res = await fetch('https://ipscanner.io/v1/provenance/export', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  }
});

const data = await res.json();
console.log(data);