{
  "openapi": "3.0.1",
  "info": {
    "title": "CPSC Product Recall Monitor: Check Recalls Before You Resell",
    "description": "Check U.S. CPSC product recalls against reseller watchlists (baby gear, furniture tip-over, toys, electrical), brands or model numbers. Daily new-only monitor mode catches new and re-announced recalls. Photos, remedies, CPSC links. $0.50 per 1,000.",
    "version": "1.0",
    "x-build-id": "67By6LhamVB2I5mbE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tali-works~cpsc-recall-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tali-works-cpsc-recall-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/tali-works~cpsc-recall-monitor/runs": {
      "post": {
        "operationId": "runs-sync-tali-works-cpsc-recall-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/tali-works~cpsc-recall-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-tali-works-cpsc-recall-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "watchlists": {
            "title": "Preset watchlists",
            "type": "array",
            "description": "Ready-made keyword lists for what secondhand, thrift and consignment shops take in. Start with one list that matches what you sell. Baby gear and furniture tip-over are the cleanest; toys and electrical are broad (more possible matches to check), so pair them with brands or exclusions. Keywords are matched as whole words in the recall title, description, product names and CPSC product type.",
            "items": {
              "type": "string",
              "enum": [
                "baby-gear",
                "furniture-tipover",
                "toys",
                "electrical",
                "outdoor-sports",
                "kids-clothing"
              ],
              "enumTitles": [
                "Baby & nursery gear (cribs, bassinets, high chairs, strollers, play yards...)",
                "Furniture tip-over (dressers, chests, bookcases, wardrobes, TV stands...)",
                "Toys & kids items (magnets, water beads, button batteries...)",
                "Batteries & electrical (power banks, chargers, heaters, lamps...)",
                "Outdoor & sports (bikes, helmets, scooters, trampolines, grills...)",
                "Children's clothing (drawstrings, sleepwear)"
              ]
            }
          },
          "keywords": {
            "title": "Your own keywords (any of)",
            "type": "array",
            "description": "Extra product words or phrases, e.g. 'rocking sleeper', 'weighted blanket', 'jogging stroller'. Whole-word, case-insensitive; plural s/es and space/hyphen variants match ('high chair' = 'highchair' = 'high-chairs').",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brands / companies (any of)",
            "type": "array",
            "description": "Brand or company names, e.g. 'Graco', 'IKEA', 'Fisher-Price'. Searched in the title, description, product names and the manufacturer, importer, distributor and retailer fields. CPSC's manufacturer field is often blank, so the brand usually comes from the text.",
            "items": {
              "type": "string"
            }
          },
          "modelNumbers": {
            "title": "Model numbers / SKUs from your labels",
            "type": "array",
            "description": "Model or SKU strings to look for in the recall TEXT, e.g. 'TL1302Z' or 'AG-12011'. Spaces, hyphens, dots and slashes are ignored ('AG12011' finds 'AG-12011'). CPSC's API has no structured model field, so this is a text match: a hit is strong evidence, but confirm on the CPSC page. Min 3 letters/digits.",
            "items": {
              "type": "string"
            }
          },
          "upcs": {
            "title": "UPCs (any of)",
            "type": "array",
            "description": "UPC barcodes (digits). Few CPSC recalls publish UPCs (about 5% overall, almost none recently), so an empty result does NOT mean the item is clear.",
            "items": {
              "type": "string"
            }
          },
          "matchMode": {
            "title": "Combine filters",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "Example: brands 'Graco' + watchlist 'baby-gear' with 'all' returns only Graco baby-gear recalls.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude if text contains",
            "type": "array",
            "description": "Drop recalls whose title, description or product names contain any of these words (whole-word), e.g. 'motorcycle', 'pool'. Dropped recalls are not charged.",
            "items": {
              "type": "string"
            }
          },
          "lookbackDays": {
            "title": "Look back (days, by CPSC publish date)",
            "minimum": 0,
            "type": "integer",
            "description": "Window on CPSC's LastPublishDate (the date CPSC last published or updated the recall), counted back from today or 'Date to'. Using the publish date (not the original recall date) also catches re-announced and expanded recalls. CPSC publishes in batches, often a few days apart, so keep 7+ days for daily monitors.",
            "default": 30
          },
          "dateFrom": {
            "title": "Date from",
            "type": "string",
            "description": "Optional YYYY-MM-DD. Overrides 'Look back'. Use it for a one-time back-check of older stock (e.g. 2015-01-01); CPSC data goes back to the 1970s."
          },
          "dateTo": {
            "title": "Date to",
            "type": "string",
            "description": "Optional YYYY-MM-DD. Default today."
          },
          "maxResults": {
            "title": "Max recalls per run (cost cap)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Newest first. Default 100, maximum 500. For bigger back-checks, split by date range (dateFrom/dateTo) or narrow the watchlist.",
            "default": 100
          },
          "onlyNew": {
            "title": "Monitor mode: only new recalls",
            "type": "boolean",
            "description": "Remember what earlier runs returned (named key-value store 'cpsc-recall-monitor-state' in your Apify account) and output only recalls not returned before. Already-seen recalls are free. Schedule the Actor daily (Schedules > Create).",
            "default": false
          },
          "alertOnRepublish": {
            "title": "Monitor mode: re-alert when CPSC re-publishes a recall",
            "type": "boolean",
            "description": "If CPSC publishes an already-returned recall again with a newer publish date (re-announcement, expansion or edit), output it again with changeType 'republished'.",
            "default": true
          },
          "monitorKey": {
            "title": "Monitor key",
            "type": "string",
            "description": "Optional name for this monitor's memory, e.g. 'shop-baby-gear'. With a key the memory survives filter edits; without one, changing any filter starts a fresh baseline (and the first run re-returns and charges for the whole window)."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}