Authentication
APIDrift API uses session-based authentication. After you sign in, requests are authenticated with the session cookie stored in your browser.
Session
Logged in session cookie (sent automatically by the browser)
Example
curl https://apidrift.com/api/monitors \ --cookie "<your-session-cookie>"
Requests without a valid session return 401 Unauthorized. API keys are Coming Soon.
Monitors
/api/monitorsRetrieve all monitors for the authenticated user, including the count of changes detected in the last 7 days.
Example Request
curl https://apidrift.com/api/monitors \ --cookie "<your-session-cookie>"
Response
{
"monitors": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Stripe API",
"url": "https://api.stripe.com/openapi/spec",
"type": "openapi",
"check_interval": 60,
"is_active": true,
"last_checked_at": "2026-03-18T09:30:00Z",
"last_snapshot": null,
"created_at": "2026-03-01T12:00:00Z",
"updated_at": "2026-03-18T09:30:00Z",
"recent_change_count": 3
}
]
}/api/monitorsCreate a new monitor. The check interval is subject to your plan's minimum.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Monitor name (1–120 chars) |
| url | string | Yes | URL to monitor (must be valid URL) |
| type | string | Yes | "openapi" | "docs" | "changelog" | "graphql" |
| check_interval | number | Yes | Check interval in minutes |
| is_active | boolean | No | Whether the monitor is active (default: true) |
Example Request
curl -X POST https://apidrift.com/api/monitors \
--cookie "<your-session-cookie>" \
-H "Content-Type: application/json" \
-d '{
"name": "Stripe API",
"url": "https://api.stripe.com/openapi/spec",
"type": "openapi",
"check_interval": 60
}'Response
{
"monitor": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Stripe API",
"url": "https://api.stripe.com/openapi/spec",
"type": "openapi",
"check_interval": 60,
"is_active": true,
"last_checked_at": null,
"last_snapshot": null,
"created_at": "2026-03-18T12:00:00Z",
"updated_at": "2026-03-18T12:00:00Z"
}
}/api/monitors/:idRetrieve a single monitor with its recent change history (up to 100 changes, newest first).
Example Request
curl https://apidrift.com/api/monitors/550e8400-e29b-41d4-a716-446655440000 \ --cookie "<your-session-cookie>"
Response
{
"monitor": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Stripe API",
"url": "https://api.stripe.com/openapi/spec",
"type": "openapi",
"check_interval": 60,
"is_active": true,
"last_checked_at": "2026-03-18T09:30:00Z",
"last_snapshot": "...",
"created_at": "2026-03-01T12:00:00Z",
"updated_at": "2026-03-18T09:30:00Z"
},
"changes": [
{
"id": "change-uuid",
"monitor_id": "550e8400-e29b-41d4-a716-446655440000",
"change_type": "breaking",
"severity": "critical",
"summary": "Removed endpoint POST /v1/charges",
"diff": "...",
"detected_at": "2026-03-17T15:00:00Z",
"notified": true
}
]
}/api/monitors/:idUpdate a monitor. At least one field must be provided.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | No | Monitor name (1–120 chars) |
| url | string | No | URL to monitor |
| type | string | No | "openapi" | "docs" | "changelog" | "graphql" |
| check_interval | number | No | Check interval in minutes |
| is_active | boolean | No | Whether the monitor is active |
Example Request
curl -X PATCH https://apidrift.com/api/monitors/550e8400-e29b-41d4-a716-446655440000 \
--cookie "<your-session-cookie>" \
-H "Content-Type: application/json" \
-d '{"name": "Stripe API (v2)", "check_interval": 30}'Response
{
"monitor": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Stripe API (v2)",
"url": "https://api.stripe.com/openapi/spec",
"type": "openapi",
"check_interval": 30,
"is_active": true,
"last_checked_at": "2026-03-18T09:30:00Z",
"last_snapshot": "...",
"created_at": "2026-03-01T12:00:00Z",
"updated_at": "2026-03-18T12:05:00Z"
}
}/api/monitors/:idDelete a monitor. This also removes all associated change history.
Example Request
curl -X DELETE https://apidrift.com/api/monitors/550e8400-e29b-41d4-a716-446655440000 \ --cookie "<your-session-cookie>"
Response
{
"success": true
}Changes
/api/changesRetrieve detected changes across all your monitors, newest first (up to 100). Optionally filter by severity.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| severity | string | No | Query param. "critical" | "warning" | "info" |
Example Request
curl "https://apidrift.com/api/changes?severity=critical" \ --cookie "<your-session-cookie>"
Response
{
"changes": [
{
"id": "change-uuid",
"monitor_id": "550e8400-e29b-41d4-a716-446655440000",
"change_type": "breaking",
"severity": "critical",
"summary": "Removed endpoint POST /v1/charges",
"diff": "- POST /v1/charges\n+ (removed)",
"previous_snapshot": "...",
"new_snapshot": "...",
"detected_at": "2026-03-17T15:00:00Z",
"notified": true
}
]
}Impact Analyses
/api/impact-analysesRetrieve AI-powered impact analyses for a specific change. Returns breaking change detection, affected endpoints and fields, severity assessment, and recommended actions.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| change_id | string | Yes | UUID of the change to analyze |
Example Request
curl "https://apidrift.com/api/impact-analyses?change_id=change-uuid" \ --cookie "<your-session-cookie>"
Response
{
"impact_analyses": [
{
"id": "ia-uuid",
"change_id": "change-uuid",
"is_breaking": true,
"confidence": 0.95,
"affected_endpoints": [
"POST /v1/charges",
"GET /v1/charges/:id"
],
"affected_fields": [
"source",
"payment_method"
],
"severity": "critical",
"summary": "Removal of POST /v1/charges breaks all direct charge creation flows",
"reasoning": "The endpoint was the primary method for creating charges. All integrations using direct charge creation will fail.",
"recommended_action": "Migrate to Payment Intents API (POST /v1/payment_intents) before the deprecation deadline.",
"created_at": "2026-03-17T15:05:00Z"
}
]
}Migration Guides
/api/migration-guidesRetrieve auto-generated migration guides for a change or impact analysis. Includes step-by-step instructions, before/after code examples, warnings, and effort estimates.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| change_id | string | No | UUID of the change |
| impact_analysis_id | string | No | UUID of the impact analysis |
Example Request
curl "https://apidrift.com/api/migration-guides?change_id=change-uuid" \ --cookie "<your-session-cookie>"
Response
{
"migration_guides": [
{
"id": "mg-uuid",
"change_id": "change-uuid",
"impact_analysis_id": "ia-uuid",
"title": "Migrate from Charges API to Payment Intents",
"steps": [
"Replace POST /v1/charges with POST /v1/payment_intents",
"Update the request body: 'amount' and 'currency' remain the same",
"Handle the new 'status' field in the response",
"Add confirmation handling for 3D Secure flows"
],
"before_code": "const charge = await stripe.charges.create({\n amount: 2000,\n currency: 'usd',\n source: 'tok_visa'\n});",
"after_code": "const intent = await stripe.paymentIntents.create({\n amount: 2000,\n currency: 'usd',\n payment_method: 'pm_card_visa',\n confirm: true\n});",
"warnings": [
"3D Secure authentication may require additional client-side handling",
"Webhook event names change from charge.* to payment_intent.*"
],
"estimated_effort": "2-4 hours per integration point",
"created_at": "2026-03-17T15:10:00Z"
}
]
}Auto Patches
/api/auto-patchesList auto-generated patch PRs created by APIDrift's SDK Auto-Patcher. These PRs automatically update your SDK integration code when breaking changes are detected.
Example Request
curl https://apidrift.com/api/auto-patches \ --cookie "<your-session-cookie>"
Response
{
"auto_patches": [
{
"id": "ap-uuid",
"change_id": "change-uuid",
"repository": "acme/payments-service",
"branch_name": "apidrift/migrate-charges-to-payment-intents",
"pr_number": 142,
"pr_url": "https://github.com/acme/payments-service/pull/142",
"status": "open",
"files_scanned": 24,
"files_modified": 3,
"file_details": [
{
"path": "src/billing/charge.ts",
"additions": 12,
"deletions": 8
},
{
"path": "src/billing/refund.ts",
"additions": 5,
"deletions": 3
},
{
"path": "tests/billing.test.ts",
"additions": 18,
"deletions": 10
}
],
"created_at": "2026-03-17T16:00:00Z"
}
]
}Alerts
/api/alertsList all alert configurations for the authenticated user.
Example Request
curl https://apidrift.com/api/alerts \ --cookie "<your-session-cookie>"
Response
{
"alerts": [
{
"id": "alert-uuid",
"user_id": "user-uuid",
"monitor_id": null,
"channel": "slack",
"destination": "https://hooks.slack.com/services/T00/B00/xxx",
"severity_filter": ["critical", "warning"],
"is_active": true,
"created_at": "2026-03-10T08:00:00Z"
}
]
}/api/alertsCreate a new alert configuration. Set monitor_id to null to receive alerts for all monitors.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| channel | string | Yes | "email" | "slack" | "discord" | "webhook" |
| destination | string | Yes | Email address, Slack webhook URL, or webhook URL |
| monitor_id | string | null | No | Monitor UUID, or null for all monitors (default: null) |
| severity_filter | string[] | No | Array of "critical" | "warning" | "info" (default: all) |
Example Request
curl -X POST https://apidrift.com/api/alerts \
--cookie "<your-session-cookie>" \
-H "Content-Type: application/json" \
-d '{
"channel": "slack",
"destination": "https://hooks.slack.com/services/T00/B00/xxx",
"severity_filter": ["critical", "warning"]
}'Response
{
"alert": {
"id": "alert-uuid",
"user_id": "user-uuid",
"monitor_id": null,
"channel": "slack",
"destination": "https://hooks.slack.com/services/T00/B00/xxx",
"severity_filter": ["critical", "warning"],
"is_active": true,
"created_at": "2026-03-18T12:00:00Z"
}
}/api/alerts/:idUpdate an alert configuration. At least one field must be provided.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| is_active | boolean | No | Enable or disable the alert |
| destination | string | No | Updated destination |
| severity_filter | string[] | No | Array of "critical" | "warning" | "info" |
Example Request
curl -X PATCH https://apidrift.com/api/alerts/alert-uuid \
--cookie "<your-session-cookie>" \
-H "Content-Type: application/json" \
-d '{"is_active": false, "severity_filter": ["critical"]}'Response
{
"alert": {
"id": "alert-uuid",
"user_id": "user-uuid",
"monitor_id": null,
"channel": "slack",
"destination": "https://hooks.slack.com/services/T00/B00/xxx",
"severity_filter": ["critical"],
"is_active": false,
"created_at": "2026-03-10T08:00:00Z"
}
}/api/alerts/:idDelete an alert configuration.
Example Request
curl -X DELETE https://apidrift.com/api/alerts/alert-uuid \ --cookie "<your-session-cookie>"
Response
{
"success": true
}Webhooks
When a change is detected and you have a webhook alert configured, APIDrift sends a POST request to your destination URL with the following payload.
Payload Format
{
"event": "change.detected",
"monitor": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Stripe API",
"url": "https://api.stripe.com/openapi/spec",
"type": "openapi"
},
"changes": [
{
"change_type": "breaking",
"severity": "critical",
"summary": "Removed endpoint POST /v1/charges",
"diff": "- POST /v1/charges\n+ (removed)",
"detected_at": "2026-03-17T15:00:00Z"
}
]
}Severity Examples
critical
{
"change_type": "breaking",
"severity": "critical",
"summary": "Removed endpoint POST /v1/charges",
"diff": "- POST /v1/charges\n+ (removed)",
"detected_at": "2026-03-17T15:00:00Z"
}warning
{
"change_type": "deprecation",
"severity": "warning",
"summary": "Deprecated field 'source' on POST /v1/charges",
"diff": "~ source: string (deprecated)",
"detected_at": "2026-03-17T15:00:00Z"
}info
{
"change_type": "addition",
"severity": "info",
"summary": "Added endpoint GET /v1/billing/meters",
"diff": "+ GET /v1/billing/meters",
"detected_at": "2026-03-17T15:00:00Z"
}GitHub Integration
Connect your GitHub repositories to enable Auto-Patch PR generation. APIDrift uses a GitHub App for secure repository access.
Installation
- Go to the Dashboard → Settings → GitHub
- Click Connect GitHub to install the APIDrift GitHub App
- Select the repositories you want APIDrift to access
- Authorize the app — you'll be redirected back to your dashboard
OAuth Callback
/api/github/callbackHandles the OAuth callback from GitHub after app installation. This endpoint is called automatically — you do not need to call it directly.
Connected Repositories
Once connected, manage your repositories from the Dashboard. APIDrift will scan connected repos for SDK usage patterns and generate Auto-Patch PRs when breaking changes are detected in your monitored APIs.
Rate Limits
Rate limits and resource quotas vary by plan.
| Plan | Monitors | Min Interval | Alert Configs | AI Analyses/mo | Migration Guides | Auto-Patches/mo |
|---|---|---|---|---|---|---|
| Free | 3 | 60 min | 1 | 0 | — | 0 |
| Pro | 10 | 60 min | 10 | 100 | — | 0 |
| Team | 25 | 30 min | 25 | 300 | Unlimited | 20 |
| Business | 50 | 15 min | 50 | 1,000 | Unlimited | Unlimited |
Exceeding your plan's limits returns 403 Forbidden with a descriptive error message.