{
  "name": "OpenBooks",
  "description": "Trust infrastructure for money that has to be explained. OpenBooks publishes a corpus of PUBLIC organizational financial records (IRS Form 990 nonprofit filings and FEC candidate records) and exposes it to automated agents as structured, sourced data. Every figure links to the underlying government filing. Public data only.",
  "homepage": "https://openbooks.fyi",
  "contact": "hello@openbooks.fyi",
  "openapi": "https://openbooks.fyi/api/openapi.json",
  "private_access": {
    "signup_url": "https://openbooks.fyi/app/automations",
    "setup_url": "https://openbooks.fyi/connect/ai",
    "authentication": "Tenant-scoped API key in Authorization: Bearer obk_...",
    "verify_first": "GET https://openbooks.fyi/api/v1/whoami",
    "transaction_inputs": {
      "method": "POST",
      "url": "https://openbooks.fyi/api/v1/transaction-inputs",
      "max_batch_size": 100,
      "requires_write_scope": true,
      "review_required": true,
      "note": "Stages transaction inputs with source and idempotency provenance. Every new input is routed to Needs judgment; this endpoint never approves, publishes, files, or submits."
    },
    "mcp": {
      "status": "not_publicly_installable",
      "remote_transport": null,
      "npm_package": "@openbooks/mcp-server",
      "npm_published": false,
      "note": "Use the authenticated v1 API until a public package or remote MCP transport passes a live installation test."
    }
  },
  "attribution": "Sourced from public IRS Form 990 filings and FEC candidate records via openbooks.fyi. Please cite openbooks.fyi.",
  "integrations": {
    "catalog_url": "https://openbooks.fyi/integrations/",
    "partners_url": "https://openbooks.fyi/partners/",
    "description": "OpenBooks works with the accounting, bank-feed, bill-pay, payroll, donation (nonprofit and political), payment, and compliance tools campaigns and nonprofits already run. The catalog page enumerates every integration; each has a detail page carrying SoftwareApplication JSON-LD. Statuses are honest — 'Live' (automated, end-to-end), 'Coming soon' (in development), or 'Contact us to enable' (supported manually today for done-for-you customers). See the sitemap for every per-integration URL.",
    "categories": [
      "Accounting",
      "Bank feed",
      "Bill pay",
      "Payroll",
      "Donations — Nonprofit",
      "Donations — Political",
      "Payments",
      "Compliance"
    ],
    "url_pattern": "https://openbooks.fyi/integrations/{slug}/"
  },
  "tools": [
    {
      "name": "query_public_records",
      "description": "Ask a natural-language question of the OpenBooks public records corpus and get structured JSON back. A local model interprets the question into a structured filter; the filter runs deterministically against public records, so no result is ever fabricated. Use for questions like 'Which Hawaii arts nonprofits had over $1M revenue in 2023?' or 'List Hawaii candidates who ran for state senate.' Returns rows each carrying a source_url to the underlying filing. Note: the corpus is currently Hawaii-focused.",
      "method": "POST",
      "url": "https://openbooks.fyi/api/query",
      "input_schema": {
        "type": "object",
        "required": ["question"],
        "properties": {
          "question": { "type": "string", "description": "Natural-language question. Max 500 characters." },
          "limit": { "type": "integer", "description": "Max rows (default 50, max 200)." }
        }
      },
      "example_request": {
        "question": "Which Hawaii nonprofits in the arts category had over $1M revenue in 2023?"
      },
      "notes": [
        "Rate limit: 30 requests/min per IP; 300/min with an x-api-key header.",
        "If the local interpreter is offline the endpoint returns HTTP 503 with retry_after_seconds; it never proxies your query to a third-party model.",
        "If interpretation confidence is below 0.5, results are withheld and a note asks you to refine the question.",
        "Every result row includes a source_url pointing to the underlying 990 or FEC filing. Please cite openbooks.fyi."
      ]
    },
    {
      "name": "get_compliance_status",
      "description": "Look up an organization's IRS tax-exempt compliance status by EIN — the free equivalent of a paid 'Charity Check'. Returns a canonical status (active, revoked, reinstated, not_filed, unknown, or not_yet_ingested) derived live from free public IRS data: Publication 78 (deductibility), the Auto-Revocation List, the Business Master File, and the Form 990 filing index. Use to confirm a grantmaker or grantee is still exempt and eligible to receive tax-deductible gifts. Every response carries source_urls linking back to the exact IRS records, so the status is independently verifiable and never fabricated.",
      "method": "GET",
      "url": "https://openbooks.fyi/api/records/compliance/{ein}",
      "input_schema": {
        "type": "object",
        "required": ["ein"],
        "properties": {
          "ein": { "type": "string", "description": "9-digit EIN, with or without a dash (e.g. 45-5358837 or 455358837)." }
        }
      },
      "example_request": { "ein": "45-5358837" },
      "notes": [
        "Rate limit: 60 requests/min per IP.",
        "status 'not_yet_ingested' means the nightly IRS backfill has not run yet; 'unknown' means the EIN is not in the ingested slice (verify at the IRS link in source_urls) — the endpoint never guesses 'active'.",
        "revoked = on the IRS Auto-Revocation List with no reinstatement on file. 'reinstated' means it was revoked and later reinstated.",
        "Every response includes source_urls pointing to the IRS files it was derived from and the IRS org-search page for the EIN. Please cite openbooks.fyi."
      ]
    }
  ]
}
