Generate and monitor asynchronous report tasks for campaign analytics
Report Tasks
Generate asynchronous reports for campaign performance, creative analytics, and advertiser metrics through the report domain.
Workflow
- List Definitions → Find available report types
- Generate Task → Submit report request with parameters
- Poll Status → Monitor task progress
- Download → Retrieve completed report data
List Report Definitions
query GetReportDefinitions($filter: JSON) {
report {
report_defs(filter: $filter) {
edges {
report_definition_name
report_definition_description
report_definition_type
report_definition_system
report_definition_body
}
total_count
}
}
}Generate Report
mutation GenerateReport($task: ReportTaskInput!) {
report {
generate_report(task: $task) {
task_id
task_status
task_start_time
task_end_time
}
}
}Variables:
sjach:TODO te metryki sa nie poprawne - trzeba je wziac wpierw z definicji raportu pobrać 0 nie są scisle typowane w API
{
"task": {
"report_definition_name": "campaign_performance",
"report_name": "Campaign Performance Report - January 2025",
"attributes": {
"date_range": {
"kind": "FIXED",
"date_from": "2025-01-01",
"date_to": "2025-01-31"
},
"filters": [
{
"field": "lineitem_type",
"operator": "=",
"value": "DISPLAY"
}
],
"split": ["date", "lineitem_id"],
"metric": ["impressions", "clicks", "spend", "ctr"]
}
}
}Check Status
query GetTaskStatus($taskId: Int!) {
report {
report_task(task_id: $taskId) {
task_id
task_status
task_progress
task_created_at
task_completed_at
task_download_url
task_error_message
task_result_count
}
}
}Complete Example (JavaScript)
async function generateAndDownloadReport(reportParams) {
// 1. Generate report task
const generateQuery = `
mutation GenerateReport($input: ReportTaskAttrInput!) {
report {
generate_report(report_task_attr: $input) {
task_id
task_status
}
}
}
`;
const generateResponse = await fetch(API_URL, {
method: 'POST',
headers: AUTH_HEADERS,
body: JSON.stringify({
query: generateQuery,
variables: { input: reportParams }
})
});
const generateData = await generateResponse.json();
const taskId = generateData.data.report.generate_report.task_id;
console.log('Report task created:', taskId);
// 2. Poll for completion
const statusQuery = `
query GetTaskStatus($taskId: Int!) {
report {
report_task(task_id: $taskId) {
task_id
task_status
task_progress
task_download_url
task_error_message
}
}
}
`;
let completed = false;
let attempts = 0;
const maxAttempts = 60;
while (!completed && attempts < maxAttempts) {
await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 5 seconds
const statusResponse = await fetch(API_URL, {
method: 'POST',
headers: AUTH_HEADERS,
body: JSON.stringify({
query: statusQuery,
variables: { taskId }
})
});
const statusData = await statusResponse.json();
const task = statusData.data.report.report_task;
console.log(`Status: ${task.task_status}, Progress: ${task.task_progress}%`);
if (task.task_status === 'COMPLETED') {
console.log('Report ready! Downloading...');
return task.task_download_url;
}
if (task.task_status === 'FAILED') {
throw new Error(`Report failed: ${task.task_error_message}`);
}
attempts++;
}
throw new Error('Report generation timeout');
}
// Usage
const downloadUrl = await generateAndDownloadReport({
report_def_id: 1,
date_from: "2025-01-01",
date_to: "2025-01-31",
filters: {
lineitem_type: {"=": "DISPLAY"}
}
});
console.log('Download report from:', downloadUrl);Next Steps
- Inventory Management - Configure ad units
- Delivery APIs - Manage campaigns
