Positions
Update a position
/positions/{id}Send only the fields you want to change.
teamId: nullremoves the team.- Sending
questionsreplaces the whole list. To keep an existing question (and any image uploaded for it in the dashboard), include itsid. Questions without anidare created as new. analyzePromptupdates the instructions for AI analysis. It is never returned.
Path parameters
idstringrequiredpattern ^[0-9a-fA-F]{24}$A 24-character hex ID.
Example:
"66f3a1c2e4b0a1d2c3e4f530"
Request body PositionInputrequired
namestringmin length 2max length 100companyIdstringpattern ^[0-9a-fA-F]{24}$Must be a company in your organization.
teamIdstring | nullpattern ^[0-9a-fA-F]{24}$Must be a team in your organization.
nullmeans no team (onPATCH, it removes the team).statusstringDefaults to
openon create.Values:
"open", "closed", "draft"interviewConditionstringmax length 500Instructions shown to the candidate before the interview.
questionsQuestionInput[]min items 1max items 15On
PATCH, this replaces the whole list. Includeidto keep an existing question.analyzePromptstringmax length 10000Extra instructions for the AI analysis of this position's interviews. Write-only; it is never returned.
Responses
200The updated position.
The updated position.
Body PositionResponse
dataPositionrequiredidstringrequiredpattern ^[0-9a-fA-F]{24}$A 24-character hex ID.
namestringrequiredstatusstringrequiredOnly
openpositions accept new invites.Values:
"open", "closed", "draft"companyIdstringrequiredpattern ^[0-9a-fA-F]{24}$A 24-character hex ID.
teamIdstring | nullrequiredinterviewConditionstring | nullrequiredInstructions shown to the candidate before the interview.
questionsQuestion[]requiredSorted by
order.createdAtstring (date-time) | nullrequiredupdatedAtstring (date-time) | nullrequired
timestampinteger (int64)requiredServer time in milliseconds since the Unix epoch.
{
"data": {
"id": "66f3a1c2e4b0a1d2c3e4f530",
"name": "Senior Warehouse Supervisor",
"status": "closed",
"companyId": "66f3a1c2e4b0a1d2c3e4f510",
"teamId": null,
"interviewCondition": "Answer in English or Thai.",
"questions": [
{
"id": "66f3a1c2e4b0a1d2c3e4f531",
"text": "Tell us about a time you led a team through a busy period (peak season).",
"timeLimit": 4,
"order": 1
},
{
"id": "66f3a1c2e4b0a1d2c3e4f535",
"text": "How would you onboard three new staff in one week?",
"timeLimit": 2,
"order": 2
}
],
"createdAt": "2026-09-20T08:15:00.000Z",
"updatedAt": "2026-09-25T10:00:00.000Z"
},
"timestamp": 1790330400000
}400The request is invalid. message is the first validation error.
The request is invalid. message is the first validation error.
Body Error
successbooleanrequiredValues:
falsemessagestringrequiredA human-readable error message.
timestampinteger (int64)requiredServer time in milliseconds since the Unix epoch.
{
"success": false,
"message": "limit must be between 1 and 100",
"timestamp": 1790330400000
}401The API key is missing, malformed, invalid or revoked.
The API key is missing, malformed, invalid or revoked.
Body Error
successbooleanrequiredValues:
falsemessagestringrequiredA human-readable error message.
timestampinteger (int64)requiredServer time in milliseconds since the Unix epoch.
{
"success": false,
"message": "API key is required. Send it as 'Authorization: Bearer <key>'",
"timestamp": 1790330400000
}403API access is disabled for your organization (any endpoint), or, when creating an invite, your
organization has no active subscription or no interview credits left.
API access is disabled for your organization (any endpoint), or, when creating an invite, your organization has no active subscription or no interview credits left.
Body Error
successbooleanrequiredValues:
falsemessagestringrequiredA human-readable error message.
timestampinteger (int64)requiredServer time in milliseconds since the Unix epoch.
{
"success": false,
"message": "API access is not enabled for this organization",
"timestamp": 1790330400000
}404The resource doesn't exist, was cancelled, or belongs to another organization. The API never
returns 403 for another organization's IDs.
The resource doesn't exist, was cancelled, or belongs to another organization. The API never returns 403 for another organization's IDs.
Body Error
successbooleanrequiredValues:
falsemessagestringrequiredA human-readable error message.
timestampinteger (int64)requiredServer time in milliseconds since the Unix epoch.
{
"success": false,
"message": "Interview not found",
"timestamp": 1790330400000
}429Too many requests. Wait for Retry-After seconds (or the reset value in RateLimit), then retry.
Too many requests. Wait for Retry-After seconds (or the reset value in RateLimit), then retry.
Headers
RateLimitstringDraft-7 rate limit state, e.g.
limit=120, remaining=0, reset=42(reset is in seconds).RateLimit-PolicystringDraft-7 rate limit policy: the limit and the window in seconds.
Retry-AfterintegerSeconds to wait before retrying.
Body Error
successbooleanrequiredValues:
falsemessagestringrequiredA human-readable error message.
timestampinteger (int64)requiredServer time in milliseconds since the Unix epoch.
{
"success": false,
"message": "Too many requests. Retry after the number of seconds in the RateLimit header.",
"timestamp": 1790330400000
}