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

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.

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.

rawIdentifierEntity TypeIdentifier Source TypeFide ID Prefix
https://x.com/alicePersonProduct (platform URL)did:fide:0x15...
https://github.com/fide-projectOrganizationProduct (URL)did:fide:0x25...
https://www.acme.comOrganizationProduct (domain)did:fide:0x25...
0x1234...abcdCryptographicAccountCryptographicAccount (address)did:fide:0x88...
geo:37.77,-122.41PlaceProduct (geo URI)did:fide:0x35...
schema:worksFor or https://schema.org/worksForCreativeWorkProduct (predicate)did:fide:0x65...
https://github.com/fide-work/evaluation-methods/alias-resolution-trust/v1EvaluationMethodProduct (URL)did:fide:0xe5...
normalizedStatementJson({s,p,o})StatementStatement (content-addressed)did:fide:0x00...
normalizedAttestationJson({m,u,r,s})AttestationAttestation (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 the rawIdentifier is the genesis statement hash.
  • Good: Calculating did:fide:0x15... (Person + Product) where the rawIdentifier is the actual social URL.
Source TypeExample IDUsage
Statement (0)0x00...✅ Allowed (References the statement itself)
Attestation (a)0xaa...✅ Allowed (References the attestation)
Concrete Sources0x15..., 0x25..., 0x66...Required for all Domain Entities (Person, Org, Work, etc)
Genesis Derived0x10..., 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.


On this page