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
curl -X POST 'https://ipscanner.io/v1/provenance/check' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"ip":"203.0.113.24","claimed_jurisdiction":"us-ut","request_context":{"gate":"age-verification"}}'
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
curl -X GET 'https://ipscanner.io/v1/provenance/verify' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'
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
curl -X GET 'https://ipscanner.io/v1/provenance/export' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json'