curl --request POST \
--url https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"completed_date": "<string>",
"display_name": "<string>",
"download_uri": "<string>",
"formats": [
"CSV"
],
"name": "<string>",
"report_id": "<string>",
"report_type": "<string>",
"tags": [
"<string>"
]
}
]Generate missing reports for a schedule
Runs a scheduled report runner for past periods that have no report yet, and returns the reports it started. A period that already has a report is left alone, so this is safe to repeat.
The scheduler itself only ever fills the most recently completed period, so a period that was never run, or whose report was deleted after a newer one existed, stays empty until this operation is called. Each generated report runs against the data available now, not the data that existed when the period closed.
Periods are filled most recent first. Use limit to bound how many reports are started in one call, and poll GET /v6/report-runners/{reportRunnerId}/reports for their status.
curl --request POST \
--url https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"completed_date": "<string>",
"display_name": "<string>",
"download_uri": "<string>",
"formats": [
"CSV"
],
"name": "<string>",
"report_id": "<string>",
"report_type": "<string>",
"tags": [
"<string>"
]
}
]Authorizations
Path Parameters
The Extole unique report runner identifier.
Query Parameters
Restrict generation to periods ending at or after this date. Omit to consider every period since the schedule started. RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
Maximum number of reports to start. Defaults to 1 when slot is omitted, and to unlimited when slot is supplied.
Response
The reports that were started, one per period that had none. Empty when every period already has a report.
