curl -sS https://app.opentrain.ai/api/public/v1/freelancers/<USER_ID_OR_SLUG> \
-H "Authorization: Bearer $OT_API_TOKEN"
{
"freelancer": {
"id": "<FREELANCER_ID>",
"profileSlug": "maria-g",
"profilePath": "/profile/maria-g",
"displayName": "Maria G.",
"firstName": "Maria",
"lastNameInitial": "G",
"talentType": "Individual",
"title": "Text Annotation Specialist",
"bio": "Native Spanish speaker with 4 years of NLP annotation experience.",
"city": "Madrid",
"countryCode": "ES",
"country": "Spain",
"profilePhotoUrl": "https://app.opentrain.ai/<PHOTO_PATH>",
"hourlyRateUsd": 18,
"availability": "FULL_TIME",
"expertiseLevel": "EXPERT",
"englishLevel": "FLUENT",
"memberSince": "2024-03-02T10:00:00.000Z",
"identityVerified": true,
"skills": {
"subjectMatter": ["Social media", "Customer support"],
"tags": ["SENTIMENT_ANALYSIS", "TEXT_CLASSIFICATION"],
"software": ["<ANNOTATION_TOOL>"],
"dataTypes": ["TEXT"],
"labelTypes": ["CLASSIFICATION"]
},
"languages": [
{ "language": "Spanish", "proficiency": "NATIVE" },
{ "language": "English", "proficiency": "FLUENT" }
],
"stats": {
"totalEarnedUsd": 2400,
"billedHours": 310,
"jobSuccessScore": 98,
"reviewCount": 7,
"averageRating": 4.9
},
"agency": null,
"labelExperience": [
{
"id": "<EXPERIENCE_ID>",
"title": "Spanish tweet sentiment corpus",
"description": "Annotated 120k tweets for a sentiment model.",
"fromYear": 2023,
"toYear": 2025,
"ongoing": false,
"software": "<ANNOTATION_TOOL>",
"dataType": "TEXT",
"labelTypes": ["CLASSIFICATION"]
}
],
"workExperience": [],
"education": [],
"reviews": [
{
"id": "<REVIEW_ID>",
"rating": 5,
"comment": "Fast, precise, great guideline questions.",
"createdAt": "2026-01-20T12:00:00.000Z"
}
]
}
}
Freelancers
Get Freelancer Profile
Read an AI trainer’s masked public profile by user ID or profile slug: skills, stats, experience, education, and reviews.
GET
/
api
/
public
/
v1
/
freelancers
/
{idOrSlug}
curl -sS https://app.opentrain.ai/api/public/v1/freelancers/<USER_ID_OR_SLUG> \
-H "Authorization: Bearer $OT_API_TOKEN"
{
"freelancer": {
"id": "<FREELANCER_ID>",
"profileSlug": "maria-g",
"profilePath": "/profile/maria-g",
"displayName": "Maria G.",
"firstName": "Maria",
"lastNameInitial": "G",
"talentType": "Individual",
"title": "Text Annotation Specialist",
"bio": "Native Spanish speaker with 4 years of NLP annotation experience.",
"city": "Madrid",
"countryCode": "ES",
"country": "Spain",
"profilePhotoUrl": "https://app.opentrain.ai/<PHOTO_PATH>",
"hourlyRateUsd": 18,
"availability": "FULL_TIME",
"expertiseLevel": "EXPERT",
"englishLevel": "FLUENT",
"memberSince": "2024-03-02T10:00:00.000Z",
"identityVerified": true,
"skills": {
"subjectMatter": ["Social media", "Customer support"],
"tags": ["SENTIMENT_ANALYSIS", "TEXT_CLASSIFICATION"],
"software": ["<ANNOTATION_TOOL>"],
"dataTypes": ["TEXT"],
"labelTypes": ["CLASSIFICATION"]
},
"languages": [
{ "language": "Spanish", "proficiency": "NATIVE" },
{ "language": "English", "proficiency": "FLUENT" }
],
"stats": {
"totalEarnedUsd": 2400,
"billedHours": 310,
"jobSuccessScore": 98,
"reviewCount": 7,
"averageRating": 4.9
},
"agency": null,
"labelExperience": [
{
"id": "<EXPERIENCE_ID>",
"title": "Spanish tweet sentiment corpus",
"description": "Annotated 120k tweets for a sentiment model.",
"fromYear": 2023,
"toYear": 2025,
"ongoing": false,
"software": "<ANNOTATION_TOOL>",
"dataType": "TEXT",
"labelTypes": ["CLASSIFICATION"]
}
],
"workExperience": [],
"education": [],
"reviews": [
{
"id": "<REVIEW_ID>",
"rating": 5,
"comment": "Fast, precise, great guideline questions.",
"createdAt": "2026-01-20T12:00:00.000Z"
}
]
}
}
Reads an AI trainer’s public profile for candidate evaluation — title, bio, skills, stats, label/work experience, education, languages, and reviews. Resolve candidates from proposals (
candidate.id or candidate.profileSlug on GET /jobs/{id}/proposals), then invite or hire them.
Identity is masked: first name + last initial (agencies show the agency name with no last-name initial). Personal contact details — including personal email — are never returned; see privacy. Profiles you cannot view (nonexistent, closed, banned, or restricted by the AI trainer’s visibility settings) return 404, not 403.
Requirements: proposals:read scope. Works pre-claim.
Request
The AI trainer’s user ID or public profile slug.
Response
Hide freelancer
Hide freelancer
User ID.
Public profile slug.
App-relative profile path (append to
https://app.opentrain.ai).Masked display name, e.g.
Maria G..First name.
Last-name initial.
null for agencies.Individual or Agency.Profile headline.
Profile description.
City.
ISO country code.
Country display name.
Profile photo URL.
Listed hourly rate.
Stated availability.
Self-reported expertise level.
English proficiency.
ISO account-creation timestamp.
true when identity verification is complete.{subjectMatter[], tags[], software[], dataTypes[], labelTypes[]} — string arrays.{language, proficiency} pairs (proficiency may be null).{totalEarnedUsd, billedHours, jobSuccessScore, reviewCount, averageRating} — averageRating is rounded to one decimal, null when unrated.For agencies:
{name, website, headcount, industryExperience[]}. null for individuals.Labeling-specific experience entries:
{id, title, description, fromYear, toYear, ongoing, software, dataType, labelTypes[]}.General work history:
{id, title, company, description, fromYear, toYear, current, city, country}.{id, school, degree, areaOfStudy, fromYear, toYear, description}.Employer reviews:
{id, rating, comment, createdAt} — rating rounded to one decimal, createdAt ISO.Errors
| Status | code | Meaning |
|---|---|---|
400 | BAD_REQUEST | Missing idOrSlug |
401 | UNAUTHORIZED | Missing or invalid token |
403 | FORBIDDEN | Missing proposals:read scope |
404 | NOT_FOUND | No such profile, or the profile is not visible to you (details: {resource: "freelancers", idOrSlug}) |
curl -sS https://app.opentrain.ai/api/public/v1/freelancers/<USER_ID_OR_SLUG> \
-H "Authorization: Bearer $OT_API_TOKEN"
{
"freelancer": {
"id": "<FREELANCER_ID>",
"profileSlug": "maria-g",
"profilePath": "/profile/maria-g",
"displayName": "Maria G.",
"firstName": "Maria",
"lastNameInitial": "G",
"talentType": "Individual",
"title": "Text Annotation Specialist",
"bio": "Native Spanish speaker with 4 years of NLP annotation experience.",
"city": "Madrid",
"countryCode": "ES",
"country": "Spain",
"profilePhotoUrl": "https://app.opentrain.ai/<PHOTO_PATH>",
"hourlyRateUsd": 18,
"availability": "FULL_TIME",
"expertiseLevel": "EXPERT",
"englishLevel": "FLUENT",
"memberSince": "2024-03-02T10:00:00.000Z",
"identityVerified": true,
"skills": {
"subjectMatter": ["Social media", "Customer support"],
"tags": ["SENTIMENT_ANALYSIS", "TEXT_CLASSIFICATION"],
"software": ["<ANNOTATION_TOOL>"],
"dataTypes": ["TEXT"],
"labelTypes": ["CLASSIFICATION"]
},
"languages": [
{ "language": "Spanish", "proficiency": "NATIVE" },
{ "language": "English", "proficiency": "FLUENT" }
],
"stats": {
"totalEarnedUsd": 2400,
"billedHours": 310,
"jobSuccessScore": 98,
"reviewCount": 7,
"averageRating": 4.9
},
"agency": null,
"labelExperience": [
{
"id": "<EXPERIENCE_ID>",
"title": "Spanish tweet sentiment corpus",
"description": "Annotated 120k tweets for a sentiment model.",
"fromYear": 2023,
"toYear": 2025,
"ongoing": false,
"software": "<ANNOTATION_TOOL>",
"dataType": "TEXT",
"labelTypes": ["CLASSIFICATION"]
}
],
"workExperience": [],
"education": [],
"reviews": [
{
"id": "<REVIEW_ID>",
"rating": 5,
"comment": "Fast, precise, great guideline questions.",
"createdAt": "2026-01-20T12:00:00.000Z"
}
]
}
}
⌘I