API Documentation

v1

Integrate ObituaryMonitor into your applications with our REST API. Programmatically manage watches, retrieve matches, and automate your obituary monitoring workflow.

New to the API?

Follow our Getting Started guide to set up your first integration

API Access for Professional Plans

API access is available on Professional 250+ plans. Contact our sales team to discuss your integration requirements and get started.

API Overview

The ObituaryMonitor API provides programmatic access to all platform functionality, enabling seamless integration with your existing applications, practice management systems, and automated workflows. Whether you are building a custom dashboard, synchronizing with case management software, or automating watch creation from external data sources, our REST API offers the flexibility and reliability your integration requires.

All API endpoints follow RESTful conventions with JSON request and response bodies. Standard HTTP methods indicate the type of operation being performed, with GET for retrieval, POST for creation, PUT for updates, and DELETE for archiving. Responses include appropriate HTTP status codes along with descriptive error messages when issues occur, making debugging and error handling straightforward.

Authentication

All API requests require authentication using an API key. Include your API key in theAuthorizationheader using the Bearer token format.

Request Header
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Interactive API Playground

Test API endpoints with sample data in our sandbox environment. No API key required for the playground. Responses shown are examples of what you'll receive from the live API.

API Playground

Test endpoints with sample data

Sandbox Mode

List all active watches for your account

GET
https://api.obituarymonitor.com/api/v1/watches
query

Page number (default: 1)

query

Items per page (default: 20, max: 100)

query

Filter by status: active, archived, all

Click "Send Request" to see the response

API Endpoints

The following endpoints are available for managing watches and matches programmatically.

GET
/api/v1/watches

List all active watches for your account

Auth
POST
/api/v1/watches

Create a new watch for a person

Auth
GET
/api/v1/watches/:id

Get details for a specific watch

Auth
PUT
/api/v1/watches/:id

Update an existing watch

Auth
DELETE
/api/v1/watches/:id

Archive a watch

Auth
GET
/api/v1/matches

List all matches across your watches

Auth
GET
/api/v1/matches/:id

Get details for a specific match

Auth
PUT
/api/v1/matches/:id

Update match status (confirm/reject)

Auth
POST
/api/v1/watches/bulk

Create multiple watches from CSV data

Auth
GET
/api/v1/matches/export

Export matches as CSV or JSON

Auth

Rate Limits

API requests are rate-limited to ensure fair usage and system stability. Rate limits vary by plan tier. When you exceed the rate limit, the API returns a 429 Too Many Requests response.

Rate Limit Response Headers
X-RateLimit-Limit: 1000        # Maximum requests per minute
X-RateLimit-Remaining: 998     # Requests remaining in current window
X-RateLimit-Reset: 1705312800  # Unix timestamp when limit resets
Retry-After: 30                # Seconds to wait (only on 429)
PlanRequests/minRequests/dayBurst LimitWebhooks/min
Professional 10010010,0002010
Professional 50050050,0005050
Professional 10001000100,000100100
EnterpriseCustomUnlimitedCustomUnlimited

Rate Limiting Best Practices

  • Implement exponential backoff when receiving 429 responses
  • Cache responses when possible to reduce API calls
  • Use webhooks instead of polling for real-time updates
  • Batch operations using bulk endpoints when creating multiple watches

SLA & Uptime Guarantees

ObituaryMonitor provides service level agreements (SLAs) based on your plan tier. Our infrastructure is designed for high availability with redundant systems across multiple availability zones.

Professional

Uptime SLA

99.5%

API Response Time

< 500ms

Support Response

Email (24h)

Incident Alerts

Status Page

Enterprise

Uptime SLA

99.9%

API Response Time

< 200ms

Support Response

Priority (4h)

Incident Alerts

Direct + Status Page

Enterprise+

Uptime SLA

99.99%

API Response Time

< 100ms

Support Response

Dedicated (1h)

Incident Alerts

Direct + PagerDuty

SLA Terms & Credits

Uptime Calculation

Monthly uptime = (Total minutes - Downtime minutes) / Total minutes × 100. Excludes scheduled maintenance windows announced 48+ hours in advance.

Service Credits

If uptime falls below SLA, credits are issued: 10% credit for 99-99.5%, 25% for 95-99%, 50% for below 95%. Enterprise plans have custom credit terms.

Maintenance Windows

Scheduled maintenance occurs Sundays 2-4 AM ET with 48+ hours notice. Emergency maintenance for security patches may occur with shorter notice.

Monitoring

Real-time monitoring from 5 global locations. Status updates atcontact support

Webhooks

Webhooks enable real-time notification delivery to your application when significant events occur. Instead of polling the API, configure a webhook endpoint to receive immediate POST requests.

Available Events

match.createdNew obituary match found
match.confirmedMatch confirmed by user
match.rejectedMatch marked as false positive
watch.createdNew watch added
watch.archivedWatch archived
export.readyExport file ready for download
Webhook Payload Example
{
  "event": "match.created",
  "timestamp": "2024-01-15T10:30:00Z",
  "webhook_id": "wh_abc123",
  "signature": "sha256=...",
  "data": {
    "match_id": "m_abc123",
    "watch_id": "w_xyz789",
    "confidence_score": 0.94,
    "state_statute_ref": "Ohio Rev. Code § 2117.06",
    "decedent": {
      "full_name": "John A. Smith",
      "city": "Columbus",
      "state": "OH",
      "date_of_death": "2024-01-18"
    },
    "obituary": {
      "source": "Columbus Dispatch",
      "source_url": "https://..."
    }
  }
}

Signature Verification

Every webhook request includes a signature header (X-ObituaryMonitor-Signature) that you should verify to ensure the request originated from ObituaryMonitor. The signature is computed using HMAC-SHA256 with your webhook secret.

Security Best Practice

Always verify webhook signatures before processing payloads. Never trust incoming webhook data without verification. Your webhook secret is available in your account dashboard under API Settings.

1

Extract the signature

Get the X-ObituaryMonitor-Signature header from the request

2

Compute expected signature

HMAC-SHA256 of the raw request body using your webhook secret

3

Compare signatures

Use a timing-safe comparison function to prevent timing attacks

Node.js / TypeScript
import crypto from 'crypto';

function verifyWebhookSignature(
  payload: string,
  signature: string,
  secret: string
): boolean {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload, 'utf8')
    .digest('hex');

  const expected = `sha256=${expectedSignature}`;

  // Timing-safe comparison
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// Express.js example
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-obituarymonitor-signature'];
  const payload = req.body.toString();

  if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).json({ error: 'Invalid signature' });
  }

  const event = JSON.parse(payload);
  // Process the webhook event...

  res.status(200).json({ received: true });
});

Retry Policy

Failed webhook deliveries are retried with exponential backoff over 24 hours:

1st

Immediate

2nd

1 min

3rd

5 min

4th

30 min

5th

2 hours

Error Handling

The API uses standard HTTP status codes to indicate success or failure of requests.

200OKRequest succeeded
201CreatedResource created successfully
400Bad RequestInvalid request parameters
401UnauthorizedInvalid or missing API key
403ForbiddenAPI access not enabled for your plan
404Not FoundResource not found
429Too Many RequestsRate limit exceeded
500Server ErrorInternal server error
Error Response Example
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request parameters",
    "details": [
      {
        "field": "first_name",
        "message": "First name is required"
      }
    ]
  },
  "request_id": "req_abc123xyz"
}

SDKs & Libraries

Official client libraries are available for popular programming languages to simplify integration. All SDKs handle authentication, rate limiting, and error handling automatically.

JS

JavaScript/TypeScript

stable
npm install @obituarymonitor/sdk
PY

Python

stable
pip install obituarymonitor
RB

Ruby

beta
gem install obituarymonitor
PHP

PHP

beta
composer require obituarymonitor/sdk

Quick Start Examples

JavaScript / TypeScript
import { ObituaryMonitor } from '@obituarymonitor/sdk';

// Initialize the client
const client = new ObituaryMonitor({
  apiKey: process.env.OBITUARYMONITOR_API_KEY,
});

// Create a new watch
const watch = await client.watches.create({
  firstName: 'John',
  lastName: 'Smith',
  city: 'Columbus',
  state: 'OH',
  aliases: ['Johnny Smith'],
  notes: 'Estate beneficiary - Monitor for probate',
});

console.log('Watch created:', watch.id);

// List all matches
const matches = await client.matches.list({
  status: 'pending',
  limit: 10,
});

for (const match of matches.data) {
  console.log(`Match: ${match.decedent.fullName} (Confidence: ${match.confidenceScore})`);
}

// Confirm a match
await client.matches.update(match.id, {
  status: 'confirmed',
  notes: 'Identity verified via SSN match',
});

// Export audit log
const exportResult = await client.matches.export({
  format: 'pdf',
  includeAudit: true,
});

console.log('Export ready:', exportResult.downloadUrl);

SDK Features

Automatic rate limit handling with backoff
TypeScript types included (JS SDK)
Async/await support in all SDKs
Configurable timeout and retries
Webhook signature verification helpers
Detailed error messages with request IDs

Need help with your integration?

Our technical team is available to assist with API integration and custom requirements.