Async unified Firecrawl client (v2 by default, v1 under ``.v1``).
| 333 | ) |
| 334 | |
| 335 | class AsyncFirecrawl: |
| 336 | """Async unified Firecrawl client (v2 by default, v1 under ``.v1``).""" |
| 337 | |
| 338 | def __init__( |
| 339 | self, |
| 340 | api_key: str = None, |
| 341 | api_url: str = "https://api.firecrawl.dev", |
| 342 | timeout: float = None, |
| 343 | max_retries: int = 3, |
| 344 | backoff_factor: float = 0.5, |
| 345 | ): |
| 346 | self.api_key = api_key |
| 347 | self.api_url = api_url |
| 348 | |
| 349 | # Initialize version-specific clients |
| 350 | self._v1_client = AsyncV1FirecrawlApp(api_key=api_key, api_url=api_url) if AsyncV1FirecrawlApp else None |
| 351 | self._v2_client = AsyncFirecrawlClient( |
| 352 | api_key=api_key, |
| 353 | api_url=api_url, |
| 354 | timeout=timeout, |
| 355 | max_retries=max_retries, |
| 356 | backoff_factor=backoff_factor, |
| 357 | ) if AsyncFirecrawlClient else None |
| 358 | |
| 359 | # Create version-specific proxies |
| 360 | self.v1 = AsyncV1Proxy(self._v1_client) if self._v1_client else None |
| 361 | self.v2 = AsyncV2Proxy(self._v2_client) |
| 362 | |
| 363 | # Expose v2 async surface directly on the top-level client for ergonomic access |
| 364 | # Keep method names aligned with the sync client |
| 365 | self.scrape = self._v2_client.scrape |
| 366 | self.interact = self._v2_client.interact |
| 367 | self.stop_interaction = self._v2_client.stop_interaction |
| 368 | self.stop_interactive_browser = self._v2_client.stop_interactive_browser |
| 369 | self.scrape_execute = self.interact |
| 370 | self.delete_scrape_browser = self.stop_interaction |
| 371 | self.parse = self._v2_client.parse |
| 372 | self.search = self._v2_client.search |
| 373 | self.map = self._v2_client.map |
| 374 | self.create_monitor = self._v2_client.create_monitor |
| 375 | self.list_monitors = self._v2_client.list_monitors |
| 376 | self.get_monitor = self._v2_client.get_monitor |
| 377 | self.update_monitor = self._v2_client.update_monitor |
| 378 | self.delete_monitor = self._v2_client.delete_monitor |
| 379 | self.run_monitor = self._v2_client.run_monitor |
| 380 | self.list_monitor_checks = self._v2_client.list_monitor_checks |
| 381 | self.get_monitor_check = self._v2_client.get_monitor_check |
| 382 | |
| 383 | self.start_crawl = self._v2_client.start_crawl |
| 384 | self.get_crawl_status = self._v2_client.get_crawl_status |
| 385 | self.get_crawl_status_page = self._v2_client.get_crawl_status_page |
| 386 | self.cancel_crawl = self._v2_client.cancel_crawl |
| 387 | self.crawl = self._v2_client.crawl |
| 388 | self.get_crawl_errors = self._v2_client.get_crawl_errors |
| 389 | self.active_crawls = self._v2_client.active_crawls |
| 390 | self.crawl_params_preview = self._v2_client.crawl_params_preview |
| 391 | |
| 392 | self.start_batch_scrape = self._v2_client.start_batch_scrape |
no outgoing calls
searching dependent graphs…