overlay: 1.0.0
info:
title: API Evangelist enhancements for the CharitySense Data API
version: 1.0.0
extends: ../openapi/charitysense-com-openapi.yml
x-generated: '2026-09-19'
x-method: derived
x-source: >-
Derived from openapi/charitysense-com-openapi.yml plus the provider's own discovery documents (agent card,
api-catalog, INSTRUCTIONS_FOR_AGENTS.md) and live probes on 2026-09-19. Records what the contract leaves
implicit without mutating it; every value is traceable to a provider document or an observed response.
actions:
- target: $.info
description: Link the provider's machine-readable discovery surface from the contract.
update:
x-api-catalog: https://data.charitysense.com/.well-known/api-catalog
x-agent-card: https://data.charitysense.com/.well-known/agent-card.json
x-ai-plugin: https://data.charitysense.com/.well-known/ai-plugin.json
x-ai-profile: https://data.charitysense.com/ai-profile.json
x-llms-txt: https://data.charitysense.com/llms.txt
x-agent-instructions: https://data.charitysense.com/INSTRUCTIONS_FOR_AGENTS.md
x-mcp-notice: https://data.charitysense.com/mcp.json
x-public-profile-url-template: https://data.charitysense.com/charity/{ein}
x-citation: 'CharitySense public charity profile, https://data.charitysense.com/charity/{ein} (include the filing year)'
- target: $.info
description: >-
Record the daily allowances and the RateLimit headers observed live, since the contract declares no response
headers.
update:
x-rate-limit:
anonymous: {limit: 1000, window: 1 UTC day, scope: per-client}
paid_defaults: {data: 100000, advanced: 250, window: 1 UTC day, scope: per-key}
headers: [RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset]
exhaustion_status: 429
usage_endpoint: /api/v2/usage
- target: $.info
description: Record the error envelope and the documented ErrorCode registry (see errors/).
update:
x-error-envelope:
field: detail
codes:
- {code: ApiKeyRequired, status: 401}
- {code: EntitlementRequired, status: 403}
- {code: ProfileNotFound, status: 404}
- {code: SectionNotAdvertised, status: 404}
- {code: AdvertisedSectionEmpty, status: 500}
retry: {never_unchanged: [400, 401, 404, 422], back_off: [429, 503]}
- target: $.tags[?(@.name=='Profiles')]
description: Tag descriptions (the contract declares names only).
update:
description: Bounded charity page, advertised sections, filings, brand icon and grant-flow evidence for one EIN.
- target: $.tags[?(@.name=='Discovery')]
update:
description: Identity and discovery search, top lists, cohort funders, related-organization discovery and bulk diligence summaries.
- target: $.tags[?(@.name=='Dataset')]
update:
description: Liveness and corpus-wide statistics.
- target: $.tags[?(@.name=='Assistant')]
update:
description: Paid assistant operations - charity question, agent feedback, capabilities and SSE chat. Every POST is consequential and requires user confirmation.
- target: $.tags[?(@.name=='Usage')]
update:
description: The calling paid key's own daily allowance; not metered.
- target: $.paths.*.get[?(@.security==null)]
description: Mark the anonymous public research reads and the allowance they share.
update:
x-access-tier: public
x-daily-allowance: 1000 per UTC day per client
- target: $.paths.*.*[?(@.security!=null)]
description: Mark every operation that requires a paid key as an Advanced operation (getApiUsage is the unmetered exception).
update:
x-access-tier: advanced
x-anonymous-response: 403 EntitlementRequired
- target: $.paths['/api/v2/usage'].get
update:
x-access-tier: authenticated
x-metered: false
- target: $.paths.*.post
description: Provider policy for consequential operations, from INSTRUCTIONS_FOR_AGENTS.md.
update:
x-requires-user-confirmation: true
x-idempotent: false
x-reversible: false
- target: $.paths['/api/v2/search'].get
update:
x-pagination: {style: page-number, param: Cursor, one_based: true, limit: Limit}
- target: $.paths['/api/v2/charity/{ein}/sections/{SectionId}'].get
update:
x-pagination: {style: opaque-cursor, param: Cursor, next_field: NextCursor}
x-synthesized-sections: [WhatTheyDo, People, GrantReadiness, MoneyNetwork, RelatedOrganizations]
- target: $.paths['/api/v2/charity/{ein}/filings'].get
update:
x-pagination: {style: opaque-cursor, param: Cursor, next_field: NextCursor}
- target: $.paths['/api/v2/charity/{ein}/money-network'].get
update:
x-pagination: {style: opaque-cursor, param: Cursor, next_field: NextCursor}
x-supported-scope: Latest
- target: $.paths['/api/v2/assistant/chat/stream'].post
update:
x-response-media-type: text/event-stream
x-stream-terminator: '[DONE]'
- target: $.components.securitySchemes.BearerAuth
update:
description: Paid CharitySense API key sent as a bearer token. Issued after a request at https://data.charitysense.com/contact?interest=api-access.
- target: $.components.securitySchemes.ApiKeyAuth
update:
description: The same paid key sent in the X-CharitySense-API-Key header; interchangeable with BearerAuth.
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.