Developer documentation
Two operations, two transports. Same behaviour either way: results ranked by total price, affiliate use disclosed, never a changed destination.
MCP (for Claude, ChatGPT apps, and any MCP client)
https://gocottontail.com/mcp
Streamable HTTP, stateless. Tools: find_best_price (product, max_results) and resolve_link (url). Both are read-only and annotated as such. Add it to Claude as a custom connector with the URL above; partners use https://gocottontail.com/p/<api_key>/mcp or send Authorization: Bearer <api_key>.
REST
POST https://gocottontail.com/api/v1/find {"product": "Tineco Floor One S7 Stretch Ultra", "max_results": 5}
POST https://gocottontail.com/api/v1/resolve {"url": "https://www.example.com/product/123"}
JSON in, JSON out. Full schema: /openapi.json (OpenAPI 3.1). Anonymous calls are rate-limited per IP and attributed to the house account; partner keys lift the limit and attribute commissions to you.
What you get back
offers[]— seller, title, price, shipping, total, condition, and aurlto show the user. Rank 1 is the lowest total.disclosure— one sentence. Show it next to the results; it's how both of us stay on the right side of the FTC.product_page— a public page for the same product with the seller table and price history.
Rules that are enforced in code
- Ranking never reads commission data (a test fails the build if it does).
- A link that already carries another party's affiliate tag is returned untouched.
- No checkout, cart, or payment operations exist.
- We receive only the tool arguments; nothing else from the conversation.
Become a partner
Email hello@gocottontail.com with what you're building. Partners get an API key, a share of the commission their traffic earns, monthly statements, and a one-page agreement.