Propose an identity state update
curl --request POST \
--url https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subject_id": "<string>",
"base_snapshot_version": 123,
"patch_ops": [
{
"path": "<string>",
"value": "<unknown>"
}
]
}
'import requests
url = "https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates"
payload = {
"subject_id": "<string>",
"base_snapshot_version": 123,
"patch_ops": [
{
"path": "<string>",
"value": "<unknown>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
subject_id: '<string>',
base_snapshot_version: 123,
patch_ops: [{path: '<string>', value: '<unknown>'}]
})
};
fetch('https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates', 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://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates",
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([
'subject_id' => '<string>',
'base_snapshot_version' => 123,
'patch_ops' => [
[
'path' => '<string>',
'value' => '<unknown>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates"
payload := strings.NewReader("{\n \"subject_id\": \"<string>\",\n \"base_snapshot_version\": 123,\n \"patch_ops\": [\n {\n \"path\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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("https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subject_id\": \"<string>\",\n \"base_snapshot_version\": 123,\n \"patch_ops\": [\n {\n \"path\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subject_id\": \"<string>\",\n \"base_snapshot_version\": 123,\n \"patch_ops\": [\n {\n \"path\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"update_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subject_type": "<string>",
"subject_id": "<string>",
"base_snapshot_version": 123,
"status": "proposed",
"created_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "validation_error",
"message": "Request body failed schema validation.",
"details": [
{
"path": "/subject_id",
"message": "subject_id is required."
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication required."
}
}{
"error": {
"code": "forbidden",
"message": "Owner or grant required."
}
}{
"error": {
"code": "validation_error",
"message": "Request body failed schema validation.",
"details": [
{
"path": "/subject_id",
"message": "subject_id is required.",
"code": "invalid_type"
}
],
"request_id": "req_01j2k3m4n5"
}
}Updates
Propose Update
Proposes a set of RFC 6902 patch operations against the subject’s current
state. The proposal is stored but not applied until the apply endpoint
is called. Requires tenant_proposer role.
The base_snapshot_version must match the subject’s current latest version
— stale proposals are rejected with 409.
POST
/
v1
/
tenants
/
{tenant_id}
/
subjects
/
{subject_type}
/
{subject_id}
/
updates
Propose an identity state update
curl --request POST \
--url https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subject_id": "<string>",
"base_snapshot_version": 123,
"patch_ops": [
{
"path": "<string>",
"value": "<unknown>"
}
]
}
'import requests
url = "https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates"
payload = {
"subject_id": "<string>",
"base_snapshot_version": 123,
"patch_ops": [
{
"path": "<string>",
"value": "<unknown>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
subject_id: '<string>',
base_snapshot_version: 123,
patch_ops: [{path: '<string>', value: '<unknown>'}]
})
};
fetch('https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates', 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://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates",
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([
'subject_id' => '<string>',
'base_snapshot_version' => 123,
'patch_ops' => [
[
'path' => '<string>',
'value' => '<unknown>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates"
payload := strings.NewReader("{\n \"subject_id\": \"<string>\",\n \"base_snapshot_version\": 123,\n \"patch_ops\": [\n {\n \"path\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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("https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subject_id\": \"<string>\",\n \"base_snapshot_version\": 123,\n \"patch_ops\": [\n {\n \"path\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tally-platform-api-xwka6vu2kq-ue.a.run.app/v1/tenants/{tenant_id}/subjects/{subject_type}/{subject_id}/updates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subject_id\": \"<string>\",\n \"base_snapshot_version\": 123,\n \"patch_ops\": [\n {\n \"path\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"update_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subject_type": "<string>",
"subject_id": "<string>",
"base_snapshot_version": 123,
"status": "proposed",
"created_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "validation_error",
"message": "Request body failed schema validation.",
"details": [
{
"path": "/subject_id",
"message": "subject_id is required."
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication required."
}
}{
"error": {
"code": "forbidden",
"message": "Owner or grant required."
}
}{
"error": {
"code": "validation_error",
"message": "Request body failed schema validation.",
"details": [
{
"path": "/subject_id",
"message": "subject_id is required.",
"code": "invalid_type"
}
],
"request_id": "req_01j2k3m4n5"
}
}Authorizations
Firebase Auth JWT issued by Google Identity Platform.
Obtain a token by signing in at your app domain and calling
firebase.auth().currentUser.getIdToken().
Path Parameters
Tenant identifier.
Subject type discriminator.
Available options:
individual, organization Stable subject identifier within its type namespace.
Body
application/json
Available options:
individual, organization The version this patch is based on. Must be the current latest.
RFC 6902 JSON Patch operations. Only add, replace, and remove are supported.
Show child attributes
Show child attributes
⌘I