DeepRecall Recalls API

Product recall data endpoints

Operations 4

GET /v1/recalls/feed Get Recalls Feed #
GET /v1/recalls/feed/{client} Get Recalls Feed (Client-Specific Format) #
GET /v1/recalls/sources List Available Data Sources #
POST /v1/recalls/search Search Similar Recalls #

Work with this as data

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 Specification

deeprecall-io-recalls-api-openapi.yml Raw ↑
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