For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
LoginGet a Demo
DocumentationAPI Reference
DocumentationAPI Reference
  • Property Report
    • GETList
    • GETSearch
    • GETSearch Tags
    • GETReports By Tag
    • PATCHUpdate Metadata
  • Property
    • GETSearch
    • GETGet Property
    • POSTComparables
    • POSTPost Property
    • POSTMarket Rents
    • POSTExpense Benchmarks
  • Market
    • POSTMarket Search
    • GETShape Search
  • Dataset
    • POSTDataset Export Async
LogoLogo
LoginGet a Demo
Dataset

Dataset Export Async

POST
https://api.hellodata.ai/dataset/export
POST
/dataset/export
$curl -X POST https://api.hellodata.ai/dataset/export \
> -H "x-api-key: <apiKey>" \
> -H "Content-Type: application/json" \
> -d '{
> "format": "csv",
> "name": "Monthly Rent Report",
> "webhookURL": "https://webhooks.example.com/dataset-export",
> "dataset": {
> "scopes": [
> {
> "column": "lat"
> },
> {
> "column": "lon"
> },
> {
> "column": "asking_rent"
> },
> {
> "column": "number_units"
> }
> ],
> "filters": {
> "and": [
> null
> ]
> }
> }
>}'
1{
2 "queryUUID": "a3f1c9e2-7b4d-4f8a-9c2e-1d2f3b4a5c6d"
3}
Queue a dataset export with a webhook to receive the result asynchronously. This endpoint initiates an asynchronous data export process. The export is processed in the background, and once complete, your webhook will be called with the results. ## Request Flow 1. Submit your export request with dataset query and webhook URL 2. Receive immediate 201 response confirming the export was queued 3. Export is processed asynchronously (may take several minutes for large datasets) 4. Your webhook is called when the export completes ## Webhook Response Format Once the export is complete, your webhook will receive a POST request with this payload: ```typescript { queryUUID: string // Unique identifier for this export request name: string // The name you provided for this export format: 'csv' | 'jsonl' // The format you requested payload: DatasetPayload // The original query payload you submitted gcsBlob: { // Information about the exported file url: string // Signed download URL (valid for 30 days) expires: string // ISO date string when URL expires timeTakenMs: number // Processing time in milliseconds numberRows: number // Number of rows in the exported data } requestedOn: Date // When the export was originally requested completedOn: Date // When the export was completed } ``` ## HMAC Signature Verification To verify the authenticity of webhook calls, compute the HMAC signature of the original request payload using your API key and compare it to the hmacSignature field in the webhook response. ### Node.js Example: ```javascript const crypto = require('crypto'); // Verify webhook authenticity function verifyWebhook(originalPayload, receivedSignature, apiKey) { const hmac = crypto.createHmac('sha256', apiKey); hmac.update(JSON.stringify(originalPayload)); const computedSignature = hmac.digest('hex'); return computedSignature === receivedSignature; } // Usage in your webhook handler app.post('/your-webhook', (req, res) => { const { payload } = req.body; const hmacSignature = req.get('SHA256-HMAC-Signature'); const isValid = verifyWebhook(payload, hmacSignature, 'your-api-key'); if (!isValid) { return res.status(401).send('Unauthorized'); } // Process the webhook... res.status(200).send('OK'); }); ``` ## Error Handling - **400 Bad Request**: Invalid webhook URL (must be HTTPS, no localhost/private IPs) - **403 Forbidden**: Invalid API key or insufficient permissions - If the export fails during processing, your webhook will not be called ## Requirements - Valid API key in `x-api-key` header - QueryBuilder product subscription OR query must include a report tag filter - Webhook URL must be HTTPS and publicly accessible (no localhost/private networks) - Your webhook endpoint should respond with 2xx status to confirm receipt ## Important Notes - The download URL expires in 30 days - ensure you download the file promptly - Large exports may take several minutes to complete - The queryUUID can be used to match requests to responses for tracking - Files are compressed with gzip for efficient transfer
Was this page helpful?
Previous
Built with

Queue a dataset export with a webhook to receive the result asynchronously.

This endpoint initiates an asynchronous data export process. The export is processed in the background, and once complete, your webhook will be called with the results.

Request Flow

  1. Submit your export request with dataset query and webhook URL
  2. Receive immediate 201 response confirming the export was queued
  3. Export is processed asynchronously (may take several minutes for large datasets)
  4. Your webhook is called when the export completes

Webhook Response Format

Once the export is complete, your webhook will receive a POST request with this payload:

1{
2 queryUUID: string // Unique identifier for this export request
3 name: string // The name you provided for this export
4 format: 'csv' | 'jsonl' // The format you requested
5 payload: DatasetPayload // The original query payload you submitted
6 gcsBlob: { // Information about the exported file
7 url: string // Signed download URL (valid for 30 days)
8 expires: string // ISO date string when URL expires
9 timeTakenMs: number // Processing time in milliseconds
10 numberRows: number // Number of rows in the exported data
11 }
12 requestedOn: Date // When the export was originally requested
13 completedOn: Date // When the export was completed
14}

HMAC Signature Verification

To verify the authenticity of webhook calls, compute the HMAC signature of the original request payload using your API key and compare it to the hmacSignature field in the webhook response.

Node.js Example:

1const crypto = require('crypto');
2
3// Verify webhook authenticity
4function verifyWebhook(originalPayload, receivedSignature, apiKey) {
5 const hmac = crypto.createHmac('sha256', apiKey);
6 hmac.update(JSON.stringify(originalPayload));
7 const computedSignature = hmac.digest('hex');
8 return computedSignature === receivedSignature;
9}
10
11// Usage in your webhook handler
12app.post('/your-webhook', (req, res) => {
13 const { payload } = req.body;
14 const hmacSignature = req.get('SHA256-HMAC-Signature');
15 const isValid = verifyWebhook(payload, hmacSignature, 'your-api-key');
16
17 if (!isValid) {
18 return res.status(401).send('Unauthorized');
19 }
20
21 // Process the webhook...
22 res.status(200).send('OK');
23});

Error Handling

  • 400 Bad Request: Invalid webhook URL (must be HTTPS, no localhost/private IPs)
  • 403 Forbidden: Invalid API key or insufficient permissions
  • If the export fails during processing, your webhook will not be called

Requirements

  • Valid API key in x-api-key header
  • QueryBuilder product subscription OR query must include a report tag filter
  • Webhook URL must be HTTPS and publicly accessible (no localhost/private networks)
  • Your webhook endpoint should respond with 2xx status to confirm receipt

Important Notes

  • The download URL expires in 30 days - ensure you download the file promptly
  • Large exports may take several minutes to complete
  • The queryUUID can be used to match requests to responses for tracking
  • Files are compressed with gzip for efficient transfer

Authentication

x-api-keystring
API Key authentication via header

Request

  • Export configuration including dataset query, webhook URL, name, and format
formatenumRequired
Allowed values:
namestringRequired
webhookURLstringRequired
datasetobjectRequired
DatasetPayload defines what columns and filters to request for a dataset export.

Response

Created
queryUUIDstring

Errors

400
Bad Request Error
403
Forbidden Error
422
Unprocessable Entity Error