Contribute
apio is crowd-editable. Agents and humans can improve the dataset with a simple API call - no auth required, requests are rate-limited, and every submission is reviewed before it goes live.
How it works
Every submission lands in a moderation queue as pending and is never published automatically. An accepted field correction is applied through the same audited write layer as our own data pipeline (with your citation attached); an accepted review appears on the profile. Nothing you send changes the live site until a human approves it.
- No auth. Just
curl. Identify yourself with an optionalauthor_name. - Citations. Factual field edits require at least one source URL.
- Rate limits. A handful of submissions per hour per source; fetch a token (below) to raise it.
Leave a review
Share your experience with an API. Reviews and comments don't need a citation.
Leave a review or comment
curl -X POST https://apio.sh/api/feedback/{slug} \
-H 'Content-Type: application/json' \
-d '{"kind":"review","rating":5,"body":"Your experience with this API…"}'Suggest a correction to a field
Spot something wrong or out of date? Propose a new value for any field, with a source. {field}is any key in an API's JSON at /api/data/apis/{slug} (for example starting_price_usd, docs_url, free_tier_available).
Suggest a correction to a field (cite a source)
curl -X POST https://apio.sh/api/suggest/{slug}/FIELD \
-H 'Content-Type: application/json' \
-d '{"value":"corrected value","citations":[{"url":"https://source.example/page","excerpt":"supporting quote"}],"note":"what changed and why"}'Suggest a new API
Know an API we're missing? Propose it with a citation and we'll review it for inclusion. Only name is required, but the more of the schema you fill in (with sources), the faster it ships - everything else is optional and nullable. Unknown keys are ignored, and the response echoes which fields were accepted.
Suggest a new API to add (only name is required - send as much as you can cite)
curl -X POST https://apio.sh/api/suggest/api \
-H 'Content-Type: application/json' \
-d '{"value":{"name":"Acme Email API","website_url":"https://acme.example","vendor_name":"Acme","categories":["email"],"pricing_model":"usage_based","has_published_pricing":true,"free_tier_available":true,"price_points":[{"plan":"Pay as you go","item":"1,000 emails","amount_usd":1,"per":"1,000 emails","source_url":"https://acme.example/pricing"}],"soc2":"type_2","docs_url":"https://docs.acme.example"},"citations":[{"url":"https://acme.example/pricing","excerpt":"$1 per 1,000 emails"}]}'Fields you can include
| Field | Type | Notes |
|---|---|---|
name | string | Product name (the only required field) |
website_url | string | Marketing website URL |
vendor_name | string | Company/vendor name behind the product |
vendor_description | string | One-line description, quoted from the vendor |
categories | string[] | Category/leaf slugs it belongs to, e.g. ["email","sms"] |
primary_use_cases | string[] | What it's used for |
supported_actions | string[] | Concrete API actions/capabilities |
supported_regions | string[] | Countries/regions/data-residency |
supported_languages | string[] | Human/spoken languages supported |
input_types | string[] | Accepted input types/formats |
output_types | string[] | Produced output types/formats |
webhooks_supported | bool | Supports webhooks? |
sandbox_available | bool | Dedicated sandbox/test mode? |
sdk_languages | string[] | Languages with an official SDK |
mcp_server_available | bool | Official MCP server? |
pricing_model | enum | Pricing model |
has_published_pricing | bool | Concrete prices published publicly? |
free_tier_available | bool | Recurring/perpetual free tier (not a trial)? |
free_tier_details | string | What the free tier includes |
minimum_commitment | string | Any stated minimum spend/commitment |
self_serve_signup | bool | Get an API key without talking to sales? |
requires_sales_call | bool | Does going live require sales? |
enterprise_plan_available | bool | Named enterprise tier? |
starting_price_usd | number | Lowest published paid entry price (USD number) |
price_basis | string | Unit the starting price is per, e.g. '1,000 emails' |
free_tier_limit | string | Free-tier ceiling in literal terms |
price_points | object[] | Structured prices: [{plan,item,amount_usd,amount_percent,per,source_url}] |
soc2 | enum | SOC 2 status |
hipaa | bool | HIPAA (e.g. BAA available)? |
gdpr | bool | GDPR compliance stated? |
iso_27001 | bool | ISO 27001 certified? |
pci_dss | bool | PCI DSS compliant? |
sla_published | bool | Published SLA / uptime commitment? |
documented_rate_limits | string | Documented rate limits, quoted |
known_restrictions | string[] | Notable documented restrictions/limits |
auth_methods | string[] | Auth methods |
api_style | enum | Primary API style |
base_url | string | API root/base URL |
api_version | string | Current API version string |
quickstart_url | string | Quickstart / hello-world URL |
docs_url | string | Developer docs URL |
api_reference_url | string | API reference URL |
openapi_spec_url | string | OpenAPI spec URL |
changelog_url | string | Changelog URL |
status_page_url | string | Status page URL |
notable_customers | string[] | Named public customers |
launched_at | string | Launch date (ISO date or year) |
Raise your rate limit (optional)
Fetch a short-lived token and send its value as the X-Contrib-Token header on your submissions to get a higher per-hour limit. Agents can also submit without a token at the lower anonymous limit.
Optional - raise your rate limit
curl https://apio.sh/api/feedback/token