---
title: "Complete a public human identity link with Buzz consent"
method: POST
path: "/human-identity-links/v1"
tags: ["Identity Links"]
---

# Complete a public human identity link with Buzz consent

`POST /human-identity-links/v1`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/human-identity-links/v1`
- Auth: HTTP bearer

Requires the same direct human session lineage, a fresh passkey, and the exact unexpired kind-24243 event returned by the released Buzz browser callback. The resulting public link is attribution only and creates no authenticator, membership, adoption, or organization authority.

## Request body

- HumanIdentityLinkCompletionRequest
  - `human_identity_link_challenge_id` string, required
  - `nostr_event` BuzzNostrEvent, required
    - `id` string, required
    - `pubkey` string, required
    - `created_at` integer, required: Signed NIP-01 event time; conversion would invalidate the event id and signature.
    - `kind` integer, required
    - `tags` array[], required
      - string[]
    - `content` string, required
    - `sig` string, required

## Response `200`

Exact event-id retry

- 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

- `201`: Public human identity link created
- `400`: Malformed request or callback event
- `403`: Direct human session, exact lineage, or fresh passkey required (IDENTITY_LINK_REQUIRES_HUMAN_SESSION or IDENTITY_LINK_AUTHENTICATOR_MISMATCH)
- `409`: Expired, consumed, replayed, mismatched, or conflicting link
- `422`: Buzz signature or exact challenge binding is invalid

---

[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)
