cURL
curl --request POST \
--url 'https://api.edgeful.com/v1/custom-reports' \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}'import requests
url = "https://api.edgeful.com/v1/custom-reports"
headers = {"Authorization": "Bearer <api-key>"}
payload = {'conversation_id': '5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11', 'message_id': 'a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60', 'name': 'NQ gap fills by weekday'}
response = requests.post(url, headers=headers, json=payload)
print(response.json())const url = "https://api.edgeful.com/v1/custom-reports";
const options = {
method: "POST",
headers: { Authorization: "Bearer <api-key>", "Content-Type": "application/json" },
body: JSON.stringify({"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}),
};
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");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>", "Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}');
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", strings.NewReader(`{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}`))
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"))
.header("Authorization", "Bearer <api-key>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\"conversation_id\": \"5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11\", \"message_id\": \"a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60\", \"name\": \"NQ gap fills by weekday\"}"))
.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")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <api-key>"
request["Content-Type"] = "application/json"
request.body = '{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.body{
"definition_id": "<string>",
"name": "<string>",
"status": "<string>",
"methodology": "<unknown>",
"assumptions": "<unknown>",
"origin": "<string>",
"truncated": true
}custom reports
save custom report
publish a reviewed, successful builder draft as a saved custom report, labeled built via API, and return its definition_id. the conversation_id and message_id come from a build: building and revising stay in Claude over MCP and in Edgeful AI. this changes your account; requires the key’s write permission.
POST
/
v1
/
custom-reports
cURL
curl --request POST \
--url 'https://api.edgeful.com/v1/custom-reports' \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}'import requests
url = "https://api.edgeful.com/v1/custom-reports"
headers = {"Authorization": "Bearer <api-key>"}
payload = {'conversation_id': '5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11', 'message_id': 'a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60', 'name': 'NQ gap fills by weekday'}
response = requests.post(url, headers=headers, json=payload)
print(response.json())const url = "https://api.edgeful.com/v1/custom-reports";
const options = {
method: "POST",
headers: { Authorization: "Bearer <api-key>", "Content-Type": "application/json" },
body: JSON.stringify({"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}),
};
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");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer <api-key>", "Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}');
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", strings.NewReader(`{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}`))
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"))
.header("Authorization", "Bearer <api-key>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\"conversation_id\": \"5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11\", \"message_id\": \"a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60\", \"name\": \"NQ gap fills by weekday\"}"))
.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")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <api-key>"
request["Content-Type"] = "application/json"
request.body = '{"conversation_id": "5b0c8f7e-2f7a-4f43-9d39-0f6f0c8d2a11", "message_id": "a3e1f2d4-6c5b-4e7a-8f90-1b2c3d4e5f60", "name": "NQ gap fills by weekday"}'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.body{
"definition_id": "<string>",
"name": "<string>",
"status": "<string>",
"methodology": "<unknown>",
"assumptions": "<unknown>",
"origin": "<string>",
"truncated": true
}Authorizations
Send your Edgeful API key in the Authorization header as Bearer <api-key> (for example, Bearer ef_live_<random>).
Body
application/json
Response
Successful Response
saved custom report id.
report name.
saved.
the methodology the builder recorded.
the assumptions the builder recorded.
api for a report saved through the API, else app.
true when a long methodology or assumptions list was shortened.
Was this page helpful?