# Product Recall Checker for Brands, UPCs & Products (`ultimatemc/product-recall-matcher`) Actor

Check your brands, products, UPCs and model numbers against official U.S. recalls from CPSC, FDA, NHTSA and USDA FSIS. For retailers, marketplace sellers and compliance teams. Returns each matching recall with date, hazard or reason, class, firm, source link and match confidence.

- **URL**: https://apify.com/ultimatemc/product-recall-matcher.md
- **Developed by:** [Ultimate Foresight Inc](https://apify.com/ultimatemc) (community)
- **Categories:** E-commerce, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Product Recall Checker for Brands, UPCs & Products** checks your **watchlist of brands, products, UPCs and model numbers** against the official U.S. recall feeds in one run: **CPSC** consumer products, **FDA** food, drug and medical-device enforcement reports, and **NHTSA** vehicle and equipment recalls. Each matching recall comes back as one clean row with the recalling firm, products, hazard, recall class or severity, UPCs and models, remedy, date, the official link, and **which of your terms matched where, with a confidence score**. Click **Start** with the prefilled watchlist to see real matches from the last 180 days in under two minutes.

> **A monitoring aid, not a compliance guarantee.** Data comes from public government feeds, which can lag or be incomplete, and text matching can miss or wrongly match products. Always confirm on the official recall notice. Not affiliated with CPSC, FDA, NHTSA or USDA.

### What does Product Recall Checker do?

- ✅ Searches **5 official feeds at once**: CPSC recalls, FDA food, drug and device enforcement reports (openFDA), and NHTSA recalls. USDA FSIS (meat, poultry, eggs) can be turned on but is usually blocked by the agency's firewall (see Limitations)
- ✅ Matches **brands and companies, product keywords, retailers, UPCs and model numbers**; the type is detected automatically
- ✅ Gives each match a **confidence**: 0.95 when your brand is the recalling firm, 0.85 when it's in the recall title or product name, 0.55-0.65 when it's only mentioned in the text, plus exact UPC and model matches
- ✅ Handles real-world text: "Trader Joe's" vs "TRADER JOES", "Scotch™", UPCs with or without spaces and check digits, plurals for product keywords, and **exclude terms** ("peanut butter" but not "peanut butter cups")
- ✅ Down-weights **ambiguous brand words** (Apple, Dove, Gap, Target, Tide...) unless they appear as the firm or brand
- ✅ Returns one normalized row per recall: `source`, `recallId`, `title`, `firms`, `retailers`, `products`, `hazard`, `reason`, `classification`, `severity`, `recallDate`, `url`, `upcs`, `models`, `affectedUnits`, `distribution`, `remedy`, `matchConfidence`, `matchedTerms[]`
- ✅ Reads **your product catalog** from another Actor's dataset (brands and UPC/GTIN/EAN fields are picked up automatically)
- ✅ A `SUMMARY` record shows the date window, records checked per feed, any feed that was unreachable, and watchlist terms with no matches

### Who is it for?

- 🛒 **E-commerce sellers, retailers and marketplaces** checking that nothing they list has been recalled
- 🏭 **Brand owners and distributors** watching their own and competitors' brands
- 🍽️ **Restaurants, grocers and food distributors** watching ingredients and suppliers
- 🛡️ **Insurers, compliance and procurement teams** screening supplier and product lists
- 🤖 **Developers and AI agents** that need one clean recall API across agencies

### How to check products for recalls

1. Click **Try for free** or **Start**. The watchlist is prefilled with five brands and one product keyword.
2. Replace them with your brands, products, UPCs or model numbers in **Watchlist**, or add **Watch items with options** for types and excludes.
3. Set **Look back (days)**: 365 for a first audit, 7 for a weekly schedule.
4. Click **Start**. Each matching recall becomes one row, newest first.
5. Schedule it weekly and connect email, Slack or Google Sheets to get alerts.

### Input example

This is the prefilled input:

```json
{
  "watchlist": [
    "Trader Joe's",
    "Costco",
    "Graco",
    "Scotch",
    "Apple"
  ],
  "watchItems": [
    {
      "term": "peanut butter",
      "type": "keyword"
    }
  ],
  "lookbackDays": 180,
  "maxResults": 25
}
```

UPCs, a model number and a product keyword with an exclude, last 30 days:

```json
{
  "watchlist": [
    "0 41220 98765 2",
    "TL1302Z"
  ],
  "watchItems": [
    {
      "term": "peanut butter",
      "type": "product",
      "exclude": [
        "peanut butter cups"
      ],
      "label": "Ingredient watch"
    }
  ],
  "lookbackDays": 30
}
```

From a store or marketplace scraper's dataset:

```json
{
  "datasetId": "YOUR_PRODUCT_DATASET_ID",
  "brandField": "vendor",
  "lookbackDays": 90,
  "minConfidence": 0.8
}
```

### Output example

Real output from the prefilled input above (run on 2026-10-21, America/Chicago): **14 matching recalls**. Here are all 14 at a glance:

| Recall date | Source | Matched term (field) | Confidence | Title |
|---|---|---|---|---|
| 2026-10-15 | cpsc | Scotch (title) | 0.85 | 3M Company Recalls Scotch™ Thermal Laminators Due to Risk of Serious I… |
| 2026-09-17 | cpsc | Costco (retailer) | 0.6 | Sauna360 Recalls Infrared Saunas, Hybrid Infrared Saunas and Infrared … |
| 2026-09-03 | cpsc | Costco (retailer) | 0.6 | Clorox Puerto Rico Recalls 6 Million Scented Mistolin and Lestoil Mult… |
| 2026-08-20 | cpsc | Costco (retailer) | 0.6 | Goal Zero Recalls YETI 3000X Power Stations Due to Serious Risk of Inj… |
| 2026-08-17 | fda_food | peanut butter (text) | 0.65 | PUMPKIN SPICE NO BAKE COOKIE NET WT 3.5 oz. INGREDIENTS: WHOLE GRAIN O… |
| 2026-08-07 | fda_food | Trader Joe's (product) | 0.8 | Tomato Salsa Fresca. Ingredients: Tomatoes, Yellow Onion, Red Onion, C… |
| 2026-07-16 | cpsc | Costco (retailer) | 0.6 | Panasonic Recalls Electric Toaster Ovens Due to Shock and Fire Hazards |
| 2026-06-11 | cpsc | Costco (title) | 0.85 | Arctic Zone Titan Pro Coolers Recalled Due to Risk of Serious Injury o… |
| 2026-05-28 | fda_drug | Costco (firm) | 0.95 | HALEON CALCIUM CARBONATE TUMS ANTACID, Assorted Fruit Tablets, 1000 mg… |
| 2026-05-14 | cpsc | Costco (firm) | 0.95 | World Bright International Limited Recalls Agio Menlo Woven Patio Swin… |
| 2026-05-06 | fda_food | peanut butter (text) | 0.65 | UPC 29604300000 SALMON WASABI GRILLED FS COLD               This is Al… |
| 2026-04-15 | fda_food | peanut butter (product) | 0.8 | Banana Ice Cream - 32 oz (4 labels: Mollie Stone's; Dehoff's; Farmer J… |
| 2026-04-06 | fda_food | Costco (firm) | 0.95 | Kirkland Signature Traditional Madeleines 12 Count/net wt. 18oz., Item… |
| 2026-03-11 | fda_food | Costco (title) | 0.9 | Costco Service Deli Department 63 MEATLOAF SEASONING MORE FLV Pack Siz… |

Two of those rows in full, untrimmed:

```json
[
  {
    "source": "cpsc",
    "recallId": "27024",
    "recallNumbers": [
      "27024"
    ],
    "title": "3M Company Recalls Scotch™ Thermal Laminators Due to Risk of Serious Injury or Death from Fire Hazard",
    "firms": [
      "3M Company"
    ],
    "retailers": [
      "Amazon.com from June 2024 through September 2026 for between $44 and $56."
    ],
    "products": [
      "Scotch™ Thermal Laminators"
    ],
    "productTypes": [
      "Business and Office Machines"
    ],
    "hazard": "The recalled thermal laminators can overheat, posing a fire hazard.",
    "reason": null,
    "classification": null,
    "status": null,
    "recallDate": "2026-10-15",
    "reportDate": "2026-10-15",
    "url": "https://cpsc.gov/Recalls/2027/3M-Company-Recalls-ScotchTM-Thermal-Laminators-Due-to-Risk-of-Serious-Injury-or-Death-from-Fire-Hazard",
    "upcs": [],
    "models": [],
    "affectedUnits": "About 53,634",
    "distribution": null,
    "remedy": "Consumers should stop using and unplug the recalled thermal laminators immediately and contact 3M Company to receive a full refund. Consumers will be asked to fill out the online recall registration form at https://www.scotchbrand.com/3M/en_US/scotch-brand/tl1302Z-laminator-recall/, confirm that their laminator is included in the recall and upload a photograph of the laminator with the unplugged power cord cut. The refund, in the form of a check, will be mailed to the consumer upon receipt of the completed form and confirmation that the laminator's power cord has been cut. Consumers should dis",
    "countries": [
      "China"
    ],
    "severity": "high (per hazard text)",
    "matchConfidence": 0.85,
    "matchedTerms": [
      {
        "term": "Scotch",
        "type": "brand",
        "label": null,
        "field": "title",
        "matchedText": "Scotch",
        "confidence": 0.85,
        "context": "3M Company Recalls Scotch™ Thermal Laminators Due to Risk of Serious Injury..."
      }
    ],
    "sourceName": "U.S. Consumer Product Safety Commission (CPSC) recalls",
    "windowStart": "2026-04-24",
    "windowEnd": "2026-10-21",
    "disclaimer": "Matches come from public U.S. government recall feeds (CPSC, FDA enforcement reports via openFDA, NHTSA, and USDA FSIS when reachable) for the date window shown. Coverage is not complete and is not a compliance guarantee: feeds lag, some agencies were unreachable (see SUMMARY), and text matching can miss or wrongly match products. Always confirm on the official recall notice."
  },
  {
    "source": "fda_food",
    "recallId": "FDA-food-event-98734",
    "recallNumbers": [
      "H-0682-2026"
    ],
    "title": "Kirkland Signature Traditional Madeleines 12 Count/net wt. 18oz., Item #2000012, UPC 000020000127. Plastic clamshell container is packed with 9 pieces of Filled...",
    "firms": [
      "Costco Wholesale Corporation"
    ],
    "retailers": [],
    "brands": [],
    "products": [
      "Kirkland Signature Traditional Madeleines 12 Count/net wt. 18oz., Item #2000012, UPC 000020000127. Plastic clamshell container is packed with 9 pieces of Filled Heart Madeleines.  Distributed by Costco Wholesale Corp. Seattle, WA.   Label of recalled package is read in part: TRADITIONAL MADELEINES**"
    ],
    "productTypes": [
      "Food"
    ],
    "hazard": null,
    "reason": "Undeclared hazelnut and soy lecithin.",
    "classification": "Class I",
    "status": "Terminated",
    "recallDate": "2026-04-06",
    "reportDate": "2026-04-29",
    "url": "https://api.fda.gov/food/enforcement.json?search=event_id:%2298734%22&limit=100",
    "upcs": [
      "000020000127"
    ],
    "models": [],
    "affectedUnits": "92 units",
    "distribution": "Distributed in CA, CO, FL, IL, MT, VA, WA, WI, and in Puerto Rico.",
    "remedy": null,
    "firmLocation": "Issaquah, WA, United States",
    "severity": "high",
    "matchConfidence": 0.95,
    "matchedTerms": [
      {
        "term": "Costco",
        "type": "brand",
        "label": null,
        "field": "firm",
        "matchedText": "Costco",
        "confidence": 0.95,
        "context": "Costco Wholesale Corporation"
      }
    ],
    "sourceName": "U.S. FDA food enforcement reports (openFDA)",
    "windowStart": "2026-04-24",
    "windowEnd": "2026-10-21",
    "disclaimer": "Matches come from public U.S. government recall feeds (CPSC, FDA enforcement reports via openFDA, NHTSA, and USDA FSIS when reachable) for the date window shown. Coverage is not complete and is not a compliance guarantee: feeds lag, some agencies were unreachable (see SUMMARY), and text matching can miss or wrongly match products. Always confirm on the official recall notice."
  }
]
```

No recalls in the window matched "Graco" or "Apple". Note how the ambiguous word "Apple" did not match the many recalls that mention apples. For FDA reports, `recallDate` is when the firm started the recall and `reportDate` is when FDA published it; the look-back window uses the report date.

### How much does it cost to check for recalls?

This Actor uses **pay-per-event** pricing:

- **$0.006 per matched recall** (one result row per recall that matches your watchlist)
- a tiny Actor start fee of **$0.00005** per run
- plus the small Apify **platform usage** of the run, paid by you. The prefilled example used about **$0.0008** (256 MB, 30-70 seconds, mostly waiting for the agency feeds).

Checking produces no charge when nothing matches, so a weekly watchlist run with no new recalls costs a fraction of a cent. The prefilled example (14 matches) costs about **$0.085**. Use **Max matched recalls** or Apify's maximum cost per run to cap spend.

### Use it through the API, integrations or AI agents

- **API:** `POST https://api.apify.com/v2/acts/ultimatemc~product-recall-matcher/run-sync-get-dataset-items` with your Apify token and the input JSON as the body. Client libraries for JavaScript and Python are on the **API** tab.
- **AI agents (MCP):** add `https://mcp.apify.com?tools=ultimatemc/product-recall-matcher` to Claude, Cursor, ChatGPT or any MCP client, so your agent can ask "has this product been recalled?" as a tool. See [Apify MCP server](https://docs.apify.com/mcp).
- **Chain it after a scraper:** pass a store or marketplace scraper's `datasetId`, or trigger this Actor with a webhook.
- **Automation:** schedule runs and connect webhooks, Make, Zapier, n8n, Slack, email or Google Sheets from Apify Console.

### FAQ

#### Which recalls are covered?

U.S. federal recalls from CPSC (consumer products), FDA enforcement reports for food, drugs and medical devices, and NHTSA vehicle, tire, child-seat and equipment recalls. FDA enforcement reports include recalls that never got a press release.

#### Is a "no match" result proof my product is safe?

No. Feeds lag, product names in recalls vary, and some recalls are written without a brand name or UPC. Treat it as a screen and confirm with the agencies or your supplier.

#### How accurate is the matching?

Exact UPC and model matches are very reliable. Brand matches are reliable when the brand is the recalling firm (confidence 0.95). Mentions inside long descriptions (0.55-0.65) need a quick human check. Raise **Minimum match confidence** to 0.8 for fewer, stronger matches.

#### Do I need API keys?

No. An optional free openFDA key only helps if you run very often.

#### Does it use AI?

No. Matching is deterministic text, UPC and model matching, so results are repeatable and every match shows the exact text that matched.

### Limitations

- U.S. federal feeds only (no state, Health Canada or EU Safety Gate recalls).
- **USDA FSIS** (meat, poultry and egg products) currently refuses automated requests, so it's off by default. If you turn it on and it's refused, the run continues and `SUMMARY` says so; we don't try to get around the block.
- Feed coverage and timing are set by each agency: FDA enforcement reports are often published weeks after a recall starts, and CPSC UPC data is often empty.
- Text matching can produce false positives (a retailer listed as "sold at") and misses (a brand spelled differently). The `matchedTerms` field shows why each row matched.

### Data sources

All public U.S. government data, read live at run time (so it is as current as each agency's feed):

- [CPSC Recalls API](https://www.cpsc.gov/Recalls/CPSC-Recalls-Application-Program-Interface-API-Information) (SaferProducts.gov), U.S. public domain
- [openFDA enforcement reports](https://open.fda.gov/apis/) for food, drugs and devices, public domain (CC0) per openFDA's terms; FDA enforcement reports are typically weekly
- [NHTSA recalls dataset](https://data.transportation.gov/) on data.transportation.gov, U.S. public domain
- [USDA FSIS recall API](https://www.fsis.usda.gov/science-data/developer-resources/recall-api), optional (often blocked for automated clients)

### Data and privacy

Only public government recall data is read. Your watchlist and catalog are used only during the run, and results go only to your own Apify dataset.

### Other tools by Ultimate Foresight

- [Ad Copy Policy Checker for Meta, Google & TikTok](https://apify.com/ultimatemc/ad-copy-policy-checker): checks ad text against Facebook, Instagram, Google Ads and TikTok ad policies before you submit.
- [H-1B Visa Sponsor Checker & Score for Job Listings](https://apify.com/ultimatemc/h1b-visa-sponsor-score): adds Department of Labor H-1B sponsorship history and a 0-100 score to company names or job listings.
- [Chain vs Independent Labeler for Google Maps Leads](https://apify.com/ultimatemc/chain-vs-independent-labeler): labels local businesses as chain, franchise or independent.
- [YouTube Monetization Checker for Scripts & Titles](https://apify.com/ultimatemc/youtube-script-monetization-checker): pre-checks titles, descriptions and scripts for wording that leads to limited or no ads.
- [Etsy & eBay Listing Policy & Banned Item Checker](https://apify.com/ultimatemc/etsy-ebay-listing-policy-checker): pre-checks marketplace listings for prohibited items, counterfeit wording and off-platform contact.
- [Job Scam Detector & Trust Score for Job Postings](https://apify.com/ultimatemc/job-posting-trust-score): scores job postings 0-100 for scam and ghost-job signals.
- [SAM.gov Amendment & Opportunity Change Tracker](https://apify.com/ultimatemc/sam-gov-opportunity-change-detector): shows what changed between versions of a SAM.gov notice: deadlines, set-asides, NAICS and attachments.
- [App Store & Google Play Listing Policy Checker](https://apify.com/ultimatemc/app-store-listing-policy-checker): pre-checks app names, subtitles and descriptions against Apple and Google Play metadata rules.

Got a false match or a missed recall? Open an issue on the **Issues** tab with the recall link and your term, and we'll review it.

# Actor input Schema

## `watchlist` (type: `array`):

One item per line: a brand or company ("Trader Joe's"), a UPC ("0 12345 67890 5") or a model number ("TL1302Z"). The type is detected automatically. The prefill has five brands; replace them with your own.

## `watchItems` (type: `array`):

Objects for more control: {"term": "peanut butter", "type": "brand" | "product" | "keyword" | "retailer" | "upc" | "model", "exclude": \["peanut butter cups"], "label": "SKU 123"}. 'product' and 'keyword' also match plurals; 'retailer' looks at where the product was sold.

## `lookbackDays` (type: `integer`):

How many days of recalls to check, counted back from today (or from Until date). Use 7 on a weekly schedule.

## `sinceDate` (type: `string`):

Start of the window as YYYY-MM-DD. Overrides Look back.

## `untilDate` (type: `string`):

End of the window as YYYY-MM-DD. Default: today.

## `sources` (type: `array`):

Official feeds to check. USDA FSIS (meat, poultry, eggs) is off by default because its firewall currently refuses automated requests; you can turn it on, and if it is refused the run continues and the SUMMARY record says so.

## `minConfidence` (type: `number`):

0-1. 0.95 = the brand is the recalling firm; 0.85 = in the recall title or product name; 0.55-0.65 = only mentioned in the description. Raise to 0.8 for fewer, stronger matches.

## `maxResults` (type: `integer`):

Stop after this many matched recalls (newest first). 0 = no limit.

## `datasetId` (type: `string`):

Apify dataset with your products, for example a store or marketplace scraper's output. Brands (brand, manufacturer, vendor) and UPC/GTIN/EAN fields are added to the watchlist automatically.

## `brandField` (type: `string`):

Field in the dataset that holds the brand, if not brand/manufacturer/vendor.

## `maxDatasetItems` (type: `integer`):

Maximum number of catalog items to read from the dataset.

## `openFdaApiKey` (type: `string`):

Your free openFDA key raises FDA rate limits for very frequent runs. Not needed normally.

## Actor input object example

```json
{
  "watchlist": [
    "Trader Joe's",
    "Costco",
    "Graco",
    "Scotch",
    "Apple"
  ],
  "watchItems": [
    {
      "term": "peanut butter",
      "type": "keyword"
    }
  ],
  "lookbackDays": 180,
  "sources": [
    "cpsc",
    "fda_food",
    "fda_drug",
    "fda_device",
    "nhtsa"
  ],
  "minConfidence": 0.5,
  "maxResults": 25,
  "maxDatasetItems": 5000
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "watchlist": [
        "Trader Joe's",
        "Costco",
        "Graco",
        "Scotch",
        "Apple"
    ],
    "watchItems": [
        {
            "term": "peanut butter",
            "type": "keyword"
        }
    ],
    "lookbackDays": 180,
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimatemc/product-recall-matcher").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "watchlist": [
        "Trader Joe's",
        "Costco",
        "Graco",
        "Scotch",
        "Apple",
    ],
    "watchItems": [{
            "term": "peanut butter",
            "type": "keyword",
        }],
    "lookbackDays": 180,
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("ultimatemc/product-recall-matcher").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "watchlist": [
    "Trader Joe'\''s",
    "Costco",
    "Graco",
    "Scotch",
    "Apple"
  ],
  "watchItems": [
    {
      "term": "peanut butter",
      "type": "keyword"
    }
  ],
  "lookbackDays": 180,
  "maxResults": 25
}' |
apify call ultimatemc/product-recall-matcher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ultimatemc/product-recall-matcher"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cpcBpDfIgTDNBPJEH/builds/4WKNYAJIeCVLhhhXx/openapi.json
