curl --request POST \
--url 'https://api.edgeful.com/v1/custom-reports/<definition_id>/runs' \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}'import requests
url = "https://api.edgeful.com/v1/custom-reports/<definition_id>/runs"
headers = {"Authorization": "Bearer <api-key>"}
payload = {'controls': {'ticker': 'NQ', 'start_date': '2025-10-01', 'end_date': '2026-09-30'}}
response = requests.post(url, headers=headers, json=payload)
print(response.json())const url = "https://api.edgeful.com/v1/custom-reports/<definition_id>/runs";
const options = {
method: "POST",
headers: { Authorization: "Bearer <api-key>", "Content-Type": "application/json" },
body: JSON.stringify({"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}),
};
const response = await fetch(url, options);
const data = await response.json();
console.log(data);<?php
$ch = curl_init("https://api.edgeful.com/v1/custom-reports/<definition_id>/runs");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>", "Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
req, _ := http.NewRequest("POST", "https://api.edgeful.com/v1/custom-reports/<definition_id>/runs", strings.NewReader(`{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}`))
req.Header.Set("Authorization", "Bearer <api-key>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.edgeful.com/v1/custom-reports/<definition_id>/runs"))
.header("Authorization", "Bearer <api-key>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\"controls\": {\"ticker\": \"NQ\", \"start_date\": \"2025-10-01\", \"end_date\": \"2026-09-30\"}}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());require "net/http"
require "uri"
uri = URI("https://api.edgeful.com/v1/custom-reports/<definition_id>/runs")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <api-key>"
request["Content-Type"] = "application/json"
request.body = '{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.bodyrun custom report
run a saved custom report’s frozen code, on its saved inputs or another ticker, session or date range; market and granularity stay locked. no AI credits; an uncached run uses your run allowance and a run slot. a result already computed for the same inputs and completed data comes back at once with 200 and every row. otherwise the run starts and answers 202 with status running and its run_id: read it with get custom report run after poll_after_seconds. requires the key’s write permission.
curl --request POST \
--url 'https://api.edgeful.com/v1/custom-reports/<definition_id>/runs' \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}'import requests
url = "https://api.edgeful.com/v1/custom-reports/<definition_id>/runs"
headers = {"Authorization": "Bearer <api-key>"}
payload = {'controls': {'ticker': 'NQ', 'start_date': '2025-10-01', 'end_date': '2026-09-30'}}
response = requests.post(url, headers=headers, json=payload)
print(response.json())const url = "https://api.edgeful.com/v1/custom-reports/<definition_id>/runs";
const options = {
method: "POST",
headers: { Authorization: "Bearer <api-key>", "Content-Type": "application/json" },
body: JSON.stringify({"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}),
};
const response = await fetch(url, options);
const data = await response.json();
console.log(data);<?php
$ch = curl_init("https://api.edgeful.com/v1/custom-reports/<definition_id>/runs");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>", "Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
req, _ := http.NewRequest("POST", "https://api.edgeful.com/v1/custom-reports/<definition_id>/runs", strings.NewReader(`{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}`))
req.Header.Set("Authorization", "Bearer <api-key>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.edgeful.com/v1/custom-reports/<definition_id>/runs"))
.header("Authorization", "Bearer <api-key>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\"controls\": {\"ticker\": \"NQ\", \"start_date\": \"2025-10-01\", \"end_date\": \"2026-09-30\"}}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());require "net/http"
require "uri"
uri = URI("https://api.edgeful.com/v1/custom-reports/<definition_id>/runs")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <api-key>"
request["Content-Type"] = "application/json"
request.body = '{"controls": {"ticker": "NQ", "start_date": "2025-10-01", "end_date": "2026-09-30"}}'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.bodyAuthorizations
Send your Edgeful API key in the Authorization header as Bearer <api-key> (for example, Bearer ef_live_<random>).
Path Parameters
the saved custom report's id, from the list.
Body
Response
Successful Response
running, the run's outcome such as succeeded or failed, or no_result when the report has no successful run.
saved custom report id.
the run that produced the result.
a note about the run.
the inputs the run actually used.
the last date the data covers.
when the run finished.
whether a failed run may be retried.
seconds to wait before retrying.
while running: seconds to wait before reading the run again.
where to refine the report.
the result's summary values.
the result's rows, every one the run stored.
rows in the result.
true when the response does not carry every row.
units per column.
what a row represents.
the row grain.
presentation hints.
the report in Edgeful.
Was this page helpful?