Compose a field's cross-service chain over strand edges.
EXPERIMENTAL. Walk connected strand edges from one (component, payload, field) start state — upstream toward the fields the start field comes from (the default), or downstream toward the fields it flows to — and return every traversal branch: CONNECTED chains with their terminal group, UNMAPPED_HOP branches where a translated path nothing on the landing side exposes ends the walk visibly, and CYCLE branches where a traversal state repeats on its own path. Every involved component is evaluated at its latest scan; a traversal that would cross a composition contract limit fails as a typed error rather than returning a partial graph.
curl --request GET \
--url https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition \
--header 'X-API-KEY: <api-key>'import requests
url = "https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition', 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://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <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://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"branches": [
{
"kind": "CONNECTED",
"hops": [
{
"edgeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mapping": {
"sourceFieldPath": "<string>",
"destinationFieldPath": "<string>",
"notes": "<string>",
"dataStoreEvidence": [
{
"derivation": "direct",
"projectionLabel": "<string>",
"applicationFieldPath": "<string>"
}
]
},
"matchKind": "exact",
"inputPath": "<string>",
"translatedPath": "<string>",
"sourceComponentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourcePayload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"destinationComponentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"destinationPayload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"landedGroup": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"landedGroupId": "<string>",
"suppressed": true,
"competingMappings": [
{
"sourceFieldPath": "<string>",
"destinationFieldPath": "<string>",
"notes": "<string>",
"dataStoreEvidence": [
{
"derivation": "direct",
"projectionLabel": "<string>",
"applicationFieldPath": "<string>"
}
]
}
],
"competingGroups": [
{
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
}
]
}
],
"terminal": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"group": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"groupId": "<string>",
"fieldPath": "<string>"
},
"edgeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mapping": {
"sourceFieldPath": "<string>",
"destinationFieldPath": "<string>",
"notes": "<string>",
"dataStoreEvidence": [
{
"derivation": "direct",
"projectionLabel": "<string>",
"applicationFieldPath": "<string>"
}
]
},
"translatedPath": "<string>",
"inputPath": "<string>",
"repeatedState": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"fieldPath": "<string>"
}
}
]
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}Authorizations
Path Parameters
UUID of the component the walk starts on.
Query Parameters
The payload_name coordinate of the start payload group on the component.
The field to trace, as a dot-separated path.
Traversal direction. Upstream walks toward the fields the start field comes from; downstream walks toward the fields it flows to.
upstream, downstream Response
Every traversal branch from the start state.
Every branch of walking connected strand edges upstream from one (component, payload, field) start state. Branches are complete — a traversal that would cross a contract limit fails as a typed error rather than returning a partial graph.
Show child attributes
Show child attributes
curl --request GET \
--url https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition \
--header 'X-API-KEY: <api-key>'import requests
url = "https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition', 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://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <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://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{hostname}.gable.ai/v0/experimental/component/{id}/discriminator_composition")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"branches": [
{
"kind": "CONNECTED",
"hops": [
{
"edgeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mapping": {
"sourceFieldPath": "<string>",
"destinationFieldPath": "<string>",
"notes": "<string>",
"dataStoreEvidence": [
{
"derivation": "direct",
"projectionLabel": "<string>",
"applicationFieldPath": "<string>"
}
]
},
"matchKind": "exact",
"inputPath": "<string>",
"translatedPath": "<string>",
"sourceComponentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourcePayload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"destinationComponentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"destinationPayload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"landedGroup": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"landedGroupId": "<string>",
"suppressed": true,
"competingMappings": [
{
"sourceFieldPath": "<string>",
"destinationFieldPath": "<string>",
"notes": "<string>",
"dataStoreEvidence": [
{
"derivation": "direct",
"projectionLabel": "<string>",
"applicationFieldPath": "<string>"
}
]
}
],
"competingGroups": [
{
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
}
]
}
],
"terminal": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"group": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"groupId": "<string>",
"fieldPath": "<string>"
},
"edgeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mapping": {
"sourceFieldPath": "<string>",
"destinationFieldPath": "<string>",
"notes": "<string>",
"dataStoreEvidence": [
{
"derivation": "direct",
"projectionLabel": "<string>",
"applicationFieldPath": "<string>"
}
]
},
"translatedPath": "<string>",
"inputPath": "<string>",
"repeatedState": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payload": {
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"level": "payload",
"ancestors": [
{
"level": "payload",
"coordinates": {}
}
],
"coordinates": {}
},
"fieldPath": "<string>"
}
}
]
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}