openworkid.org / specification

The upstand.work Standard

A JSON-LD specification for portable professional profiles and peer confirmations. It defines five core concepts: Experience Record, Peer Verification, Human Proof, Portable Identity, Extensions, Living Profile, and Artifacts.

v0.1.1MIT LicenseW3C JSON-LD 1.1Schema.org compatible
Introduction

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.

upstand.work is the reference implementation of this standard. Any platform may implement the standard independently. The schema is hosted at https://openworkid.org/v1 and versioned semantically.
Versioning & @context

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.

Minimal valid document
{
  "@context": "https://openworkid.org/v1",
  "@type": "ProfessionalIdentity",
  "id": "https://upstand.work/mara-stein",
  "name": "Mara Stein",
  "humanProof": { "verified": false },
  "experience": [],
  "verifications": [],
  "extensions": []
}
FieldTypeRequiredDescription
@contextURLrequiredMust point to a versioned schema URL. https://openworkid.org/v1
@typestringrequiredAlways "ProfessionalIdentity" at the root level.
idURIrequiredStable, permanent URI for this identity. Must not change once published.
namestringrequiredFull name of the professional. No length limit.
humanProofHumanProofrequiredSee \u00A73. Must be present even if verified: false.
experienceExperienceRecord[]requiredArray of experience records. May be empty. See §1.
verificationsPeerVerification[]requiredArray of peer verifications. May be empty. See §2.
extensionsExtension[]requiredProfession-specific extension blocks. May be empty. See §5.
visibility"public" | "unlisted" | "inactive"optionalControls indexing behavior. Default: "public".
createdAtISO 8601optionalTimestamp of initial profile creation.
updatedAtISO 8601optionalTimestamp of last modification to any field.
summarystringoptionalAI-generated or human-written summary. Max 500 characters. Used in SEO meta-description.
availableForWorkbooleanoptionalSignals active availability. Default: false.
currentWorkCurrentWorkoptionalOwner-confirmed, time-sensitive professional focus with goal, audience, collaborators, next step, and provenance.
askTopicsAskTopic[]optionalExplicitly confirmed conversation topics. Renderers must not infer or publish additional topics.
workCompatibilityWorkCompatibilityoptionalOwner-authored conditions for effective collaboration.
artifactsArtifact[]optionalPublic work samples and media with stable references, context, visibility, and provenance.

01Experience RecordCore

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 profile scrape because the substance must come from the professional.

Each Experience Record gets a stable, permanent URI of the form upstand.work/[username]/exp/[id]. This URI must never change once published — external references, MCP calls, and Verification references depend on it.
ExperienceRecord — full example
{
  "@type": "ExperienceRecord",
  "id": "https://upstand.work/mara-stein/exp/001",

  // Where and when
  "organisation": "Asterfeld Mobility",
  "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": [
    "https://upstand.work/mara-stein/ver/001",
    "https://upstand.work/mara-stein/ver/002"
  ],

  // Writing style used
  "writingStyle": "direct",  // "direct" | "grounded" | "expert"

  "createdAt": "2026-04-01T10:32:00Z",
  "updatedAt": "2026-04-03T14:15:00Z"
}
FieldTypeRequiredDescription
idURIrequiredStable permanent URI. Format: [base]/exp/[id]. Never changes once set.
organisationstringrequiredName of the organisation or client. For freelance work, use client name or "Independent".
rolestringrequiredProfessional role or title during this experience.
startDateYYYY-MMrequiredMonth-level precision. Full ISO 8601 dates accepted but only month-year displayed.
endDateYYYY-MMoptionalOmit if isCurrent: true. Must not be present together with isCurrent: true.
isCurrentbooleanoptionalDefault: false.
contextstringrequiredSituational background. Where, what organisation, what was the starting state. Max 600 chars.
challengestringrequiredThe specific problem or challenge this experience addressed. Max 400 chars.
contributionstringrequiredWhat this person specifically did. First person. Max 600 chars.
resultstringrequiredMeasurable outcome. Quantified where possible. Max 400 chars.
learningstringoptionalWhat was learned. Differentiates this standard from a CV. Max 300 chars.
verificationRefsURI[]optionalReferences to PeerVerification objects that validate this specific record.
writingStyle"direct" | "grounded" | "expert"optionalWriting style variant used when this record was created.

02Peer VerificationCore · The Moat

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.

Mutual verifications (A verifies B and B verifies A) are valid but must be explicitly flagged via mutualFlag: true. Consuming applications must surface this to users.
PeerVerification — full example
{
  "@type": "PeerVerification",
  "id": "https://upstand.work/mara-stein/ver/001",

  // Which experience this validates
  "experienceRef": "https://upstand.work/mara-stein/exp/001",

  // The verifier — public, with skin in the game
  "verifier": {
    "name": "Nora Keller",
    "role": "Chief Financial Officer",
    "organisation": "Asterfeld Mobility",
    "emailDomain": "asterfeld.example",  // domain only — never full email
    "emailDomainType": "corporate",  // "corporate" | "personal"
    "profileUrl": "https://example.com/nora-keller"  // 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"
}
FieldTypeRequiredDescription
idURIrequiredStable permanent URI. Format: [base]/ver/[id].
experienceRefURIrequiredReference to the ExperienceRecord being verified. Must be a valid, existing record URI.
verifier.namestringrequiredFull name. Publicly visible.
verifier.rolestringrequiredRole at time of collaboration. Publicly visible.
verifier.organisationstringrequiredOrganisation at time of collaboration. Publicly visible.
verifier.emailDomainstringrequiredDomain only — never the full email address. Used as a trust signal.
verifier.emailDomainType"corporate" | "personal"requiredCorporate email domains carry higher weight. Must be derived from a validated lookup.
statementstringoptionalThe 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.
mutualFlagbooleanrequiredMust be true if the verified subject also has a verification from this verifier. Never omit.
withdrawnAtISO 8601 | nullrequirednull when active. Timestamp when withdrawn. Withdrawn verifications must be removed from public display.

03Human ProofCore

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.

!Human Proof does not guarantee identity in a legal sense. It guarantees that a human controls the profile. Implementations may layer additional identity verification on top of this standard.
HumanProof object
{
  "@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
}
FieldTypeRequiredDescription
verifiedbooleanrequiredWhether human proof has been established. Must be false until at least one method is completed.
methodstringoptionalThe primary method used. Required if verified: true.
peerVerificationCountintegeroptionalNumber of active peer verifications. Serves as a secondary human proof signal. Automatically derived — do not set manually.
lastVerifiedAtISO 8601optionalWhen proof was last confirmed. Required if verified: true.

04Portable IdentityCore

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.

Export envelope — portableIdentity.json
{
  "@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": "https://upstand.work/mara-stein",
    "name": "Mara Stein",
    "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."
}
Verifications in an export are historical records only. The trust graph is anchored to the platform where verifications were issued. An importing platform must re-request verifications to establish trust within its own domain.

05ExtensionsCore

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.

Extension schema — software-engineer example
{
  "@type": "Extension",
  "extensionId": "https://openworkid.org/v1/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"
  }
}
Extension schema — psychotherapist example
{
  "@type": "Extension",
  "extensionId": "https://openworkid.org/v1/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."
  }
}
FieldTypeRequiredDescription
extensionIdURIrequiredCanonical URI of the extension definition. Must resolve to valid extension schema.
extensionVersionsemverrequiredVersion of the extension schema used. Implementations must not silently upgrade.
fieldsobjectrequiredExtension-specific fields as defined by the extension schema. Unrecognised fields must be preserved but may be ignored in display.
fields.regulatoryNoticestringoptionalIf present in an extension definition, this string must be displayed visibly in any profile editor for this profession. Not optional for implementations.

06Living ProfileCore

A professional profile is more than its history. The Living Profile captures owner-confirmed current work, explicit topics for exchange, and collaboration preferences without deriving claims at render time. Every inferred or suggested value must retain its source and requires confirmation before publication.

CurrentWork and AskTopic
{
  "currentWork": {
    "id": "current-work-hybrid-learning",
    "title": "Hybrid learning model for vocational training",
    "summary": "Combining workshops, digital prompts, and practice projects.",
    "goal": "Better transfer into real workshop tasks.",
    "audience": ["Vocational learners"],
    "collaborators": ["Teachers", "Training companies"],
    "nextStep": "Pilot and evaluate in the next school year",
    "source": "manual",
    "confirmedAt": "2026-08-20T10:00:00Z"
  },
  "askTopics": [
    {
      "id": "topic-hybrid-learning",
      "content": "Hybrid learning formats",
      "position": 0,
      "source": "suggested",
      "confirmedAt": "2026-08-20T10:00:00Z"
    }
  ]
}
FieldTypeRequiredDescription
currentWork.idstringrequiredStable identifier for this current-work snapshot.
currentWork.titlestringrequiredOwner-confirmed title. Max 180 characters.
currentWork.summarystringoptionalConcise description. Max 600 characters.
currentWork.goalstringoptionalIntended outcome or impact.
currentWork.audiencestring[]optionalWho the work is for. Must not be substituted with a general profile target group.
currentWork.collaboratorsstring[]optionalPeople or organisations involved in this work.
currentWork.nextStepstringoptionalConcrete next step.
sourcemanual | imported | suggested | derived | generatedrequiredContent provenance retained across exports.
confirmedAtISO 8601requiredPublication gate. Unconfirmed current work and topics must not be rendered publicly.

07ArtifactsCore

Artifacts make professional work inspectable without coupling it to a particular page design. Each artifact is explicitly attached to the whole profile, current work, or one Experience Record.

Artifact — image example
{
  "id": "https://upstand.work/katharina-vogt/artifact/lab-setup",
  "contextType": "experience",
  "experienceRef": "https://upstand.work/katharina-vogt/exp/001",
  "kind": "image",
  "title": "Mechatronics training setup",
  "description": "Practice setup for sensor and control exercises.",
  "url": "https://cdn.example.org/lab-setup.webp",
  "mimeType": "image/webp",
  "altText": "Mechatronics components and circuit plans on a workbench",
  "source": "manual",
  "featured": true,
  "visibility": "public",
  "position": 0
}
FieldTypeRequiredDescription
idURIrequiredStable artifact URI.
contextTypeprofile | current_work | experiencerequiredWhere the artifact belongs.
experienceRefURIoptionalRequired only when contextType is experience.
kindimage | document | link | video | publicationrequiredPortable media classification.
titlestringrequiredHuman-readable label. Max 140 characters.
urlURLrequiredPublic resource URL for public artifacts.
sourceprovenancerequiredHow the artifact entered the profile.
visibilitypublic | privaterequiredPrivate artifacts are never returned by public APIs or MCP.

Complete Example

A complete, valid upstand.work standard document combining all seven core concepts.

mara-stein.upstandwork.json — complete document
{
  "@context": "https://openworkid.org/v1",
  "@type": "ProfessionalIdentity",
  "id": "https://upstand.work/mara-stein",
  "name": "Mara Stein",
  "summary": "Senior Finance Controller with 20 years in manufacturing. Built reporting infrastructure across 12 countries. Now available as an independent 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"
  },

  "currentWork": {
    "id": "current-work-finance-controls",
    "title": "Reusable liquidity-planning model for mid-sized manufacturers",
    "goal": "Make weekly cash decisions possible without spreadsheet consolidation.",
    "source": "manual",
    "confirmedAt": "2026-08-20T10:00:00Z"
  },
  "askTopics": [
    { "id": "topic-liquidity", "content": "Liquidity planning", "position": 0, "source": "manual", "confirmedAt": "2026-08-20T10:00:00Z" }
  ],

  "experience": [
    {
      "@type": "ExperienceRecord",
      "id": "https://upstand.work/mara-stein/exp/001",
      "organisation": "Asterfeld Mobility",
      "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": [
        "https://upstand.work/mara-stein/ver/001",
        "https://upstand.work/mara-stein/ver/002"
      ]
    }
  ],

  "verifications": [
    {
      "@type": "PeerVerification",
      "id": "https://upstand.work/mara-stein/ver/001",
      "experienceRef": "https://upstand.work/mara-stein/exp/001",
      "verifier": {
        "name": "Nora Keller",
        "role": "Chief Financial Officer",
        "organisation": "Asterfeld Mobility",
        "emailDomain": "asterfeld.example",
        "emailDomainType": "corporate"
      },
      "statement": "Mara 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": "https://upstand.work/mara-stein/ver/002",
      "experienceRef": "https://upstand.work/mara-stein/exp/001",
      "verifier": {
        "name": "Leon Brandt",
        "role": "VP Finance",
        "organisation": "Nordhain Manufacturing",
        "emailDomain": "nordhain.example",
        "emailDomainType": "corporate"
      },
      "statement": null,
      "statementType": "one-click",
      "mutualFlag": false,
      "withdrawnAt": null,
      "issuedAt": "2026-04-06T11:02:00Z"
    }
  ],

  "artifacts": [
    {
      "id": "https://upstand.work/mara-stein/artifact/liquidity-model",
      "contextType": "experience",
      "experienceRef": "https://upstand.work/mara-stein/exp/001",
      "kind": "document",
      "title": "Liquidity planning model overview",
      "url": "https://cdn.example.org/liquidity-model.pdf",
      "source": "manual",
      "visibility": "public"
    }
  ],

  "extensions": [
    {
      "@type": "Extension",
      "extensionId": "https://openworkid.org/v1/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" }
      }
    }
  ]
}

Stable URI Requirements

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.

URI structure
// Profile root
https://upstand.work/[username]

// Experience Records
https://upstand.work/[username]/exp/001
https://upstand.work/[username]/exp/002

// Peer Verifications
https://upstand.work/[username]/ver/001
https://upstand.work/[username]/ver/002

// Extensions
https://openworkid.org/v1/extensions/[slug]
https://openworkid.org/v1/extensions/[slug]@1.0.0  // versioned reference
!Username changes are permitted once. When a username changes, the old URI must redirect (HTTP 301) for a minimum of 6 months. After that, the old URI may return 410 Gone. External references that relied on the old URI are not guaranteed to update.


License & Governance

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.

PhaseTriggerControl
Phase 1 — NowActiveupstand.work controls the schema. All changes via public GitHub PRs. MIT License. Transparent changelog.
Phase 2 — Steering Group3–5 external platforms adoptGitHub Organization with RFC process. No formal foundation yet. All adopters have voice.
Phase 3 — FoundationStandard is establishedNeutral foundation owns the standard. Self-funded by Verified Employer Program revenue. No single company controls it.