Attestations
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
| Entity | Definition |
|---|---|
Assertor |
Signer of the Assertion Event. Interchangeable with Attestee. |
Attestor |
Verifying party and signer of theAttestation Event. |
Assertion Event |
Event being attested to by the Attestor. |
Attestation Event |
Event published by the Attestor to signal attestation of the Assertion Event. |

erDiagram
ATTESTOR ||--o{ ATTESTATION_EVENT : signs
ASSERTOR ||--o{ ASSERTION_EVENT : signs
ATTESTATION_EVENT ||--|| ASSERTION_EVENT : attests_to
Extended Definitions
| Entity | Definition |
|---|---|
Requestor |
Signer of the Attestation Request Event. |
Reccomender |
Signer of the Attestation Recommendation Event. |
Attestation Request Event |
The request for an Attestation Event from an Attestor. |
Attestor Recommendation Event |
The recommendation of a given Attestor for proficiency in the verification of given kinds. |
Attestor Proficiency Declaration Event |
A declaration of proficiency from a given Attestor in the verification of given kinds. |

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
| Kind | Description | Type |
|---|---|---|
31871 |
Attestation | Addressable |
31872 |
Attestation Request | Addressable |
31873 |
Attestor Recommendation | Addressable |
11871 |
Attestor Proficiency Declaration | Replaceable |
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.
| Tag | Description | Format | Required |
|---|---|---|---|
d |
Unique identifier for addressable attestation. | ["d", "<npub>:my-claim-id"] |
Yes |
e / a |
Specific Assertion Event. Exactly one of e or a must be present. |
["e", "<event-id>"] or ["a", "<kind>:<pubkey>:<d-tag>"] |
Yes |
s |
Marks an Attestation as being in only one of the following states: verifying - valid - invalid - revoked |
["s","verifying" <> "valid" <> "invalid" <> "revoked"] |
Yes |
valid_from |
Unix 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_to |
UNIX 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 |
expiration |
UNIX 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 |
request |
Attestation 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.
| Tag | Description | Format | Required |
|---|---|---|---|
d |
Unique identifier for addressable attestation request. | ["d", "<requestor_pubkey>:my-request-id"] |
Yes |
e/a |
Specific Assertion Event Exactly one of e or a must be present. |
["e", "<event-id>"] or ["a", "<kind>:<pubkey>:<d-tag>"]. |
Yes |
p |
One or more requested Attestators. Repeatable. |
["p", "<attestor_pubkey1>"] |
No |
cashu_token |
A 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.
| Tag | Description | Format | Required |
|---|---|---|---|
d |
Unique identifier for the recommendation. | ["d", "<attestor_pubkey>:<recommendationid> |
Yes |
p |
Pubkey of recommended Attestator. |
["p", "<attestor_pubkey>"] |
|
k |
One 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.
| Tag | Description | Format | Required |
|---|---|---|---|
k |
One 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.
Looking for comments…
Searching Nostr relays. This may take a moment the first time this article is opened.
Looking for comments…
Searching Nostr relays. This may take a moment the first time this article is opened.