{
  "asOf": "2026-11-05",
  "capabilities": [
    {
      "evidence": [
        {
          "quote": "/api/amazon/product: Get product information (title, brand, price, rating, ratingsTotal, isPrime, isInStock, imageUrls, categories, seller)",
          "source": "openapi"
        }
      ],
      "fields": [
        "id",
        "title",
        "brand",
        "price",
        "rating",
        "review_count",
        "images",
        "variations",
        "availability",
        "category"
      ],
      "note": "Also returns seller, coupon, feature bullets, technical specifications.",
      "product": "amazon-api",
      "requestType": "product",
      "retailer": "amazon-us",
      "support": "full"
    },
    {
      "evidence": [
        {
          "quote": "/api/amazon/product/offers: Get product offers (price, seller, delivery, isPrime, buyboxWinner)",
          "source": "openapi"
        }
      ],
      "fields": [
        "seller_name",
        "price",
        "prime",
        "buybox_flag"
      ],
      "note": "Paginated; delivery details included.",
      "product": "amazon-api",
      "requestType": "offers",
      "retailer": "amazon-us",
      "support": "full"
    },
    {
      "evidence": [
        {
          "quote": "/api/amazon/search: Search products (title, price, rating, isPrime, sponsored)",
          "source": "openapi"
        }
      ],
      "fields": [
        "title",
        "price",
        "rating",
        "sponsored"
      ],
      "note": "Includes refinements and pagination.",
      "product": "amazon-api",
      "requestType": "search",
      "retailer": "amazon-us",
      "support": "full"
    },
    {
      "evidence": [
        {
          "quote": "/api/amazon/product/reviews: Get paginated reviews (rating, title, body, helpfulVotes, verifiedPurchase, reviewer)",
          "source": "openapi"
        }
      ],
      "fields": [
        "rating",
        "title",
        "text",
        "verified"
      ],
      "note": "Docs say an AMAZON_COOKIE is required on every reviews page; also a top-reviews endpoint.",
      "product": "amazon-api",
      "requestType": "reviews",
      "retailer": "amazon-us",
      "support": "full"
    },
    {
      "evidence": [
        {
          "quote": "/api/amazon/bestsellers: Get best sellers (bestSellersRank, price, rating)",
          "source": "openapi"
        }
      ],
      "fields": [
        "rank",
        "price"
      ],
      "note": "Also a bestseller-categories endpoint.",
      "product": "amazon-api",
      "requestType": "bestsellers",
      "retailer": "amazon-us",
      "support": "full"
    },
    {
      "evidence": [
        {
          "quote": "/api/amazon/seller: Get seller information (name, logoUrl, rating, about, productResults)",
          "source": "openapi"
        }
      ],
      "fields": [
        "name",
        "rating"
      ],
      "note": "Seller name, logo, about text and product list; feedback count not listed.",
      "product": "amazon-api",
      "requestType": "seller",
      "retailer": "amazon-us",
      "support": "full"
    }
  ],
  "category": "retailer_api",
  "costRules": [
    {
      "billedOn": "unknown",
      "evidence": [
        {
          "quote": "Each request costs the same, no matter which fields you ask for.",
          "source": "blog-rainforest"
        }
      ],
      "modifiers": "Assumes 1 request per call; docs say each request costs the same but do not state per-endpoint counting or what failed calls cost.",
      "product": "amazon-api",
      "requestType": "product",
      "retailer": "amazon-us",
      "unit": "request",
      "units": 1
    },
    {
      "billedOn": "unknown",
      "evidence": [
        {
          "quote": "Each request costs the same, no matter which fields you ask for.",
          "source": "blog-rainforest"
        }
      ],
      "modifiers": "Assumes 1 request per call; docs say each request costs the same but do not state per-endpoint counting or what failed calls cost.",
      "product": "amazon-api",
      "requestType": "offers",
      "retailer": "amazon-us",
      "unit": "request",
      "units": 1
    },
    {
      "billedOn": "unknown",
      "evidence": [
        {
          "quote": "Each request costs the same, no matter which fields you ask for.",
          "source": "blog-rainforest"
        }
      ],
      "modifiers": "Assumes 1 request per call; docs say each request costs the same but do not state per-endpoint counting or what failed calls cost.",
      "product": "amazon-api",
      "requestType": "search",
      "retailer": "amazon-us",
      "unit": "request",
      "units": 1
    },
    {
      "billedOn": "unknown",
      "evidence": [
        {
          "quote": "Each request costs the same, no matter which fields you ask for.",
          "source": "blog-rainforest"
        }
      ],
      "modifiers": "Assumes 1 request per call; docs say each request costs the same but do not state per-endpoint counting or what failed calls cost.",
      "product": "amazon-api",
      "requestType": "reviews",
      "retailer": "amazon-us",
      "unit": "request",
      "units": 1
    },
    {
      "billedOn": "unknown",
      "evidence": [
        {
          "quote": "Each request costs the same, no matter which fields you ask for.",
          "source": "blog-rainforest"
        }
      ],
      "modifiers": "Assumes 1 request per call; docs say each request costs the same but do not state per-endpoint counting or what failed calls cost.",
      "product": "amazon-api",
      "requestType": "bestsellers",
      "retailer": "amazon-us",
      "unit": "request",
      "units": 1
    },
    {
      "billedOn": "unknown",
      "evidence": [
        {
          "quote": "Each request costs the same, no matter which fields you ask for.",
          "source": "blog-rainforest"
        }
      ],
      "modifiers": "Assumes 1 request per call; docs say each request costs the same but do not state per-endpoint counting or what failed calls cost.",
      "product": "amazon-api",
      "requestType": "seller",
      "retailer": "amazon-us",
      "unit": "request",
      "units": 1
    }
  ],
  "homepage": "https://www.canopyapi.co",
  "id": "canopyapi",
  "name": "Canopy API",
  "notes": [
    "Beyond the canonical request types, the API also offers deals, categories, variants, stock and sales estimates, A+ content, GTIN/ASIN lookups, raw HTML and Markdown. These are not priced or listed here."
  ],
  "plans": [
    {
      "billing": "monthly",
      "currency": "USD",
      "evidence": [
        {
          "quote": "Hobby: 100 requests per month. No additional charges.",
          "source": "keepa-alt"
        }
      ],
      "expiry": {
        "kind": "unknown",
        "note": "Allowance is stated per month; no page says whether unused requests carry over."
      },
      "free": true,
      "id": "hobby",
      "included": 100,
      "name": "Hobby",
      "notes": [
        "Free forever; no additional charges (no overage). Email support."
      ],
      "price": 0,
      "selfServe": true,
      "unit": "request"
    },
    {
      "billing": "payg",
      "currency": "USD",
      "evidence": [
        {
          "quote": "Pay As You Go: 100 free requests per month, then $0.01 per request",
          "source": "keepa-alt"
        }
      ],
      "expiry": {
        "kind": "unknown",
        "note": "Not stated."
      },
      "id": "pay-as-you-go",
      "included": null,
      "name": "Pay As You Go",
      "notes": [
        "No monthly minimum. The first 100 requests each month are free (same allowance as Hobby), not modelled here.",
        "Automatic volume discounts are advertised but thresholds and rates are not published, so list price is used."
      ],
      "price": 0,
      "selfServe": true,
      "unit": "request",
      "unitPrice": 0.01
    },
    {
      "billing": "monthly",
      "currency": "USD",
      "evidence": [
        {
          "quote": "Premium: $99 per month for 20,000 requests, then $0.008 per request.",
          "source": "keepa-alt"
        }
      ],
      "expiry": {
        "kind": "unknown",
        "note": "Allowance is stated per month; expiry or rollover is not stated."
      },
      "id": "premium",
      "included": 20000,
      "name": "Premium",
      "notes": [
        "Priority support.",
        "Older Canopy blog posts list Premium at $400/month for 100,000 requests and $0.004 overage; current pages show $99 for 20,000."
      ],
      "overageUnitPrice": 0.008,
      "price": 99,
      "selfServe": true,
      "unit": "request"
    },
    {
      "billing": "monthly",
      "currency": "USD",
      "evidence": [
        {
          "quote": "Custom enterprise: for higher volume or dedicated support, contact support@canopyapi.co",
          "source": "keepa-alt"
        }
      ],
      "expiry": {
        "kind": "unknown",
        "note": "Not stated."
      },
      "id": "enterprise",
      "included": null,
      "name": "Custom enterprise",
      "notes": [
        "Contact support@canopyapi.co for higher volume or dedicated support."
      ],
      "price": null,
      "selfServe": false,
      "unit": "request"
    }
  ],
  "products": [
    {
      "docsUrl": "https://docs.canopyapi.co/",
      "id": "amazon-api",
      "name": "Amazon Product Data API (REST, GraphQL, MCP)",
      "output": "parsed_json"
    }
  ],
  "schema": 1,
  "sources": [
    {
      "id": "keepa-alt",
      "kind": "pricing_page",
      "method": "manual",
      "retrieved": "2026-11-05",
      "url": "https://www.canopyapi.co/keepa-api-alternative"
    },
    {
      "id": "blog-rainforest",
      "kind": "docs",
      "method": "manual",
      "retrieved": "2026-11-05",
      "url": "https://www.canopyapi.co/blog/best-rainforest-api-alternatives-comparison"
    },
    {
      "id": "openapi",
      "kind": "api",
      "method": "manual",
      "retrieved": "2026-11-05",
      "url": "https://rest.canopyapi.co/api/v1/openapi.json"
    },
    {
      "id": "docs",
      "kind": "docs",
      "method": "manual",
      "retrieved": "2026-11-05",
      "url": "https://docs.canopyapi.co/"
    }
  ],
  "status": "active"
}