Skip to main content

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

FieldTypeRequiredDescription
dataarray of objectsYesContacts to check (min 1). Each record needs a company identifier and a LinkedIn URL.
titlestringNoJob label. Defaults to an auto-generated name.

Per-record fields

Keys are case-insensitive; spaces are normalized to _.

FieldRequiredNotes
company_nameYesThe company to check against. account_name and client_provided_name also work.
linkedin_urlYesUsed to look up the current employer. website also accepted.
ec_idNoYour identifier (also accepts contact_id, id). Auto-generated (row_N) if omitted.
titleNoJob title.
start_date / end_dateNoEmployment 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

FieldTypeRequiredDescription
filefileYesCSV or Excel (.csv, .xlsx, .xls). Streamed — large files supported (up to 10,000,000 rows / 5 GB).
titlestringNoJob 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."
}
FieldTypeDescription
statusstringsubmitted on success
job_idintegerUse this for Job Status and Results
total_recordsintegerRecords accepted for processing
estimated_creditsnumberrecords × cost_per_record (default 5)
messagestringHuman-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 402 immediately and nothing is created.
  • Credits are actually deducted when processing completes, and recorded as a wallet transaction in your usage/billing history.

Error Responses

HTTPWhenBody
400A record/column missing its company identifier or linkedin_url; empty/invalid file; unsupported format; over 10M rows{ "error": "..." } or field errors
401Missing or invalid token{ "detail": "Authentication credentials were not provided." }
402Insufficient credits (checked at submit){ "error": "You require N credits, but only M are available." }
403Test-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.