Export
Check for updates
Returns only entities that have changed since the given timestamp. Junction tables are always returned in full so you can diff deletions locally. Use the exported_at value from your last export as the updated_since parameter.
/api/v2/export?updated_since=:timestamp
Authentication
Requires Bearer token in the Authorization header.
Query Parameters
updated_since
string
required
ISO 8601 timestamp from your last export's meta.exported_at value
Response
meta
object
Export metadata with type set to 'delta' and an updated_since field
domains
array
Domains updated since the given timestamp
disciplines
array
Disciplines updated since the given timestamp
sub_disciplines
array
Sub-disciplines updated since the given timestamp
topics
array
Topics updated since the given timestamp
domain_disciplines
array
All domain-discipline relationships (full set for diffing)
discipline_sub_disciplines
array
All discipline-sub-discipline relationships (full set)
sub_discipline_topics
array
All sub-discipline-topic relationships (full set)
curl -X GET "https://macademiatree.com/api/v2/export?updated_since=:timestamp" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"import requests
response = requests.get(
"https://macademiatree.com/api/v2/export?updated_since=:timestamp",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
data = response.json()const response = await fetch("https://macademiatree.com/api/v2/export?updated_since=:timestamp", {
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
});
const data = await response.json();$ch = curl_init("https://macademiatree.com/api/v2/export?updated_since=:timestamp");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_API_KEY"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);req, _ := http.NewRequest("GET", "https://macademiatree.com/api/v2/export?updated_since=:timestamp", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://macademiatree.com/api/v2/export?updated_since=:timestamp"))
.header("Authorization", "Bearer YOUR_API_KEY")
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());require "net/http"
require "json"
uri = URI("https://macademiatree.com/api/v2/export?updated_since=:timestamp")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
data = JSON.parse(response.body){
"meta": {
"schema_version": "1.0",
"exported_at": "2026-03-23T12:00:00Z",
"type": "delta",
"updated_since": "2026-03-22T00:00:00Z",
"counts": {
"domains": 8,
"disciplines": 95,
"sub_disciplines": 420,
"topics": 3200,
"domain_disciplines": 110,
"discipline_sub_disciplines": 480,
"sub_discipline_topics": 4100
}
},
"domains": [],
"disciplines": [],
"sub_disciplines": [
{
"id": "...",
"name": "Quantum Computing",
"slug": "quantum-computing",
"description": "Computation using quantum phenomena",
"source_updated_at": "2026-03-22T15:30:00Z"
}
],
"topics": [],
"domain_disciplines": [
{
"domain_id": "...",
"discipline_id": "..."
}
],
"discipline_sub_disciplines": [
"..."
],
"sub_discipline_topics": [
"..."
]
}{
"error": "Invalid or missing API key"
}