{
  "name": "OpenCage Geocoding API",
  "slug": "opencage",
  "website_url": "https://opencagedata.com",
  "vendor_description": "\"Easy, Open, Worldwide, Affordable Geocoding and Geosearch\"",
  "categories": [
    "geocoding"
  ],
  "summary": "OpenCage Geocoding API is a worldwide forward and reverse geocoding service, in operation since 2014, suited for use cases ranging from fleet tracking and logistics to academic research and IoT location data. Paid subscriptions start at $50/month with a free tier of 2,500 requests per day for testing (production use requires a paid plan), and enterprise pricing is available. The REST API supports API key auth and ships with official SDKs in over ten languages including Python, Go, Rust, and R, plus an MCP server. GDPR and HIPAA compliance are documented.",
  "capabilities": {
    "supported_actions": [
      "forward_geocode",
      "reverse_geocode",
      "batch_geocode",
      "geosearch_autocomplete"
    ],
    "supported_regions": [
      "worldwide"
    ],
    "supported_languages": [
      "IETF language tags accepted via language parameter (50+ languages including African, Asian, and European languages)",
      "native (returns results in local language)"
    ],
    "input_types": [
      "free-form address",
      "place name",
      "lat/lon (decimal format)",
      "UN/LOCODE code"
    ],
    "output_types": [
      "JSON",
      "GeoJSON",
      "XML",
      "Google-v3-json (deprecated legacy format)"
    ],
    "webhooks_supported": false,
    "sandbox_available": false,
    "sdk_languages": [
      "Python",
      "Java",
      "PHP",
      "Ruby",
      "Perl",
      "MATLAB",
      "Scala",
      "JavaScript (Leaflet)",
      "R",
      "Go",
      "Rust"
    ],
    "mcp_server_available": true
  },
  "integration": {
    "api_style": "rest",
    "base_url": "https://api.opencagedata.com/geocode/v1",
    "api_version": "v1",
    "versioning_scheme": "url",
    "stability": "ga",
    "deprecation_policy_url": null,
    "auth_methods": [
      "api_key"
    ],
    "auth_docs_url": "https://opencagedata.com/api#authentication",
    "idempotency_supported": false,
    "error_format": "vendor-specific",
    "webhook_signing": null,
    "webhook_events_url": null,
    "rate_limit_requests": 2500,
    "rate_limit_window": "day",
    "sdk_packages": [
      {
        "package": "opencage",
        "language": "Python",
        "official": true,
        "repo_url": "https://github.com/OpenCageData/python-opencage-geocoder"
      },
      {
        "package": "jopencage",
        "language": "Java",
        "official": true,
        "repo_url": "https://github.com/OpenCageData/jopencage"
      },
      {
        "package": "php-opencage-geocode",
        "language": "PHP",
        "official": true,
        "repo_url": "https://github.com/opencagedata/php-opencage-geocode"
      },
      {
        "package": "opencage-geocoder",
        "language": "Ruby",
        "official": true,
        "repo_url": "https://github.com/opencagedata/ruby-opencage-geocoder"
      },
      {
        "package": "Geo::Coder::OpenCage",
        "language": "Perl",
        "official": true,
        "repo_url": "https://metacpan.org/pod/Geo::Coder::OpenCage"
      },
      {
        "package": "opencage-matlab",
        "language": "MATLAB",
        "official": true,
        "repo_url": "https://github.com/OpenCageData/opencage-matlab"
      },
      {
        "package": "scala-opencage-geocoder",
        "language": "Scala",
        "official": true,
        "repo_url": "https://github.com/opencagedata/scala-opencage-geocoder"
      },
      {
        "package": "leaflet-opencage-geocoding",
        "language": "JavaScript (Leaflet)",
        "official": true,
        "repo_url": "https://github.com/opencagedata/leaflet-opencage-geocoding"
      },
      {
        "package": "opencage",
        "language": "R",
        "official": false,
        "repo_url": "https://docs.ropensci.org/opencage/"
      },
      {
        "package": "opencage",
        "language": "Go",
        "official": false,
        "repo_url": "https://github.com/alexliesenfeld/opencage"
      },
      {
        "package": "geocoding",
        "language": "Rust",
        "official": false,
        "repo_url": "https://crates.io/crates/geocoding"
      }
    ],
    "mcp_url": "https://github.com/OpenCageData/opencage-geocoding-mcp",
    "quickstart_url": "https://opencagedata.com/api#quickstart"
  },
  "pricing": {
    "pricing_model": "subscription",
    "has_published_pricing": true,
    "starting_price_usd": "50.0000",
    "price_basis": "month",
    "free_tier_available": true,
    "free_tier_limit": "2,500 requests/day",
    "free_tier_details": "2,500 requests/day, 1 request/second, no credit card required; explicitly for testing only - production use prohibited; inactive accounts deleted after 3 months of inactivity",
    "minimum_commitment": null,
    "self_serve_signup": true,
    "requires_sales_call": false,
    "requires_verification": false,
    "enterprise_plan_available": true,
    "price_points": [
      {
        "plan": "Free Trial",
        "item": "2,500 requests/day, 1 req/sec rate limit; testing only, no production use",
        "amount_usd": "0.0000",
        "amount_percent": null,
        "per": "month",
        "currency": "USD",
        "source_url": "https://opencagedata.com/pricing"
      },
      {
        "plan": "X-Small",
        "item": "10,000 requests/day, 15 req/sec rate limit; €45/month (~€0.15 per 1,000 requests)",
        "amount_usd": null,
        "amount_percent": null,
        "per": "month",
        "currency": "USD",
        "source_url": "https://opencagedata.com/pricing"
      },
      {
        "plan": "Small",
        "item": "30,000 requests/day, 20 req/sec rate limit; €110/month (~€0.12 per 1,000 requests)",
        "amount_usd": null,
        "amount_percent": null,
        "per": "month",
        "currency": "USD",
        "source_url": "https://opencagedata.com/pricing"
      },
      {
        "plan": "Medium",
        "item": "125,000 requests/day, 25 req/sec rate limit; €450/month (~€0.12 per 1,000 requests)",
        "amount_usd": null,
        "amount_percent": null,
        "per": "month",
        "currency": "USD",
        "source_url": "https://opencagedata.com/pricing"
      },
      {
        "plan": "Large",
        "item": "300,000 requests/day, 40 req/sec rate limit; €900/month (~€0.10 per 1,000 requests)",
        "amount_usd": null,
        "amount_percent": null,
        "per": "month",
        "currency": "USD",
        "source_url": "https://opencagedata.com/pricing"
      },
      {
        "plan": "Enterprise",
        "item": "Custom daily request limit and rate limit; from €1,800/month; dedicated support and custom terms",
        "amount_usd": null,
        "amount_percent": null,
        "per": "month",
        "currency": "USD",
        "source_url": "https://opencagedata.com/pricing"
      }
    ]
  },
  "compliance": {
    "soc2": "none",
    "hipaa": true,
    "gdpr": true,
    "iso_27001": false,
    "pci_dss": false,
    "sla_published": false,
    "sla_url": null,
    "data_retention_policy_url": "https://opencagedata.com/gdpr",
    "documented_rate_limits": "Free trial: 2,500 requests/day (hard limit), 1 req/sec. X-Small paid: 10,000 req/day, 15 req/sec. Small: 30,000 req/day, 20 req/sec. Medium: 125,000 req/day, 25 req/sec. Large: 300,000 req/day, 40 req/sec. Enterprise: custom. Paid plans have soft daily limits (service continues if exceeded, upgrade requested next month).",
    "known_restrictions": [
      "Free trial is for testing only; production use explicitly prohibited - FAQ states 'Please do NOT run production services on a free trial'",
      "Free trial inactive accounts auto-deleted after 3 months",
      "G-NAF (Australian address) data cannot be used for mail generation without secondary source verification",
      "Geosearch does not support house-level address search",
      "Geosearch has no free trial",
      "API requires HTTPS (TLS 1.2+)",
      "HTTP GET method only (other methods return 405)",
      "Caching/storage of results explicitly permitted with no restrictions"
    ]
  },
  "developer": {
    "docs_url": "https://opencagedata.com/api",
    "api_reference_url": "https://opencagedata.com/api",
    "openapi_spec_url": "https://opencagedata.com/openapi.yaml",
    "postman_collection_url": null,
    "changelog_url": null,
    "status_page_url": "https://status.opencagedata.com",
    "llms_txt_url": "https://opencagedata.com/llms.txt",
    "markdown_docs_url": "https://opencagedata.com/api.md",
    "rendering": "static"
  },
  "adoption": {
    "launched_at": "2014-01-01",
    "ga_date": null,
    "github_stars": null,
    "github_stars_at": null,
    "notable_customers": [
      "SIXT Share",
      "BigMile",
      "DQC Data Quality Company",
      "Cobalt Intelligence"
    ]
  },
  "scores": {
    "agent_friendliness": 90,
    "pricing_transparency": 100,
    "setup_speed": 85,
    "docs_quality": 80,
    "procurement_friction": 100,
    "trust_readiness": 30,
    "best_for": [
      "Prototypes and side projects - free to start, no sales call",
      "Regulated or enterprise workloads - compliance attestations and an enterprise plan",
      "AI agents and automation - an agent-ready surface (MCP / llms.txt)"
    ],
    "avoid_if": []
  },
  "sources": [
    {
      "field": "vendor_description",
      "url": "https://opencagedata.com",
      "excerpt": "Easy, Open, Worldwide, Affordable Geocoding and Geosearch",
      "confidence": "high"
    },
    {
      "field": "free_tier_available",
      "url": "https://opencagedata.com/faq",
      "excerpt": "The free trial is designed to be used as a way to test if our service meets your needs. Please do NOT run production services on a free trial.",
      "confidence": "high"
    },
    {
      "field": "free_tier_details",
      "url": "https://opencagedata.com/faq",
      "excerpt": "Please do NOT run production services on a free trial. If you want to depend on our service, upgrade to a paid plan.",
      "confidence": "high"
    },
    {
      "field": "pricing_model",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "No surge pricing; soft limits allow temporary overages. No setup or hidden fees. Month begins on purchase date. All prices inclusive of VAT. Cancel anytime, no long-term contracts.",
      "confidence": "high"
    },
    {
      "field": "enterprise_plan_available",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "Enterprise: from €1,800/month. Custom limits and pricing. Dedicated support.",
      "confidence": "high"
    },
    {
      "field": "documented_rate_limits",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "X-Small: 10,000 requests/day, 15 requests/sec. Small: 30,000 requests/day, 20 requests/sec. Medium: 125,000 requests/day, 25 requests/sec. Large: 300,000 requests/day, 40 requests/sec.",
      "confidence": "high"
    },
    {
      "field": "supported_actions",
      "url": "https://opencagedata.com/api",
      "excerpt": "Forward geocoding: Address/placename to coordinates. Reverse geocoding: Coordinates to address (returns at most one single result). Batch/Bulk geocoding: Available through file/spreadsheet uploads.",
      "confidence": "high"
    },
    {
      "field": "input_types",
      "url": "https://opencagedata.com/api",
      "excerpt": "Reverse geocoding: latitude, longitude in decimal format. Forward geocoding: address or placename. Special support includes UN/LOCODE queries prefixed with LOCODE:.",
      "confidence": "high"
    },
    {
      "field": "mcp_server_available",
      "url": "https://opencagedata.com/sdks",
      "excerpt": "MCP (Model Context Protocol) server — Written and supported by OpenCage. OpenCage geocoding MCP server.",
      "confidence": "high"
    },
    {
      "field": "gdpr",
      "url": "https://opencagedata.com/gdpr",
      "excerpt": "OpenCage GmbH, an EU-founded business run by German citizens, is fully committed to being compliant with GDPR and all data protection best practices.",
      "confidence": "high"
    },
    {
      "field": "hipaa",
      "url": "https://opencagedata.com/hipaa",
      "excerpt": "Our commitment to HIPAA compliance. We are happy to sign a BAA.",
      "confidence": "high"
    },
    {
      "field": "soc2",
      "url": "https://opencagedata.com/security-policy",
      "excerpt": "As a small business giving away publicly available open data, we do not believe the burden of ISO 27001 or SOC2 certification would be appropriately proportionate.",
      "confidence": "high"
    },
    {
      "field": "free_tier_available",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "2,500 requests/day, 1 request/sec. No credit card required. Testing only, testing purpose. Single API key. Inactive accounts deleted after 3 months",
      "confidence": "high"
    },
    {
      "field": "free_tier_details",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "2,500 requests/day, 1 request/sec. No credit card required. Testing only, testing purpose. Single API key. Inactive accounts deleted after 3 months",
      "confidence": "high"
    },
    {
      "field": "has_published_pricing",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "X-Small: €45/month, 10,000 requests/day, 15 requests/sec. Small: €110/month, 30,000 requests/day, 20 requests/sec. Medium: €450/month, 125,000 requests/day, 25 requests/sec. Large: €900/month, 300,000 requests/day, 40 requests/sec.",
      "confidence": "high"
    },
    {
      "field": "pricing_model",
      "url": "https://opencagedata.com/faq",
      "excerpt": "OpenCage offers transparent, predictable, self-service pricing with no set-up fees, customers can purchase one-time plans or subscriptions",
      "confidence": "high"
    },
    {
      "field": "enterprise_plan_available",
      "url": "https://opencagedata.com/enterprise",
      "excerpt": "Whether it's a big one-time project, or an on-going mission-critical service, supporting large volumes of geocoding requests 24/7 is business as usual for us.",
      "confidence": "high"
    },
    {
      "field": "documented_rate_limits",
      "url": "https://opencagedata.com/api",
      "excerpt": "Free Trial Limits: 2,500 requests per day (UTC timezone, resets at 24:00 UTC); 1 request per second maximum. Subscription customers have no hard limits.",
      "confidence": "high"
    },
    {
      "field": "output_types",
      "url": "https://opencagedata.com/api",
      "excerpt": "Four response format options are available: json (Standard JSON response), geojson (GeoJSON-compliant format), xml (XML structure), google-v3-json (Google Geocoding API compatibility subset, deprecated)",
      "confidence": "high"
    },
    {
      "field": "sdk_languages",
      "url": "https://opencagedata.com/sdks",
      "excerpt": "Officially Supported Languages (by OpenCage): Python, Node.js, Java, PHP, Ruby, Perl, MATLAB, Scala, Leaflet Maps, Command Line Interface (CLI), MCP (Model Context Protocol). 40+ additional community-contributed libraries across Go, Rust, R, C++, and more.",
      "confidence": "high"
    },
    {
      "field": "mcp_server_available",
      "url": "https://github.com/OpenCageData/opencage-geocoding-mcp",
      "excerpt": "MCP server for querying the OpenCage geocoding API from within LLMs",
      "confidence": "high"
    },
    {
      "field": "gdpr",
      "url": "https://opencagedata.com/gdpr",
      "excerpt": "Customers must agree to their DPA unless otherwise explicitly agreed in writing. The agreement is publicly available on their GitHub repository.",
      "confidence": "high"
    },
    {
      "field": "hipaa",
      "url": "https://opencagedata.com/hipaa",
      "excerpt": "if you use the optional no_record parameter...we will not store your query when we log the request. User queries are not used to train AI or machine learning (ML) systems in any way.",
      "confidence": "high"
    },
    {
      "field": "iso_27001",
      "url": "https://opencagedata.com/security-policy",
      "excerpt": "OpenCage explicitly states they do not hold ISO 27001. Their hosting provider Hetzner is ISO 27001 certified: hosted at multiple redundant locations within the EU with Hetzner, which is ISO 27001 certified.",
      "confidence": "high"
    },
    {
      "field": "pci_dss",
      "url": "https://opencagedata.com/security-policy",
      "excerpt": "OpenCage does not process payment credentials directly. They NEVER hold any customer payment credentials and instead use Stripe which handles all payment/billing and maintains PCI compliance.",
      "confidence": "high"
    },
    {
      "field": "sla_published",
      "url": "https://opencagedata.com/security-policy",
      "excerpt": "References an independent third party status page at status.opencagedata.com for operational metrics but contains no contractual SLA commitments.",
      "confidence": "high"
    },
    {
      "field": "iso_27001",
      "url": "https://opencagedata.com/gdpr",
      "excerpt": "Hetzner's datacenters are certified in accordance with DIN ISO/IEC 27001",
      "confidence": "high"
    },
    {
      "field": "sla_published",
      "url": "https://status.opencagedata.com",
      "excerpt": "Status/incident page showing operational metrics measured by StatusCake. No formal SLA or uptime percentage commitment published.",
      "confidence": "high"
    },
    {
      "field": "webhooks_supported",
      "url": "https://opencagedata.com/api",
      "excerpt": "All requests should use the HTTP GET method. Requests that use any other method will receive a response with status 405. No webhook or callback endpoints documented.",
      "confidence": "high"
    },
    {
      "field": "known_restrictions",
      "url": "https://opencagedata.com/faq",
      "excerpt": "Please do NOT run production services on a free trial. If you want to depend on our service, upgrade to a paid plan.",
      "confidence": "high"
    },
    {
      "field": "auth_methods",
      "url": "https://opencagedata.com/api#authentication",
      "excerpt": "a valid API key that you must pass with each HTTP request as the value of the `key` parameter. It is NOT necessary to set any HTTP headers for authentication",
      "confidence": "high"
    },
    {
      "field": "api_style",
      "url": "https://opencagedata.com/api",
      "excerpt": "Supported Methods: GET only. Other Methods Response: 405 - Method not allowed. Protocols: HTTP 1.1 and HTTP/2",
      "confidence": "high"
    },
    {
      "field": "api_version",
      "url": "https://opencagedata.com/api",
      "excerpt": "API Version: v1 (current version). Structure: https://api.opencagedata.com/geocode/VERSION/FORMAT?parameters … Requests with an incorrect version number will receive a 400 - not a valid version response",
      "confidence": "high"
    },
    {
      "field": "stability",
      "url": "https://opencagedata.com/api",
      "excerpt": "Changes to the API are very rare, but if you are depending on our service please 'watch' our public Change Log on GitHub, so you are notified when we announce any changes.",
      "confidence": "high"
    },
    {
      "field": "sdk_packages",
      "url": "https://github.com/OpenCageData/python-opencage-geocoder",
      "excerpt": "This is a Python module that provides access to the OpenCage Geocoding API. The package can be installed via pip with the command pip install opencage.",
      "confidence": "high"
    },
    {
      "field": "mcp_url",
      "url": "https://opencagedata.com/tutorials/geocode-inside-an-llm-via-mcp",
      "excerpt": "git clone https://github.com/OpenCageData/opencage-geocoding-mcp.git",
      "confidence": "high"
    },
    {
      "field": "idempotency_supported",
      "url": "https://opencagedata.com/api",
      "excerpt": "Queries are stateless GET requests with no transaction semantics requiring idempotency guarantees. Webhooks: Not supported by this API. Geocoding is synchronous request-response only.",
      "confidence": "high"
    },
    {
      "field": "rate_limit_requests",
      "url": "https://opencagedata.com/api",
      "excerpt": "Free Trial Limits: 2,500 requests per day (UTC timezone, resets at 24:00 UTC); 1 request per second maximum",
      "confidence": "high"
    },
    {
      "field": "requires_verification",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "No credit card required [for free tier]. Free (testing only)",
      "confidence": "high"
    },
    {
      "field": "starting_price_usd",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "X-Small: €45 per month, 10,000 requests/day, 15 req/sec",
      "confidence": "medium"
    },
    {
      "field": "price_basis",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "X-Small | €45 | 10,000 requests/day | 15 requests/sec … All paid plans include: permanent data storage, 'no surge pricing' (soft limits), multiple API keys",
      "confidence": "high"
    },
    {
      "field": "launched_at",
      "url": "https://opencagedata.com/about",
      "excerpt": "Started as an internal project at London-based Lokku Ltd in 2013, then became independent after Lokku's 2015 acquisition by Mitula Group",
      "confidence": "medium"
    },
    {
      "field": "notable_customers",
      "url": "https://opencagedata.com/enterprise",
      "excerpt": "SIXT Share - Robert Theml, Director: 'Using open data has many benefits, doing it via OpenCage means one less thing for us to maintain.'",
      "confidence": "medium"
    },
    {
      "field": "sandbox_available",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "Free Trial: 2,500 requests/day, 1 request/sec. No credit card required. Testing only, testing purpose — this is the live production API, not a dedicated sandbox environment.",
      "confidence": "high"
    },
    {
      "field": "known_restrictions",
      "url": "https://opencagedata.com/api",
      "excerpt": "Feel free to cache, or store, results as long as you like with no restrictions on permanent storage across all account types.",
      "confidence": "high"
    },
    {
      "field": "auth_docs_url",
      "url": "https://opencagedata.com/api#authentication",
      "excerpt": "The `key` parameter is one of two mandatory fields for all requests. It's described as 'a 32 character long, alphanumeric string unique to your account.'",
      "confidence": "high"
    },
    {
      "field": "base_url",
      "url": "https://opencagedata.com/api",
      "excerpt": "Base URL: https://api.opencagedata.com/geocode/ … Structure: https://api.opencagedata.com/geocode/VERSION/FORMAT?parameters",
      "confidence": "high"
    },
    {
      "field": "versioning_scheme",
      "url": "https://opencagedata.com/api",
      "excerpt": "Versioning Scheme: URL-based versioning using v + version number format",
      "confidence": "high"
    },
    {
      "field": "sdk_packages",
      "url": "https://opencagedata.com/sdks",
      "excerpt": "Vendor-Maintained (OpenCage): Python (opencage), Java (jopencage), PHP (php-opencage-geocode), Ruby (opencage-geocoder), Perl (Geo::Coder::OpenCage), MATLAB (opencage-matlab), Scala (scala-opencage-geocoder), Leaflet (leaflet-opencage-geocoding)",
      "confidence": "high"
    },
    {
      "field": "mcp_url",
      "url": "https://github.com/OpenCageData/opencage-geocoding-mcp",
      "excerpt": "MCP (Model Context Protocol) server providing geocoding capabilities through the OpenCage API, enabling coordinate-to-address and address-to-coordinate conversions within LLMs",
      "confidence": "high"
    },
    {
      "field": "quickstart_url",
      "url": "https://opencagedata.com/api#quickstart",
      "excerpt": "Quick Start – described as 'start geocoding ASAP'; sign up for your geocoding API key or test the API on our demo page",
      "confidence": "high"
    },
    {
      "field": "error_format",
      "url": "https://opencagedata.com/api",
      "excerpt": "Standard error structure includes status object: { \"status\": { \"code\": [three-digit code], \"message\": \"[human-readable explanation]\" } }",
      "confidence": "high"
    },
    {
      "field": "rate_limit_window",
      "url": "https://opencagedata.com/api",
      "excerpt": "2,500 requests per day (UTC timezone, resets at 24:00 UTC)",
      "confidence": "high"
    },
    {
      "field": "data_retention_policy_url",
      "url": "https://opencagedata.com/gdpr",
      "excerpt": "All logs are deleted after six months … if you use the optional no_record parameter when calling the geocoding API, OpenCage will not store your query in their logs",
      "confidence": "high"
    },
    {
      "field": "starting_price_usd",
      "url": "https://distancematrix.ai/blog/opencage-api-review",
      "excerpt": "pricing starts from €45/$50 per month",
      "confidence": "medium"
    },
    {
      "field": "free_tier_limit",
      "url": "https://opencagedata.com/pricing",
      "excerpt": "Free trial: 2,500 requests/day, 1 request/sec … No credit card required, for testing purposes only",
      "confidence": "high"
    },
    {
      "field": "launched_at",
      "url": "https://blog.opencagedata.com/",
      "excerpt": "OpenCage has been offering its geocoding service based on open data since 2014; the API was publicly launched/announced in 2014",
      "confidence": "medium"
    },
    {
      "field": "notable_customers",
      "url": "https://opencagedata.com/",
      "excerpt": "BigMile – Bas Wolff, Product Owner; DQC Data Quality Company – Johannes Boyne, Founder and CTO; Cobalt Intelligence – Jordan Hansen, CEO",
      "confidence": "medium"
    }
  ],
  "fields_not_found": [
    "minimum_commitment",
    "geosearch pricing amounts not published publicly",
    "USD pricing not published (prices in EUR only)",
    "sla_url",
    "deprecation_policy_url",
    "ga_date",
    "webhook_events_url",
    "webhook_signing"
  ],
  "source_confidence": "high",
  "last_verified_at": "2026-06-14T00:00:00.000Z",
  "contribute": {
    "note": "This data is crowd-editable. Suggest corrections or leave a review via these endpoints - no auth required, requests are rate-limited, and every submission is reviewed before it goes live. For a field edit, {field} is any key in this response and a citation is required.",
    "endpoints": [
      {
        "action": "review",
        "label": "Leave a review or comment",
        "method": "POST",
        "url": "https://apio.sh/api/feedback/opencage",
        "example_body": {
          "kind": "review",
          "rating": 5,
          "body": "Your experience with this API…"
        }
      },
      {
        "action": "field_edit",
        "label": "Suggest a correction to a field (cite a source)",
        "method": "POST",
        "url": "https://apio.sh/api/suggest/opencage/{field}",
        "example_body": {
          "value": "corrected value",
          "citations": [
            {
              "url": "https://source.example/page",
              "excerpt": "supporting quote"
            }
          ],
          "note": "what changed and why"
        }
      },
      {
        "action": "new_api",
        "label": "Suggest a new API to add",
        "method": "POST",
        "url": "https://apio.sh/api/suggest/api",
        "example_body": {
          "value": {
            "name": "Acme API",
            "website_url": "https://acme.example"
          },
          "citations": [
            {
              "url": "https://acme.example"
            }
          ]
        }
      },
      {
        "action": "token",
        "label": "Optional - raise your rate limit",
        "method": "GET",
        "url": "https://apio.sh/api/feedback/token"
      }
    ]
  }
}