API Documentation

Access our promise database programmatically. Built for journalists, researchers, and developers.

API Access Requires a Subscription

API access is available on our Journalist and Enterprise plans. View pricing to get started.

Authentication

All API requests require authentication via an API key. Include your key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

You can generate and manage API keys from your account settings.

Base URL

https://unkept.io/api/v1

Rate Limits

Plan Daily Limit Rate
Journalist 1,000 requests/day 10 requests/second
Enterprise 10,000 requests/day 50 requests/second

Endpoints

GET /promises

Returns a paginated list of promises.

Query Parameters

status - Filter by status (pending, kept, broken, etc.)
person_id - Filter by person ID
category_id - Filter by category ID
page - Page number (default: 1)
per_page - Results per page (default: 20, max: 100)
GET /promises/{'{id}'}

Returns a single promise with full details including person, company, and category relationships.

GET /people

Returns a paginated list of people (promise-makers).

Query Parameters

type - Filter by type (ceo, politician, influencer)
search - Search by name
GET /people/{'{id}'}

Returns a person with their promises and trust score.

GET /categories

Returns all promise categories.

GET /stats

Returns platform-wide statistics including total promises, status breakdown, and top promise-breakers.

Webhooks & Connectors

Receive real-time notifications when events occur. Custom webhooks for your own endpoints or pre-built connectors for popular platforms.

Code Examples

curl

curl -X GET "https://unkept.io/api/v1/promises?status=broken" \
  -H "Authorization: Bearer YOUR_API_KEY"

JavaScript

const response = await fetch('https://unkept.io/api/v1/promises', {
  headers: {
    'Authorization': `Bearer ${'{'}API_KEY{'}'}`
  }
});

const promises = await response.json();

Python

import requests

response = requests.get(
    'https://unkept.io/api/v1/promises',
    headers={'Authorization': f'Bearer {'{'}API_KEY{'}'}'}
)

promises = response.json()

Response Format

All responses are returned as JSON with the following structure:

{
  "data": [...],
  "meta": {
    "current_page": 1,
    "per_page": 20,
    "total": 150,
    "last_page": 8
  },
  "links": {
    "next": "...",
    "prev": null
  }
}

Ready to Get Started?

Get API access with a Journalist or Enterprise subscription.

View Pricing