Developers

Ingest API

Docs are public. The SDK and API keys are limited to companies we approve after a business-interest application.

Loading…

Employer ingest API

Post your company's warehouse jobs in bulk from an ATS or HRIS. Each new job spends one posting credit unless your company has unlimited posting. Re-sending the same externalId updates the listing instead of duplicating it.

HR teams with a spreadsheet should use Upload Jobs instead — no API key, no SDK.

Who can use the SDK

The SDK is not public. You must represent a company with a real ingest use case (ATS vendor, HRIS, staffing firm, or an employer exporting from your own ATS), submit the form on this page, and wait for WarehouseJobs to approve access. After approval, an owner or company admin mints a company-scoped secret at /employer/developers. The secret is shown once.

Authentication

Send the key on every request as X-Api-Key. Do not put it in a browser app, query string, or client-side JavaScript. Store it in your server environment. Rotate by revoking the old key and creating a new one.

Validate, then persist

  1. POST /api/v1/employer/jobs/import/validate — returns per-row errors and a credit check. Nothing is saved.
  2. POST /api/v1/employer/jobs/import — ≤100 jobs run immediately (200); more than 100 are queued (202). Cap 10,000.
  3. Poll GET /api/v1/employer/jobs/import/{batchId} until completed or failed.

cURL

Validate

curl -sS -X POST "https://api.warehousejobs.com/api/v1/employer/jobs/import/validate" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: wj_live_YOUR_KEY" \
  -d '{
    "source": "workday-export",
    "jobs": [{
      "externalId": "REQ-1042",
      "title": "Forklift Operator",
      "city": "Dallas",
      "state": "TX",
      "employmentType": "full_time",
      "description": "Operate forklifts in a busy warehouse. Safety first, every shift."
    }]
  }'

Import

curl -sS -X POST "https://api.warehousejobs.com/api/v1/employer/jobs/import" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: wj_live_YOUR_KEY" \
  -d '{
    "source": "workday-export",
    "jobs": [{
      "externalId": "REQ-1042",
      "title": "Forklift Operator",
      "city": "Dallas",
      "state": "TX",
      "employmentType": "full_time",
      "description": "Operate forklifts in a busy warehouse. Safety first, every shift."
    }]
  }'

Node

Copy sdk/ingest from the WarehouseJobs repo after your access is approved. The package is not published on npm.

Node

import { WarehouseJobsIngest } from "@warehousejobs/ingest";

const client = new WarehouseJobsIngest({
  baseUrl: "https://api.warehousejobs.com",
  apiKey: process.env.WAREHOUSEJOBS_API_KEY!,
});

const jobs = [
  {
    externalId: "REQ-1042",
    title: "Forklift Operator",
    city: "Dallas",
    state: "TX",
    employmentType: "full_time",
    description: "Operate forklifts in a busy warehouse. Safety first, every shift.",
  },
];

const check = await client.validateJobs(jobs);
if (!check.ok) throw new Error(check.errors.map((e) => e.reason).join("; "));

const result = await client.postJobs(jobs, "workday-export");