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
ownerroleFull access. Can manage members, billing, and delete the team.
adminroleCan create, edit, delete forms, manage members, and view responses.
editorroleCan create and edit forms, view responses. Cannot manage members.
viewerroleCan view forms and responses. Cannot create or edit.
/api/v1/teamsPOST/api/v1/teamsGET/api/v1/teams/:teamIdPUT/api/v1/teams/:teamIdDELETE/api/v1/teams/:teamIdGET/api/v1/teams/:teamId/membersPOST/api/v1/teams/:teamId/membersPUT/api/v1/teams/:teamId/members/:memberIdDELETE/api/v1/teams/:teamId/members/:memberIdGET/api/v1/teams/:teamId/invitationsPOST/api/v1/teams/:teamId/invitationsDELETE/api/v1/teams/:teamId/invitations/:invIdGET/api/v1/teams/:teamId/audit-logsGET/api/v1/teams/:teamId/brandingPUT/api/v1/teams/:teamId/brandingDELETE/api/v1/teams/:teamId/brandingGET/api/v1/teams/:teamId/subdomainPUT/api/v1/teams/:teamId/subdomainGET/api/v1/teams/:teamId/custom-domainPOST/api/v1/teams/:teamId/custom-domainDELETE/api/v1/teams/:teamId/custom-domainPOST/api/v1/teams/:teamId/custom-domain/verifyGET/api/v1/teams/:teamId/billingGET/api/v1/teams/:teamId/analyticsGET/api/v1/forms/:id/guestsPOST/api/v1/forms/:id/guestsDELETE/api/v1/forms/:id/guestsPOST/api/v1/forms/guests/acceptPUT/api/v1/teams/:teamId/members/:memberId/telephonyGET/api/voices?teamId=:teamIdPOST/api/voices/createResponse
{
"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
curl -X GET "https://api.nueform.io/api/v1/teams" \
-H "Authorization: Bearer YOUR_API_KEY"
Create Team
/api/v1/teamsCreates a new team. The authenticated user becomes the team owner.
Request Body
namestringTeam name
Request Example
{
"name": "Marketing"
}
Response
{
"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
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
/api/v1/teams/:teamIdRetrieves a single team by ID.
Path Parameters
teamIdstringThe team ID
Response
{
"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
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f" \
-H "Authorization: Bearer YOUR_API_KEY"
Update Team
/api/v1/teams/:teamIdUpdates team properties. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Request Body
namestringNew team name
Request Example
{
"name": "Marketing & Growth"
}
Response
Returns the updated team object.
Code Examples
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
/api/v1/teams/:teamIdPermanently 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
teamIdstringThe team ID
Response
{
"success": true
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f" \
-H "Authorization: Bearer YOUR_API_KEY"
List Members
/api/v1/teams/:teamId/membersReturns all members of a team.
Path Parameters
teamIdstringThe team ID
Response
{
"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
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/members" \
-H "Authorization: Bearer YOUR_API_KEY"
Add Member
/api/v1/teams/:teamId/membersAdds 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
teamIdstringThe team ID
Request Body
user_idstringThe user ID to add
rolestringRole to assign: "admin", "editor", "viewer" (default: "viewer")
Request Example
{
"user_id": "665a1b2c3d4e5f6a7b8c9d0e",
"role": "editor"
}
Response
{
"id": "66d2e3f4a5b6c7d8e9f0a1b2",
"user_id": "665a1b2c3d4e5f6a7b8c9d0e",
"team_id": "665b2c3d4e5f6a7b8c9d0e1f",
"role": "editor",
"joined_at": "2026-02-28T12:00:00.000Z"
}
Code Examples
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
/api/v1/teams/:teamId/members/:memberIdUpdates a team member's role. Requires owner or admin role. You cannot change the owner's role.
Path Parameters
teamIdstringThe team ID
memberIdstringThe team member ID
Request Body
rolestringNew role: "admin", "editor", "viewer"
Request Example
{
"role": "admin"
}
Response
{
"id": "66d2e3f4a5b6c7d8e9f0a1b2",
"user_id": "665a1b2c3d4e5f6a7b8c9d0e",
"team_id": "665b2c3d4e5f6a7b8c9d0e1f",
"role": "admin",
"joined_at": "2026-01-15T14:30:00.000Z"
}
Code Examples
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
/api/v1/teams/:teamId/members/:memberIdRemoves a member from a team. Requires owner or admin role. The team owner cannot be removed.
Path Parameters
teamIdstringThe team ID
memberIdstringThe team member ID
Response
{
"success": true
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/members/66d2e3f4a5b6c7d8e9f0a1b2" \
-H "Authorization: Bearer YOUR_API_KEY"
List Invitations
/api/v1/teams/:teamId/invitationsReturns all pending invitations for a team. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Response
{
"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
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/invitations" \
-H "Authorization: Bearer YOUR_API_KEY"
Create Invitation
/api/v1/teams/:teamId/invitationsSends 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
teamIdstringThe team ID
Request Body
emailstringEmail address to invite
rolestringRole to assign on acceptance: "admin", "editor", "viewer" (default: "editor")
Request Example
{
"email": "carol@example.com",
"role": "editor"
}
Response
{
"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
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
/api/v1/teams/:teamId/invitations/:invIdCancels a pending invitation. Requires owner or admin role. The invitation token will no longer be valid.
Path Parameters
teamIdstringThe team ID
invIdstringThe invitation ID
Response
{
"success": true
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/invitations/66e1f2a3b4c5d6e7f8a9b0c1" \
-H "Authorization: Bearer YOUR_API_KEY"
Audit Logs
/api/v1/teams/:teamId/audit-logsReturns a paginated list of audit log events for the team. Requires owner or admin role. Enterprise plan only.
Path Parameters
teamIdstringThe team ID
Query Parameters
actionstringFilter by action type (e.g., "form.published", "member.removed")
user_idstringFilter by the user who performed the action
sincestringISO 8601 date — only events from this date forward
untilstringISO 8601 date — only events up to this date
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 50, max: 100)
Response
{
"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
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
/api/v1/teams/:teamId/brandingReturns the team's branding configuration. Requires team membership.
Path Parameters
teamIdstringThe team ID
Response
{
"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
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/branding" \
-H "Authorization: Bearer YOUR_API_KEY"
Update Team Branding
/api/v1/teams/:teamId/brandingUpdates the team's branding configuration. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Request Body
logo_urlstringURL of the team logo
primary_colorstringPrimary hex color (e.g., "#6366f1")
background_colorstringBackground hex color
text_colorstringText hex color
font_familystringGoogle Fonts font family name
footer_textstringCustom footer text
Request Example
{
"primary_color": "#8b5cf6",
"font_family": "Poppins",
"footer_text": "2026 Acme Corp. All rights reserved."
}
Response
Returns the updated branding object.
Code Examples
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
/api/v1/teams/:teamId/brandingRemoves all team branding settings, reverting forms to owner or system defaults. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Response
{
"success": true
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/branding" \
-H "Authorization: Bearer YOUR_API_KEY"
Get Subdomain
/api/v1/teams/:teamId/subdomainReturns the team's subdomain configuration. Requires team membership.
Path Parameters
teamIdstringThe team ID
Response
{
"subdomain": "acme-marketing",
"full_url": "https://acme-marketing.nueform.io"
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/subdomain" \
-H "Authorization: Bearer YOUR_API_KEY"
Set Subdomain
/api/v1/teams/:teamId/subdomainSets or updates the team's subdomain. Requires owner or admin role. Pro or Enterprise plan required.
Path Parameters
teamIdstringThe team ID
Request Body
subdomainstringDesired subdomain (lowercase letters, numbers, hyphens only)
Request Example
{
"subdomain": "acme-marketing"
}
Response
{
"subdomain": "acme-marketing",
"full_url": "https://acme-marketing.nueform.io"
}
Code Examples
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
/api/v1/teams/:teamId/custom-domainReturns the team's custom domain configuration. Requires team membership. Enterprise plan only.
Path Parameters
teamIdstringThe team ID
Response
{
"domain": "forms.acmecorp.com",
"status": "verified",
"ssl_status": "active",
"cname_target": "custom.nueform.io",
"verified_at": "2026-03-15T10:00:00.000Z"
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain" \
-H "Authorization: Bearer YOUR_API_KEY"
Add Custom Domain
/api/v1/teams/:teamId/custom-domainAdds 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
teamIdstringThe team ID
Request Body
domainstringThe custom domain (e.g., "forms.acmecorp.com")
Request Example
{
"domain": "forms.acmecorp.com"
}
Response
{
"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
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
/api/v1/teams/:teamId/custom-domainRemoves the custom domain from the team. Forms will revert to the default NueForm URL. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Response
{
"success": true
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain" \
-H "Authorization: Bearer YOUR_API_KEY"
Verify Custom Domain
/api/v1/teams/:teamId/custom-domain/verifyVerifies that DNS records are correctly configured for the custom domain. SSL is automatically provisioned upon successful verification. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Response (Success)
{
"domain": "forms.acmecorp.com",
"status": "verified",
"ssl_status": "provisioning",
"verified_at": "2026-03-20T15:00:00.000Z"
}
Response (Failure)
{
"domain": "forms.acmecorp.com",
"status": "pending_verification",
"error": "CNAME record not found. Expected: forms.acmecorp.com -> custom.nueform.io"
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/custom-domain/verify" \
-H "Authorization: Bearer YOUR_API_KEY"
Get Billing
/api/v1/teams/:teamId/billingReturns the team's billing summary, including plan details, seat usage, and next invoice information. Requires owner or admin role.
Path Parameters
teamIdstringThe team ID
Response
{
"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
curl -X GET "https://api.nueform.io/api/v1/teams/665b2c3d4e5f6a7b8c9d0e1f/billing" \
-H "Authorization: Bearer YOUR_API_KEY"
Get Team Analytics
/api/v1/teams/:teamId/analyticsReturns aggregated analytics across all team forms. Requires team membership.
Path Parameters
teamIdstringThe team ID
Query Parameters
sincestringISO 8601 date — only data from this date forward
untilstringISO 8601 date — only data up to this date
Response
{
"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
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
/api/v1/forms/:id/guestsReturns all guests invited to a specific form. Requires owner or admin role on the form's team.
Path Parameters
idstringThe form ID
Response
{
"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
curl -X GET "https://api.nueform.io/api/v1/forms/665f1a2b3c4d5e6f7a8b9c0d/guests" \
-H "Authorization: Bearer YOUR_API_KEY"
Invite Guest
/api/v1/forms/:id/guestsInvites 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
idstringThe form ID
Request Body
emailstringEmail address of the guest
permissionstringPermission level: "view" or "edit" (default: "view")
Request Example
{
"email": "contractor@external.com",
"permission": "edit"
}
Response
{
"id": "671a2b3c4d5e6f7a8b9c0d1e",
"email": "contractor@external.com",
"permission": "edit",
"status": "pending",
"invited_by": "665a0a1b2c3d4e5f6a7b8c9d",
"created_at": "2026-03-20T12:00:00.000Z"
}
Code Examples
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
/api/v1/forms/:id/guestsRemoves a guest's access from a specific form. Requires owner or admin role on the form's team.
Path Parameters
idstringThe form ID
Request Body
guest_idstringThe guest's ID to remove
Request Example
{
"guest_id": "671a2b3c4d5e6f7a8b9c0d1e"
}
Response
{
"success": true
}
Code Examples
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
/api/v1/forms/guests/acceptAccepts 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
tokenstringThe invitation token from the email link
Request Example
{
"token": "gt_abc123def456ghi789"
}
Response
{
"form_id": "665f1a2b3c4d5e6f7a8b9c0d",
"form_title": "Customer Survey",
"permission": "edit",
"team_name": "Marketing"
}
Code Examples
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 RequestMissing required fields, invalid role
401UnauthorizedMissing or invalid API key
403ForbiddenInsufficient role for the action
404Not FoundTeam, member, or invitation not found
409ConflictUser already a member, duplicate invitation
500Server ErrorInternal server error
Error Example
{
"error": "Not authorized to manage team members"
}
Update Telephony Access
/api/v1/teams/:teamId/members/:memberId/telephonyUpdate 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
| Level | Permissions |
|---|---|
none | No telephony access |
observer | View call logs, recordings, phone numbers, and team voices |
operator | Make outbound calls, link numbers to forms, start campaigns |
manager | Provision/release numbers, manage campaigns, pause/resume numbers |
full | Complete control including creating/deleting team voices |
Request Body
telephony_accessstringrequiredThe telephony access level to set. One of: none, observer, operator, manager, full.
List Team Voices
/api/voices?teamId=:teamIdList 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
{
"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
/api/voices/createCreate 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
namestringrequiredDisplay name for the voice.
typestringrequiredVoice type: clone or design.
teamIdstringrequiredThe team ID to assign the voice to.
sampleBlobUrlstringAudio sample URL for clone voices.
Request
{
"name": "Team Support Voice",
"type": "design",
"teamId": "team123",
"designGender": "female",
"designTone": "professional"
}
Response
{
"voice": {
"id": "qwen:clone:new123",
"dbId": "new123",
"name": "Team Support Voice",
"type": "design",
"category": "custom",
"createdAt": "2026-03-25T00:00:00.000Z"
}
}