{"openapi":"3.1.0","info":{"title":"Recallcheck API","version":"0.1.0","description":"Live U.S. CPSC product recall search via the real, public, keyless saferproducts.gov Recall Retrieval Web Service: search by product name, recall title, hazard, manufacturer/importer/distributor, UPC, or exact recall number, or browse recent recalls / run a combined advanced search.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://recallcheck.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/recallcheck/docs"},"termsOfService":"https://connectorbay.com/recallcheck/terms"},"servers":[{"url":"https://recallcheck.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/recallcheck/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/search_recalls_by_product":{"post":{"operationId":"search_recalls_by_product","summary":"LIVE lookup against CPSC's real recall database by product name (case-insensitive substring match). Use","description":"LIVE lookup against CPSC's real recall database by product name (case-insensitive substring match). Use\n    for \"has this product been recalled\", \"any recalls for infant walkers\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"product_keyword":{"description":"Product name keyword to search for.","examples":["infant walker","space heater","stroller"],"minLength":2,"title":"Product Keyword","type":"string"},"days":{"default":365,"description":"Only recalls from this many days back.","maximum":3650,"minimum":1,"title":"Days","type":"integer"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["product_keyword"],"title":"search_recalls_by_productArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_recalls_by_title":{"post":{"operationId":"search_recalls_by_title","summary":"LIVE lookup against CPSC's real recall database by recall title keyword. Use for \"search recalls titled","description":"LIVE lookup against CPSC's real recall database by recall title keyword. Use for \"search recalls titled\n    with 'crib'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"title_keyword":{"description":"Keyword to search for in the recall's title.","minLength":2,"title":"Title Keyword","type":"string"},"days":{"default":365,"description":"Only recalls from this many days back.","maximum":3650,"minimum":1,"title":"Days","type":"integer"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["title_keyword"],"title":"search_recalls_by_titleArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_recalls_by_hazard":{"post":{"operationId":"search_recalls_by_hazard","summary":"LIVE lookup against CPSC's real recall database by hazard description keyword. Use for \"what's been","description":"LIVE lookup against CPSC's real recall database by hazard description keyword. Use for \"what's been\n    recalled recently for a fire hazard\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"hazard_keyword":{"description":"Hazard keyword to search for.","examples":["choking","fire","laceration","fall"],"minLength":2,"title":"Hazard Keyword","type":"string"},"days":{"default":365,"description":"Only recalls from this many days back.","maximum":3650,"minimum":1,"title":"Days","type":"integer"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["hazard_keyword"],"title":"search_recalls_by_hazardArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_recalls_by_manufacturer":{"post":{"operationId":"search_recalls_by_manufacturer","summary":"LIVE lookup against CPSC's real recall database by manufacturer/importer/distributor name (searches all","description":"LIVE lookup against CPSC's real recall database by manufacturer/importer/distributor name (searches all\n    three company-name fields as CPSC defines them). Use for \"has this brand had any recalls\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name_keyword":{"description":"Manufacturer, importer, or distributor name keyword.","minLength":2,"title":"Name Keyword","type":"string"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["name_keyword"],"title":"search_recalls_by_manufacturerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_recalls_by_upc":{"post":{"operationId":"search_recalls_by_upc","summary":"LIVE lookup against CPSC's real recall database by UPC/barcode. Note: CPSC only has a UPC on file for a","description":"LIVE lookup against CPSC's real recall database by UPC/barcode. Note: CPSC only has a UPC on file for a\n    minority of recalls, so no match doesn't guarantee the product is safe — try search_recalls_by_product too.\n    Use for \"check if this barcode has been recalled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"upc":{"description":"A product's UPC/barcode number.","minLength":6,"title":"Upc","type":"string"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["upc"],"title":"search_recalls_by_upcArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_recall_by_number":{"post":{"operationId":"get_recall_by_number","summary":"LIVE fetch of one specific recall by its exact CPSC recall number. Use for \"show me recall number 26721\".","description":"LIVE fetch of one specific recall by its exact CPSC recall number. Use for \"show me recall number 26721\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"recall_number":{"description":"A specific CPSC recall number.","examples":["26721"],"minLength":1,"title":"Recall Number","type":"string"}},"required":["recall_number"],"title":"get_recall_by_numberArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/recent_recalls":{"post":{"operationId":"recent_recalls","summary":"LIVE browse of the most recent CPSC recalls with no keyword filter, newest first. Use for \"what's been","description":"LIVE browse of the most recent CPSC recalls with no keyword filter, newest first. Use for \"what's been\n    recalled lately\", \"any recalls this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"days":{"default":30,"description":"How many days back to look.","maximum":365,"minimum":1,"title":"Days","type":"integer"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"title":"recent_recallsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/advanced_recall_search":{"post":{"operationId":"advanced_recall_search","summary":"LIVE search against CPSC's real recall database combining any number of supported fields at once (AND'd","description":"LIVE search against CPSC's real recall database combining any number of supported fields at once (AND'd\n    together) for a more precise query than the single-field tools. Use for \"recalls mentioning 'stroller' AND\n    hazard 'fall'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"fields":{"additionalProperties":{"type":"string"},"description":"Any combination of supported field names (see list_supported_search_fields) mapped to a search keyword, e.g. {\"product_name\": \"crib\", \"hazard\": \"entrapment\"}.","title":"Fields","type":"object"},"days":{"anyOf":[{"maximum":3650,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Optional lookback window in days, applied as recall_date_start if not already given in fields.","title":"Days"},"limit":{"default":20,"description":"Max results to return.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["fields"],"title":"advanced_recall_searchArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_supported_search_fields":{"post":{"operationId":"list_supported_search_fields","summary":"Every search field CPSC's own Recall Retrieval Web Service documents, for use with","description":"Every search field CPSC's own Recall Retrieval Web Service documents, for use with\n    advanced_recall_search. Use for \"what can I search recalls by\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_supported_search_fieldsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}