Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/deeprecall-io:deeprecall-io-recalls-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: DeepRecall Recalls API
description: '## DeepRecall Product Safety API
Access the world''s largest product safety database with real-time recall data from global sources.
**This is a FEED API** - provides the past 24 or 48 hours of recalls. Not for historical data access.
### Authentication
All endpoints require an API key **except `/health`** which is public for monitoring.
Include your key in the `X-API-Key` header:
```
X-API-Key: dr_live_your_api_key_here
```
### Rate Limits
Standard rate limits apply:
- **60 requests per minute**
- **1,000 requests per hour**
- **10,000 requests per day**
- **50,000 requests per month**
Need higher limits? Contact us at contact@deeprecall.io
### Data Sources
Available data sources depend on your account authorization.
Use the `/v1/recalls/sources` endpoint to see your authorized data sources.
Current coverage: US CPSC, EU Safety Gate, UK OPSS, Rappel Conso (France)
Coming soon: Australia, Canada
### Support
Contact: contact@deeprecall.io'
version: 1.0.0
tags:
- name: Recalls
description: Product recall data endpoints
paths:
/v1/recalls/feed:
get:
tags:
- Recalls
summary: Get Recalls Feed
description: 'Retrieve recalled products from the past 24 hours. This is a FEED endpoint - it only provides recent recalls,
not historical data. Time filtering is based on the published_at date (when the recall was officially published).
**Features:**
- Filter by data source (use `/recalls/sources` to see available sources)
- Cursor-based pagination for stable results
- Maximum 24-hour lookback (enforced for security)
- Sorting by created_at, published_at, or updated_at
**Security Note:**
This endpoint is intentionally limited to 24 hours to prevent database sweeps.
For historical data access, contact support.
**Rate Limits:**
Rate limits are per API key and depend on your subscription tier.
**Pagination:**
Use the `next_cursor` from the response to fetch subsequent pages.'
operationId: get_recalls_feed_v1_recalls_feed_get
security:
- APIKeyHeader: []
parameters:
- name: data_sources
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Comma-separated list of data sources. Use /recalls/sources endpoint to see available sources for your account.
title: Data Sources
description: Comma-separated list of data sources. Use /recalls/sources endpoint to see available sources for your account.
example: source1,source2
- name: hours_ago
in: query
required: false
schema:
type: integer
maximum: 48
minimum: 24
description: Number of hours to look back. Must be either 24 or 48 hours (this is a feed, not historical data).
default: 24
title: Hours Ago
description: Number of hours to look back. Must be either 24 or 48 hours (this is a feed, not historical data).
- name: cursor
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Pagination cursor from previous response.
title: Cursor
description: Pagination cursor from previous response.
- name: limit
in: query
required: false
schema:
type: integer
maximum: 500
minimum: 1
description: Items per page. Default 50, max 500.
default: 50
title: Limit
description: Items per page. Default 50, max 500.
responses:
'200':
description: Successful response with recalls data
content:
application/json:
schema:
$ref: '#/components/schemas/RecallsFeedResponse'
'400':
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Invalid or missing API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/recalls/feed/{client}:
get:
tags:
- Recalls
summary: Get Recalls Feed (Client-Specific Format)
description: 'Retrieve recalled products in a client-specific format. This is a FEED endpoint - maximum 24 or 48 hours lookback.
Time filtering is based on the published_at date (when the recall was officially published).
This endpoint returns data transformed according to your organization''s specific requirements.
Custom formats can include modified field names, filtered fields, or restructured responses.
**Authorization Required:**
Access to custom endpoints must be explicitly authorized in your profile.
This feature is available for enterprise clients with specific integration needs.
**Note:** The `default` format returns standard DeepRecall format (same as `/feed` endpoint).
Contact contact@deeprecall.io to discuss custom format requirements for your integration.'
operationId: get_recalls_feed_for_client_v1_recalls_feed__client__get
security:
- APIKeyHeader: []
parameters:
- name: client
in: path
required: true
schema:
type: string
description: Client format identifier (contact support for authorization)
title: Client
description: Client format identifier (contact support for authorization)
example: your_org
- name: data_sources
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Comma-separated list of data sources.
title: Data Sources
description: Comma-separated list of data sources.
- name: hours_ago
in: query
required: false
schema:
type: integer
maximum: 48
minimum: 24
description: Number of hours to look back. Must be either 24 or 48.
default: 24
title: Hours Ago
description: Number of hours to look back. Must be either 24 or 48.
- name: cursor
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Cursor
- name: limit
in: query
required: false
schema:
type: integer
maximum: 500
minimum: 1
default: 50
title: Limit
responses:
'200':
description: Successful response with transformed data
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Get Recalls Feed For Client V1 Recalls Feed Client Get
'400':
description: Invalid request or unknown client
'401':
description: Invalid or missing API key
'403':
description: Unauthorized access to custom endpoint
'429':
description: Rate limit exceeded
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/recalls/sources:
get:
tags:
- Recalls
summary: List Available Data Sources
description: Get list of available data sources for filtering. Shows only sources you have access to.
operationId: list_data_sources_v1_recalls_sources_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- APIKeyHeader: []
/v1/recalls/search:
post:
tags:
- Recalls
summary: Search Similar Recalls
description: 'Find recalled products similar to your query using AI-powered multimodal matching.
**How it works:**
1. Your query (text and/or images) is converted to embeddings
2. The recalls database is searched for similar items
3. Results are ranked using fusion models that combine text and image similarity
**Input Options (provide at least one):**
- `content_description`: Text description of the product
- `image_urls`: List of product image URLs (1-10 images)
**Fusion Models:**
- `fuse_max` (default, recommended): Boosts items found in multiple modalities
- `fuse_flex`: Flexible user-controlled weighting
- `fuse`: Simple baseline fusion
**Credits:**
Each search consumes **1 API credit**. Check your remaining credits in the response.
**Rate Limits:**
Rate limits vary by tier and are separate from feed rate limits:
- Free: 5/min, 50/hour, 100/day
- Business: 30/min, 500/hour, 2000/day
- Enterprise: 120/min, 2000/hour, 10000/day
**Example - Text search:**
```json
{
"content_description": "Children''s toy with small detachable parts",
"top_k": 10
}
```
**Example - Multimodal search:**
```json
{
"content_description": "Electronic charger",
"image_urls": ["https://example.com/product.jpg"],
"input_weights": [0.4, 0.6],
"model_name": "fuse_max"
}
```'
operationId: search_similar_recalls_v1_recalls_search_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RecallsSimilaritySearchRequest'
required: true
responses:
'200':
description: Successful search with matched recalls
content:
application/json:
schema:
$ref: '#/components/schemas/RecallsSimilaritySearchResponse'
'400':
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Invalid or missing API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Insufficient API credits
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- APIKeyHeader: []
components:
schemas:
ErrorResponse:
properties:
success:
type: boolean
title: Success
description: Always false for errors
default: false
error:
type: string
title: Error
description: Error code (e.g., 'invalid_api_key', 'rate_limit_exceeded')
message:
type: string
title: Message
description: Human-readable error message
details:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Details
description: Additional error details when available
request_id:
anyOf:
- type: string
- type: 'null'
title: Request Id
description: Request ID for support reference
type: object
required:
- error
- message
title: ErrorResponse
description: 'Standard error response format.
All API errors follow this structure for consistent handling.'
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
RecallsSimilaritySearchRequest:
properties:
content_description:
anyOf:
- type: string
maxLength: 5000
minLength: 3
- type: 'null'
title: Content Description
description: Text description of the product to search for
image_urls:
anyOf:
- items:
type: string
type: array
maxItems: 10
minItems: 1
- type: 'null'
title: Image Urls
description: List of product image URLs (1-10 images)
filter_by_data_sources:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Filter By Data Sources
description: Filter results by data sources (e.g., ['safety_gate', 'us_cpsc']). If not provided, uses your authorized sources.
top_k:
type: integer
maximum: 100.0
minimum: 1.0
title: Top K
description: 'Number of results to return (default: 10, max: 100)'
default: 10
model_name:
type: string
title: Model Name
description: 'Fusion model for combining text and image scores. Options: fuse_max (recommended), fuse_flex, fuse'
default: fuse_max
input_weights:
items:
type: number
type: array
title: Input Weights
description: 'Weights for [text, images] modalities. Must sum to 1.0. Default: [0.5, 0.5]'
default:
- 0.5
- 0.5
type: object
title: RecallsSimilaritySearchRequest
description: 'Request for similarity search in the recalls database.
Find recalled products similar to your query using AI-powered multimodal matching.
**Input Options (provide at least one):**
- `content_description`: Text description of the product
- `image_urls`: List of product image URLs (1-10 images)
**Fusion Models:**
- `fuse_max` (default, recommended): Boosts items found in multiple modalities
- `fuse_flex`: Flexible user-controlled weighting
- `fuse`: Simple baseline fusion
**Credits:** Each search consumes 1 API credit.'
RateLimitInfo:
properties:
limits:
additionalProperties:
type: integer
type: object
title: Limits
description: Rate limits (per_minute, per_hour, per_day)
remaining_credits:
type: integer
title: Remaining Credits
description: Remaining API credits this month
monthly_quota:
anyOf:
- type: integer
- type: 'null'
title: Monthly Quota
description: Monthly request quota (null if unlimited)
monthly_usage:
type: integer
title: Monthly Usage
description: Requests used this month
type: object
required:
- limits
- remaining_credits
- monthly_usage
title: RateLimitInfo
description: Rate limit information for the user
DataSourceInfo:
properties:
available:
items:
type: string
type: array
title: Available
description: Data sources available to the user
requested:
items:
type: string
type: array
title: Requested
description: Data sources requested in this query
filtered:
items:
type: string
type: array
title: Filtered
description: Data sources actually used (authorized subset)
type: object
required:
- available
- requested
- filtered
title: DataSourceInfo
description: Information about data sources
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
RecallItem:
properties:
source_case_id:
anyOf:
- type: string
- type: 'null'
title: Source Case Id
description: Original case ID from source
data_source:
type: string
title: Data Source
description: Data source (e.g., safety_gate_eu)
alert_title:
type: string
title: Alert Title
description: Alert title/headline
alert_summary:
anyOf:
- type: string
- type: 'null'
title: Alert Summary
description: Summary of the alert
alert_status:
anyOf:
- type: string
- type: 'null'
title: Alert Status
description: Current status (active, closed)
risk_severity:
anyOf:
- type: string
- type: 'null'
title: Risk Severity
description: Severity level (high, serious, etc.)
risk_types:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Risk Types
description: Types of risks identified
hazard_description:
anyOf:
- type: string
- type: 'null'
title: Hazard Description
description: Description of hazard
product_name:
anyOf:
- type: string
- type: 'null'
title: Product Name
description: Product name
product_brand:
anyOf:
- type: string
- type: 'null'
title: Product Brand
description: Brand name
product_category:
anyOf:
- type: string
- type: 'null'
title: Product Category
description: Product category
product_description:
anyOf:
- type: string
- type: 'null'
title: Product Description
description: Product description
product_model_numbers:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Product Model Numbers
description: Model numbers
images:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Images
description: Product image URLs
country_of_origin:
anyOf:
- type: string
- type: 'null'
title: Country Of Origin
description: Country of origin
geo_jurisdictions:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Geo Jurisdictions
description: Affected jurisdictions
measure_types:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Measure Types
description: Types of measures taken
source_url:
anyOf:
- type: string
- type: 'null'
title: Source Url
description: Original source URL
notifying_authority:
anyOf:
- type: string
- type: 'null'
title: Notifying Authority
description: Authority that issued notice
published_at:
anyOf:
- type: string
- type: 'null'
title: Published At
description: Original publication date
created_at:
type: string
title: Created At
description: When added to DeepRecall database
updated_at:
anyOf:
- type: string
- type: 'null'
title: Updated At
description: Last update timestamp
type: object
required:
- data_source
- alert_title
- created_at
title: RecallItem
description: 'A single recall item from the feed.
Represents a recalled product with all relevant details.'
PaginationMeta:
properties:
total_count:
type: integer
title: Total Count
description: Total number of items matching the query
returned_count:
type: integer
title: Returned Count
description: Number of items returned in this response
limit:
type: integer
title: Limit
description: Requested page size
has_more:
type: boolean
title: Has More
description: Whether there are more items available
next_cursor:
anyOf:
- type: string
- type: 'null'
title: Next Cursor
description: Cursor to fetch the next page. Null if no more pages.
type: object
required:
- total_count
- returned_count
- limit
- has_more
title: PaginationMeta
description: Pagination metadata included in list responses
RecallsFeedResponse:
properties:
success:
type: boolean
title: Success
description: Whether the request was successful
default: true
data:
items:
$ref: '#/components/schemas/RecallItem'
type: array
title: Data
description: List of recall items
pagination:
$ref: '#/components/schemas/PaginationMeta'
description: Pagination metadata
meta:
additionalProperties: true
type: object
title: Meta
description: Additional metadata (filters applied, timing, etc.)
rate_limit:
anyOf:
- $ref: '#/components/schemas/RateLimitInfo'
- type: 'null'
description: Rate limit and usage information
data_sources:
anyOf:
- $ref: '#/components/schemas/DataSourceInfo'
- type: 'null'
description: Data source authorization information
type: object
required:
- data
- pagination
title: RecallsFeedResponse
description: 'Response from the /recalls/feed endpoint.
Contains a list of recalls with pagination metadata and enhanced info.'
RecallsSimilaritySearchResponse:
properties:
success:
type: boolean
title: Success
description: Whether the search was successful
default: true
matches:
items:
$ref: '#/components/schemas/SimilaritySearchMatch'
type: array
title: Matches
description: List of similar recalls, sorted by score (highest first)
default: []
total_matches:
type: integer
title: Total Matches
description: Number of matches returned
model_name:
type: string
title: Model Name
description: Fusion model used for scoring
processing_time_ms:
type: integer
title: Processing Time Ms
description: Search processing time in milliseconds
credits_used:
type: integer
title: Credits Used
description: API credits consumed by this search
default: 1
credits_remaining:
type: integer
title: Credits Remaining
description: Your remaining API credits
rate_limit:
anyOf:
- $ref: '#/components/schemas/RateLimitInfo'
- type: 'null'
description: Rate limit and usage information
data_sources:
anyOf:
- $ref: '#/components/schemas/DataSourceInfo'
- type: 'null'
description: Data source filtering information
meta:
additionalProperties: true
type: object
title: Meta
description: Additional metadata
type: object
required:
- total_matches
- model_name
- processing_time_ms
- credits_remaining
title: RecallsSimilaritySearchResponse
description: 'Response from the /recalls/search endpoint.
Contains similar recalls ranked by relevance score.'
SimilaritySearchMatch:
properties:
content_hashed:
type: string
title: Content Hashed
description: Unique identifier (content hash) of the matched recall
score:
type: number
maximum: 1.0
minimum: 0.0
title: Score
description: Similarity score (0-1, higher is more similar)
data_source:
anyOf:
- type: string
- type: 'null'
title: Data Source
description: Data source (e.g., safety_gate, us_cpsc)
source_case_id:
anyOf:
- type: string
- type: 'null'
title: Source Case Id
description: Original case ID from source agency
alert_title:
anyOf:
- type: string
- type: 'null'
title: Alert Title
description: Alert title/headline
product_name:
anyOf:
- type: string
- type: 'null'
title: Product Name
description: Product name
product_brand:
anyOf:
- type: string
- type: 'null'
title: Product Brand
description: Product brand
product_description:
anyOf:
- type: string
- type: 'null'
title: Product Description
description: Product description
risk_severity:
anyOf:
- type: string
- type: 'null'
title: Risk Severity
description: Risk severity level
hazard_description:
anyOf:
- type: string
- type: 'null'
title: Hazard Description
description: Description of the hazard
images:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Images
description: Product image URLs
source_url:
anyOf:
- type: string
- type: 'null'
title: Source Url
description: URL to original recall notice
type: object
required:
- content_hashed
- score
title: SimilaritySearchMatch
description: 'A single match from similarity search.
Represents a recalled product that is similar to your query.'
securitySchemes:
APIKeyHeader:
type: apiKey
description: API key for authentication. Obtain from dashboard.
in: header
name: X-API-Key