Skip to main content

Overview

The Firstwork API provides programmatic access to manage applications, hiring flows, candidates, automations, and more. It’s designed for integrating Firstwork with your existing systems, building custom workflows, and automating HR operations.

Base URL

All API requests are made to your Firstwork instance’s external API base path:
https://your-instance.firstwork.com/external/

API Versions

VersionBase PathStatus
v1/external/v1/Stable
v2/external/v2/Latest
New integrations should use v2 endpoints where available. v1 endpoints are maintained for backward compatibility.

Quick Start

Here’s a quick example to list all hiring flows:
curl -X GET "https://your-instance.firstwork.com/external/v1/hiring-flow/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Available Endpoints

Applications

EndpointMethodDescription
/v1/application/create/POSTCreate a new application
/v1/applications/GETList applications
/v1/applications/{id}/GETGet application details
/v1/applications/{id}/advance/POSTUpdate application status
/v1/applications/{id}/history/GETGet transition history
/v1/applications/advance/POSTBulk update status
/v1/applications/bulk_transition_history/POSTBulk transition history
/v1/applications/{id}/upload_documents/POSTUpload documents
/v2/applications/GETList applications (v2)

Hiring Flows

EndpointMethodDescription
/v1/hiring-flow/GETList hiring flows
/v1/hiring-flow/{id}/GETGet hiring flow details

Candidates

EndpointMethodDescription
/v1/get_candidate_dataGETGet candidate data
/v1/create_or_update_candidatePOSTCreate or update candidate
/v1/get_candidate_data_and_submissions/GETGet candidate data with submissions

Automations

EndpointMethodDescription
/v1/automations/webhooks/{id}/fire/POSTFire a webhook trigger

Other

EndpointMethodDescription
/v1/company/GETGet company information
/v1/external_billing_data_exportGETExport billing data
/v1/applications/magic-link/POSTGenerate magic login link

Response Format

All API responses follow a consistent JSON format:
{
  "status": "success",
  "data": {
    // Response data
  }
}

Error Responses

{
  "status": "error",
  "message": "Description of the error",
  "code": "ERROR_CODE"
}

HTTP Status Codes

CodeDescription
200Success
201Created
400Bad Request — Invalid parameters
401Unauthorized — Invalid or missing API key
403Forbidden — Insufficient permissions
404Not Found — Resource doesn’t exist
429Too Many Requests — Rate limit exceeded
500Internal Server Error

Rate Limiting

API requests are rate-limited to ensure fair usage:
  • Default limit: 100 requests per minute per API key
  • Burst limit: 20 requests per second
  • Rate limit headers are included in responses

Pagination

List endpoints support pagination:
GET /external/v1/applications/?page=1&page_size=50
ParameterDescriptionDefault
pagePage number1
page_sizeResults per page25