{"name":"BotMarket","version":"1.0.0","description":"Free data marketplace built for AI agents and bots. Covers international trade flows, US demographics (ACS), US customs shipment records, and international debt statistics. Catalog, schemas, previews, and queries are all free; queries just need a free API key.","agent_skill_url":"/.well-known/agent-skill.md","skill_package_url":"/.well-known/botmarket.skill","catalog_url":"/api/catalog","catalog_url_search":"/api/catalog?q=<search term>","openapi_url":"/api/openapi.json","pricing_models":["free"],"supported_formats":["parquet","csv"],"contact":"support@oec.world","payment_methods":{"free_api_key":{"enabled":true,"requires_human":false,"claim_url":"/api/promo/claim","description":"Free API key: POST {\"buyer_email\": \"you@example.com\"} to claim_url and receive a free API key. One key per email address. No payment required — BotMarket is free."}},"bot_instructions":{"workflow":[{"step":1,"id":"catalog","title":"Browse catalog","endpoint":"GET /api/catalog","free":true,"description":"Lists all datasets (paginated: limit, offset). GET /api/catalog?q=<terms> searches by free text over name, description, domain, scope, tags (fuzzy/typo-tolerant). Optional params: domain, scope, tag. Response includes slug, name, description, tags, urls per dataset. Use the slug in all subsequent endpoints."},{"step":2,"id":"inspect_schema","title":"Inspect dataset schema","endpoint":"GET /api/datasets/{slug}","free":true,"description":"Returns full dataset detail including schema (column names, types) and query_filters (filterable columns). For each filterable column a members_url field is included pointing to valid filter values."},{"step":3,"id":"get_filter_members","title":"Get valid filter values","endpoint":"GET /api/datasets/{slug}/members/{col}","free":true,"note":"Only needed for columns listed in query_filters. Use members_url from the schema response.","description":"Returns all distinct values accepted by the filter column. Use this to pick valid filter values before querying instead of guessing. Example: fetch members for 'ref_area' to get valid country codes."},{"step":4,"id":"sample","title":"Preview sample rows","endpoint":"GET /api/datasets/{slug}/sample","free":true,"description":"Returns up to 100 rows so the agent or user can preview structure and content before querying. No authentication required. It is a partial of the dataset. Don't use it for real data analysis, only to preview the columns and data types."},{"id":"get_free_key","title":"Get your free API key","endpoint":"POST /api/promo/claim","free":true,"description":"POST {\"buyer_email\": \"you@example.com\"} (or GET /api/promo/claim?buyer_email=...). Returns api_key. One key per email. No payment required. Use the real email of the person or team operating the agent — it is used to recover the key later.","step":5},{"step":6,"id":"query","title":"Query dataset","endpoint":"GET /api/datasets/{slug}/query","requires_auth":true,"description":"Send Authorization: Bearer bot_market_ak_<key>. Pass filterable columns as query params. Queries are free. Response includes max_rows_per_query."}],"notes":{"free_service":"BotMarket is free — no payments, no balances. Payment endpoints are disabled and return 404.","free_resources":"Catalog, schema, members, and sample endpoints are free with no authentication. GET .../query is also free but requires a free API key.","get_free_key":"POST {\"buyer_email\": \"you@example.com\"} to /api/promo/claim to receive a free API key. One key per email.","query_filter_semantics":"Pass filterable columns as query params. Single value: ?col=value (equality). Multiple values (SQL IN): repeat the param (?col=A&col=B) or comma-separate (?col=A,B). Allowed columns are in query_filters on the dataset detail. Reserved params: limit, offset, format.","account_lookup":"POST /api/account/lookup with {\"email\":\"user@example.com\"} sends the human an email summary of their orders and API keys. Use when the human needs to recover a lost key."}},"default_per_query_usd":0.0,"max_rows_per_query":1000,"free_mode":true}