Organização
Cada chave de API pertence a exatamente uma organização, e estes dois endpoints só permitem ler os dados da sua própria organização: não existe um diretório de outras organizações.
Escopo obrigatório: organizations:read (selecionável ao criar a chave de API no dashboard).
Listar organização
GET /v1/organizations retorna sempre uma coleção de um único item: a
organização autenticada, no formato de lista padrão da API (data,
cursor, has_more). cursor é sempre null e has_more é sempre
false; não há paginação real aqui.
curl -X GET \ https://api.turbonotify.com/v1/organizations \ -H "Authorization: Bearer SUA_CHAVE"const response = await fetch('https://api.turbonotify.com/v1/organizations', { method: 'GET', headers: { 'Authorization': 'Bearer SUA_CHAVE' }});
const { data } = await response.json();console.log(data[0]);import requests
url = "https://api.turbonotify.com/v1/organizations"headers = {"Authorization": "Bearer SUA_CHAVE"}
response = requests.get(url, headers=headers)result = response.json()print(result["data"][0])package main
import ( "fmt" "io" "net/http")
func main() { req, _ := http.NewRequest("GET", "https://api.turbonotify.com/v1/organizations", nil) req.Header.Set("Authorization", "Bearer SUA_CHAVE") resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))}<?php$url = 'https://api.turbonotify.com/v1/organizations';
$options = [ 'http' => [ 'header' => ['Authorization: Bearer SUA_CHAVE'], 'method' => 'GET' ]];
$context = stream_context_create($options);$result = file_get_contents($url, false, $context);$response = json_decode($result, true);var_dump($response['data'][0]);?>var client = new HttpClient();client.DefaultRequestHeaders.Add("Authorization", "Bearer SUA_CHAVE");
var response = await client.GetAsync("https://api.turbonotify.com/v1/organizations");var result = await response.Content.ReadAsStringAsync();Console.WriteLine(result);import java.net.http.*;import java.net.URI;
public class ListarOrganizacao { public static void main(String[] args) throws Exception { var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder() .uri(URI.create("https://api.turbonotify.com/v1/organizations")) .header("Authorization", "Bearer SUA_CHAVE") .GET() .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); }}Resposta (200)
{
"data": [
{
"id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"name": "Clínica Alpha",
"plan": "business",
"locale": "pt-BR",
"timezone": "America/Sao_Paulo",
"suspended_at": null,
"created_at": "2026-03-01T09:00:00Z",
"updated_at": "2026-06-20T14:30:00Z"
}
],
"cursor": null,
"has_more": false
} Detalhe da organização
GET /v1/organizations/{organization_id} retorna o mesmo objeto, sem o
envelope de lista. O {organization_id} deve ser o org_{hex32} da
própria organização autenticada. Nunca retorna dados de outra organização.
A rejeição acontece em duas etapas, com códigos diferentes:
400 invalid_organization_id: o valor não passa no formato^org_[0-9a-f]{32}$. Cai aqui qualquer coisa malformada: UUID com hífens, hex em maiúsculas, string arbitrária, prefixo ausente. A validação de formato roda antes da comparação com a organização autenticada.404 organization_not_found: o valor é umorg_{hex32}bem-formado, mas não é o da organização autenticada (inclusive umorg_válido de outra organização).
curl -X GET \ https://api.turbonotify.com/v1/organizations/org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 \ -H "Authorization: Bearer SUA_CHAVE"const organizationId = 'org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4';const response = await fetch( `https://api.turbonotify.com/v1/organizations/${organizationId}`, { method: 'GET', headers: { 'Authorization': 'Bearer SUA_CHAVE' } });
const organization = await response.json();console.log(organization);import requests
organization_id = "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"url = f"https://api.turbonotify.com/v1/organizations/{organization_id}"headers = {"Authorization": "Bearer SUA_CHAVE"}
response = requests.get(url, headers=headers)organization = response.json()print(organization)package main
import ( "fmt" "io" "net/http")
func main() { organizationID := "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4" req, _ := http.NewRequest("GET", "https://api.turbonotify.com/v1/organizations/"+organizationID, nil) req.Header.Set("Authorization", "Bearer SUA_CHAVE") resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))}<?php$organizationId = 'org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4';$url = "https://api.turbonotify.com/v1/organizations/{$organizationId}";
$options = [ 'http' => [ 'header' => ['Authorization: Bearer SUA_CHAVE'], 'method' => 'GET' ]];
$context = stream_context_create($options);$result = file_get_contents($url, false, $context);$response = json_decode($result, true);var_dump($response);?>var client = new HttpClient();client.DefaultRequestHeaders.Add("Authorization", "Bearer SUA_CHAVE");
var organizationId = "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4";var response = await client.GetAsync( $"https://api.turbonotify.com/v1/organizations/{organizationId}");var result = await response.Content.ReadAsStringAsync();Console.WriteLine(result);import java.net.http.*;import java.net.URI;
public class DetalheOrganizacao { public static void main(String[] args) throws Exception { var client = HttpClient.newHttpClient(); var organizationId = "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4";
var request = HttpRequest.newBuilder() .uri(URI.create( "https://api.turbonotify.com/v1/organizations/" + organizationId)) .header("Authorization", "Bearer SUA_CHAVE") .GET() .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); }}Resposta (200)
{
"id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"name": "Clínica Alpha",
"plan": "business",
"locale": "pt-BR",
"timezone": "America/Sao_Paulo",
"suspended_at": null,
"created_at": "2026-03-01T09:00:00Z",
"updated_at": "2026-06-20T14:30:00Z"
} Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador público da organização (org_ + 32 hex) |
name | string | Nome cadastrado da organização |
plan | string | Identificador do plano contratado (ex.: free, solo, business, custom) |
locale | string | Idioma das comunicações da organização, pt-BR ou en (no dashboard, Organização > Idioma das comunicações). Não muda o formato das respostas da API |
timezone | string | Fuso horário IANA configurado para a conta (ex.: America/Sao_Paulo). Não afeta o formato das datas da API: define onde cada dia começa e termina na visão geral, nos indicadores e nos totais de mensagens do dashboard |
suspended_at | string|null | Data e hora ISO 8601 da suspensão; null quando a organização está ativa |
created_at | string | Data e hora ISO 8601 de criação da organização |
updated_at | string | Data e hora ISO 8601 da última atualização dos dados cadastrais |
Toda data e hora retornada pela API está em UTC, com sufixo Z e precisão
de segundos (ex.: 2026-06-01T10:00:05Z). Isso vale para created_at e at
em webhooks, na consulta de eventos e nas respostas de mensagem, para os campos
cadastrais da tabela acima e para os campos de expiração de URL pré-assinada
(expires_at / url_expires_at nos blocos de mídia e foto). Nos campos de
evento e mensagem o formato é ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$, e
nenhum valor vem com deslocamento de fuso, qualquer que seja o timezone
configurado na conta.
Este endpoint retorna só os dados cadastrais listados acima: configurações administrativas da organização não aparecem nele.
Erros possíveis
| Status | Código de erro | Descrição |
|---|---|---|
400 | invalid_organization_id | (apenas detalhe) O {organization_id} informado não está no formato org_ + 32 hex minúsculos (ex.: UUID com hífens, hex em maiúsculas, string arbitrária). |
401 | not_authenticated | A chave de API está inválida ou ausente. |
403 | insufficient_scope | A chave de API não possui o escopo organizations:read (resposta inclui required_scope). |
404 | organization_not_found | (apenas detalhe) O {organization_id} informado está bem-formado, mas não corresponde à organização autenticada. Formato inválido retorna 400 invalid_organization_id, não este código. |
500 | internal_error | Erro interno inesperado no servidor. |
Veja também: Chave de API · Números.