Coding agent documentation index Fetch the complete documentation index at: https://docs.worklittle.com/docs-agent-manifest.json Use this file to discover all available pages before exploring further.

Embedded job board

Ship a careers site on your own domain with the public board endpoints: no API key, open CORS, ETag caching, resume autofill, JSON-LD.

A company board lists only roles that employer published on Worklittle. It is not a filtered view of GET /jobs.

| | `GET /jobs` | `GET /business/jobs/company/:company/...` |
| --- | --- | --- |
| Scope | Market-wide index of millions of roles | Roles that employer published on Worklittle |
| Auth | Bearer key, `jobs:read` | None |
| Billing | Free quota per job returned | Free, IP rate limited |
| Apply | Usually an off-platform `apply_url` | Hosted apply |

List and load jobs

# List jobs
curl -s "https://api.worklittle.com/business/jobs/company/acme?limit=25&department=Engineering&workplace_type=remote"

# Profile, jobs, and facets in one call
curl -s "https://api.worklittle.com/business/jobs/company/acme?include=facets&limit=25"

# One job (public_job_id, posted job id, or slug)
curl -s "https://api.worklittle.com/business/jobs/company/acme/growth-engineer"

The plain list returns { company, data, meta }. With include=facets (or /brand) it returns { organization, brand, jobs, facets, meta }. Page with meta.next_cursor. List filters: q, department, workplace_type, employment_type, location. Each job carries slug and url_path for your own /careers/{slug} routes. Detail adds application_fields, description_sections, and features.

Read features before you build UI

Board toggles arrive as features on the board profile (include=facets or /brand) and job detail responses.

| Feature | Default | When `false` |
| --- | --- | --- |
| `resume_autofill` | `true` | `parse-resume` returns **400** `resume_autofill_disabled`. Upload on apply still works |
| `similar_job_alerts` | `true` | Board apply no longer requires the field |

Set them with PUT /jobs/post/organization (scope jobs:post):

{ "board_features": { "resume_autofill": true, "similar_job_alerts": false } }

Parse resume

Only when the job has a resume_file field and features.resume_autofill is true.

curl -s -X POST "https://api.worklittle.com/business/jobs/company/acme/JOB_ID/parse-resume" \
  -H "Content-Type: application/json" \
  -d '{"resume_file":{"filename":"resume.pdf","content_base64":"JVBERi0xLjQK..."}}'

Returns { "autofill": { … }, "status": "ok" }, or status: "skipped" with an empty autofill when autofill is temporarily unavailable. Cached about 2 hours per resume hash and job. A job without a resume field returns 400.

Apply payload

Read application_fields from job detail first. Built-in ids: name, email, phone, resume_file, cover_letter, linkedin_url, github_url, website_url. Custom fields have kind: "custom" (short_text, long_text, dropdown, file_upload, yes_no) and go under answers.

| Field | Notes |
| --- | --- |
| `name` or `full_name`, `email`, `phone` | Required when the job's builtin is required |
| `resume_file`, `cover_letter_file` | `{ "filename", "content_base64", "mime?" }`, max 10 MB. PDF, DOC/DOCX, RTF, TXT/MD, images |
| `resume_text`, `cover_letter` | Plain text |
| `answers` | Custom field ids from `application_fields` |
| `similar_job_alerts` | Public board: explicit `true` or `false` required when the feature is on. API apply: optional opt-in |
| `metadata` | API apply only, 4k JSON cap |
# With an API key
curl -s -X POST "https://api.worklittle.com/jobs/JOB_ID/apply" \
  -H "Authorization: Bearer $WORKLITTLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Alex Rivera","email":"alex@example.com","phone":"+14155550100"}'

# Public board, no key
curl -s -X POST "https://api.worklittle.com/business/jobs/company/acme/JOB_ID/submit-application" \
  -H "Content-Type: application/json" \
  -d '{"name":"Alex Rivera","email":"alex@example.com","phone":"+14155550100","similar_job_alerts":true}'

Success is 201 with application.id. API apply also returns people_search_profile, ats (queued or skipped_no_organization), and billing (free, charged_usd: 0).

Error codes to handle by name: role_closed, duplicate_application, validation_error, resume_autofill_disabled, RATE_LIMITED.

Caching, SEO, and freshness

Board GETs send weak ETag headers. Send If-None-Match and handle 304. GETs are limited to 120 per minute per IP. With a Bearer key they count against that key's per-minute limit instead (60 by default). GET /business/jobs/company/:company/:idOrSlug/json-ld?canonical_url=https://example.com/careers/slug returns Google JobPosting data. Revalidate on webhooks job.published, job.updated, job.closed. Each carries public_job_id, slug, organization.slug, public_visible, accepting_applicants. See Webhooks.