Submit
Check whether contacts are still at their company or have changed / left their job. The Career Monitor API mirrors the Enrichment pattern: one Submit, one Status, one Result.
Submit creates a job and starts processing. It accepts either a JSON list or a CSV/Excel file upload, and returns a job_id immediately — poll Job Status and then fetch Results.
Endpoint
Method: POST
Path: /career-monitor/submit/
Full URL: https://backend.ecoreservice.com/api/v1/career-monitor/submit/
Auth: Authorization: Token YOUR_API_TOKEN (or Bearer) — see Authentication
Cost: 5 credits per record (default) — see Credit Costs
Test-mode tokens (test_…) are not allowed on Career Monitor endpoints and return 403.
Option A — JSON Body
Content-Type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
data | array of objects | Yes | Contacts to check (min 1). Each record needs a company identifier and a LinkedIn URL. |
title | string | No | Job label. Defaults to an auto-generated name. |
Per-record fields
Keys are case-insensitive; spaces are normalized to _.
| Field | Required | Notes |
|---|---|---|
company_name | Yes | The company to check against. account_name and client_provided_name also work. |
linkedin_url | Yes | Used to look up the current employer. website also accepted. |
ec_id | No | Your identifier (also accepts contact_id, id). Auto-generated (row_N) if omitted. |
title | No | Job title. |
start_date / end_date | No | Employment dates. |
Every record must carry a company identifier (company_name / account_name / client_provided_name) and a linkedin_url (or website). A record missing either is rejected with 400 — without a LinkedIn URL the contact can't be looked up (it could only ever return Broken LI, which would still consume credits).
{
"title": "Q1 check",
"data": [
{ "ec_id": "1001", "company_name": "Acme Corp", "linkedin_url": "https://www.linkedin.com/in/jane", "title": "VP Sales" },
{ "ec_id": "1002", "account_name": "Globex Inc", "linkedin_url": "https://www.linkedin.com/in/john" }
]
}
curl -X POST "https://backend.ecoreservice.com/api/v1/career-monitor/submit/" \
-H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Q1 check","data":[{"ec_id":"1001","company_name":"Acme Corp","linkedin_url":"https://www.linkedin.com/in/jane"}]}'
Option B — File Upload
Content-Type: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | CSV or Excel (.csv, .xlsx, .xls). Streamed — large files supported (up to 10,000,000 rows / 5 GB). |
title | string | No | Job label. |
Columns are auto-detected (same names as the JSON fields). The file must include a company column (company_name / account_name / client_provided_name) and a linkedin_url column (or website); it is rejected with 400 if either is absent. Optional columns: ec_id, title, start_date, end_date.
curl -X POST "https://backend.ecoreservice.com/api/v1/career-monitor/submit/" \
-H "Authorization: Token YOUR_API_TOKEN" \
-F "file=@contacts.csv" \
-F "title=Q1 check"
Successful Response — 200 OK
{
"status": "submitted",
"job_id": 123,
"total_records": 2,
"estimated_credits": 10.0,
"message": "Your Career Monitor request has been submitted and is being processed."
}
| Field | Type | Description |
|---|---|---|
status | string | submitted on success |
job_id | integer | Use this for Job Status and Results |
total_records | integer | Records accepted for processing |
estimated_credits | number | records × cost_per_record (default 5) |
message | string | Human-readable confirmation |
Credits & Billing
- Cost is a fixed number of credits per record (default 5; configurable by the platform).
- On submit, the balance is pre-checked — if the account can't cover the whole job you get a
402immediately and nothing is created. - Credits are actually deducted when processing completes, and recorded as a wallet transaction in your usage/billing history.
Error Responses
| HTTP | When | Body |
|---|---|---|
| 400 | A record/column missing its company identifier or linkedin_url; empty/invalid file; unsupported format; over 10M rows | { "error": "..." } or field errors |
| 401 | Missing or invalid token | { "detail": "Authentication credentials were not provided." } |
| 402 | Insufficient credits (checked at submit) | { "error": "You require N credits, but only M are available." } |
| 403 | Test-mode token used | { "error": "Test tokens cannot be used for credit-consuming operations. Use a live API key or JWT." } |
See Error Codes for the full list.
Next Step
Poll Job Status, then fetch Results once the job is Completed.