Endpoint Tracker API
Welcome to the Endpoint Tracker API documentation. Our API is designed to help developers monitor their external API dependencies automatically, ensuring that breaking schema changes are caught before they impact your production systems.
Endpoint Tracker works by inferring schemas from API responses, storing them as snapshots, and generating detailed diffs when changes occur. Whether you're managing a small microservice or a large-scale fintech platform, our API provides the primitives you need to build robust API monitoring into your workflow.
What you can do with the API:
- Programmatically add endpoints to monitor.
- Trigger manual schema checks in CI/CD pipelines.
- Retrieve detailed diffs of breaking changes.
- Manage team workspaces and API keys.
- Integrate monitoring alerts into your custom dashboards.
Ready to get started? Access your dashboard at app.endpointtracker.com to generate your first API key.
https://app.endpointtracker.com/api/v1
Quick Start
Get up and running with Endpoint Tracker in under 5 minutes. This guide walks you through adding your first endpoint and checking for drift.
1. Create an Endpoint
curl -X POST https://app.endpointtracker.com/api/v1/endpoints \
-H "X-API-Key: dd_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Stripe Charges API",
"url": "https://api.stripe.com/v1/charges",
"method": "GET",
"checkFrequency": 60
}'
2. Trigger a Manual Check
curl -X POST https://app.endpointtracker.com/api/v1/endpoints/1/check \
-H "X-API-Key: dd_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
3. Retrieve the Latest Diff
curl https://app.endpointtracker.com/api/v1/endpoints/1/diffs?limit=1 \
-H "X-API-Key: dd_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Authentication
All requests to the Endpoint Tracker API must include the X-API-Key header. You can generate and manage your API keys in your Profile Settings.
Key Format: dd_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
const response = await fetch('https://app.endpointtracker.com/api/v1/endpoints', {
headers: {
'X-API-Key': 'dd_your_api_key_here'
}
});
import requests
url = "https://app.endpointtracker.com/api/v1/endpoints"
headers = {"X-API-Key": "dd_your_api_key_here"}
response = requests.get(url, headers=headers)
Security Best Practices: Never expose your API key in client-side code (browsers). Use environment variables on your server or CI/CD secrets (e.g., GitHub Actions Secrets) to store your keys safely.
Base URL & Versioning
The current stable version of the API is v1. We use semantic versioning for our API releases. Breaking changes will result in a new major version (e.g., v2).
https://app.endpointtracker.com/api/v1
All responses are returned in JSON format. Dates are provided in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ).
How Schema Inference Works
Endpoint Tracker uses a deterministic inferSchema algorithm to transform raw JSON responses into a stable schema representation. This allows us to compare two responses and detect changes in structure, even if the data itself has changed.
Field Type Detection
Our engine detects the following types: string, number, boolean, null, object, and array. We also track nullability (whether a field can be null) based on historical snapshots.
{
"id": "ch_123",
"amount": 2000,
"customer": {
"email": "user@example.com",
"verified": true
},
"line_items": [
{ "description": "Pro plan", "amount": 2000 }
]
}
{
"type": "object",
"properties": {
"id": { "type": "string" },
"amount": { "type": "number" },
"customer": {
"type": "object",
"properties": {
"email": { "type": "string" },
"verified": { "type": "boolean" }
}
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": { "type": "string" },
"amount": { "type": "number" }
}
}
}
}
}
Diff Severity Levels
When a schema change is detected, we categorize it by severity level. This helps you prioritize alerts and decide whether automated workflows (like stopping a deployment) should be triggered.
| Severity | Change Type | Example | Action Needed |
|---|---|---|---|
| Breaking | field_removed |
customer.email removed |
Immediate fix required |
| Breaking | type_changed |
amount: number → string |
Immediate fix required |
| Warning | nullability_changed |
id became nullable |
Review impact |
| Info | field_added |
metadata.ip added |
No action needed |
Polling vs Proxy Mode
There are two ways to get data into Endpoint Tracker: Polling and Proxy mode.
Polling Mode
Vercel's workers fetch your configured endpoints on a schedule (e.g., every hour).
Proxy Mode
Instead of hitting the API directly, you route your requests through our proxy. We capture the schema in real-time and pass the request through.
Endpoints API
List Endpoints
/api/v1/endpoints
Retrieve a list of all API endpoints configured for your account.
[
{
"id": 1,
"name": "Stripe Charges",
"url": "https://api.stripe.com/v1/charges",
"method": "GET",
"checkFrequency": 60,
"lastCheck": "2026-05-08T10:00:00Z",
"status": "healthy"
}
]
Create Endpoint
/api/v1/endpoints
Add a new API endpoint to the monitoring system.
| Body Param | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human readable label |
url | string | Yes | Full API URL |
method | string | No | GET, POST, etc (Default: GET) |
headers | object | No | Key-value pairs for auth |
checkFrequency | number | No | Minutes between checks |
{
"name": "Twilio SMS Status",
"url": "https://api.twilio.com/2010-04-01/Messages",
"method": "GET",
"checkFrequency": 30
}
Trigger Manual Check
/api/v1/endpoints/:id/check
Force an immediate schema check for a specific endpoint. Useful for CI/CD pipelines.
{
"checked": true,
"diffs": [],
"snapshot": { "id": 105, "timestamp": "2026-05-08T14:30:00Z" },
"message": "No changes detected"
}
Webhooks
Endpoint Tracker can send HTTP POST payloads to your server whenever a drift is detected. This allows you to trigger automated responses, such as Slack alerts or blocking deployments.
drift.detected
{
"event": "drift.detected",
"timestamp": "2026-05-07T14:32:01Z",
"endpoint": {
"id": 1,
"name": "Stripe Charges",
"url": "https://api.stripe.com/v1/charges"
},
"diffs": [
{
"path": "customer.email",
"changeType": "field_removed",
"severity": "breaking",
"before": "string",
"after": null
}
],
"snapshotId": 42,
"diffId": 15
}
JavaScript / TypeScript SDK
Install the SDK via npm or yarn:
npm install @endpointtracker/sdk
import { EndpointTracker } from '@endpointtracker/sdk';
const client = new EndpointTracker({
apiKey: process.env.ENDPOINT_TRACKER_API_KEY
});
// Add an endpoint
const endpoint = await client.endpoints.create({
name: 'Stripe Charges API',
url: 'https://api.stripe.com/v1/charges',
method: 'GET',
headers: {
'Authorization': 'Bearer sk_test_...'
},
checkFrequency: 60
});
// Get latest diffs
const diffs = await client.endpoints.diffs(endpoint.id, {
severity: 'breaking',
limit: 10
});
CI/CD Integration
Run schema drift checks in your GitHub Actions workflows to prevent breaking changes from hitting production.
name: Check API Schema Drift
on:
schedule:
- cron: '0 */6 * * *' # Every 6 hours
workflow_dispatch:
jobs:
check-drift:
runs-on: ubuntu-latest
steps:
- name: Trigger Endpoint Checks
run: |
curl -X POST https://app.endpointtracker.com/api/v1/endpoints/1/check \
-H "X-API-Key: ${{ secrets.ENDPOINT_TRACKER_API_KEY }}"
- name: Check for Breaking Changes
run: |
DIFFS=$(curl -s https://app.endpointtracker.com/api/v1/endpoints/1/diffs?severity=breaking \
-H "X-API-Key: ${{ secrets.ENDPOINT_TRACKER_API_KEY }}")
COUNT=$(echo $DIFFS | jq '.diffs | length')
if [ "$COUNT" -gt "0" ]; then
echo "Breaking changes detected!"
exit 1
fi
Monitoring Stripe
Stripe is notorious for subtle API shifts. Follow this guide to keep your integration safe.
1. Common Stripe Endpoints to Monitor
/v1/charges- For payment processing/v1/customers- For user profile data/v1/subscriptions- For billing status/v1/payment_intents- For modern checkout flows
2. Setup Example
curl -X POST https://app.endpointtracker.com/api/v1/endpoints \
-H "X-API-Key: $ET_KEY" \
-d '{
"name": "Stripe Charges",
"url": "https://api.stripe.com/v1/charges",
"headers": {
"Authorization": "Bearer sk_test_..."
}
}'
Error Codes
| Code | Status | Message | Resolution |
|---|---|---|---|
AUTH_REQUIRED | 401 | Invalid API key | Check X-API-Key |
RATE_LIMITED | 429 | Too many requests | Retry after Xs |
NOT_FOUND | 404 | Not found | Check ID |
PLAN_LIMIT | 403 | Limit reached | Upgrade plan |
Changelog
v1.0.0 — May 2026
- Initial release of the REST API.
- Schema inference engine (v1).
- Polling and proxy mode support.
- Email + Slack alerts for breaking changes.
- Paystack and M-PESA billing integrations.
- Team workspaces support for Enterprise customers.