---
title: "Independently verify a public identity-link proof"
method: GET
path: "/identity-link-proofs/v1/{identity_link_id}"
tags: ["Identity Links"]
---

# Independently verify a public identity-link proof

`GET /identity-link-proofs/v1/{identity_link_id}`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/identity-link-proofs/v1/{identity_link_id}`
- Auth: none required

Intentionally unauthenticated and authentication-invariant. Returns only immutable public proof bytes and lifecycle state. Cache-Control is no-store so revocation is visible; missing and malformed ids use the same non-revealing 404. Limited to 120 reads per minute per IP. Once any public proof exists, this route cannot be disabled by the routine rollout flag.

## Path parameters

- `identity_link_id` string, required

## Response `200`

Public proof

- IdentityLinkProof
  - `identity_link_id` string, required
  - `proof_protocol` 'run402.identity-link.nostr.v1' | 'run402.identity-link.nostr.human.v1', required
  - `status` 'active' | 'revoked', required
  - `effective_status` 'active' | 'revoked' | 'principal_inactive', required
  - `verified_at` string, date-time, required
  - `revoked_at` string, date-time, nullable, required
  - `public_subject` string, required
  - `display_subject` string, required
  - `proved_principal` IdentityLinkPrincipalAttribution, required
    - `principal_id` string, required
    - `principal_type` string, required
  - `effective_principal` IdentityLinkPrincipalAttribution, required
    - `principal_id` string, required
    - `principal_type` string, required
  - `public_payload` string, nullable, required
  - `wallet_signature` string, nullable, required
  - `nostr_event` NostrIdentityProofEvent, required
    - `id` string, required
    - `pubkey` string, required
    - `created_at` integer, required: Exact signed NIP-01 event time in Unix seconds. This protocol envelope field is the only identity-link exception to the ISO-8601 HTTP timestamp contract; converting it would invalidate the event id and signature.
    - `kind` 1 | 24243, required
    - `tags` array[], required
      - string[]: Protocol-discriminated public proof tags: optional NIP-OA for agent kind-1 proofs, or exact Run402 challenge-binding tags for human kind-24243 proofs.
    - `content` string, required: Exact RFC 8785 serialization of {public_payload,wallet_signature}.
    - `sig` string, required
  - `verification_statement` HumanIdentityLinkVerificationStatement, required
    - `schema_version` 1, required
    - `acceptance_context` 'standalone_human_link' | 'buzz_human_adoption', required
    - `adopting_principal` 'run402_verified', required
    - `target_session` 'run402_verified' | 'legacy_run402_verified', required
    - `fresh_passkey` 'run402_verified', required
    - `verified_at` string, date-time, required

## Other responses

- `404`: Proof not found
- `429`: IDENTITY_LINK_RATE_LIMITED. Retry-After and details.retry_after_seconds are present.
- `503`: Pre-launch public-proof capability is disabled; unavailable only while no public proof exists

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
