{
  "openapi": "3.0.1",
  "info": {
    "title": "FDA Complete Response Letter Monitor & API",
    "description": "Search and monitor FDA Complete Response Letters (CRLs) by company or NDA/BLA. Get structured letter text, provenance and typed new-letter alerts from the official openFDA API. A source outage is never reported as no letters.",
    "version": "0.1",
    "x-build-id": "yQQUfT4gdRjYYZfi9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automa-flow~fda-complete-response-letter-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automa-flow-fda-complete-response-letter-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/automa-flow~fda-complete-response-letter-monitor/runs": {
      "post": {
        "operationId": "runs-sync-automa-flow-fda-complete-response-letter-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/automa-flow~fda-complete-response-letter-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-automa-flow-fda-complete-response-letter-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "monitor",
              "search"
            ],
            "type": "string",
            "description": "monitor watches the supplied companies and application numbers against last-good state. search returns matching archive letters without writing monitoring state.",
            "default": "monitor"
          },
          "monitorKey": {
            "title": "Monitor key",
            "maxLength": 64,
            "type": "string",
            "description": "Stable name for this watchlist's last-good state. Independent keys keep separate baselines. 1-64 letters, digits, dots, underscores or hyphens.",
            "default": "default"
          },
          "applications": {
            "title": "NDA / BLA application numbers",
            "maxItems": 500,
            "type": "array",
            "description": "Exact application numbers to watch or search, for example NDA 210852 or BLA 761215. Type plus digits are required. A watch for NDA 210852 also matches NDA 210852/Original 1. Bare numbers are rejected. Maximum 500.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          "companies": {
            "title": "Company names",
            "maxItems": 200,
            "type": "array",
            "description": "Sponsor names to watch or search. Matching is case-insensitive after punctuation is stripped; Amgen Inc. and Amgen, Inc. match each other. There is no fuzzy or substring match. Maximum 200.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            }
          },
          "filters": {
            "title": "Archive filters",
            "type": "object",
            "description": "Optional AND filters applied after company/application matching. Empty lists are ignored. Dates are letter issuance dates (YYYY-MM-DD), not the date FDA added the letter to the API.",
            "properties": {
              "letterTypes": {
                "title": "Letter types",
                "type": "array",
                "description": "For example COMPLETE RESPONSE. Unknown values are allowed and matched exactly, ignoring case.",
                "editor": "stringList",
                "items": {
                  "type": "string",
                  "maxLength": 128
                }
              },
              "approvalStatuses": {
                "title": "Approval statuses",
                "type": "array",
                "description": "openFDA currently publishes Approved and Unapproved.",
                "editor": "stringList",
                "items": {
                  "type": "string",
                  "maxLength": 64
                }
              },
              "dateFrom": {
                "title": "Letter date from",
                "type": "string",
                "description": "Inclusive issuance date, YYYY-MM-DD.",
                "editor": "textfield",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "dateTo": {
                "title": "Letter date to",
                "type": "string",
                "description": "Inclusive issuance date, YYYY-MM-DD.",
                "editor": "textfield",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "company": {
                "title": "Company filter",
                "type": "string",
                "description": "Additional exact normalized company filter for search mode.",
                "editor": "textfield",
                "maxLength": 256
              },
              "applicationNumber": {
                "title": "Application filter",
                "type": "string",
                "description": "Additional application-number filter for search mode.",
                "editor": "textfield",
                "maxLength": 64
              }
            },
            "additionalProperties": false
          },
          "maxResults": {
            "title": "Maximum letters (search mode)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Caps delivered archive rows in search mode. Monitor mode always evaluates the current official archive (hundreds of letters) so a watch cannot miss a letter. Minimum 1, maximum 1000.",
            "default": 100
          },
          "changesOnly": {
            "title": "Changes only",
            "type": "boolean",
            "description": "Monitor mode: after the first successful run, omit unchanged letters. The first run always publishes BASELINE rows so the default Dataset is never empty. Unchanged later runs still write one TARGET row per watch so billing and status stay explicit.",
            "default": true
          },
          "openfdaApiKey": {
            "title": "openFDA API key",
            "type": "string",
            "description": "Optional. Anonymous access is enough for normal Actor use. A free key from open.fda.gov raises the daily cap. The key is never logged or written to the Dataset."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}