Validate existing rows and create a foreign key to matching scalar fields in the same database. The target requires an active unconditional unique rule. Any NULL in the local tuple skips validation. Referenced values cannot be changed or deleted while in use.
curl --request POST \
--url http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"expectedSchemaVersion": 1,
"fieldIds": [
"01K6J7B8000000000000000000"
],
"referencedTableId": "01K6J7B8000000000000000000",
"referencedRuleId": "01K6J7B8000000000000000000",
"expectedReferencedSchemaVersion": 1
}
'import requests
url = "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys"
payload = {
"expectedSchemaVersion": 1,
"fieldIds": ["01K6J7B8000000000000000000"],
"referencedTableId": "01K6J7B8000000000000000000",
"referencedRuleId": "01K6J7B8000000000000000000",
"expectedReferencedSchemaVersion": 1
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
expectedSchemaVersion: 1,
fieldIds: ['01K6J7B8000000000000000000'],
referencedTableId: '01K6J7B8000000000000000000',
referencedRuleId: '01K6J7B8000000000000000000',
expectedReferencedSchemaVersion: 1
})
};
fetch('http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4310",
CURLOPT_URL => "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys",
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([
'expectedSchemaVersion' => 1,
'fieldIds' => [
'01K6J7B8000000000000000000'
],
'referencedTableId' => '01K6J7B8000000000000000000',
'referencedRuleId' => '01K6J7B8000000000000000000',
'expectedReferencedSchemaVersion' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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 := "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys"
payload := strings.NewReader("{\n \"expectedSchemaVersion\": 1,\n \"fieldIds\": [\n \"01K6J7B8000000000000000000\"\n ],\n \"referencedTableId\": \"01K6J7B8000000000000000000\",\n \"referencedRuleId\": \"01K6J7B8000000000000000000\",\n \"expectedReferencedSchemaVersion\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expectedSchemaVersion\": 1,\n \"fieldIds\": [\n \"01K6J7B8000000000000000000\"\n ],\n \"referencedTableId\": \"01K6J7B8000000000000000000\",\n \"referencedRuleId\": \"01K6J7B8000000000000000000\",\n \"expectedReferencedSchemaVersion\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expectedSchemaVersion\": 1,\n \"fieldIds\": [\n \"01K6J7B8000000000000000000\"\n ],\n \"referencedTableId\": \"01K6J7B8000000000000000000\",\n \"referencedRuleId\": \"01K6J7B8000000000000000000\",\n \"expectedReferencedSchemaVersion\": 1\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"referencedTableId": "<string>",
"referencedTableName": "<string>",
"referencedRuleId": "<string>",
"referencedFieldIds": [
"<string>"
],
"referencedFieldNames": [
"<string>"
],
"state": "active"
}{
"id": "<string>",
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"referencedTableId": "<string>",
"referencedTableName": "<string>",
"referencedRuleId": "<string>",
"referencedFieldIds": [
"<string>"
],
"referencedFieldNames": [
"<string>"
],
"state": "active"
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}Create foreign key
Validate existing rows and create a foreign key to matching scalar fields in the same database. The target requires an active unconditional unique rule. Any NULL in the local tuple skips validation. Referenced values cannot be changed or deleted while in use.
POST
/
v1
/
orgs
/
{orgId}
/
databases
/
{databaseId}
/
tables
/
{tableId}
/
foreign-keys
Validate existing rows and create a foreign key to matching scalar fields in the same database. The target requires an active unconditional unique rule. Any NULL in the local tuple skips validation. Referenced values cannot be changed or deleted while in use.
curl --request POST \
--url http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"expectedSchemaVersion": 1,
"fieldIds": [
"01K6J7B8000000000000000000"
],
"referencedTableId": "01K6J7B8000000000000000000",
"referencedRuleId": "01K6J7B8000000000000000000",
"expectedReferencedSchemaVersion": 1
}
'import requests
url = "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys"
payload = {
"expectedSchemaVersion": 1,
"fieldIds": ["01K6J7B8000000000000000000"],
"referencedTableId": "01K6J7B8000000000000000000",
"referencedRuleId": "01K6J7B8000000000000000000",
"expectedReferencedSchemaVersion": 1
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
expectedSchemaVersion: 1,
fieldIds: ['01K6J7B8000000000000000000'],
referencedTableId: '01K6J7B8000000000000000000',
referencedRuleId: '01K6J7B8000000000000000000',
expectedReferencedSchemaVersion: 1
})
};
fetch('http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4310",
CURLOPT_URL => "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys",
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([
'expectedSchemaVersion' => 1,
'fieldIds' => [
'01K6J7B8000000000000000000'
],
'referencedTableId' => '01K6J7B8000000000000000000',
'referencedRuleId' => '01K6J7B8000000000000000000',
'expectedReferencedSchemaVersion' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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 := "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys"
payload := strings.NewReader("{\n \"expectedSchemaVersion\": 1,\n \"fieldIds\": [\n \"01K6J7B8000000000000000000\"\n ],\n \"referencedTableId\": \"01K6J7B8000000000000000000\",\n \"referencedRuleId\": \"01K6J7B8000000000000000000\",\n \"expectedReferencedSchemaVersion\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expectedSchemaVersion\": 1,\n \"fieldIds\": [\n \"01K6J7B8000000000000000000\"\n ],\n \"referencedTableId\": \"01K6J7B8000000000000000000\",\n \"referencedRuleId\": \"01K6J7B8000000000000000000\",\n \"expectedReferencedSchemaVersion\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/foreign-keys")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expectedSchemaVersion\": 1,\n \"fieldIds\": [\n \"01K6J7B8000000000000000000\"\n ],\n \"referencedTableId\": \"01K6J7B8000000000000000000\",\n \"referencedRuleId\": \"01K6J7B8000000000000000000\",\n \"expectedReferencedSchemaVersion\": 1\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"referencedTableId": "<string>",
"referencedTableName": "<string>",
"referencedRuleId": "<string>",
"referencedFieldIds": [
"<string>"
],
"referencedFieldNames": [
"<string>"
],
"state": "active"
}{
"id": "<string>",
"tableId": "<string>",
"fieldIds": [
"<string>"
],
"referencedTableId": "<string>",
"referencedTableName": "<string>",
"referencedRuleId": "<string>",
"referencedFieldIds": [
"<string>"
],
"referencedFieldNames": [
"<string>"
],
"state": "active"
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}Authorizations
apiKeyoauth
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Bound to actor, operation, target, schema version and canonical payload; changed input returns 409.
Required string length:
8 - 255Path Parameters
Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Body
application/json
Required range:
1 <= x <= 2147483647Required array length:
1 - 8 elementsPattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Required range:
1 <= x <= 2147483647Response
Committed synchronous result or accepted durable job; polling is required for terminal verification.
- Option 1
- Option 2
Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Required array length:
1 - 8 elementsPattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Required array length:
1 - 8 elementsPattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Required array length:
1 - 8 elementsAllowed value:
"active"Was this page helpful?
