Skip to main content
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.

Masked Identity Everywhere

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.".

Post-Hire: Still Masked

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.

What Is Never Exposed

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.

Work Email: The Platform Exception

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.

Designing Your Integration Around This

  • 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.

Evaluate Candidates

Working with masked profiles, transcripts, and pre-hire conversations.

Annotation Platforms Overview

Where Work Email fits in the platform provisioning lifecycle.