Skip to main content

API Reference

Field names

Exact Position and application field names below are placeholders pending the real Go struct — update once confirmed.

List positions

GET /api/v1/public/positions

Returns all currently open/published positions.

Auth: None

Response 200

{
"positions": [
{
"id": "pos_123",
"title": "Senior Backend Engineer",
"department": "Engineering",
"location": "Remote",
"employment_type": "full_time",
"created_at": "2026-07-01T10:00:00Z"
}
]
}

Get position by ID

GET /api/v1/public/positions/:id

Returns full details for a single position — use this for a job detail page.

Auth: None

Path parameters

NameTypeRequiredDescription
idstringYesThe position identifier.

Response 200

{
"id": "pos_123",
"title": "Senior Backend Engineer",
"description": "We're looking for...",
"department": "Engineering",
"location": "Remote",
"employment_type": "full_time",
"created_at": "2026-07-01T10:00:00Z"
}

Errors

StatusMeaning
404No position exists with that ID (or it's no longer open).

Apply for a position

POST /api/v1/public/positions/:id/apply

Submits a job application. No candidate account required.

Auth: None

Path parameters

NameTypeRequiredDescription
idstringYesThe position being applied to.

Request body

{
"full_name": "Jane Doe",
"email": "jane@example.com",
"phone": "+1-555-0100",
"resume_url": "https://...",
"cover_letter": "..."
}
FieldTypeRequiredDescription
full_namestringYesApplicant's full name.
emailstringYesApplicant's email address.
phonestringNoContact number.
resume_urlstringYesLink to an uploaded resume/CV.
cover_letterstringNoFree-text cover letter.

Response 200

{
"application_id": "app_456",
"status": "submitted"
}

Errors

StatusMeaning
400Missing or invalid fields — check the response body for details.
404Position not found or no longer accepting applications.
429Rate limit exceeded — see CORS & Rate Limits.