Criar um contato em um workspace. Um número de telefone precisa ser único dentro do workspace depois que seus dígitos são normalizados; uma colisão é recusada com 409 e code: PHONE_ALREADY_EXISTS, trazendo o contato existente e a conversa mais recente dele para que você possa reaproveitá-los em vez de tentar de novo. Toda operação é delimitada pelo workspaceId obrigatório. Uma API key com escopo de workspace que nomeie qualquer outro workspace é recusada com 403 antes de qualquer consulta rodar, então uma API key de workspace só consegue alcançar o próprio workspace.
/api/v1/chat/contactsAuthorization
apiKey Sua API key do Studio, pessoal ou com escopo de workspace. Gere uma em Settings e depois API Keys. As operações que rejeitam API keys de workspace dizem isso na própria descrição.
Em: header
Corpo da requisição
application/json
Nome, dados de contato e um vínculo opcional com empresa.
Definições TypeScript
Use o tipo request body no TypeScript.
Corpo da resposta
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://agent-studio.seeyu.ai/api/v1/chat/contacts" \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "workspaceId": "string", "firstName": "string" }'{
"contact": {
"id": "cnt_01J8F2K3N5P9",
"name": "Ana Ribeiro",
"firstName": "Ana",
"lastName": "Ribeiro",
"email": "ana@example.com",
"phone": "+5511987654321",
"avatarUrl": null,
"gender": null,
"description": null,
"identifier": "crm-4821",
"blocked": false,
"contactType": 2,
"company": {
"id": "cmp_01J8F2K3N5PB",
"name": "Ribeiro Ltda",
"domain": "ribeiro.example"
},
"customAttributes": {
"plan": "pro"
},
"additionalAttributes": {
"source": "whatsapp"
},
"lastActivityAt": "2026-08-28T14:22:05.000Z",
"createdAt": "2026-07-24T11:02:19.000Z"
}
}{
"error": "Invalid input: expected string, received undefined",
"details": [
{
"code": "invalid_type",
"expected": "string",
"path": [
"phone"
],
"message": "Invalid input: expected string, received undefined"
}
]
}{
"error": "Unauthorized"
}{
"error": "API key is not authorized for this workspace"
}{
"error": "This contact already has a conversation in progress",
"code": "active_conversation_exists",
"conversation": {
"id": "conv_01J9Z2K3M4N5P6Q7R8S9T0",
"inboxId": "inbox_01J9Z2K3M4N5P6Q7R8S9T0",
"inboxName": "Support",
"status": "open",
"teamName": "Tier 1",
"assigneeId": null,
"assigneeName": null,
"aiAgentActive": false
}
}{
"error": "Rate limit exceeded",
"message": "API rate limit exceeded. Please retry after 2026-09-13T12:00:00.000Z",
"retryAfter": 1789286400000
}{
"error": "Internal server error",
"requestId": "req_01J9Z2K3M4N5P6Q7R8S9T0"
}