The upstand.work Standard
A JSON-LD specification for portable, peer-verified professional identity. Defines five core concepts: Experience Record, Peer Verification, Human Proof, Portable Identity, and Extensions.
The upstand.work standard defines how professional identity is structured, verified, and transported between systems. It does not prescribe how data is stored or displayed — only how it is represented so that any platform, AI agent, or application can read and verify it consistently.
https://openworkid.org/v1 and versioned semantically.Every document must declare a @context pointing to a specific version of the standard. Implementations must not silently upgrade to a newer version — version negotiation is explicit.
{
"@context": "https://openworkid.org/v1",
"@type": "ProfessionalIdentity",
"id": "upstand.work/thomas-weber",
"name": "Thomas Weber",
"humanProof": { "verified": false },
"experience": [],
"verifications": [],
"extensions": []
}| Field | Type | Required | Description |
|---|---|---|---|
| @context | URL | required | Must point to a versioned schema URL. https://openworkid.org/v1 |
| @type | string | required | Always "ProfessionalIdentity" at the root level. |
| id | URI | required | Stable, permanent URI for this identity. Must not change once published. |
| name | string | required | Full name of the professional. No length limit. |
| humanProof | HumanProof | required | See \u00A73. Must be present even if verified: false. |
| experience | ExperienceRecord[] | required | Array of experience records. May be empty. See §1. |
| verifications | PeerVerification[] | required | Array of peer verifications. May be empty. See §2. |
| extensions | Extension[] | required | Profession-specific extension blocks. May be empty. See §5. |
| visibility | "public" | "unlisted" | "inactive" | optional | Controls indexing behavior. Default: "public". |
| createdAt | ISO 8601 | optional | Timestamp of initial profile creation. |
| updatedAt | ISO 8601 | optional | Timestamp of last modification to any field. |
| summary | string | optional | AI-generated or human-written summary. Max 500 characters. Used in SEO meta-description. |
| availableForWork | boolean | optional | Signals active availability. Default: false. |
An Experience Record captures a single professional experience as a structured narrative — not a job title and dates, but the context, challenge, contribution, measurable result, and what was learned. This format cannot be replicated by AI from a LinkedIn scrape because the substance must come from the professional.
upstand.work/[username]/exp/[id]. This URI must never change once published — external references, MCP calls, and Verification references depend on it.{
"@type": "ExperienceRecord",
"id": "upstand.work/thomas-weber/exp/001",
// Where and when
"organisation": "Continental AG",
"role": "Senior Finance Controller",
"startDate": "2019-03",
"endDate": "2022-11",
"isCurrent": false,
"location": "Munich, Germany",
"remote": false,
// The narrative — five structured fields
"context": "Automotive group, 23 manufacturing sites across 12 countries. No unified financial reporting existed — each site used local systems.",
"challenge": "Build a consolidated real-time reporting framework in time for the next board cycle — 14 months originally planned.",
"contribution": "Led a cross-functional team of 6. Designed the data model, negotiated system access across regions, ran parallel pilots in DE and CN to prove the concept before full rollout.",
"result": "Delivered in 8 months — 6 months ahead of plan. System became the foundation for all board-level strategic decisions. Still in use three years later.",
"learning": "Stakeholder alignment across cultures and time zones is the hardest part of any infrastructure project — not the technology.",
// References to verifications of this record
"verificationRefs": [
"upstand.work/thomas-weber/ver/001",
"upstand.work/thomas-weber/ver/002"
],
// Writing style used
"writingStyle": "direct", // "direct" | "grounded" | "expert"
"createdAt": "2026-04-01T10:32:00Z",
"updatedAt": "2026-04-03T14:15:00Z"
}| Field | Type | Required | Description |
|---|---|---|---|
| id | URI | required | Stable permanent URI. Format: [base]/exp/[id]. Never changes once set. |
| organisation | string | required | Name of the organisation or client. For freelance work, use client name or "Independent". |
| role | string | required | Professional role or title during this experience. |
| startDate | YYYY-MM | required | Month-level precision. Full ISO 8601 dates accepted but only month-year displayed. |
| endDate | YYYY-MM | optional | Omit if isCurrent: true. Must not be present together with isCurrent: true. |
| isCurrent | boolean | optional | Default: false. |
| context | string | required | Situational background. Where, what organisation, what was the starting state. Max 600 chars. |
| challenge | string | required | The specific problem or challenge this experience addressed. Max 400 chars. |
| contribution | string | required | What this person specifically did. First person. Max 600 chars. |
| result | string | required | Measurable outcome. Quantified where possible. Max 400 chars. |
| learning | string | optional | What was learned. Differentiates this standard from a CV. Max 300 chars. |
| verificationRefs | URI[] | optional | References to PeerVerification objects that validate this specific record. |
| writingStyle | "direct" | "grounded" | "expert" | optional | Writing style variant used when this record was created. |
A Peer Verification is a public statement by a named individual confirming a specific Experience Record. The verifier stakes their professional identity — name, role, organisation — on the confirmation. This is the property AI cannot fake: a real person acting publicly.
mutualFlag: true. Consuming applications must surface this to users.{
"@type": "PeerVerification",
"id": "upstand.work/thomas-weber/ver/001",
// Which experience this validates
"experienceRef": "upstand.work/thomas-weber/exp/001",
// The verifier — public, with skin in the game
"verifier": {
"name": "Maria Hoffmann",
"role": "Chief Financial Officer",
"organisation": "Continental AG",
"emailDomain": "continental.com", // domain only — never full email
"emailDomainType": "corporate", // "corporate" | "personal"
"linkedinUrl": "https://linkedin.com/in/maria-hoffmann" // optional
},
// The statement — text or one-click
"statement": "Thomas led the project with a precision I rarely see. Deadline met, budget intact, under significant pressure.",
"statementType": "text", // "text" | "one-click"
// Integrity signals
"mutualFlag": false, // true if verifier also has a profile verified by subject
"withdrawnAt": null, // ISO timestamp if withdrawn — null if active
"issuedAt": "2026-04-05T09:14:00Z"
}| Field | Type | Required | Description |
|---|---|---|---|
| id | URI | required | Stable permanent URI. Format: [base]/ver/[id]. |
| experienceRef | URI | required | Reference to the ExperienceRecord being verified. Must be a valid, existing record URI. |
| verifier.name | string | required | Full name. Publicly visible. |
| verifier.role | string | required | Role at time of collaboration. Publicly visible. |
| verifier.organisation | string | required | Organisation at time of collaboration. Publicly visible. |
| verifier.emailDomain | string | required | Domain only — never the full email address. Used as a trust signal. |
| verifier.emailDomainType | "corporate" | "personal" | required | Corporate email domains carry higher weight. Must be derived from a validated lookup. |
| statement | string | optional | The verifier's words. Max 500 chars. May be absent if statementType: "one-click". |
| statementType | "text" | "one-click" | required | "one-click" verifications carry name and organisation but no text statement. |
| mutualFlag | boolean | required | Must be true if the verified subject also has a verification from this verifier. Never omit. |
| withdrawnAt | ISO 8601 | null | required | null when active. Timestamp when withdrawn. Withdrawn verifications must be removed from public display. |
Human Proof is evidence that a real person controls this profile — not an AI agent or automated system. In the context of AI-generated credential inflation, this is a structural requirement of the standard.
{
"@type": "HumanProof",
// Minimum viable proof: email-verified profile
"verified": true,
"method": "email-magic-link",
// "email-magic-link" | "peer-verification-chain" | "document-verified"
// Stronger proof: derived from active peer verifications
"peerVerificationCount": 3,
// Profiles with ≥1 verified peer carry inherently stronger human proof
// Timestamp of last proof action
"lastVerifiedAt": "2026-04-05T09:14:00Z",
// Optional: document verification (future)
"documentVerification": null
}| Field | Type | Required | Description |
|---|---|---|---|
| verified | boolean | required | Whether human proof has been established. Must be false until at least one method is completed. |
| method | string | optional | The primary method used. Required if verified: true. |
| peerVerificationCount | integer | optional | Number of active peer verifications. Serves as a secondary human proof signal. Automatically derived — do not set manually. |
| lastVerifiedAt | ISO 8601 | optional | When proof was last confirmed. Required if verified: true. |
Portable Identity defines how a complete professional identity document is exported, imported, and transferred between platforms. Data sovereignty requires that the export format is open, human-readable, and machine-processable without vendor lock-in.
{
"@context": "https://openworkid.org/v1",
"@type": "PortableIdentityExport",
// Export metadata
"exportedAt": "2026-04-10T08:00:00Z",
"exportedBy": "upstand.work",
"standardVersion": "0.1.0",
"schemaUrl": "https://openworkid.org/v1",
// The complete identity document
"identity": {
"@type": "ProfessionalIdentity",
"id": "upstand.work/thomas-weber",
"name": "Thomas Weber",
"humanProof": { /* ... */ },
"experience": [ /* all ExperienceRecord objects */ ],
"verifications": [ /* all PeerVerification objects */ ],
"extensions": [ /* all Extension objects */ ]
},
// Note on verifications portability
"verificationPortabilityNote": "Peer verifications are included as historical records. The trust graph they form is anchored to the original platform. Importing platforms must re-request verifications to establish trust on their own domain."
}Extensions are modular, profession-specific field sets that attach to a ProfessionalIdentity. The core schema is universal — extensions are what make a Psychotherapist's profile structurally different from a Software Engineer's. Each extension is independently versioned and adoptable.
{
"@type": "Extension",
"extensionId": "openworkid.org/extensions/software-engineer",
"extensionVersion": "1.0.0",
// Extension-specific fields
"fields": {
"primaryLanguages": ["TypeScript", "Python", "Rust"],
"frameworks": ["Next.js", "FastAPI"],
"cloudProviders": ["AWS", "Vercel"],
"openSourceContributions": [
{ "repo": "https://github.com/...", "role": "contributor" }
],
"seniority": "senior",
// "junior" | "mid" | "senior" | "principal" | "staff"
"remotePreference": "remote-only"
// "on-site" | "hybrid" | "remote-only" | "flexible"
}
}{
"@type": "Extension",
"extensionId": "openworkid.org/extensions/psychotherapist",
"extensionVersion": "1.0.0",
"fields": {
"approbationStatus": "approbiert",
"therapeuticApproach": ["VT", "Schema-Therapie", "EMDR"],
// "VT" | "TP" | "AP" | "Systemisch" | "DBT" | "EMDR" | "Schema" | ...
"setting": ["Einzeltherapie", "Gruppentherapie"],
"targetGroups": ["Erwachsene", "Trauma"],
"kassenzulassung": true,
"languages": ["de", "en"],
// Regulatory compliance flag — rendered as visible hint in UI
"regulatoryNotice": "Als Psychotherapeut gelten besondere Datenschutz- und Werbebeschränkungen. Keine Patientenfälle — auch nicht anonymisiert — ohne ausdrückliche schriftliche Einwilligung."
}
}| Field | Type | Required | Description |
|---|---|---|---|
| extensionId | URI | required | Canonical URI of the extension definition. Must resolve to valid extension schema. |
| extensionVersion | semver | required | Version of the extension schema used. Implementations must not silently upgrade. |
| fields | object | required | Extension-specific fields as defined by the extension schema. Unrecognised fields must be preserved but may be ignored in display. |
| fields.regulatoryNotice | string | optional | If present in an extension definition, this string must be displayed visibly in any profile editor for this profession. Not optional for implementations. |
A complete, valid upstand.work standard document combining all five core concepts.
{
"@context": "https://openworkid.org/v1",
"@type": "ProfessionalIdentity",
"id": "upstand.work/thomas-weber",
"name": "Thomas Weber",
"summary": "Senior Finance Controller with 20 years in automotive. Built the reporting infrastructure Continental still runs on. Now available as a freelance consultant.",
"visibility": "public",
"availableForWork": true,
"createdAt": "2026-04-01T10:32:00Z",
"updatedAt": "2026-04-10T14:00:00Z",
"humanProof": {
"@type": "HumanProof",
"verified": true,
"method": "email-magic-link",
"peerVerificationCount": 3,
"lastVerifiedAt": "2026-04-05T09:14:00Z"
},
"experience": [
{
"@type": "ExperienceRecord",
"id": "upstand.work/thomas-weber/exp/001",
"organisation": "Continental AG",
"role": "Senior Finance Controller",
"startDate": "2019-03",
"endDate": "2022-11",
"isCurrent": false,
"context": "Automotive group, 23 sites across 12 countries. No unified financial reporting.",
"challenge": "Build consolidated real-time reporting in time for next board cycle.",
"contribution": "Led cross-functional team of 6. Designed data model, negotiated access across regions, ran parallel pilots in DE and CN.",
"result": "Delivered in 8 months — 6 ahead of plan. Foundation for all board-level decisions. Still in use.",
"learning": "Stakeholder alignment across cultures is harder than the technology.",
"writingStyle": "direct",
"verificationRefs": [
"upstand.work/thomas-weber/ver/001",
"upstand.work/thomas-weber/ver/002"
]
}
],
"verifications": [
{
"@type": "PeerVerification",
"id": "upstand.work/thomas-weber/ver/001",
"experienceRef": "upstand.work/thomas-weber/exp/001",
"verifier": {
"name": "Maria Hoffmann",
"role": "Chief Financial Officer",
"organisation": "Continental AG",
"emailDomain": "continental.com",
"emailDomainType": "corporate"
},
"statement": "Thomas led the project with a precision I rarely see. On time, on budget, under pressure.",
"statementType": "text",
"mutualFlag": false,
"withdrawnAt": null,
"issuedAt": "2026-04-05T09:14:00Z"
},
{
"@type": "PeerVerification",
"id": "upstand.work/thomas-weber/ver/002",
"experienceRef": "upstand.work/thomas-weber/exp/001",
"verifier": {
"name": "Stefan Berger",
"role": "VP Finance",
"organisation": "BMW Group",
"emailDomain": "bmw.com",
"emailDomainType": "corporate"
},
"statement": null,
"statementType": "one-click",
"mutualFlag": false,
"withdrawnAt": null,
"issuedAt": "2026-04-06T11:02:00Z"
}
],
"extensions": [
{
"@type": "Extension",
"extensionId": "openworkid.org/extensions/finance-controller",
"extensionVersion": "1.0.0",
"fields": {
"specialisations": ["FP&A", "Reporting", "Business Intelligence"],
"systems": ["SAP", "Power BI", "Cognos"],
"industries": ["Automotive", "Manufacturing"],
"rateRange": { "min": 900, "max": 1200, "currency": "EUR", "unit": "day" }
}
}
]
}All objects in the standard are identified by stable, permanent URIs. These URIs are referenced by external systems, AI agents, and other profiles. They must never change once published.
// Profile root upstand.work/[username] // Experience Records upstand.work/[username]/exp/001 upstand.work/[username]/exp/002 // Peer Verifications upstand.work/[username]/ver/001 upstand.work/[username]/ver/002 // Extensions openworkid.org/extensions/[slug] openworkid.org/extensions/[slug]@1.0.0 // versioned reference
The following extensions are part of the standard library. Each has a canonical schema, versioning, and where applicable, regulatory compliance notices for the profession.
The upstand.work standard is published under the MIT License. No permission is required to implement it. The governance model transitions in three phases as adoption grows.
| Phase | Trigger | Control |
|---|---|---|
| Phase 1 — Now | Active | upstand.work controls the schema. All changes via public GitHub PRs. MIT License. Transparent changelog. |
| Phase 2 — Steering Group | 3–5 external platforms adopt | GitHub Organization with RFC process. No formal foundation yet. All adopters have voice. |
| Phase 3 — Foundation | Standard is established | Neutral foundation owns the standard. Self-funded by Verified Employer Program revenue. No single company controls it. |