ExternalIdentity schema
Generated from the canonical schema
schemas/external-identity.schema.jsonbyscripts/generate-schema-docs.mjs— do not edit this page by hand.
A link from a TfP User to an identity in a system outside TfP — most importantly ORCID, plus personal links like a website or GitHub profile. Connects the User to outside ecosystems while the TfP User remains the canonical identity inside the platform. Not an authentication method: signing in is AuthIdentity's job.
Schema version: 1.0.0 · $id: https://tokensforprogress.org/schemas/external-identity.schema.json
Fields
id
Type: string · Required: yes · Mutable: no · Pattern: ^ext_[0-9a-z]{10,32}$
Stable opaque identifier for this link.
Example: "ext_01jf90cc3orcd"
user_id
Type: string · Required: yes · Mutable: no · Pattern: ^usr_[0-9a-z]{10,32}$
The User this external identity belongs to.
Example: "usr_01jf8xw3tempo"
kind
Type: orcid | website | github | other · Required: yes · Mutable: no
What kind of external identity this is. orcid links a researcher identity; website/github/other are display links.
Example: "orcid"
value
Type: string · Required: yes · Mutable: no
The external identifier or URL: the ORCID iD (e.g. 0000-0002-1825-0097) for kind orcid, otherwise a URL. To change it, remove the link and add a new one.
Example: "0000-0002-1825-0097"
verified
Type: boolean · Required: yes · Mutable: yes
Whether TfP has verified the link — for ORCID, via ORCID's own OAuth flow. Display links may remain unverified.
Example: true
created_at
Type: string · Required: yes · Mutable: no
RFC 3339 UTC timestamp when the link was added.
Example: "2026-08-31T15:04:11Z"
JSON Schema source
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://tokensforprogress.org/schemas/external-identity.schema.json",
"title": "ExternalIdentity",
"description": "A link from a TfP User to an identity in a system outside TfP — most importantly ORCID, plus personal links like a website or GitHub profile. Connects the User to outside ecosystems while the TfP User remains the canonical identity inside the platform. Not an authentication method: signing in is AuthIdentity's job.",
"x-tfp-version": "1.0.0",
"type": "object",
"additionalProperties": false,
"required": [
"id",
"user_id",
"kind",
"value",
"verified",
"created_at"
],
"properties": {
"id": {
"type": "string",
"pattern": "^ext_[0-9a-z]{10,32}$",
"x-mutable": false,
"description": "Stable opaque identifier for this link.",
"examples": [
"ext_01jf90cc3orcd"
]
},
"user_id": {
"type": "string",
"pattern": "^usr_[0-9a-z]{10,32}$",
"x-mutable": false,
"description": "The User this external identity belongs to.",
"examples": [
"usr_01jf8xw3tempo"
]
},
"kind": {
"type": "string",
"enum": [
"orcid",
"website",
"github",
"other"
],
"x-mutable": false,
"description": "What kind of external identity this is. `orcid` links a researcher identity; `website`/`github`/`other` are display links.",
"examples": [
"orcid"
]
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"x-mutable": false,
"description": "The external identifier or URL: the ORCID iD (e.g. `0000-0002-1825-0097`) for kind `orcid`, otherwise a URL. To change it, remove the link and add a new one.",
"examples": [
"0000-0002-1825-0097"
]
},
"verified": {
"type": "boolean",
"x-mutable": true,
"description": "Whether TfP has verified the link — for ORCID, via ORCID's own OAuth flow. Display links may remain unverified.",
"examples": [
true
]
},
"created_at": {
"type": "string",
"format": "date-time",
"x-mutable": false,
"description": "RFC 3339 UTC timestamp when the link was added.",
"examples": [
"2026-08-31T15:04:11Z"
]
}
}
}