/extract/async, /agent/async, or /crawl, you have three flexible options for receiving your results. Choose the method that best fits your infrastructure and workflow.
Polling
Pull results on-demand using task IDs
Callbacks
Receive push notifications when tasks complete
Cloud Delivery
Automatic delivery to your S3 or GCS bucket
Option 1: Polling (Pull)
The simplest approach - submit your async request, receive a task ID, and poll for results when ready.Submit async request
Send a request to the async endpoint. You’ll receive a task or crawl ID to track your request.
- Extract
- Agent
- Crawl
Polling endpoints reference
| API | Submit | Check Status | Get Results |
|---|---|---|---|
| Extract | POST /v1/extract/async | GET /v1/tasks/{task_id} | GET /v1/tasks/{task_id}/results |
| Agent | POST /v1/agent/async | GET /v1/tasks/{task_id} | GET /v1/tasks/{task_id}/results |
| Crawl | POST /v1/crawl | GET /v1/crawl/{crawl_id} | GET /v1/tasks/{task_id}/results (per page) |
Option 2: Webhooks (Push)
Get notified automatically when your tasks complete. Perfect for event-driven architectures.Submit request with callback URL
Include
callback_url (or callback object for crawl) in your async request.- Extract
- Agent
- Crawl
Webhook configuration options
| API | Parameter | Type | Description |
|---|---|---|---|
| Extract | callback_url | string | Your callback URL |
| Agent | params.callback_url | string | Your callback URL |
| Crawl | callback.url | string | Your callback URL |
callback.headers | object | Custom headers for authentication | |
callback.metadata | object | Custom data included in payload | |
callback.events | array | Filter events: started, page, completed, failed |
Option 3: Cloud Delivery
Automatically deliver results directly to your cloud storage bucket.Amazon S3
Deliver to any S3 bucket in your AWS account
Google Cloud Storage
Deliver to any GCS bucket in your GCP project
Configure bucket permissions (one-time)
Grant Nimble’s service account write access to your bucket.
- Amazon S3
- Google Cloud Storage
Nimble Service User ARN:Add this bucket policy:
KMS-Encrypted Buckets
KMS-Encrypted Buckets
For KMS-encrypted buckets, add this to your KMS key policy:
Cloud delivery parameters
| Parameter | Type | Description |
|---|---|---|
storage_type | s3 | gs | Cloud provider |
storage_url | string | Bucket path with prefix (e.g., s3://bucket/prefix/) |
storage_compress | boolean | Enable GZIP compression |
storage_object_name | string | Custom filename (default: task ID) |
Comparison
| Feature | Polling | Webhooks | Cloud Delivery |
|---|---|---|---|
| Setup complexity | None | Requires endpoint | Requires bucket setup |
| Real-time notifications | No (you poll) | Yes | No |
| Automatic storage | No | No | Yes |
| Best for | Simple integrations, testing | Event-driven apps | Data pipelines ETLs |
| Infrastructure needed | None | Web server | Cloud storage bucket |
Combining methods
You can combine delivery methods for redundancy:Best Practices
Polling
Polling
- Check status first - Use
/tasks/{id}before fetching full results - Use reasonable intervals - Poll every 2-5 seconds, not continuously
- Handle rate limits - Implement retry logic for 429 responses
- Set timeouts - Most tasks complete within seconds to minutes
Webhooks
Webhooks
- Use HTTPS - Always use secure endpoints
- Verify authenticity - Use custom headers for authentication
- Respond quickly - Return 200 OK immediately, process async
- Handle retries - Nimble retries failed deliveries
Cloud Delivery
Cloud Delivery
- Use prefixes - Organize by date, project, or type
- Enable compression - Use
storage_compress: truefor large files - Set lifecycle policies - Auto-delete old files to manage costs
- Use custom names -
storage_object_namefor meaningful filenames

