NueForm

Teams API

Manage teams, members, roles, and invitations for collaborative form building.

The Teams API lets you create and manage teams for collaborative form building. Teams allow multiple users to share forms, with role-based access control governing who can view, edit, and delete forms and responses.

All request and response bodies use snake_case field names.

Team Roles

ownerrole

Full access. Can manage members, billing, and delete the team.

adminrole

Can create, edit, delete forms, manage members, and view responses.

editorrole

Can create and edit forms, view responses. Cannot manage members.

viewerrole

Can view forms and responses. Cannot create or edit.

List Teams

GET/api/v1/teams

Returns all teams the authenticated user is a member of.

Response

json
{
  "teams": [
    {
      "id": "665b2c3d4e5f6a7b8c9d0e1f",
      "name": "Marketing",
      "slug": "marketing",
      "owner_id": "665a0a1b2c3d4e5f6a7b8c9d",
      "created_at": "2026-01-10T09:00:00.000Z",
      "updated_at": "2026-02-15T11:30:00.000Z",
      "member_count": 5,
      "your_role": "admin"
    },
    {
      "id": "665c3d4e5f6a7b8c9d0e1f20",
      "name": "Product",
      "slug": "product",
      "owner_id": "665a0a1b2c3d4e5f6a7b8c9d",
      "created_at": "2026-02-01T14:00:00.000Z",
      "updated_at": "2026-02-20T16:45:00.000Z",
      "member_count": 3,
      "your_role": "owner"
    }
  ]
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams" \
  -H "Authorization: Bearer YOUR_API_KEY"

Create Team

POST/api/v1/teams

Creates a new team. The authenticated user becomes the team owner.

Request Body

namestring

Team name

Request Example

json
{
  "name": "Marketing"
}

Response

json
{
  "id": "665b2c3d4e5f6a7b8c9d0e1f",
  "name": "Marketing",
  "slug": "marketing",
  "owner_id": "665a0a1b2c3d4e5f6a7b8c9d",
  "created_at": "2026-02-28T12:00:00.000Z",
  "updated_at": "2026-02-28T12:00:00.000Z"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/teams" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Marketing" }'

Get Team

GET/api/v1/teams/:teamId

Retrieves a single team by ID.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "id": "665b2c3d4e5f6a7b8c9d0e1f",
  "name": "Marketing",
  "slug": "marketing",
  "owner_id": "665a0a1b2c3d4e5f6a7b8c9d",
  "created_at": "2026-01-10T09:00:00.000Z",
  "updated_at": "2026-02-15T11:30:00.000Z",
  "member_count": 5
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update Team

PUT/api/v1/teams/:teamId

Updates team properties. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Request Body

namestring

New team name

Request Example

json
{
  "name": "Marketing & Growth"
}

Response

Returns the updated team object.

Code Examples

bash
curl -X PUT "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Marketing & Growth" }'

Delete Team

DELETE/api/v1/teams/:teamId

Permanently deletes a team. Only the team owner can delete a team.

Deleting a team removes all team memberships and invitations. Forms belonging to the team are not automatically deleted but will become inaccessible to former team members.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "success": true
}

Code Examples

bash
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f" \
  -H "Authorization: Bearer YOUR_API_KEY"

List Members

GET/api/v1/teams/:teamId/members

Returns all members of a team.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "members": [
    {
      "id": "66d1e2f3a4b5c6d7e8f9a0b1",
      "user_id": "665a0a1b2c3d4e5f6a7b8c9d",
      "email": "alice@example.com",
      "first_name": "Alice",
      "last_name": "Johnson",
      "role": "owner",
      "joined_at": "2026-01-10T09:00:00.000Z"
    },
    {
      "id": "66d2e3f4a5b6c7d8e9f0a1b2",
      "user_id": "665a1b2c3d4e5f6a7b8c9d0e",
      "email": "bob@example.com",
      "first_name": "Bob",
      "last_name": "Smith",
      "role": "editor",
      "joined_at": "2026-01-15T14:30:00.000Z"
    }
  ]
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/members" \
  -H "Authorization: Bearer YOUR_API_KEY"

Add Member

POST/api/v1/teams/:teamId/members

Adds a user directly to a team by user ID. Requires owner or admin role. To invite a user by email, use Create Invitation instead.

Path Parameters

teamIdstring

The team ID

Request Body

user_idstring

The user ID to add

rolestring

Role to assign: "admin", "editor", "viewer" (default: "viewer")

Request Example

json
{
  "user_id": "665a1b2c3d4e5f6a7b8c9d0e",
  "role": "editor"
}

Response

json
{
  "id": "66d2e3f4a5b6c7d8e9f0a1b2",
  "user_id": "665a1b2c3d4e5f6a7b8c9d0e",
  "team_id": "665b2c3d4e5f6a7b8c9d0e1f",
  "role": "editor",
  "joined_at": "2026-02-28T12:00:00.000Z"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/members" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "665a1b2c3d4e5f6a7b8c9d0e",
    "role": "editor"
  }'

Update Member Role

PUT/api/v1/teams/:teamId/members/:memberId

Updates a team member's role. Requires owner or admin role. You cannot change the owner's role.

Path Parameters

teamIdstring

The team ID

memberIdstring

The team member ID

Request Body

rolestring

New role: "admin", "editor", "viewer"

Request Example

json
{
  "role": "admin"
}

Response

json
{
  "id": "66d2e3f4a5b6c7d8e9f0a1b2",
  "user_id": "665a1b2c3d4e5f6a7b8c9d0e",
  "team_id": "665b2c3d4e5f6a7b8c9d0e1f",
  "role": "admin",
  "joined_at": "2026-01-15T14:30:00.000Z"
}

Code Examples

bash
curl -X PUT "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/members/66d2e3f4a5b6c7d8e9f0a1b2" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "role": "admin" }'

Remove Member

DELETE/api/v1/teams/:teamId/members/:memberId

Removes a member from a team. Requires owner or admin role. The team owner cannot be removed.

Path Parameters

teamIdstring

The team ID

memberIdstring

The team member ID

Response

json
{
  "success": true
}

Code Examples

bash
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/members/66d2e3f4a5b6c7d8e9f0a1b2" \
  -H "Authorization: Bearer YOUR_API_KEY"

List Invitations

GET/api/v1/teams/:teamId/invitations

Returns all pending invitations for a team. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "invitations": [
    {
      "id": "66e1f2a3b4c5d6e7f8a9b0c1",
      "email": "carol@example.com",
      "role": "editor",
      "invited_by": "665a0a1b2c3d4e5f6a7b8c9d",
      "status": "pending",
      "expires_at": "2026-03-07T12:00:00.000Z",
      "created_at": "2026-02-28T12:00:00.000Z"
    }
  ]
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/invitations" \
  -H "Authorization: Bearer YOUR_API_KEY"

Create Invitation

POST/api/v1/teams/:teamId/invitations

Sends an email invitation to join a team. The invitation includes a unique token and expires after 7 days. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Request Body

emailstring

Email address to invite

rolestring

Role to assign on acceptance: "admin", "editor", "viewer" (default: "editor")

Request Example

json
{
  "email": "carol@example.com",
  "role": "editor"
}

Response

json
{
  "id": "66e1f2a3b4c5d6e7f8a9b0c1",
  "email": "carol@example.com",
  "role": "editor",
  "invited_by": "665a0a1b2c3d4e5f6a7b8c9d",
  "status": "pending",
  "expires_at": "2026-03-07T12:00:00.000Z",
  "created_at": "2026-02-28T12:00:00.000Z"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/invitations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "carol@example.com",
    "role": "editor"
  }'

Cancel Invitation

DELETE/api/v1/teams/:teamId/invitations/:invId

Cancels a pending invitation. Requires owner or admin role. The invitation token will no longer be valid.

Path Parameters

teamIdstring

The team ID

invIdstring

The invitation ID

Response

json
{
  "success": true
}

Code Examples

bash
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/invitations/66e1f2a3b4c5d6e7f8a9b0c1" \
  -H "Authorization: Bearer YOUR_API_KEY"

Audit Logs

GET/api/v1/teams/:teamId/audit-logs

Returns a paginated list of audit log events for the team. Requires owner or admin role. Enterprise plan only.

Path Parameters

teamIdstring

The team ID

Query Parameters

actionstring

Filter by action type (e.g., "form.published", "member.removed")

user_idstring

Filter by the user who performed the action

sincestring

ISO 8601 date — only events from this date forward

untilstring

ISO 8601 date — only events up to this date

pageinteger

Page number (default: 1)

per_pageinteger

Results per page (default: 50, max: 100)

Response

json
{
  "events": [
    {
      "id": "670a1b2c3d4e5f6a7b8c9d0e",
      "action": "form.published",
      "user_id": "665a0a1b2c3d4e5f6a7b8c9d",
      "user_email": "alice@example.com",
      "details": {
        "form_id": "665f1a2b3c4d5e6f7a8b9c0d",
        "form_title": "Customer Survey"
      },
      "ip_address": "203.0.113.42",
      "timestamp": "2026-03-20T14:30:00.000Z"
    }
  ],
  "total": 1,
  "page": 1,
  "per_page": 50
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/audit-logs?action=form.published&per_page=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Team Branding

GET/api/v1/teams/:teamId/branding

Returns the team's branding configuration. Requires team membership.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "logo_url": "https://cdn.nueform.io/teams/665b2c/logo.png",
  "primary_color": "#6366f1",
  "background_color": "#ffffff",
  "text_color": "#1a1a1a",
  "font_family": "Inter",
  "footer_text": "Powered by Acme Corp"
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/branding" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update Team Branding

PUT/api/v1/teams/:teamId/branding

Updates the team's branding configuration. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Request Body

logo_urlstring

URL of the team logo

primary_colorstring

Primary hex color (e.g., "#6366f1")

background_colorstring

Background hex color

text_colorstring

Text hex color

font_familystring

Google Fonts font family name

footer_textstring

Custom footer text

Request Example

json
{
  "primary_color": "#8b5cf6",
  "font_family": "Poppins",
  "footer_text": "2026 Acme Corp. All rights reserved."
}

Response

Returns the updated branding object.

Code Examples

bash
curl -X PUT "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/branding" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "primary_color": "#8b5cf6", "font_family": "Poppins" }'

Clear Team Branding

DELETE/api/v1/teams/:teamId/branding

Removes all team branding settings, reverting forms to owner or system defaults. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "success": true
}

Code Examples

bash
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/branding" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Subdomain

GET/api/v1/teams/:teamId/subdomain

Returns the team's subdomain configuration. Requires team membership.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "subdomain": "acme-marketing",
  "full_url": "https://acme-marketing.nueform.io"
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/subdomain" \
  -H "Authorization: Bearer YOUR_API_KEY"

Set Subdomain

PUT/api/v1/teams/:teamId/subdomain

Sets or updates the team's subdomain. Requires owner or admin role. Pro or Enterprise plan required.

Path Parameters

teamIdstring

The team ID

Request Body

subdomainstring

Desired subdomain (lowercase letters, numbers, hyphens only)

Request Example

json
{
  "subdomain": "acme-marketing"
}

Response

json
{
  "subdomain": "acme-marketing",
  "full_url": "https://acme-marketing.nueform.io"
}

Code Examples

bash
curl -X PUT "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/subdomain" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "subdomain": "acme-marketing" }'

Get Custom Domain

GET/api/v1/teams/:teamId/custom-domain

Returns the team's custom domain configuration. Requires team membership. Enterprise plan only.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "domain": "forms.acmecorp.com",
  "status": "verified",
  "ssl_status": "active",
  "cname_target": "custom.nueform.io",
  "verified_at": "2026-03-15T10:00:00.000Z"
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain" \
  -H "Authorization: Bearer YOUR_API_KEY"

Add Custom Domain

POST/api/v1/teams/:teamId/custom-domain

Adds a custom domain to the team. Requires owner or admin role. Enterprise plan only. After adding, use the Verify Domain endpoint to confirm DNS setup.

Path Parameters

teamIdstring

The team ID

Request Body

domainstring

The custom domain (e.g., "forms.acmecorp.com")

Request Example

json
{
  "domain": "forms.acmecorp.com"
}

Response

json
{
  "domain": "forms.acmecorp.com",
  "status": "pending_verification",
  "cname_target": "custom.nueform.io",
  "instructions": "Add a CNAME record pointing forms.acmecorp.com to custom.nueform.io"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "domain": "forms.acmecorp.com" }'

Remove Custom Domain

DELETE/api/v1/teams/:teamId/custom-domain

Removes the custom domain from the team. Forms will revert to the default NueForm URL. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "success": true
}

Code Examples

bash
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain" \
  -H "Authorization: Bearer YOUR_API_KEY"

Verify Custom Domain

POST/api/v1/teams/:teamId/custom-domain/verify

Verifies that DNS records are correctly configured for the custom domain. SSL is automatically provisioned upon successful verification. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Response (Success)

json
{
  "domain": "forms.acmecorp.com",
  "status": "verified",
  "ssl_status": "provisioning",
  "verified_at": "2026-03-20T15:00:00.000Z"
}

Response (Failure)

json
{
  "domain": "forms.acmecorp.com",
  "status": "pending_verification",
  "error": "CNAME record not found. Expected: forms.acmecorp.com -> custom.nueform.io"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain/verify" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Billing

GET/api/v1/teams/:teamId/billing

Returns the team's billing summary, including plan details, seat usage, and next invoice information. Requires owner or admin role.

Path Parameters

teamIdstring

The team ID

Response

json
{
  "plan": "enterprise",
  "billing_cycle": "monthly",
  "price_per_month": 99,
  "included_seats": 20,
  "used_seats": 14,
  "extra_seats": 0,
  "extra_seat_cost": 1.00,
  "viewer_seats": 38,
  "next_invoice_date": "2026-04-01T00:00:00.000Z",
  "next_invoice_amount": 99.00
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/billing" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Team Analytics

GET/api/v1/teams/:teamId/analytics

Returns aggregated analytics across all team forms. Requires team membership.

Path Parameters

teamIdstring

The team ID

Query Parameters

sincestring

ISO 8601 date — only data from this date forward

untilstring

ISO 8601 date — only data up to this date

Response

json
{
  "total_forms": 24,
  "total_responses": 12580,
  "avg_completion_rate": 0.73,
  "responses_by_day": [
    { "date": "2026-03-19", "count": 142 },
    { "date": "2026-03-20", "count": 167 }
  ],
  "top_forms": [
    {
      "form_id": "665f1a2b3c4d5e6f7a8b9c0d",
      "title": "Customer Survey",
      "responses": 4230,
      "completion_rate": 0.82
    }
  ]
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/analytics?since=2026-03-01" \
  -H "Authorization: Bearer YOUR_API_KEY"

List Form Guests

GET/api/v1/forms/:id/guests

Returns all guests invited to a specific form. Requires owner or admin role on the form's team.

Path Parameters

idstring

The form ID

Response

json
{
  "guests": [
    {
      "id": "671a2b3c4d5e6f7a8b9c0d1e",
      "email": "contractor@external.com",
      "first_name": "Dana",
      "last_name": "Lee",
      "permission": "edit",
      "invited_by": "665a0a1b2c3d4e5f6a7b8c9d",
      "accepted_at": "2026-03-18T10:00:00.000Z"
    }
  ]
}

Code Examples

bash
curl -X GET "https://api.nueform.io/api/v1/forms/665f1a2b3c4d5e6f7a8b9c0d/guests" \
  -H "Authorization: Bearer YOUR_API_KEY"

Invite Guest

POST/api/v1/forms/:id/guests

Invites an external collaborator to a specific form. Requires owner or admin role on the form's team. The guest receives an email invitation.

Path Parameters

idstring

The form ID

Request Body

emailstring

Email address of the guest

permissionstring

Permission level: "view" or "edit" (default: "view")

Request Example

json
{
  "email": "contractor@external.com",
  "permission": "edit"
}

Response

json
{
  "id": "671a2b3c4d5e6f7a8b9c0d1e",
  "email": "contractor@external.com",
  "permission": "edit",
  "status": "pending",
  "invited_by": "665a0a1b2c3d4e5f6a7b8c9d",
  "created_at": "2026-03-20T12:00:00.000Z"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/forms/665f1a2b3c4d5e6f7a8b9c0d/guests" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "contractor@external.com",
    "permission": "edit"
  }'

Remove Guest

DELETE/api/v1/forms/:id/guests

Removes a guest's access from a specific form. Requires owner or admin role on the form's team.

Path Parameters

idstring

The form ID

Request Body

guest_idstring

The guest's ID to remove

Request Example

json
{
  "guest_id": "671a2b3c4d5e6f7a8b9c0d1e"
}

Response

json
{
  "success": true
}

Code Examples

bash
curl -X DELETE "https://api.nueform.io/api/v1/forms/665f1a2b3c4d5e6f7a8b9c0d/guests" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "guest_id": "671a2b3c4d5e6f7a8b9c0d1e" }'

Accept Guest Invitation

POST/api/v1/forms/guests/accept

Accepts a guest invitation using the token from the invitation email. The authenticated user gains access to the form with the specified permission level.

Request Body

tokenstring

The invitation token from the email link

Request Example

json
{
  "token": "gt_abc123def456ghi789"
}

Response

json
{
  "form_id": "665f1a2b3c4d5e6f7a8b9c0d",
  "form_title": "Customer Survey",
  "permission": "edit",
  "team_name": "Marketing"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/forms/guests/accept" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "token": "gt_abc123def456ghi789" }'

Error Responses

Standard error responses returned by Teams API endpoints.

Error Codes

400Bad Request

Missing required fields, invalid role

401Unauthorized

Missing or invalid API key

403Forbidden

Insufficient role for the action

404Not Found

Team, member, or invitation not found

409Conflict

User already a member, duplicate invitation

500Server Error

Internal server error

Error Example

json
{
  "error": "Not authorized to manage team members"
}

Update Telephony Access

PUT/api/v1/teams/:teamId/members/:memberId/telephony

Update a member's telephony access level. Requires admin or owner role. Telephony access controls what phone-related actions a member can perform independently of their team role.

Telephony Access Levels

LevelPermissions
noneNo telephony access
observerView call logs, recordings, phone numbers, and team voices
operatorMake outbound calls, link numbers to forms, start campaigns
managerProvision/release numbers, manage campaigns, pause/resume numbers
fullComplete control including creating/deleting team voices

Request Body

telephony_accessstringrequired

The telephony access level to set. One of: none, observer, operator, manager, full.

Request

json
{
  "telephony_access": "operator"
}

Response

json
{
  "message": "Telephony access updated",
  "telephony_access": "operator"
}

List Team Voices

GET/api/voices?teamId=:teamId

List all voices available to the user, including team voices for the specified team. Team voices are shared across all team members with Observer-level or higher telephony access.

The response includes source and teamName fields to distinguish between personal and team voices.

Response

json
{
  "voices": [
    {
      "id": "qwen:preset:Ryan",
      "name": "Ryan",
      "category": "preset",
      "source": "system"
    },
    {
      "id": "qwen:clone:abc123",
      "name": "My Voice",
      "category": "custom",
      "type": "clone",
      "source": "personal"
    },
    {
      "id": "qwen:clone:def456",
      "name": "Team Voice",
      "category": "custom",
      "type": "design",
      "source": "team",
      "teamName": "Marketing Team",
      "teamId": "team123"
    }
  ]
}

Create Team Voice

POST/api/voices/create

Create a custom voice and assign it to a team. Requires Full Access telephony permission in the target team. The voice creator's account is billed for the $5 voice creation fee.

Request Body

namestringrequired

Display name for the voice.

typestringrequired

Voice type: clone or design.

teamIdstringrequired

The team ID to assign the voice to.

sampleBlobUrlstring

Audio sample URL for clone voices.

Request

json
{
  "name": "Team Support Voice",
  "type": "design",
  "teamId": "team123",
  "designGender": "female",
  "designTone": "professional"
}

Response

json
{
  "voice": {
    "id": "qwen:clone:new123",
    "dbId": "new123",
    "name": "Team Support Voice",
    "type": "design",
    "category": "custom",
    "createdAt": "2026-03-25T00:00:00.000Z"
  }
}
Last updated: May 23, 2026