---
title: "Create a job"
method: POST
path: "/jobs"
tags: ["Jobs"]
---

# Create a job

`POST /jobs`

## Request

- Base URL: `https://api.scrupp.com/api/v1`
- URL: `https://api.scrupp.com/api/v1/jobs`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`
  - API key in query parameter `api_key`

One entry point for every extraction, addressed by `type`. `input` is the body of the equivalent per-path endpoint.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `type` 'sales_navigator.search' | 'linkedin.search' | 'apollo.search' | 'linkedin.profile' | 'company.linkedin' | 'company.domain' | 'company.name' | 'contact.decision_maker.linkedin' | 'contact.decision_maker.name' | 'contact.decision_maker.domain' | 'email.initials' | 'email.linkedin', required
  - `input` object: Body of the equivalent per-path endpoint.
  - `callback_url` string, uri: Scrupp POSTs here when the job finishes, so you do not have to poll.
  - `metadata` object: Stored with the job and echoed back on status and result.

## Response `200`

Idempotency-Key replay — the original job, not a new one

- JobCreated
  - `job_id` integer
  - `status` string
  - `created_at` string, date-time
  - `poll_url` string
  - `result_url` string
  - `metadata` object, nullable

## Other responses

- `202`: Job accepted
- `400`: Invalid request
- `403`: Bad key, or a plan without API access
- `409`: The Idempotency-Key was already used with a different body
- `429`: 2,000 requests per minute per key exceeded

---

[API](https://skmtc.dev/scrupp/apis/scrupp-api.md) · [All operations](https://skmtc.dev/scrupp/apis/scrupp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scrupp/apis/scrupp-api/revisions/4f1d7a1abe8f?raw)
