Sanad Verify API
A signed, public, read-only endpoint that lets any consumer ask: "is this entity compliant with India's DPDP Act 2023 and CERT-In Directives, right now?" -- and get back a cryptographically verifiable JSON proof.
Built for cyber-insurance underwriters, lenders, procurement teams, auditors, and regulators who need machine-verifiable compliance evidence without trusting any single party's word.
For insurers and lenders
Underwrite cyber and DPI-loss policies with a single signed input. Settle claims with proof of the entity's posture on the date of the incident.
For govt and authorities
Check the live compliance posture of any participating entity in your jurisdiction with one signed API call — no site visits, no self-reported spreadsheets.
For auditors and CAs
Year-end audit pulls in seconds instead of weeks. Every response carries a receipt the client can re-fetch and verify offline.
Quick start
POST a tenant_id (or license_key). Get back a signed JSON. Verify the signature offline against our published public key.
curl -X POST https://www.cognoshift.in/api/verify/v1/check \
-H 'Content-Type: application/json' \
-d '{
"tenant_id": "<TENANT_UUID>",
"consumer_id": "example-insurer-underwriting"
}'No API key required today; requests are rate-limited per IP. Consumer API keys with usage dashboards are on the roadmap below.
Response shape
Every response is a signed envelope. payload is the canonicalised JSON (RFC 8785-style key sorting); signature is ed25519 over the SHA-256 of the canonical payload.
{
"payload": {
"receipt_id": "VR-3a7af4b2e8",
"entity_ref": "22e19c95-...",
"entity_name": "Acme Public School",
"compliance_state":"PARTIAL",
"score": 73,
"directives": {
"automated": 5,
"self_attested": 12,
"failing": 3,
"not_configured":0,
"total": 20
},
"sentinel": {
"active": true,
"endpoints_online": 14,
"last_heartbeat": "2026-05-12T11:09Z"
},
"last_dpia_approved_at": "2026-04-18T00:00:00Z",
"last_breach_filed_at": null,
"sentinel_attestation": {
"provider": "Microsoft Platform Crypto Provider",
"tpm_anchored": true
},
"evaluated_at": "2026-05-12T11:42:00Z",
"verify_chain_url": "https://www.cognoshift.in/api/verify/v1/chain/VR-3a7af4b2e8",
"service_version": "verify-v1",
"attribution": "Sanad Verify (CognoShift)"
},
"payload_hash": "e8f6a3...",
"signature": "<ed25519-base64>",
"public_key": "<spki-der-base64>",
"algorithm": "ed25519",
"signed_at": "2026-05-12T11:42:00Z"
}Verifying a response offline
- Fetch the current Verify API public key from
/api/verify/v1/public-key. Cache it for 24 h. - Take the
payloadobject from the signed envelope. Canonicalise: sort object keys recursively (RFC 8785-style). - Compute SHA-256 of the canonicalised string. This is the
payload_hash. - Verify
signature(base64 ed25519) against the hash, using the public key from step 1. - If valid: the response was issued by Sanad's Verify service at
signed_atand the entity's state was as described. We cannot retroactively alter what we said.
Reference implementations of step 2-4 in three languages are available in the Sanad Verifier SDK at /docs/verifier-sdk.
Receipts
Every response carries a receipt_id (e.g. VR-3a7af4b2e8). The same response can be re-fetched verbatim at:
curl https://www.cognoshift.in/api/verify/v1/chain/<RECEIPT_ID>
Use this when you need to hand a third party a single URL that resolves to a signed JSON they can verify. The receipt is cached for the lifetime of the Sanad Verify service.
Public key
curl https://www.cognoshift.in/api/verify/v1/public-key
JWKS-style envelope. Single ed25519 key today, with planned rotation policy in v2. x_spki_b64 is the SPKI-DER public key in base64.
What "compliant" means here
compliance_state is computed from two signals:
DPDP Act 2023
All applicable DPDP obligations (notice, consent receipts, DPO appointment, DPIA, rights handling, retention enforcement, breach reporting) tracked via signed Sanad artefacts.
CERT-In Direction 70B (2022) + CIAD-2026-0020
A 20-item compliance readiness checklist: 4 are CERT-In Direction 70B/2022 obligations (6h incident reporting, PoC, 180-day logs, NTP sync), the other 16 are security best-practice controls tracked alongside them. Six of the twenty (NTP sync, software inventory, patch state, BitLocker, Defender, email/network filtering) are auto-evaluated via the Sanad Sentinel hardware agent; the rest are self-attested through the DPO console.
The directives object splits Sentinel-evidenced ("automated") from self-attested counts, so a consumer can apply their own threshold. The sentinel_attestation object surfaces whether the agent uses TPM 2.0 hardware signing (provider == Microsoft Platform Crypto Provider).
Opt-in semantics
Entities are not queryable by default. An entity owner enables verification in the Sanad portal (settings -- coming in L2 UI; SQL-only today). Until then, the Verify API returns ENTITY_NOT_PUBLIC (403). This prevents the Verify endpoint from being used as an enumeration oracle.
Roadmap
- L1 live Public read-only check, signed responses, receipts, public key endpoint.
- L2 next Consumer API keys, per-call metering, usage dashboard, paid plans.
- L3 next Authority integrations: event-triggered webhooks and regulator reporting feeds.
Integrating Sanad Verify into an underwriting, lending, procurement, or supervisory pipeline? We work directly with the first consumers of each category.
Email partnerships@cognoshift.inReference docs and the verifier SDK live at /docs. Every response is signed; compliance data is stored and processed in India.