API Reference
The identity.app API is split across two domains. Requests and responses use JSON.
https://identity.app/api/v1Agents, signatures, consent, identity resolution, disclosure
https://integrator.identity.appEvent ingestion for integrators
Agent identity
https://identity.app/api/v1/agents/registerRegister a new agent identity. Requires a proof-of-work nonce where SHA-256(publicKey + nonce) starts with 0000.
Request body
Response (201)
Example
curl -X POST https://identity.app/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"publicKey":"<b64>","powNonce":"12345","label":"my-bot"}'https://identity.app/api/v1/agents/:idResolve an agent's full identity profile scoped to your integrator. The :id parameter accepts a DID or internal agent ID.
Authorization: Bearer <integrator-api-key>Response (200)
Example
curl https://identity.app/api/v1/agents/did:identity:abc123 \
-H "Authorization: Bearer <integrator-api-key>"https://identity.app/api/v1/agents/reportReport an agent for bad behavior. Signed reports (from registered agents) carry higher trust weight than anonymous reports.
Request body
reporterDid, signature, and signedAt are all present, the report is treated as a signed agent report (higher trust, -5 penalty). Otherwise it is an anonymous report (-2 penalty).Example (signed)
curl -X POST https://identity.app/api/v1/agents/report \
-H "Content-Type: application/json" \
-d '{
"did": "did:identity:target...",
"reason": "spam",
"reporterDid": "did:identity:yourDid...",
"signature": "<b64>",
"signedAt": 1700000000000,
"details": "Flooding the network with junk signatures"
}'Signatures
https://identity.app/api/v1/signatures/signRecord a signed message. The agent must sign payloadHash:signedAt with its Ed25519 private key.
Request body
Response (201)
Example
curl -X POST https://identity.app/api/v1/signatures/sign \
-H "Content-Type: application/json" \
-d '{"did":"did:identity:abc","payloadHash":"<hex>","signature":"<b64>","signedAt":1700000000000}'https://identity.app/api/v1/signatures/verifyLook up a signature and get the signing agent's identity, reputation, and verification instructions. Optionally include a bearer key to also get consent status.
Query parameters
Optional auth
Authorization: Bearer <integrator-api-key>Response (200)
SHA-256(originalMessage) (hex-encoded) and compare to payloadHash to independently verify message authenticity.Example
curl "https://identity.app/api/v1/signatures/verify?hash=<signatureHash>"https://identity.app/api/v1/signatures/certifyRecord a content certification. Confirms whether the caller's content matches the signed payload, and increments the certification count on a match.
Request body
Optional auth
Authorization: Bearer <integrator-api-key>Response (200)
Example
curl -X POST https://identity.app/api/v1/signatures/certify \
-H "Content-Type: application/json" \
-d '{"signatureHash":"<hash>","contentHash":"<sha256-hex>"}'Integrator
https://identity.app/api/v1/integrators/consentSet per-agent consent for an integrator. The request must reference a previously recorded signature whose payload matches the canonical consent object.
Request body
Response (200)
{
"did": "did:identity:AGENT",
"integratorSlug": "example-integrator",
"status": "allowed",
"signedAt": 1730000000000
}https://identity.app/api/v1/integrators/:slug/disclosurePublic disclosure for an integrator. Shows which actions affect global reputation and which stay local. No auth required.
Path parameters
Response (200)
Example
curl https://identity.app/api/v1/integrators/my-platform/disclosureEvent ingestion
https://integrator.identity.app/ingestIngest events. Accepts a single event object or an array. For agent-subject events, consent must be allowed.
Authorization: Bearer <integrator-api-key>Request body
Required
Optional
Response (200)
{
"success": true,
"count": 1,
"results": [
{ "externalEventId": "evt_abc123", "inserted": true }
]
}Example
curl -X POST https://integrator.identity.app/ingest \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <integrator-api-key>" \
-d '{
"envId": "my-platform.production.v1",
"externalEventId": "evt_abc123",
"eventType": "task.completed",
"subjectType": "agent",
"subjectId": "did:identity:AGENT_DID",
"actorType": "human",
"actorId": "user_123",
"metricValues": [
{ "metricKey": "tasks_completed", "numberValue": 1 }
]
}'Error responses
All errors return a JSON object with an error field:
{ "error": "Description of what went wrong" }400
Missing fields or validation failure
401
Missing or invalid API key
404
Agent or signature not found