cURL
curl --request POST \
--url https://api.timbal.ai/orgs/{org_id}/scim-tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "<string>",
"provider_id": 123
}
'import requests
url = "https://api.timbal.ai/orgs/{org_id}/scim-tokens"
payload = {
"label": "<string>",
"provider_id": 123
}
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({label: '<string>', provider_id: 123})
};
fetch('https://api.timbal.ai/orgs/{org_id}/scim-tokens', 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://api.timbal.ai/orgs/{org_id}/scim-tokens",
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([
'label' => '<string>',
'provider_id' => 123
]),
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://api.timbal.ai/orgs/{org_id}/scim-tokens"
payload := strings.NewReader("{\n \"label\": \"<string>\",\n \"provider_id\": 123\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://api.timbal.ai/orgs/{org_id}/scim-tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"<string>\",\n \"provider_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/scim-tokens")
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 \"label\": \"<string>\",\n \"provider_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"created_at": 123,
"enabled": true,
"id": "<string>",
"org_id": "<string>",
"updated_at": 123,
"base_url": "<string>",
"token": "<string>",
"label": "<string>",
"last_used_at": 123,
"provider_id": "<string>"
}SCIM
Create SCIM Token
Create a SCIM bearer token for the organization.
POST
/
orgs
/
{org_id}
/
scim-tokens
cURL
curl --request POST \
--url https://api.timbal.ai/orgs/{org_id}/scim-tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "<string>",
"provider_id": 123
}
'import requests
url = "https://api.timbal.ai/orgs/{org_id}/scim-tokens"
payload = {
"label": "<string>",
"provider_id": 123
}
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({label: '<string>', provider_id: 123})
};
fetch('https://api.timbal.ai/orgs/{org_id}/scim-tokens', 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://api.timbal.ai/orgs/{org_id}/scim-tokens",
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([
'label' => '<string>',
'provider_id' => 123
]),
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://api.timbal.ai/orgs/{org_id}/scim-tokens"
payload := strings.NewReader("{\n \"label\": \"<string>\",\n \"provider_id\": 123\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://api.timbal.ai/orgs/{org_id}/scim-tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"<string>\",\n \"provider_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/scim-tokens")
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 \"label\": \"<string>\",\n \"provider_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"created_at": 123,
"enabled": true,
"id": "<string>",
"org_id": "<string>",
"updated_at": 123,
"base_url": "<string>",
"token": "<string>",
"label": "<string>",
"last_used_at": 123,
"provider_id": "<string>"
}Authorizations
Timbal API key. Obtain your API key from the Timbal platform settings. See Authentication for more information.
Path Parameters
Body
application/json
Create a SCIM token for an org.
Human label for the admin UI (e.g. "Entra prod").
Optional IdP connection to bind this token to. When set, SCIM group pushes resolve roles through that connection's group→role mappings; when omitted the token does membership-only SCIM (auto add/remove).
Response
201 - application/json
Token created
Create response: the only time the plaintext token is ever returned. The
caller (IdP admin) must copy token now — it can't be retrieved later.
The base URL the IdP should target, e.g. https://api.timbal.ai/scim/v2.
The bearer token to paste into the IdP's SCIM config. Shown once.