Extension Library
Extensions are modular, profession-specific field sets that attach to any ProfessionalIdentity. The core schema is universal — extensions are what make a Psychotherapist's profile structurally different from a Software Engineer's. Each is independently versioned.
A ProfessionalIdentity document may contain any number of extensions in its extensions array. Each extension references a canonical schema URI and a version. Unrecognised extension fields must be preserved on import and may be ignored in display.
{
"extensions": [
{
"@type": "Extension",
"extensionId": "openworkid.org/extensions/software-engineer",
"extensionVersion": "1.0.0",
"fields": { /* extension-specific fields */ }
}
]
}A profile may combine multiple extensions — for example a Physician who also has a management-consultant extension for their healthcare advisory work. Extensions do not conflict. Fields in fields are always namespaced by the extension they belong to.
For software engineers, full-stack developers, backend/frontend specialists, mobile developers, and DevOps/platform engineers. Covers language stack, frameworks, cloud infrastructure, open source work, and seniority.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| primaryLanguages | string[] | required | Free-form. e.g. "TypeScript", "Python", "Rust", "Go" |
| frameworks | string[] | optional | e.g. "Next.js", "FastAPI", "Rails", "Spring" |
| cloudProviders | string[] | optional | e.g. "AWS", "GCP", "Azure", "Vercel", "Hetzner" |
| databases | string[] | optional | e.g. "PostgreSQL", "Redis", "MongoDB", "ClickHouse" |
| seniority | enum | required | "junior" · "mid" · "senior" · "principal" · "staff" |
| remotePreference | enum | optional | "on-site" · "hybrid" · "remote-only" · "flexible" |
| availableHours | enum | optional | "full-time" · "part-time" · "project-based" |
| openSourceContributions | object[] | optional | Array of { repo: URL, role: "author"|"contributor"|"maintainer" } |
| githubUrl | URL | optional | Public GitHub profile URL. |
| aiTools | string[] | optional | e.g. "Claude Code", "Cursor", "Copilot" — AI-assisted development tools |
| rateRange | RateRange | optional | { min, max, currency: "EUR"|"USD"|..., unit: "hour"|"day" } |
| languages | string[] | optional | ISO 639-1 codes. e.g. "de", "en" |
Example JSON
{
"extensionId": "openworkid.org/extensions/software-engineer",
"extensionVersion": "1.0.0",
"fields": {
"primaryLanguages": ["TypeScript", "Python", "Rust"],
"frameworks": ["Next.js", "FastAPI"],
"cloudProviders": ["AWS", "Vercel"],
"databases": ["PostgreSQL", "Redis"],
"seniority": "senior",
"remotePreference": "remote-only",
"aiTools": ["Claude Code", "Cursor"],
"rateRange": { "min": 900, "max": 1400, "currency": "EUR", "unit": "day" },
"languages": ["de", "en"]
}
}For data scientists, ML engineers, analytics engineers, and AI researchers. Covers ML frameworks, specialisations, and cloud ML platforms.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| primaryLanguages | string[] | required | "Python", "R", "SQL", "Julia", "Scala" |
| mlFrameworks | string[] | optional | "PyTorch", "TensorFlow", "scikit-learn", "JAX", "Keras" |
| dataTools | string[] | optional | "Spark", "dbt", "Airflow", "dask", "Polars" |
| specialisations | string[] | optional | "ML" · "Deep Learning" · "NLP" · "Computer Vision" · "MLOps" · "Analytics" · "Causal Inference" |
| cloudML | string[] | optional | "AWS SageMaker", "GCP Vertex AI", "Azure ML", "Databricks" |
| domains | string[] | optional | Industry domains. e.g. "Healthcare", "Finance", "Retail" |
| publications | integer | optional | Number of peer-reviewed publications. |
| seniority | enum | required | "junior" · "mid" · "senior" · "principal" · "staff" |
| rateRange | RateRange | optional | { min, max, currency, unit: "hour"|"day" } |
For product managers, product owners, and heads of product. Covers product types, methodology, tools, and technical affinity.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| productTypes | string[] | required | "B2B SaaS" · "B2C" · "Platform" · "Marketplace" · "Mobile App" · "AI Product" · "Developer Tools" |
| methodologies | string[] | optional | "Agile" · "Scrum" · "OKR" · "Shape Up" · "SAFe" · "Continuous Discovery" |
| tools | string[] | optional | e.g. "Linear", "Jira", "Notion", "Figma", "Amplitude" |
| teamSize | integer | optional | Typical cross-functional team size. |
| techAffinity | enum | optional | "low" · "medium" · "high" — comfort with technical depth |
| industries | string[] | optional | Free-form industry strings. |
| seniority | enum | required | "associate" · "pm" · "senior-pm" · "principal-pm" · "head-of-product" · "cpo" |
For UX designers, UI designers, service designers, and design researchers. Includes portfolio URL field.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| disciplines | string[] | required | "UX" · "UI" · "Service Design" · "Design Research" · "Motion" · "Design Systems" · "Accessibility" |
| tools | string[] | optional | "Figma", "Framer", "Protopie", "Sketch", "Webflow" |
| projectTypes | string[] | optional | "App" · "Web" · "Design System" · "User Research" · "Design Sprint" |
| industries | string[] | optional | Free-form. |
| portfolioUrl | URL | optional | Must be a valid HTTPS URL. Displayed as a primary action on the profile. |
| seniority | enum | required | "junior" · "mid" · "senior" · "lead" · "head-of-design" |
For finance controllers, CFOs, FP&A specialists, treasury managers, and financial reporting experts. This is the extension used by the upstand.work demo profile.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| specialisations | string[] | required | "FP&A" · "Reporting" · "Treasury" · "Tax" · "M&A" · "Business Intelligence" · "Controlling" · "Audit" |
| systems | string[] | optional | "SAP", "Power BI", "Cognos", "Tagetik", "Hyperion", "Oracle EPM", "Lucanet" |
| industries | string[] | optional | Free-form. e.g. "Automotive", "Manufacturing", "Retail" |
| internationalExperience | boolean | optional | Has led or worked in multi-country reporting structures. |
| teamSizeTypical | integer | optional | Typical size of teams led. |
| rateRange | RateRange | optional | { min, max, currency, unit: "hour"|"day"|"month" } |
| languages | string[] | optional | ISO 639-1. |
| certifications | string[] | optional | e.g. "CFA", "CIMA", "CPA", "ACCA" |
Example JSON
{
"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"],
"internationalExperience": true,
"teamSizeTypical": 6,
"rateRange": { "min": 900, "max": 1200, "currency": "EUR", "unit": "day" },
"languages": ["de", "en"]
}
}For strategy consultants, transformation leads, interim managers, and organisational development experts.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| specialisations | string[] | required | "Strategy" · "Transformation" · "Operations" · "M&A" · "Interim Management" · "Org Design" · "Digital" |
| industries | string[] | optional | Free-form. |
| methodologies | string[] | optional | e.g. "McKinsey 7S", "Design Thinking", "Lean", "Agile at Scale" |
| typicalEngagementLength | enum | optional | "weeks" · "months" · "years" |
| teamSizeTypical | integer | optional | Typical project team size led. |
| languages | string[] | optional | ISO 639-1. |
| rateRange | RateRange | optional | { min, max, currency, unit: "hour"|"day" } |
For creative directors, art directors, brand strategists, and editorial directors. Includes portfolio URL and team leadership scope.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| disciplines | string[] | required | "Brand" · "Editorial" · "Advertising" · "Digital" · "Film/Video" · "Packaging" · "Environmental" |
| tools | string[] | optional | e.g. "Figma", "Adobe CC", "Keynote", "DaVinci Resolve" |
| industries | string[] | optional | Free-form. e.g. "Fashion", "Tech", "FMCG" |
| projectTypes | string[] | optional | "Brand Identity" · "Campaign" · "Design System" · "Launch" · "Rebrand" |
| portfolioUrl | URL | optional | Must be HTTPS. Displayed as primary profile action. |
| teamSizeTypical | integer | optional | Size of creative teams typically led. |
| rateRange | RateRange | optional | { min, max, currency, unit: "hour"|"day"|"project" } |
Extensions in this category include a regulatoryNotice field. Implementing platforms must display this text visibly in the profile editor for this profession. It is not optional. The notice protects both the professional and the platform.
For licensed psychotherapists (approbiert), therapists in training, and Heilpraktiker Psychotherapie. Covers therapeutic approach, setting, and statutory insurance approval.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| approbationStatus | enum | required | "approbiert" · "in-ausbildung" · "heilpraktiker" |
| therapeuticApproach | string[] | required | "VT" · "TP" · "AP" · "Systemisch" · "DBT" · "EMDR" · "Schematherapie" · "ACT" · "CFT" · "Hypnotherapie" |
| setting | string[] | required | "Einzeltherapie" · "Gruppentherapie" · "Paartherapie" · "Familientherapie" · "Online" |
| targetGroups | string[] | optional | "Erwachsene" · "Kinder" · "Jugendliche" · "\u00C4ltere" · "Trauma" · "Pers\u00F6nlichkeitsst\u00F6rungen" · "Essst\u00F6rungen" |
| kassenzulassung | boolean | required | Whether statutory health insurance (GKV) is accepted. |
| supervisorStatus | boolean | optional | Whether the professional is licensed to supervise therapists in training. |
| languages | string[] | optional | ISO 639-1. Therapy languages offered. |
| regulatoryNotice | string | required | Pre-populated by the standard. Implementing platforms must display this to the professional during profile editing. Do not modify the text. |
For licensed physicians in clinical, ambulatory, or research settings. Covers specialty, subspecialty, setting, and expert witness activity.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| specialty | string | required | Free-form. e.g. "Innere Medizin", "Chirurgie", "Psychiatrie" |
| subspecialty | string | optional | Free-form subspecialty or focus area. |
| setting | string[] | required | "Klinik" · "Niederlassung" · "MVZ" · "Forschung" · "Telemedizin" |
| kassenzulassung | boolean | optional | Whether statutory health insurance (GKV) is accepted in private practice. |
| gutachterTaetigkeit | boolean | optional | Expert witness or medical assessment activity. |
| publications | integer | optional | Number of peer-reviewed publications. |
| languages | string[] | optional | ISO 639-1. Languages in which patient care is offered. |
| certifications | string[] | optional | Additional board certifications or Zusatzbezeichnungen. Free-form. |
| regulatoryNotice | string | required | Pre-populated. Must be displayed during profile editing. |
For admitted lawyers, in-house counsel, and legal consultants. Covers practice areas, jurisdiction, and mandate types.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| legalAreas | string[] | required | e.g. "Arbeitsrecht", "M&A", "IP", "Datenschutz", "Strafrecht", "Familienrecht" |
| barAdmission | string[] | required | Jurisdictions of admission. e.g. "DE", "NY", "EU" |
| mandateTypes | string[] | optional | "Beratung" · "Prozessvertretung" · "Schiedsverfahren" · "Gutachten" · "Transaktionen" · "Compliance" |
| courtExperience | boolean | optional | Litigation / court representation experience. |
| fachanwaltstitel | string[] | optional | German specialist lawyer titles. e.g. "Fachanwalt f\u00FCr Arbeitsrecht" |
| languages | string[] | optional | ISO 639-1. Languages in which legal services are offered. |
| rateRange | RateRange | optional | { min, max, currency, unit: "hour" } |
| regulatoryNotice | string | required | Pre-populated. Must be displayed during profile editing. |
For licensed architects and urban planners. Uses HOAI service phases (Leistungsphasen) as the primary structuring element, which is unique to German-speaking markets.
| Field | Type | Required | Values / Notes |
|---|---|---|---|
| leistungsphasen | integer[] | required | HOAI service phases. Values 1–9. e.g. [1,2,3,4,5] |
| buildingTypes | string[] | required | e.g. "Wohnungsbau", "Gewerbebau", "Schulbau", "Denkmalschutz", "Industriebau" |
| certifications | string[] | optional | e.g. "DGNB", "LEED", "BIM-Manager", "Energieberater" |
| bimExperience | boolean | optional | Building Information Modelling experience. |
| software | string[] | optional | e.g. "Revit", "ArchiCAD", "AutoCAD", "Rhino", "SketchUp" |
| projectSizeRange | object | optional | { min, max, unit: "sqm"|"EUR" } — typical project scale |
| chamberMembership | string | optional | e.g. "Architektenkammer Bayern" |
| regulatoryNotice | string | required | Pre-populated. Must be displayed during profile editing. |
Example JSON
{
"extensionId": "openworkid.org/extensions/architect",
"extensionVersion": "1.0.0",
"fields": {
"leistungsphasen": [1, 2, 3, 4, 5],
"buildingTypes": ["Wohnungsbau", "Denkmalschutz"],
"certifications": ["DGNB", "BIM-Manager"],
"bimExperience": true,
"software": ["Revit", "ArchiCAD"],
"projectSizeRange": { "min": 500, "max": 5000, "unit": "sqm" },
"chamberMembership": "Architektenkammer Bayern"
}
}Extensions are community-authored. If your profession is not covered, open an RFC on GitHub. The process is lightweight — a YAML schema definition and a short justification.
# RFC: extensions/[your-profession] name: Your Profession Name slug: your-profession category: technical | business | regulated regulatedIn: [] # ISO country codes if applicable fields: - name: fieldName type: string | string[] | boolean | integer | enum | object required: true | false values: [] # for enums description: one sentence