cURL
curl --request GET \
--url https://app.teable.ai/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage';
const options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}const http = require('https');
const options = {
method: 'GET',
hostname: 'app.teable.ai',
port: null,
path: '/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();import http.client
conn = http.client.HTTPSConnection("app.teable.ai")
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
conn.request("GET", "/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"targetId": "<string>",
"storage": "default",
"baseId": "<string>",
"task": {
"taskId": "<string>",
"state": "pending",
"baseId": "<string>",
"seedTableId": "<string>",
"changeType": "<string>",
"runId": "<string>",
"originRunIds": [
"<string>"
],
"stageDepth": 123,
"predecessorTaskId": "<string>",
"attempts": 123,
"estimatedComplexity": 123,
"runTotalSteps": 123,
"runCompletedStepsBefore": 123,
"syncMaxLevel": 123,
"seedRecordCount": 123,
"sourceFieldIds": [
"<string>"
],
"affectedFieldIds": [
"<string>"
],
"affectedTableIds": [
"<string>"
],
"sourceChangedAt": "<string>",
"enqueuedAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"failedAt": "<string>",
"durationMs": 123,
"lastError": "<string>",
"steps": [
{
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"level": 123
}
],
"edges": [
{
"fromFieldId": "<string>",
"toFieldId": "<string>",
"fromTableId": "<string>",
"toTableId": "<string>",
"order": 123,
"linkFieldId": "<string>",
"propagationMode": "<string>"
}
]
},
"runChain": [
{
"taskId": "<string>",
"state": "pending",
"baseId": "<string>",
"seedTableId": "<string>",
"changeType": "<string>",
"runId": "<string>",
"originRunIds": [
"<string>"
],
"stageDepth": 123,
"predecessorTaskId": "<string>",
"attempts": 123,
"estimatedComplexity": 123,
"runTotalSteps": 123,
"runCompletedStepsBefore": 123,
"syncMaxLevel": 123,
"seedRecordCount": 123,
"sourceFieldIds": [
"<string>"
],
"affectedFieldIds": [
"<string>"
],
"affectedTableIds": [
"<string>"
],
"sourceChangedAt": "<string>",
"enqueuedAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"failedAt": "<string>",
"durationMs": 123,
"lastError": "<string>",
"steps": [
{
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"level": 123
}
],
"edges": [
{
"fromFieldId": "<string>",
"toFieldId": "<string>",
"fromTableId": "<string>",
"toTableId": "<string>",
"order": 123,
"linkFieldId": "<string>",
"propagationMode": "<string>"
}
]
}
],
"fields": [
{
"fieldId": "<string>",
"fieldName": "<string>",
"fieldType": "<string>",
"isLookup": true,
"tableId": "<string>",
"referencedFieldIds": [
"<string>"
]
}
],
"tables": [
{
"tableId": "<string>",
"tableName": "<string>"
}
],
"summary": {
"sourceChangedAt": "<string>",
"convergedAt": "<string>",
"endToEndMs": 123,
"live": true,
"sourceFieldIds": [
"<string>"
]
},
"baseName": "<string>",
"spaceId": "<string>",
"spaceName": "<string>"
}admin
Get adminobservabilitycomputed outboxtasks lineage
Resolve one computed task’s lineage: trigger source, run chain across the outbox / dead-letter / run-history ledgers, DAG plan (steps + edges), and source-change to converged-write latency
Required token scopes: instance|read
GET
/
admin
/
observability
/
computed-outbox
/
tasks
/
{taskId}
/
lineage
cURL
curl --request GET \
--url https://app.teable.ai/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage';
const options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}const http = require('https');
const options = {
method: 'GET',
hostname: 'app.teable.ai',
port: null,
path: '/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();import http.client
conn = http.client.HTTPSConnection("app.teable.ai")
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
conn.request("GET", "/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.teable.ai/api/admin/observability/computed-outbox/tasks/{taskId}/lineage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"targetId": "<string>",
"storage": "default",
"baseId": "<string>",
"task": {
"taskId": "<string>",
"state": "pending",
"baseId": "<string>",
"seedTableId": "<string>",
"changeType": "<string>",
"runId": "<string>",
"originRunIds": [
"<string>"
],
"stageDepth": 123,
"predecessorTaskId": "<string>",
"attempts": 123,
"estimatedComplexity": 123,
"runTotalSteps": 123,
"runCompletedStepsBefore": 123,
"syncMaxLevel": 123,
"seedRecordCount": 123,
"sourceFieldIds": [
"<string>"
],
"affectedFieldIds": [
"<string>"
],
"affectedTableIds": [
"<string>"
],
"sourceChangedAt": "<string>",
"enqueuedAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"failedAt": "<string>",
"durationMs": 123,
"lastError": "<string>",
"steps": [
{
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"level": 123
}
],
"edges": [
{
"fromFieldId": "<string>",
"toFieldId": "<string>",
"fromTableId": "<string>",
"toTableId": "<string>",
"order": 123,
"linkFieldId": "<string>",
"propagationMode": "<string>"
}
]
},
"runChain": [
{
"taskId": "<string>",
"state": "pending",
"baseId": "<string>",
"seedTableId": "<string>",
"changeType": "<string>",
"runId": "<string>",
"originRunIds": [
"<string>"
],
"stageDepth": 123,
"predecessorTaskId": "<string>",
"attempts": 123,
"estimatedComplexity": 123,
"runTotalSteps": 123,
"runCompletedStepsBefore": 123,
"syncMaxLevel": 123,
"seedRecordCount": 123,
"sourceFieldIds": [
"<string>"
],
"affectedFieldIds": [
"<string>"
],
"affectedTableIds": [
"<string>"
],
"sourceChangedAt": "<string>",
"enqueuedAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"failedAt": "<string>",
"durationMs": 123,
"lastError": "<string>",
"steps": [
{
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"level": 123
}
],
"edges": [
{
"fromFieldId": "<string>",
"toFieldId": "<string>",
"fromTableId": "<string>",
"toTableId": "<string>",
"order": 123,
"linkFieldId": "<string>",
"propagationMode": "<string>"
}
]
}
],
"fields": [
{
"fieldId": "<string>",
"fieldName": "<string>",
"fieldType": "<string>",
"isLookup": true,
"tableId": "<string>",
"referencedFieldIds": [
"<string>"
]
}
],
"tables": [
{
"tableId": "<string>",
"tableName": "<string>"
}
],
"summary": {
"sourceChangedAt": "<string>",
"convergedAt": "<string>",
"endToEndMs": 123,
"live": true,
"sourceFieldIds": [
"<string>"
]
},
"baseName": "<string>",
"spaceId": "<string>",
"spaceName": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Required string length:
1 - 128Response
200 - application/json
Lineage for the task and its run chain
Available options:
default, byodb Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Last modified on September 15, 2026
Was this page helpful?

