Organizations
Organizations represent tenant accounts in Tether. Each organization owns contacts, users, pipelines, automations, and AI settings. Use these endpoints to create tenants, manage credentials, and adjust intake configuration.
The organization model
Properties
- Name
_id- Type
- string
- Description
Unique identifier for the organization.
- Name
name- Type
- string
- Description
Display name for the organization.
- Name
phoneNumber- Type
- string
- Description
Primary phone number used for caller ID and messaging.
- Name
address- Type
- string
- Description
Mailing address for the organization.
- Name
logoUrl- Type
- string
- Description
Optional logo (stored in R2) that is signed on retrieval.
- Name
documentTypes- Type
- array
- Description
Default list of documents required during onboarding.
- Name
processTypes- Type
- array
- Description
Default lead processes (e.g., warm sms, cold sms).
- Name
contactProtectionPeriod- Type
- integer
- Description
Optional time (in hours) to protect newly owned contacts.
- Name
credentials- Type
- objectId
- Description
Reference to messaging/AI credentials (Sinch + Anthropic keys).
- Name
dynamicProperties- Type
- objectId
- Description
Reference to intake sections and custom fields.
- Name
createdAt- Type
- timestamp
- Description
When the organization was created.
- Name
updatedAt- Type
- timestamp
- Description
When the organization was last updated.
Create an organization
Create a new tenant and its default admin user. Sinch and Anthropic credentials are optional but must be unique if provided.
Required attributes
- Name
name- Type
- string
- Description
Organization display name.
- Name
phoneNumber- Type
- string
- Description
Primary phone number.
- Name
address- Type
- string
- Description
Mailing address.
- Name
adminDetails- Type
- object
- Description
Admin user bootstrap info (fullName, email, password, phoneNumber, designation, sinchPhoneNumber).
Optional attributes
- Name
creds.anthropicApiKey- Type
- string
- Description
Anthropic key used for AI responses.
- Name
creds.sinchServicePlanId- Type
- string
- Description
Sinch service plan ID for messaging.
- Name
creds.sinchApiToken- Type
- string
- Description
Sinch API token for messaging.
Request
curl https://api.tether.com/api/organizations \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Northwind Auto",
"phoneNumber": "+11234567890",
"address": "123 Main St, Austin, TX",
"creds": {
"anthropicApiKey": "sk-ant-...",
"sinchServicePlanId": "service-plan",
"sinchApiToken": "sinch-token"
},
"adminDetails": {
"fullName": "Alex Admin",
"email": "alex@example.com",
"password": "ChangeMe123!",
"phoneNumber": "+11234567890",
"designation": "Admin",
"sinchPhoneNumber": "+11234567890"
}
}'
Response
{
"message": "Organization with admin user created successfully",
"data": {
"_id": "660c8e9f6ad7d14b12345678",
"name": "Northwind Auto",
"phoneNumber": "+11234567890",
"address": "123 Main St, Austin, TX",
"documentTypes": [
{ "name": "Credit Bureau", "isRequired": true }
],
"processTypes": [
{ "name": "warm sms", "description": "warm sms" }
]
}
}
List organizations
Returns all organizations (superadmin scope). Each item includes a signed logoUrl when available plus basic status flags.
Request
curl https://api.tether.com/api/organizations \
-H "Authorization: Bearer {token}"
Response
{
"organizations": [
{
"_id": "660c8e9f6ad7d14b12345678",
"name": "Northwind Auto",
"phoneNumber": "+11234567890",
"address": "123 Main St, Austin, TX",
"logoUrl": "https://cdn.tether.com/logos/signed-url",
"loginDisabled": false,
"contactProtectionPeriod": 72
}
]
}
Get or update the current organization
These endpoints work in the context of the caller's organization.
GET /api/organizations/user— fetch name, phone, address, and signed logo URL.PUT /api/organizations/user— update name, phone, address, or logo.
Body fields (PUT)
- Name
name- Type
- string
- Description
Updated organization name.
- Name
phoneNumber- Type
- string
- Description
Updated phone number.
- Name
address- Type
- string
- Description
Updated mailing address.
- Name
logoUrl- Type
- string
- Description
New logo URL or data URI (uploaded to R2 when configured).
Request
curl -X PUT https://api.tether.com/api/organizations/user \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Northwind Auto",
"phoneNumber": "+11234567891",
"address": "456 New St, Austin, TX",
"logoUrl": "data:image/png;base64,iVBORw0..."
}'
Manage organization API keys
Fetch or update messaging and AI credentials.
POST /api/organizations/api-keys— get current key set (superadmins can pass anidin the body to target another org).PUT /api/organizations/api-keys— update keys, name, phone, address, logo, and contact protection period. Superadmins can includeidto edit another org.
Credential fields
- Name
creds.anthropicApiKey- Type
- string
- Description
Anthropic API key for text generation.
- Name
creds.sinchServicePlanId- Type
- string
- Description
Sinch service plan ID (SMS/MMS).
- Name
creds.sinchApiToken- Type
- string
- Description
Sinch API token.
- Name
creds.sinchMmsApiKey- Type
- string
- Description
Optional Sinch MMS API key.
- Name
creds.sinchMmsServiceId- Type
- string
- Description
Optional Sinch MMS service ID.
Request
curl -X PUT https://api.tether.com/api/organizations/api-keys \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"id": "660c8e9f6ad7d14b12345678",
"name": "Northwind Auto",
"phoneNumber": "+11234567890",
"address": "123 Main St, Austin, TX",
"creds": {
"anthropicApiKey": "sk-ant-...",
"sinchServicePlanId": "service-plan",
"sinchApiToken": "sinch-token"
}
}'
Manage intake sections and custom fields
Fetch or update intake sections that drive dynamic contact properties.
GET /api/organizations/sections/:id— return section definitions for an organization.PUT /api/organizations/sections/:id— replace the section list (name, hidden flag, and property metadata).
Use these endpoints to keep intake fields in sync across teams and automations.
Request
curl -X PUT https://api.tether.com/api/organizations/sections/660c8e9f6ad7d14b12345678 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"sections": [
{
"name": "Personal Information",
"isHidden": false,
"properties": {
"firstName": { "name": "First Name", "dataType": "string" },
"lastName": { "name": "Last Name", "dataType": "string" }
}
}
]
}'
Delete an organization
Superadmins can delete an organization and its dependent records.
Request
curl -X DELETE https://api.tether.com/api/organizations/660c8e9f6ad7d14b12345678 \
-H "Authorization: Bearer {token}"
Dashboard overview
Superadmin-only summary that returns counts plus every organization and its users. Helpful for ops dashboards and audits.
Request
curl https://api.tether.com/api/organizations/dashboard \
-H "Authorization: Bearer {token}"