API Documentation
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
Getting Started Guide
Set up your first API integration
https://api.obituarymonitor.com/v1API 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.
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.
Test endpoints with sample data
List all active watches for your account
https://api.obituarymonitor.com/api/v1/watchesPage number (default: 1)
Items per page (default: 20, max: 100)
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.
/api/v1/watchesList all active watches for your account
/api/v1/watchesCreate a new watch for a person
/api/v1/watches/:idGet details for a specific watch
/api/v1/watches/:idUpdate an existing watch
/api/v1/watches/:idArchive a watch
/api/v1/matchesList all matches across your watches
/api/v1/matches/:idGet details for a specific match
/api/v1/matches/:idUpdate match status (confirm/reject)
/api/v1/watches/bulkCreate multiple watches from CSV data
/api/v1/matches/exportExport matches as CSV or JSON
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.
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)
| Plan | Requests/min | Requests/day | Burst Limit | Webhooks/min |
|---|---|---|---|---|
| Professional 100 | 100 | 10,000 | 20 | 10 |
| Professional 500 | 500 | 50,000 | 50 | 50 |
| Professional 1000 | 1000 | 100,000 | 100 | 100 |
| Enterprise | Custom | Unlimited | Custom | Unlimited |
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.
Uptime SLA
99.5%
API Response Time
< 500ms
Support Response
Email (24h)
Incident Alerts
Status Page
Uptime SLA
99.9%
API Response Time
< 200ms
Support Response
Priority (4h)
Incident Alerts
Direct + Status Page
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 foundmatch.confirmedMatch confirmed by usermatch.rejectedMatch marked as false positivewatch.createdNew watch addedwatch.archivedWatch archivedexport.readyExport file ready for download{
"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.
Extract the signature
Get the X-ObituaryMonitor-Signature header from the request
Compute expected signature
HMAC-SHA256 of the raw request body using your webhook secret
Compare signatures
Use a timing-safe comparison function to prevent timing attacks
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 succeeded201CreatedResource created successfully400Bad RequestInvalid request parameters401UnauthorizedInvalid or missing API key403ForbiddenAPI access not enabled for your plan404Not FoundResource not found429Too Many RequestsRate limit exceeded500Server ErrorInternal server error{
"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.
JavaScript/TypeScript
npm install @obituarymonitor/sdkPython
pip install obituarymonitorRuby
gem install obituarymonitorPHP
composer require obituarymonitor/sdkQuick Start Examples
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);