NIPs by PolleramaCommunity NIPs, surfaced by trustConnect
npub1cn670f663n3...

Attestations

Published Mar 25, 2026
kind 31871kind 31872kind 31873kind 11871

Abstract

Nostr lacks a standardized, interoperable way to make, track, and revoke truthfulness claims about Nostr events.

This NIP introduces Attestations, which provides a base structure to:

  • Make attestations about that validity of any other event on Nostr of any kind;
  • Revoke attestations about previous validity claims.

This base Attestation structure can optionally be extended to:

  • Manage simple attestation lifecycles;
  • Request attestations from other npubs;
  • Recommend individual attestation providers based on their proficiency in verifying given kinds;
  • Publish your verification proficiency for given kinds.

Attestations enable a web of-trust for notes.


Definitions

Base Definitions

EntityDefinition
AssertorSigner of the Assertion Event. Interchangeable with Attestee.
AttestorVerifying party and signer of theAttestation Event.
Assertion EventEvent being attested to by the Attestor.
Attestation EventEvent published by the Attestor to signal attestation of the Assertion Event.

!Simple Entity Relationship Diagram

erDiagram
    ATTESTOR ||--o{ ATTESTATION_EVENT : signs
    ASSERTOR ||--o{ ASSERTION_EVENT : signs
	
	ATTESTATION_EVENT ||--|| ASSERTION_EVENT : attests_to

Extended Definitions

EntityDefinition
RequestorSigner of the Attestation Request Event.
ReccomenderSigner of the Attestation Recommendation Event.
Attestation Request EventThe request for an Attestation Event from an Attestor.
Attestor Recommendation EventThe recommendation of a given Attestor for proficiency in the verification of given kinds.
Attestor Proficiency Declaration EventA declaration of proficiency from a given Attestor in the verification of given kinds.

!Extended Entity Relationship Diagram

erDiagram
    ATTESTOR o|--o{ ATTESTATION_EVENT : signs
    ATTESTOR o|--|| ATTESTOR_PROFICIENCY_DECLARATION_EVENT : signs
    ASSERTOR o|--o{ ASSERTION_EVENT : signs
    ASSERTOR o|--o{ ATTESTATION_REQUEST_EVENT : signs
	REQUESTOR o|--o{ ATTESTATION_REQUEST_EVENT : signs
	RECOMMENDER o|--o{ ATTESTOR_RECOMMENDATION_EVENT : signs
	
	ATTESTATION_EVENT ||--|| ASSERTION_EVENT : attests_to
    ATTESTATION_REQUEST_EVENT ||--|| ASSERTION_EVENT : requests_attestation_of
    ATTESTOR_RECOMMENDATION_EVENT ||--|| ATTESTOR: recommends
    ATTESTOR_PROFICIENCY_DECLARATION_EVENT ||--|| ATTESTOR: declares_proficiency_of

Specification

Event Kinds

KindDescriptionType
31871AttestationAddressable
31872Attestation RequestAddressable
31873Attestor RecommendationAddressable
11871Attestor Proficiency DeclarationReplaceable

Tags

Attestation Event (31871)

Event signed by the Attestor. The Attestor should only sign an Attestation Event after verifying the validity of the Assertion Event to a degree appropriate for its kind type.

TagDescriptionFormatRequired
dUnique identifier for addressable attestation.["d", "<npub>:my-claim-id"]Yes
e / aSpecific Assertion Event. Exactly one of e or a must be present.["e", "<event-id>"] or ["a", "<kind>:<pubkey>:<d-tag>"]Yes
sMarks an Attestation as being in only one of the following states: verifying - valid - invalid - revoked["s","verifying" <> "valid" <> "invalid" <> "revoked"]Yes
valid_fromUnix timestamp (seconds). The earliest time (inclusive) at which the attestation is valid from. Clients should interpret the absence of valid_from tag as having validity/invalidity from the created_at timestamp of the Assertion Event["valid_from",1671217411]Optional
valid_toUNIX timestamp (seconds). The latest time (inclusive) at which the attestation is valid from. Clients should interpret the absence of valid_to tag as having validity/invalidity in perpetuity.["valid_from",1671567643]Optional
expirationUNIX timestamp (seconds). The time (inclusive) at which the Attestation Event will expire and be treated as such by relays in accordance to NIP-40. Clients should set this it be the same value as valid_to if there is no value in the Attestation Event being long-lived.["expiration",1671567643]Optional
requestAttestation Request Event that prompted this attestation.["request", "31872:<requestor_pubkey>:<d-tag>"]Optional

content key should be used for optional human-readable description.


Attestation Request (31872)

Event signed by the Requestor (usually the Assertor) requesting an Attestation Event from an Attestor.

TagDescriptionFormatRequired
dUnique identifier for addressable attestation request.["d", "<requestor_pubkey>:my-request-id"]Yes
e/aSpecific Assertion Event Exactly one of e or a must be present.["e", "<event-id>"] or ["a", "<kind>:<pubkey>:<d-tag>"].Yes
pOne or more requested Attestators. Repeatable.["p", "<attestor_pubkey1>"]No
cashu_tokenA Cashu token locked to given spending conditions (HLTC, P2PK, etc.). Spending conditions may be locked to the observation of requested Attestation Events.["cashu_token", "<cashuBo...>"]No

Attestor Recommendation (31873)

Event signed by the Recommender.

Allows any npub to recommend an Attestor for verification proficiency in one or more event kinds.

TagDescriptionFormatRequired
dUnique identifier for the recommendation.["d", "<attestor_pubkey>:<recommendationid>Yes
pPubkey of recommended Attestator.["p", "<attestor_pubkey>"]
kOne or more event kinds the attestor is recommended for verifying. Repeatable.["k", "<kind1>"]Yes

content key should be used for optional human-readable description.


Attestor Proficiency Declaration (11871)

Event signed by the Attestor.

Enables an attestor to publicly declare which event kinds they are proficient in verifying; facilitating discovery of suitable attestors for specific verification needs.

TagDescriptionFormatRequired
kOne or more event kinds the attestor claims verification proficiency in. Repeatable.["k", "<kind>,"]Yes

content key should be used for optional human-readable description.


Worked Examples

1. Attestation Request

{
  "kind": 31872,
  "tags": [
	["d", "npub1requestor...:my-request-id"],
    ["a", 12345:npub1...:central-park-saftey-assertation"],
    ["p", "npub1attestor1..."]
    ["p", "npub1attestor2..."]
  ],
  "content": "Verify safety status for Central Park"
}

2. Attestation

{
  "kind": 31871,
  "tags": [
    ["d", "npub:safety-verification-2025"],
    ["a", "12345:npub1...:central-park-saftey-assertation"],
    ["s", "valid"],
    ["valid_from", "1760227200"], // Sept 12, 2025 @ 00:00 UTC
    ["valid_to",   "1760486400"],  // Sept 15, 2025 @ 00:00 UTC
    ["request", "request-event-id-123"]
  ],
  "content": "Safety inspection valid"
}

3. Revocation

{
  "kind": 31871,
  "tags": [
    ["d", "npub:safety-verification-2025"],
    ["s", "revoked"]
  ],
  "content": "Retracted due to new safety concerns"
}

Related NIPs

NIP-03 - OpenTimeStamps Attestations

An Attestor, Assertor or any other npub may choose to issue a kind:1040 OpenTimestamps Attestations for Events event to anchor the Attestation Event to a given blockheight on the Bitcoin timechain.

NIP-58 - Badges

An Attestor or any other npub may choose to issue a badge for a given Attestation should they wish.