POST /projects/{project}/auth/tokens
curl --request POST \
--url https://api-zangtable.com/projects/{project}/auth/tokens \
--header 'Authorization: <authorization>'import requests
url = "https://api-zangtable.com/projects/{project}/auth/tokens"
headers = {"Authorization": "<authorization>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<authorization>'}};
fetch('https://api-zangtable.com/projects/{project}/auth/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-zangtable.com/projects/{project}/auth/tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$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://api-zangtable.com/projects/{project}/auth/tokens"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
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-zangtable.com/projects/{project}/auth/tokens")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-zangtable.com/projects/{project}/auth/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {},
"error": {},
"request_id": "<string>"
}Project API Tokens
POST /projects/{project}/auth/tokens
Creates a new Project API Token for the project.
POST
https://api-zangtable.com
/
projects
/
{project}
/
auth
/
tokens
POST /projects/{project}/auth/tokens
curl --request POST \
--url https://api-zangtable.com/projects/{project}/auth/tokens \
--header 'Authorization: <authorization>'import requests
url = "https://api-zangtable.com/projects/{project}/auth/tokens"
headers = {"Authorization": "<authorization>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<authorization>'}};
fetch('https://api-zangtable.com/projects/{project}/auth/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-zangtable.com/projects/{project}/auth/tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$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://api-zangtable.com/projects/{project}/auth/tokens"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
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-zangtable.com/projects/{project}/auth/tokens")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-zangtable.com/projects/{project}/auth/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {},
"error": {},
"request_id": "<string>"
}Creates a new Project API Token for the project.
Full request:
Error or alternate response:
Endpoint details
string
required
Bearer
pat_... (Project API Token). Keep this token on your backend/server.string
required
Project slug. This acts as the Project ID in API paths.
boolean
required
true for a successful response and false for an error response.object | null
Endpoint-specific response data when
ok is true; null on errors.object | null
Error code and message when
ok is false; null on success.string
required
Request identifier you can use when troubleshooting a specific API call.
Authentication
Project API Token.Parameters
Body:token_name optional. If you send token_type, it must be project_api_token.
Notes
Creating a new Project API Token does not revoke existing Project API Tokens for the same ZangTable account user inside that project. Revoke old tokens explicitly when you no longer want them to work.Request examples
Basic request:curl -X POST "$BASE_URL/projects/{project}/auth/tokens" \
-H 'Authorization: Bearer pat_PROJECT_TOKEN' \
-H 'Content-Type: application/json' \
--data '{"token_name":"production-api"}'
curl -X POST "$BASE_URL/projects/{project}/auth/tokens" \
-H 'Authorization: Bearer pat_PROJECT_TOKEN' \
-H 'Content-Type: application/json' \
-H 'X-Operation-Key: edit-profile-email' \
-H 'X-Operation-Run-Id: oprun_client_20260602_001' \
--data '{"token_type":"project_api_token","token_name":"production-api"}'
Response examples
Success:{
"ok": true,
"data": {
"token": {
"token": "pat_PROJECT_TOKEN",
"token_id": 9,
"token_type": "project_api_token",
"token_name": "production-api",
"expires_at": null
}
},
"error": null,
"request_id": "req_20260602T012345_123456Z_abc123def456",
"operation_key": "edit-profile-email",
"operation_run_id": "oprun_20260602T012300_000000Z_a1b2c3d4e5f6",
"operation_grouping_status": "accepted_provided_run",
"meta": {
"generated_at": "2026-06-02T01:23:45Z"
}
}
{
"ok": false,
"data": null,
"error": {
"code": "permission_denied",
"message": "This credential cannot create Project API Tokens."
},
"request_id": "req_20260602T012345_123456Z_abc123def456",
"meta": {
"generated_at": "2026-06-02T01:23:45Z"
}
}