POST
/api/v1/dealsCria um negócio no workspace da chave e retorna o registro criado.
Exemplos
A URL usa o servidor de produção. Defina PIPEFACIL_API_KEY e as variáveis de caminho (como SEQ ou ID) com os identificadores reais. Ajuste o corpo antes de executar: requisições de escrita alteram dados do workspace.
cURL
curl --request POST \
--url "https://pipefacil-server.matchsales.com.br/api/v1/deals" \
--header "Authorization: Bearer $PIPEFACIL_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"name": "Proposta de consultoria",
"contactFirstName": "Ana",
"contactLastName": "Silva",
"email": "ana@example.com",
"value": 1500,
"currency": "BRL"
}'JavaScript
const response = await fetch(`https://pipefacil-server.matchsales.com.br/api/v1/deals`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PIPEFACIL_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Proposta de consultoria",
"contactFirstName": "Ana",
"contactLastName": "Silva",
"email": "ana@example.com",
"value": 1500,
"currency": "BRL"
}),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const text = await response.text();
const data = text ? JSON.parse(text) : null;Python
import os
import json
import requests
response = requests.request(
"POST",
f"https://pipefacil-server.matchsales.com.br/api/v1/deals",
headers={"Authorization": f"Bearer {os.environ['PIPEFACIL_API_KEY']}"},
json=json.loads("{\n \"name\": \"Proposta de consultoria\",\n \"contactFirstName\": \"Ana\",\n \"contactLastName\": \"Silva\",\n \"email\": \"ana@example.com\",\n \"value\": 1500,\n \"currency\": \"BRL\"\n}"),
)
response.raise_for_status()
data = response.json() if response.content else NoneCorpo da requisição
Content-Type: application/json · obrigatório
{
"name": "Proposta de consultoria",
"contactFirstName": "Ana",
"contactLastName": "Silva",
"email": "ana@example.com",
"value": 1500,
"currency": "BRL"
}| Campo | Tipo | Obrigatório no objeto | Descrição |
|---|---|---|---|
name | string | Não | Aceita null. Até 255 caracteres. |
phone | string | Não | Telefone do contato, opcional. Sem telefone, o negócio pode não ter contato; um nome ou e-mail permite criar um contato sem telefone. Aceita null. |
contactName | string | Não | Nome completo do contato, dividido no primeiro espaço em firstName/lastName. Ignorado quando contactFirstName ou contactLastName é enviado. Aceita null. Até 255 caracteres. |
contactFirstName | string | Não | Aceita null. Até 255 caracteres. |
contactLastName | string | Não | Aceita null. Até 255 caracteres. |
email | string | Não | Formato: email. Aceita null. Até 255 caracteres. |
notes | string | Não | Aceita null. Até 2000 caracteres. |
value | number | Não | Aceita null. Mínimo: 0. |
closeProbability | integer | Não | Aceita null. Mínimo: 0. Máximo: 100. |
expectedCloseAt | string | Não | Formato: date-time. Aceita null. |
currency | string | Não | Padrão: BRL. Aceita null. Até 3 caracteres. |
stageId | string | Não | Padrão: primeira etapa do funil. Aceita null. |
companyId | string | Não | Aceita null. |
channelId | string | Não | Aceita null. |
responsibleUserId | string | Não | Aceita null. |
useAssignmentStrategy | boolean | Não | Aceita null. |
customFields | object | Não | Aceita null. |
company | object | Não | Aceita null. |
company.name | string | Sim | Até 255 caracteres. |
company.domain | string | Não | Aceita null. Até 255 caracteres. |
company.cnpj | string | Não | Aceita null. Até 30 caracteres. |
company.industry | string | Não | Aceita null. Até 255 caracteres. |
company.website | string | Não | Aceita null. Até 500 caracteres. |
company.logoUrl | string | Não | Aceita null. Até 500 caracteres. |
company.notes | string | Não | Aceita null. Até 2000 caracteres. |
tracking | object | Não | Aceita null. |
tracking.utmContent | string | Não | Aceita null. |
tracking.utmMedium | string | Não | Aceita null. |
tracking.utmCampaign | string | Não | Aceita null. |
tracking.utmSource | string | Não | Aceita null. |
tracking.utmTerm | string | Não | Aceita null. |
tracking.utmReferrer | string | Não | Aceita null. |
tracking.referrer | string | Não | Aceita null. |
tracking.gclientid | string | Não | Aceita null. |
tracking.gclid | string | Não | Aceita null. |
tracking.fbclid | string | Não | Aceita null. |
tracking.metaLeadId | string | Não | Aceita null. |
tracking.fbp | string | Não | Aceita null. |
tracking.fbc | string | Não | Aceita null. |
tracking.clientIpAddress | string | Não | Aceita null. |
tracking.clientUserAgent | string | Não | Aceita null. |
tracking.ctwaClid | string | Não | Aceita null. |
metadata | object | Não | Metadados adicionais do negócio. Aceita null. |
Esquema OpenAPI
{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 255,
"nullable": true
},
"phone": {
"type": "string",
"description": "Telefone do contato, opcional. Sem telefone, o negócio pode não ter contato; um nome ou e-mail permite criar um contato sem telefone.",
"nullable": true
},
"contactName": {
"type": "string",
"maxLength": 255,
"nullable": true,
"description": "Nome completo do contato, dividido no primeiro espaço em firstName/lastName. Ignorado quando contactFirstName ou contactLastName é enviado."
},
"contactFirstName": {
"type": "string",
"maxLength": 255,
"nullable": true
},
"contactLastName": {
"type": "string",
"maxLength": 255,
"nullable": true
},
"email": {
"type": "string",
"format": "email",
"maxLength": 255,
"nullable": true
},
"notes": {
"type": "string",
"maxLength": 2000,
"nullable": true
},
"value": {
"type": "number",
"minimum": 0,
"nullable": true
},
"closeProbability": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"nullable": true
},
"expectedCloseAt": {
"type": "string",
"format": "date-time",
"nullable": true
},
"currency": {
"type": "string",
"maxLength": 3,
"nullable": true,
"description": "Padrão: BRL."
},
"stageId": {
"type": "string",
"nullable": true,
"description": "Padrão: primeira etapa do funil."
},
"companyId": {
"type": "string",
"nullable": true
},
"channelId": {
"type": "string",
"nullable": true
},
"responsibleUserId": {
"type": "string",
"nullable": true
},
"useAssignmentStrategy": {
"type": "boolean",
"nullable": true
},
"customFields": {
"type": "object",
"nullable": true,
"additionalProperties": true
},
"company": {
"allOf": [
{
"$ref": "#/components/schemas/CreateCompanyRequest"
}
],
"nullable": true
},
"tracking": {
"allOf": [
{
"$ref": "#/components/schemas/DealTracking"
}
],
"nullable": true
},
"metadata": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Metadados adicionais do negócio."
}
},
"example": {
"name": "Proposta de consultoria",
"contactFirstName": "Ana",
"contactLastName": "Silva",
"email": "ana@example.com",
"value": 1500,
"currency": "BRL"
}
}Respostas
201Criado
| Campo | Tipo | Descrição |
|---|---|---|
data | DealResponse | Negócio resumido retornado na criação ou atualização. |
data.id | string | — |
data.seq | integer | — |
data.name | string | — |
data.contactId | string | Aceita null. |
data.responsibleUserId | string | — |
data.companyId | string | Aceita null. |
data.pipelineId | string | — |
data.stageId | string | — |
data.value | number | — |
data.currency | string | — |
data.closeProbability | integer | — |
data.source | string | — |
data.status | string | open | won | lost |
data.coOwnerUserId | string | Aceita null. |
data.expectedCloseAt | string | Formato: date-time. Aceita null. |
data.stageChangedAt | string | Formato: date-time. |
data.closedAt | string | Formato: date-time. Aceita null. |
data.lostReason | string | Aceita null. |
data.customFields | object | — |
data.createdAt | string | Formato: date-time. |
data.tracking | object | Aceita null. |
data.tracking.utmContent | string | Aceita null. |
data.tracking.utmMedium | string | Aceita null. |
data.tracking.utmCampaign | string | Aceita null. |
data.tracking.utmSource | string | Aceita null. |
data.tracking.utmTerm | string | Aceita null. |
data.tracking.utmReferrer | string | Aceita null. |
data.tracking.referrer | string | Aceita null. |
data.tracking.gclientid | string | Aceita null. |
data.tracking.gclid | string | Aceita null. |
data.tracking.fbclid | string | Aceita null. |
data.tracking.metaLeadId | string | Aceita null. |
data.tracking.fbp | string | Aceita null. |
data.tracking.fbc | string | Aceita null. |
data.tracking.clientIpAddress | string | Aceita null. |
data.tracking.clientUserAgent | string | Aceita null. |
data.tracking.ctwaClid | string | Aceita null. |
message | string | Aceita null. |
Esquema OpenAPI
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/DealResponse"
},
"message": {
"type": "string",
"nullable": true
}
}
}400Falha de validação dos campos; `fieldErrors` contém os erros.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}401Chave ausente, malformada, desconhecida, revogada ou expirada, ou membro emissor inativo.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}409Conflito de estado, como um negócio aberto duplicado para o contato/funil, ou limite do plano atingido (`QUOTA_EXCEEDED`), como na criação de um funil além da cota.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}429Limite de requisições excedido por workspace ou IP.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}