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.


POST/api/organizations

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

POST
/api/organizations
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" }
    ]
  }
}

GET/api/organizations

List organizations

Returns all organizations (superadmin scope). Each item includes a signed logoUrl when available plus basic status flags.

Request

GET
/api/organizations
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/api/organizations/user

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

PUT
/api/organizations/user
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..."
  }'

POST/api/organizations/api-keys

Manage organization API keys

Fetch or update messaging and AI credentials.

  • POST /api/organizations/api-keys — get current key set (superadmins can pass an id in the body to target another org).
  • PUT /api/organizations/api-keys — update keys, name, phone, address, logo, and contact protection period. Superadmins can include id to 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

PUT
/api/organizations/api-keys
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"
    }
  }'

GET/api/organizations/sections/:id

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

PUT
/api/organizations/sections/:id
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/api/organizations/:id

Delete an organization

Superadmins can delete an organization and its dependent records.

Request

DELETE
/api/organizations/:id
curl -X DELETE https://api.tether.com/api/organizations/660c8e9f6ad7d14b12345678 \
  -H "Authorization: Bearer {token}"

GET/api/organizations/dashboard

Dashboard overview

Superadmin-only summary that returns counts plus every organization and its users. Helpful for ops dashboards and audits.

Request

GET
/api/organizations/dashboard
curl https://api.tether.com/api/organizations/dashboard \
  -H "Authorization: Bearer {token}"

Was this page helpful?