Skip to content
OpenTrain AIOpenTrain AIOpenTrain AIDocs

Ask OpenTrain

Answers from the documentation, with sources.

What would you like to do with OpenTrain?

AI answers can be mistaken. Check the linked sources. Don’t include private account information.

Open app

DEVELOPER DOCUMENTATION

Privacy and Work Email

What identity data the API exposes at each stage, and why AI trainers are reachable only at their @opentrain.work Work Email.

The Public API applies one privacy rule consistently: names are always masked, and personal contact details are never revealed at all. Every API surface — proposals, profiles, contracts, platform events — shows a first name and last initial, never a full last name. Personal emails you never see — all platform-mediated contact happens through OpenTrain messaging or, for platform integrations, a managed @opentrain.work Work Email.

Proposal candidates, AI trainer profiles, and contracts all expose a first name and last initial:

{
"candidate": {
"id": "...",
"displayName": "Ada L.",
"firstName": "Ada",
"lastNameInitial": "L.",
"profileSlug": "ada-l-1a2b3c",
"profileTitle": "Senior Data Annotator",
"country": "United Kingdom",
"countryCode": "GB"
}
}

If a name is missing entirely, the API falls back to "Freelancer" rather than exposing anything else.

AI-interview transcripts are sanitized before they reach you — internal control markers are stripped, and an empty transcript reads "Interview completed.".

Hiring does not unmask anyone. Contracts you’re party to show the same masked name:

{
"freelancer": {
"userId": "...",
"displayName": "Ada L.",
"country": "United Kingdom",
"profilePath": "/profile/ada-l-1a2b3c"
}
}

Full names live only inside the OpenTrain app, where the platform controls how they’re displayed — they never cross the API boundary.

The Public API returns no email field anywhere. Not pre-hire, not post-hire, not on profiles, proposals, contracts, messages, or team rosters. Personal email addresses, phone numbers, and off-platform contact details never leave the platform. To reach an AI trainer, use OpenTrain messaging — it notifies them through their own verified channels.

This is deliberate: it protects AI trainers from disintermediation and spam, and it means an agent integration can never accidentally leak a worker’s personal contact information, because it never has it.

The Platform API has one carefully-gated channel for direct contact. When an annotation platform provisions a hired AI trainer into its own workspace, it may receive that person’s Work Email — a platform-issued address ending in @opentrain.work that OpenTrain manages and can revoke:

{
"contractId": "...",
"participants": [
{
"opentrainUserId": "...",
"displayName": "Ada L.",
"country": "United Kingdom",
"profileUrl": "https://app.opentrain.ai/profile/ada-l-1a2b3c",
"workEmail": "ada.1234@opentrain.work"
}
]
}

workEmail is present only when both gates pass:

  1. The install holds the participants:email scope, and
  2. The human granted PII consent when authorizing the install.

Otherwise the request fails 403:

{
"error": "Install has not granted PII consent for participant work emails",
"code": "FORBIDDEN",
"details": { "requiredScopes": ["participants:email"], "piiConsent": false }
}

Even then, only addresses with active provisioning and the @opentrain.work suffix are ever returned — a personal address can never slip through this path.

  • Key your records on stable IDs (userId / opentrainUserId), never on display names — masked names are not unique and can change.
  • Don’t build flows that assume you can email candidates. Pre-hire outreach goes through the proposal conversation endpoint; post-hire communication through contract messaging.
  • Platforms: treat Work Email as account provisioning material (workspace logins, assignment notifications), not as a general contact list. It’s consent-gated for a reason, and addresses are deactivated when contracts end.
  • Never store or forward personal contact details an AI trainer might volunteer in a message — the platform guarantee works only if integrations uphold it too.