Add and remove field tags on a component.
Add and remove tags on fields of one component. Each applied item appends one immutable event, which is both the stored state and the audit trail; reads fold those events per request.
curl --request POST \
--url https://{hostname}.gable.ai/v0/component/{id}/field-tags \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"assignments": [
{
"tag_id": "<string>",
"target": {
"boundary_coordinates": {
"payload_name": null,
"signature_name": "OrdersController.create"
},
"field_path": "<string>"
}
}
],
"version_id": "<string>"
}
'import requests
url = "https://{hostname}.gable.ai/v0/component/{id}/field-tags"
payload = {
"assignments": [
{
"tag_id": "<string>",
"target": {
"boundary_coordinates": {
"payload_name": None,
"signature_name": "OrdersController.create"
},
"field_path": "<string>"
}
}
],
"version_id": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assignments: [
{
tag_id: '<string>',
target: {
boundary_coordinates: {payload_name: null, signature_name: 'OrdersController.create'},
field_path: '<string>'
}
}
],
version_id: '<string>'
})
};
fetch('https://{hostname}.gable.ai/v0/component/{id}/field-tags', 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/component/{id}/field-tags",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assignments' => [
[
'tag_id' => '<string>',
'target' => [
'boundary_coordinates' => [
'payload_name' => null,
'signature_name' => 'OrdersController.create'
],
'field_path' => '<string>'
]
]
],
'version_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{hostname}.gable.ai/v0/component/{id}/field-tags"
payload := strings.NewReader("{\n \"assignments\": [\n {\n \"tag_id\": \"<string>\",\n \"target\": {\n \"boundary_coordinates\": {\n \"payload_name\": null,\n \"signature_name\": \"OrdersController.create\"\n },\n \"field_path\": \"<string>\"\n }\n }\n ],\n \"version_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{hostname}.gable.ai/v0/component/{id}/field-tags")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"assignments\": [\n {\n \"tag_id\": \"<string>\",\n \"target\": {\n \"boundary_coordinates\": {\n \"payload_name\": null,\n \"signature_name\": \"OrdersController.create\"\n },\n \"field_path\": \"<string>\"\n }\n }\n ],\n \"version_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{hostname}.gable.ai/v0/component/{id}/field-tags")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assignments\": [\n {\n \"tag_id\": \"<string>\",\n \"target\": {\n \"boundary_coordinates\": {\n \"payload_name\": null,\n \"signature_name\": \"OrdersController.create\"\n },\n \"field_path\": \"<string>\"\n }\n }\n ],\n \"version_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"target": {
"direction": "ingress",
"boundary_coordinates": {
"payload_name": null,
"signature_name": "OrdersController.create"
},
"field_path": "<string>"
},
"tag_id": "<string>",
"status": "APPLIED"
}
]
}{
"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 whose fields are being tagged.
Body
Tag mutations for fields of one component. Items apply independently and report their own outcome; nothing is atomic across items. Two items sharing a tag_id and address are rejected with 400 rather than resolved last wins.
More than 500 is rejected with 400 rather than partly applied.
1 - 500 elementsShow child attributes
Show child attributes
The component version addresses resolve against, and whose commit resolves the appended events' EffectiveSince* fields. Defaults to the newest version.
Response
Per item outcomes, in request order. Item level refusals are reported here rather than as an error status, so a partly applied batch stays legible per address. A batch is not a transaction: one bad address must not reject the other 499.
Per item outcomes for a bulk tag mutation. The status is 200 whenever the body itself was valid, because each item carries its own outcome.
One entry per requested mutation, in request order.
Show child attributes
Show child attributes
curl --request POST \
--url https://{hostname}.gable.ai/v0/component/{id}/field-tags \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"assignments": [
{
"tag_id": "<string>",
"target": {
"boundary_coordinates": {
"payload_name": null,
"signature_name": "OrdersController.create"
},
"field_path": "<string>"
}
}
],
"version_id": "<string>"
}
'import requests
url = "https://{hostname}.gable.ai/v0/component/{id}/field-tags"
payload = {
"assignments": [
{
"tag_id": "<string>",
"target": {
"boundary_coordinates": {
"payload_name": None,
"signature_name": "OrdersController.create"
},
"field_path": "<string>"
}
}
],
"version_id": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assignments: [
{
tag_id: '<string>',
target: {
boundary_coordinates: {payload_name: null, signature_name: 'OrdersController.create'},
field_path: '<string>'
}
}
],
version_id: '<string>'
})
};
fetch('https://{hostname}.gable.ai/v0/component/{id}/field-tags', 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/component/{id}/field-tags",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assignments' => [
[
'tag_id' => '<string>',
'target' => [
'boundary_coordinates' => [
'payload_name' => null,
'signature_name' => 'OrdersController.create'
],
'field_path' => '<string>'
]
]
],
'version_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{hostname}.gable.ai/v0/component/{id}/field-tags"
payload := strings.NewReader("{\n \"assignments\": [\n {\n \"tag_id\": \"<string>\",\n \"target\": {\n \"boundary_coordinates\": {\n \"payload_name\": null,\n \"signature_name\": \"OrdersController.create\"\n },\n \"field_path\": \"<string>\"\n }\n }\n ],\n \"version_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{hostname}.gable.ai/v0/component/{id}/field-tags")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"assignments\": [\n {\n \"tag_id\": \"<string>\",\n \"target\": {\n \"boundary_coordinates\": {\n \"payload_name\": null,\n \"signature_name\": \"OrdersController.create\"\n },\n \"field_path\": \"<string>\"\n }\n }\n ],\n \"version_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{hostname}.gable.ai/v0/component/{id}/field-tags")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assignments\": [\n {\n \"tag_id\": \"<string>\",\n \"target\": {\n \"boundary_coordinates\": {\n \"payload_name\": null,\n \"signature_name\": \"OrdersController.create\"\n },\n \"field_path\": \"<string>\"\n }\n }\n ],\n \"version_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"target": {
"direction": "ingress",
"boundary_coordinates": {
"payload_name": null,
"signature_name": "OrdersController.create"
},
"field_path": "<string>"
},
"tag_id": "<string>",
"status": "APPLIED"
}
]
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}{
"message": "<string>",
"id": 123,
"title": "<string>"
}