API Docs

API Reference

Base URL: https://api.officialobituary.com. Responses are JSON unless noted, and dates use YYYY-MM-DD.

Authentication and limits

  • Public obituary publish/search endpoints: no API key required.
  • Publish rate limit: 3 requests/hour per IP.
  • Partner ingest endpoints under /api/submit: Bearer API key required.
  • Some moderation/admin routes require admin authorization.

Data Access Boundary

Browse routes are intentionally separated from live/admin workflows. Classified API responses include X-OfficialObituary-Data-Boundary and X-OfficialObituary-Data-Contract.

  • public-browse: browse pages and browse metadata, such as /api/obituaries, /api/obituaries/stats/states, /api/funeral-homes, /api/funeral-homes/stats, /api/funeral-homes/:state, and /api/funeral-homes/:state/:city.
  • live-dynamic: canonical detail and write flows, such as obituary publish/edit, funeral-home profile detail, pricing helpers, reviews, and claim workflows.
  • admin-live: internal operator routes, including outreach pipeline and memorial funnel health endpoints.

POST /api/obituaries/publish

Create and publish a public obituary page.

Field Required Type Notes
full_nameYesstringPerson's name.
birth_dateYesstringYYYY-MM-DD.
death_dateYesstringYYYY-MM-DD.
life_storyYes*stringPrimary narrative, min 50 chars.
death_cityNostringCity of passing.
death_stateNostringState code/name.
service_dateNostringYYYY-MM-DD.
service_locationNostringService location text.
photo_urlNostringAbsolute URL.
survivorsNostring[] or stringOptional survivors list.
toneNostringprofessional, warm, religious.
obituary_textLegacystringLegacy fallback if life_story is absent.

* life_story or legacy obituary_text must be provided.

{
  "success": true,
  "id": "sN3q5Jt8k1",
  "obituary_id": "sN3q5Jt8k1",
  "slug": "jordan-lee-1948-2026",
  "url": "https://officialobituary.com/obituaries/jordan-lee-1948-2026"
}

GET /api/obituaries

List/search published obituaries with pagination.

Query Type Description
qstringFree-text query.
citystringCity filter.
statestringState filter.
last_namestringName filter helper.
limitnumberDefault 20, max 100.
offsetnumberDefault 0.
sortstringdeath_date or created_at.
orderstringasc or desc.
{
  "data": [{ "id": "...", "slug": "...", "full_name": "..." }],
  "meta": {
    "total": 125,
    "limit": 20,
    "offset": 0,
    "has_more": true
  }
}

GET /api/search

Full-text search endpoint with richer snippets and totals.

Query Type Description
qstringRequired search string.
citystringOptional city filter.
statestringOptional state filter.
funeral_homestringOptional funeral home ID.
date_fromstringStart death date.
date_tostringEnd death date.
limitnumberDefault 20, max 100.
offsetnumberDefault 0.
{
  "results": [{ "id": "...", "slug": "...", "fullName": "...", "snippet": "..." }],
  "total": 42,
  "query": "smith",
  "took": 11,
  "meta": {
    "limit": 20,
    "offset": 0,
    "hasMore": true
  }
}

GET /api/search/autocomplete

Fast name suggestions.

GET /api/search/autocomplete?q=smi&limit=5
{
  "results": [{ "id": "...", "slug": "...", "fullName": "..." }]
}

Other obituary discovery endpoints

Method Path Auth Response shape
GET/api/obituaries/:idNoneSingle obituary object or 404/410 error.
GET/api/obituaries/recentNone{ data: Obituary[] }.
GET/api/obituaries/stats/statesNone{ total, states: [{ state, count, cities[] }] }.

Platform metadata and specs

Method Path Auth Response shape
GET/healthNone{ status, timestamp, uptime }.
GET/openapi.jsonNoneOpenAPI JSON document.
GET/.well-known/openapi.yamlNoneOpenAPI YAML document.
GET/.well-known/ai-plugin.jsonNoneAI plugin manifest JSON.
GET/sitemap.xmlNoneXML sitemap index.
GET/sitemap-pages.xmlNoneXML static-page sitemap.
GET/sitemap-obits-:page.xmlNoneXML obituary sitemap page.

Additional public API groups

AI writer

MethodPathAuthResponse shape
POST/api/ai/generateNone{ obituary, wordCount, cost, generatedAt } or 429/5xx error.

Guestbook

MethodPathAuthResponse shape
GET/api/guestbook/:obituary_idNone{ data: GuestbookEntry[] } (approved entries).
POST/api/guestbookNone{ data: GuestbookEntry }, possible 429 for rate limiting.

Memories

MethodPathAuthResponse shape
GET/api/memories/obituary/:idNone{ data: Memory[] } (approved only).
POST/api/memoriesNone{ data: Memory, status } or validation/rate-limit errors.
POST/api/memories/upload-photoNone{ uploadUrl, key }.

Funeral homes

MethodPathAuthResponse shape
GET/api/funeral-homesNone{ data, meta } list/search.
GET/api/funeral-homes/statsNone{ snapshotType, snapshotVersion, generatedAt, total, stateCount, topCitiesPerStateLimit, states[] }.
GET/api/funeral-homes/:stateNone{ state, data, cities, meta }.
GET/api/funeral-homes/:state/:cityNone{ state, city, data, meta }.
GET/api/funeral-homes/:state/:city/:slugNoneProfile object with reviews, photos, priceItems.
POST/api/funeral-homes/:id/reviewsNone{ success, id } or 429/404.

Trees and memorial certificates

MethodPathAuthResponse shape
GET/api/trees/configNone{ publishableKey }.
GET/api/trees/pricingNone{ tiers[] }.
GET/api/trees/projectsNone{ projects[] }.
POST/api/trees/payment-intentNone{ clientSecret, purchaseId, amount, treeCount }.
POST/api/trees/webhookStripe{ received: true } or signature error.
GET/api/trees/purchase/:idNone{ purchase } (sensitive fields removed).
GET/api/trees/certificate/:idNonePNG download by default; ?format=svg or ?format=dataurl also supported.
GET/api/trees/obituary/:obituaryIdNone{ purchases, total }.

Flowers and affiliates

MethodPathAuthResponse shape
GET/api/flowers/productsNone{ success, products[], count }.
GET/api/flowers/clicks/:obituaryIdNone{ success, clicks[], count }.
GET/api/flowers/statsNone{ success, stats }.
GET/api/affiliates/productsNone{ products[] }.
GET/api/affiliates/clickNoneHTTP 302 redirect to affiliate URL.
POST/api/affiliates/webhook/conversionWebhook secret{ success: true } or 401.

Tracking, monitoring, and ingest

MethodPathAuthResponse shape
POST/api/trackNone{ ok: true }.
POST/api/track/batchNone{ ok: true, logged }.
GET/api/track/statsAdmin bearer tokenAnalytics object with events/funnel/pages.
GET/api/monitoring/statusNoneHealth object with memory and sentry flags.
GET/api/monitoring/test-errorNone (dev-only behavior)Throws test error outside production restrictions.
POST/api/submitBearer API key{ success, id, slug, url }.
POST/api/submit/batchBearer API key{ total, succeeded, failed, results[] }.
GET/api/submit/status/:idBearer API key{ id, slug, status, url, views }.