Get a job
GET /api/businesses/{slug}/jobs/{job_slug}Returns one published job with everything needed to render its page: the body in Markdown and sanitized HTML, the photo set, related jobs, matched reviews, and ready-to-embed JSON-LD.
curl https://app.simplifylocal.app/api/businesses/{slug}/jobs/house-washing-marietta \ -H "Authorization: Bearer sl_live_…"{job_slug} is the job’s slug as returned by List jobs or carried in a webhook. There are no query parameters.
Response
Section titled “Response”200 OK
{ "business": { "slug": "…", "name": "…", "canonical_domain": "https://…", "jobs_base_path": "/work", "…": "…" }, "job": { "slug": "house-washing-marietta", "headline": "…", "meta_description": "…", "body_markdown": "…", "body_html": "<p>…</p>", "service_type": "house-washing", "service_type_display": "House Washing", "service_city": "marietta", "service_city_display": "Marietta", "service_state": "GA", "completed_at": "2026-04-12T14:30:00Z", "published_at": "2026-04-13T09:02:11Z", "updated_at": "2026-04-13T09:02:11Z", "media": [ { "url": "https://…", "width": 1600, "height": 1200, "alt": "…", "kind": "before", "pair_id": "…", "…": "…" } ], "og_image_url": "https://…", "related_jobs": [ { "slug": "…", "headline": "…", "…": "…" } ], "reviews": [], "noindex": false, "canonical_slug": null, "schema_org": { "@context": "https://schema.org", "@graph": [ "…" ] }, "project_facts": { "…": "…" }, "money_page_service_url": "https://…/services/house-washing", "money_page_area_url": "https://…/service-areas/marietta", "…": "…" }, "aggregates": { "total_jobs": 42, "…": "…" }}| Field | Type | Notes |
|---|---|---|
business |
Business |
The business and its path configuration. |
job |
Job |
The full job. Every field is populated on this endpoint. |
aggregates |
JobsAggregates or null |
Counts across all published jobs for the business. null when the counts could not be computed; the job is still served. |
Rendering notes
Section titled “Rendering notes”body_htmlis sanitized and ready to insert. Internal links are already resolved against the business’s path configuration, and<img>tags carrysrcset.body_markdownis the same content in GitHub-flavoured Markdown if you render your own.schema_orgis a complete JSON-LD object. Place it verbatim in<script type="application/ld+json">; do not modify it.noindex: truemeans the page should carry<meta name="robots" content="noindex">. The business can set this per job, and some pages ship it automatically. Respect it.canonical_slug, when set, names the earlier page this one repeats. It is informational; do not emit it asrel="canonical".media[0]is the main photo. Items withkind: "before"or"after"that share apair_idare a before/after pair; a before or after without a partner never appears, so a pair is always renderable as a pair.og_image_urlismedia[0].url, ornullwhen the job has no photos.related_jobsholds up to six other published jobs. Each has atieryou can use as a heading.money_page_service_urlandmoney_page_area_urlarenullwhen the business has no domain connected or when that service or town has no page of its own yet. Link them only when non-null.
Headers
Section titled “Headers”Same as List jobs: an ETag, honoured by If-None-Match → 304. No Cache-Control on a normal response.
Errors
Section titled “Errors”| Status | error |
When |
|---|---|---|
404 |
job_not_found |
No published job with that slug. A draft, an archived job, and a slug that never existed all return this. A slug the business changed also returns 404 for its old value. |
401 / 403 / 404 / 410 |
See Authentication. | |
500 |
lookup_failed |
Temporary; retry. |