1. Endpoints
Recruspace
  • Welcome
  • Get API Key
  • Authentication
  • Rate Limit
  • Pagination
  • Endpoints
    • Get Candidate
      GET
    • Create Candidate
      POST
    • Add Note to Candidate
      POST
    • Add Tag to Candidate
      POST
    • Add Candidate to Job Post or Talent Pool
      POST
    • Search Candidate by Email
      GET
    • List Company Offices
      GET
    • List Company Users
      GET
    • List Job Posts
      GET
    • Get Job Post
      GET
    • Apply to Job Post
      POST
    • List Job Post Questions
      GET
    • List Talent Pools
      GET
    • Update Talent Pool
      PATCH
    • Delete Talent Pool
      DELETE
    • List Talent Pool Candidates
      GET
    • Create Talent Pool
      POST
    • Upload File
      POST
  1. Endpoints

Add Candidate to Job Post or Talent Pool

POST
/api/v1/client/candidates/manual-add/
Last modified:2026-07-28 11:05:53
Adds a new candidate manually to a specific talent pool or job post belonging to the authenticated company.
job_post and talent_pool_id are both optional and can be combined. If neither is given, the candidate is created for
the company without being attached to a job post or a talent pool.
Arguments
email (string, as body parameter, required) : Candidate's email address. Must not already exist in the given job post
or talent pool.
Example: "johndoe@example.com"
first_name (string, as body parameter, required) : Candidate's first name.
Example: "John"
last_name (string, as body parameter, required) : Candidate's last name.
Example: "Doe"
cv (integer, as body parameter, required) : Document ID of the uploaded candidate CV, returned by utilities/upload-file/.
Example: 20170
job_post (string, as body parameter, optional) : The unique identifier (hash) of the job post to which the candidate should be added.
Example: "ab8fefa4e436e9462f2952f53cd8c"
talent_pool_id (integer, as body parameter, optional): The unique identifier of the talent pool to which the candidate should be added.
Example: 123
source_platform (string, as body parameter, optional) : Where the candidate came from. One of api | bulk_import | manually_added | linkedin_easyapply | recruspace | extension | linkedin_post | google | twitter_post | facebook_post.
Defaults to api when omitted.
Example: "manually_added"
Sample request
{
    "email": "johndoe@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "cv": 20170,
    "talent_pool_id": 123
}
Returns
201 Created: A JSON object representing the newly created candidate with full detail, including presigned URLs for CV/photo if available.
400 Bad Request : If validation fails, or if a candidate with the same email already exists in the specified job post
or talent pool. The duplicate case is returned with error_code: 10003 and the existing candidate ID under
errors.exist_candidate_id. An unknown job_post hash is also a validation error and therefore returns 400.
404 Not Found : If the given talent_pool_id does not exist.

Request

Authorization
Bearer Token
Provide your bearer token in the
Authorization
header when making requests to protected resources.
Example:
Authorization: Bearer ********************
or
Body Params
application/json
Required

Examples

Responses

🟢201
application/json
Bodyapplication/json

🟠400
🟠403
🟠404
🟠423
🟠429
🔴500
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://api.recruspace.com/api/v1/client/candidates/manual-add/' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "job_post": "string",
    "talent_pool_id": 0,
    "first_name": "string",
    "last_name": "string",
    "email": "user@example.com",
    "cv": 0,
    "source_platform": "api"
}'
Response Response Example
201 - Example 1
{
    "success": "OK",
    "content": {
        "id": 0,
        "company": "string",
        "user": {
            "id": 0,
            "email": "user@example.com",
            "first_name": "string",
            "last_name": "string",
            "profile_img": {
                "id": 0,
                "path": "string",
                "name": "string",
                "type": "string",
                "file_size": -2147483648,
                "base": "string",
                "presigned_url": "string",
                "uploaded_at": "2019-08-24T14:15:22.123Z"
            }
        },
        "job_post": {
            "hash": "string",
            "title": "string",
            "status": "draft",
            "pipeline": 0
        },
        "initial_applied_job_post": {
            "hash": "string",
            "title": "string",
            "status": "draft",
            "pipeline": 0
        },
        "substage": {
            "id": 0,
            "stage": {
                "id": 0,
                "name": "string",
                "key": "string",
                "created_at": "2019-08-24T14:15:22.123Z",
                "pipeline": 0
            },
            "name": "string",
            "queue": -2147483648,
            "is_visible": true,
            "created_at": "2019-08-24T14:15:22.123Z",
            "email_template": 0
        },
        "email": "user@example.com",
        "first_name": "string",
        "last_name": "string",
        "cv": {
            "id": 0,
            "path": "string",
            "name": "string",
            "type": "string",
            "file_size": -2147483648,
            "base": "string",
            "presigned_url": "string",
            "uploaded_at": "2019-08-24T14:15:22.123Z"
        },
        "photo": {
            "id": 0,
            "path": "string",
            "name": "string",
            "type": "string",
            "file_size": -2147483648,
            "base": "string",
            "presigned_url": "string",
            "uploaded_at": "2019-08-24T14:15:22.123Z"
        },
        "phone_number": "string",
        "address": "string",
        "city": "string",
        "country": "string",
        "education": [
            {
                "school_name": "string",
                "degree": "bachelor",
                "major": "string",
                "start_date": "2019-08-24",
                "end_date": "2019-08-24",
                "currently_pursuing": true
            }
        ],
        "work_experience": [
            {
                "company_name": "string",
                "position_title": "string",
                "employment_type": "full_time",
                "start_date": "2019-08-24",
                "end_date": "2019-08-24",
                "currently_employed": true
            }
        ],
        "links": [
            {
                "platform": "linkedin",
                "url": "string"
            }
        ],
        "tags": [
            {
                "id": 0,
                "title": "string"
            }
        ],
        "suitability": "suitable",
        "is_pinned": true,
        "score": 0,
        "skills": [
            "string"
        ],
        "total_work_experience": 0,
        "seniority": "string",
        "is_seen": true,
        "rejected_mail_sended": true,
        "source_platform": "api",
        "entry_method": "applied",
        "extraction_status": "not_started",
        "parse_status": "not_started",
        "score_status": "not_started",
        "is_errored": true,
        "created_at": "2019-08-24T14:15:22.123Z",
        "updated_at": "2019-08-24T14:15:22.123Z"
    }
}
Modified at 2026-07-28 11:05:53
Previous
Add Tag to Candidate
Next
Search Candidate by Email
Built with