Identifiers
Understanding universal entity identification in the Fide Context Protocol.
To build a distributed Fide Context Graph, we must agree on how to identify distinct entities across systems. A Fide ID is a deterministic pointer to any entity.
Calculating Fide IDs
A Fide ID is a fully qualified DID (Decentralized Identifier) that acts as a deterministic pointer. It is made of a constant Prefix and 3 Parts:
SDK Implementation
The SDK provides calculateFideId() and calculateStatementFideId() functions. For practical usage in your application, see Building Statements Guide for implementation examples.
[Prefix: did:fide:0x][Part 1: Entity Type][Part 2: Identifier Source Type][Part 3: Identifier Fingerprint]- Prefix: The constant
did:fide:0xheader. - Part 1 (FCP Entity Type): What is it? (e.g.
1= Person) - Part 2 (Identifier Source): How is it identified? (e.g.
5= platform URL) - Part 3 (Identifier Fingerprint): Unique hash (SHA-256)
Prefix
Every Fide ID begins with the constant prefix: did:fide:0x
This namespace guarantees that the identifier is a valid W3C DID and enforces Hexadecimal encoding for the identifier string.
- Format:
did:fide:0x... - Example:
did:fide:0x15...
The Golden Rule: Unique Representation
Your rawIdentifier string must be a unique anchor for the entity itself, not just a reference to it.
- ✅ Good:
https://x.com/alice(Product ID, full URL) → Uniquely identifies Alice (Person). - ❌ Bad:
https://nytimes.com/interview-with-alice(CreativeWork ID) → Identifies the Article, not Alice.
Part 1: FCP Entity Type
The first character of the Fide ID defines WHAT the entity is.
| Char | Entity Type (Link) |
|---|---|
0 | Statement |
1 | Person |
2 | Organization |
3 | Place |
4 | Event |
5 | Product |
6 | CreativeWork |
7 | AutonomousAgent |
8 | CryptographicAccount |
a | Attestation |
e | EvaluationMethod |
See Entity Definitions for the full meaning, standard alignment, and ID patterns for each type.
Part 2: Identifier Source Type
The second character of the Fide ID defines the entity type of the identifier used as the rawIdentifier input.
In other words: it tells you what kind of thing the identifier came from (a Statement rawIdentifier, a Product/platform handle, a CreativeWork string, or a CryptographicAccount address). Non-statement entities in stored statements use concrete sources (e.g. Product, Organization); see Storage rules. See Input Formatting Examples for common patterns.
Part 3: Identifier Fingerprint
The Identifier Fingerprint is the last 38 characters of the Fide ID—the last 19 bytes of SHA-256(rawIdentifier)—derived in calculateFideId to ensure global uniqueness.
Input Formatting Examples
Common rawIdentifier strings used as input to calculateFideId. For predicates, the SDK's expandPredicateIdentifier expands shorthand (schema:name, owl:sameAs) to full URLs before hashing.
rawIdentifier | Entity Type | Identifier Source Type | Fide ID Prefix |
|---|---|---|---|
https://x.com/alice | Person | Product (platform URL) | did:fide:0x15... |
https://github.com/fide-project | Organization | Product (URL) | did:fide:0x25... |
https://www.acme.com | Organization | Product (domain) | did:fide:0x25... |
0x1234...abcd | CryptographicAccount | CryptographicAccount (address) | did:fide:0x88... |
geo:37.77,-122.41 | Place | Product (geo URI) | did:fide:0x35... |
schema:worksFor or https://schema.org/worksFor | CreativeWork | Product (predicate) | did:fide:0x65... |
https://github.com/fide-work/evaluation-methods/alias-resolution-trust/v1 | EvaluationMethod | Product (URL) | did:fide:0xe5... |
normalizedStatementJson({s,p,o}) | Statement | Statement (content-addressed) | did:fide:0x00... |
normalizedAttestationJson({m,u,r,s}) | Attestation | Attestation (content-addressed) | did:fide:0xaa... |
Storage Rules
Stored statements must use concrete source identifiers.
Avoid Double-Hashing
Do not calculate a Fide ID from another Fide ID.
- ❌ Bad: Calculating
did:fide:0x10...(Person + Statement) where therawIdentifieris the genesis statement hash. - ✅ Good: Calculating
did:fide:0x15...(Person + Product) where therawIdentifieris the actual social URL.
| Source Type | Example ID | Usage |
|---|---|---|
Statement (0) | 0x00... | ✅ Allowed (References the statement itself) |
Attestation (a) | 0xaa... | ✅ Allowed (References the attestation) |
| Concrete Sources | 0x15..., 0x25..., 0x66... | ✅ Required for all Domain Entities (Person, Org, Work, etc) |
| Genesis Derived | 0x10..., 0x20..., 0xe0... | ❌ Disallowed in storage (Use concrete source instead) |
Why?
The genesis ID (0x10...) is purely derived from the first statement about an entity. Storing it as the primary ID creates a circular dependency. Always store the source (Product ID, etc.) and let indexers resolve it.
Resolution to Primary Fide ID
Resolving multiple identifiers to a single primary (e.g. merging aliases) happens in the indexer's materialized view, not at the identifier level. See Materialized View: Statements with Resolved Identifiers.