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.

Base API URL
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

Bash
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

Bash
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

Bash
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

JavaScript Fetch Example
const response = await fetch('https://app.endpointtracker.com/api/v1/endpoints', {
  headers: {
    'X-API-Key': 'dd_your_api_key_here'
  }
});
Python Requests Example
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.

JSON Input
{
  "id": "ch_123",
  "amount": 2000,
  "customer": {
    "email": "user@example.com",
    "verified": true
  },
  "line_items": [
    { "description": "Pro plan", "amount": 2000 }
  ]
}
Inferred Schema Output
{
  "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).

[Endpoint Tracker] --- (GET) ---> [Stripe API] | [Inference Engine] ---> [Snapshot Storage]

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.

[Your App] --- (GET) ---> [Endpoint Tracker Proxy] --- (GET) ---> [Stripe API] | [Capture Schema]

Endpoints API

List Endpoints

GET /api/v1/endpoints

Retrieve a list of all API endpoints configured for your account.

Response Example (200 OK)
[
  {
    "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

POST /api/v1/endpoints

Add a new API endpoint to the monitoring system.

Body ParamTypeRequiredDescription
namestringYesHuman readable label
urlstringYesFull API URL
methodstringNoGET, POST, etc (Default: GET)
headersobjectNoKey-value pairs for auth
checkFrequencynumberNoMinutes between checks
Request Example
{
  "name": "Twilio SMS Status",
  "url": "https://api.twilio.com/2010-04-01/Messages",
  "method": "GET",
  "checkFrequency": 30
}

Trigger Manual Check

POST /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

Webhook Payload
{
  "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
SDK Usage
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.

github-actions.yml
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_REQUIRED401Invalid API keyCheck X-API-Key
RATE_LIMITED429Too many requestsRetry after Xs
NOT_FOUND404Not foundCheck ID
PLAN_LIMIT403Limit reachedUpgrade 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.