Ir para o conteúdo

Listar mensagens da conversa

GET/api/v1/conversations/{conversationKey}/messages

Retorna o histórico da conversa paginado por cursor. Uma conversa fora da visibilidade do membro resulta em 404. Exige whatsapp.view_conversations. Sem since, pagina para trás a partir das mensagens mais recentes, para abrir uma conversa. Com since, pagina para frente a partir do instante informado, para acompanhamento contínuo. Os itens de cada página vêm em ordem cronológica nos dois modos. Consulte primeiro sem since. Depois, use em since o horário da última mensagem recebida. O limite é inclusivo: mensagens com esse mesmo horário podem repetir. Remova duplicatas pelo identificador da mensagem. Ao percorrer várias páginas para frente, mantenha since junto de cursor. Um cursor enviado sem since volta ao modo de leitura para trás.

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 GET \
  --url "https://pipefacil-server.matchsales.com.br/api/v1/conversations/$CONVERSATIONKEY/messages" \
  --header "Authorization: Bearer $PIPEFACIL_API_KEY"
JavaScript
const response = await fetch(`https://pipefacil-server.matchsales.com.br/api/v1/conversations/${process.env.CONVERSATIONKEY}/messages`, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.PIPEFACIL_API_KEY}`,
  },
});

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(
    "GET",
    f"https://pipefacil-server.matchsales.com.br/api/v1/conversations/{os.environ['CONVERSATIONKEY']}/messages",
    headers={"Authorization": f"Bearer {os.environ['PIPEFACIL_API_KEY']}"},
)
response.raise_for_status()
data = response.json() if response.content else None

Parâmetros

NomeLocalTipoObrigatórioDescrição
conversationKeypathstringSimIdentificador da conversa ou telefone que permita localizá-la.
limitqueryintegerNão—
cursorquerystringNãoCursor opaco retornado pela página anterior. Mantenha since ao paginar para frente.
channelIdquerystringNãoRestringe o histórico a um único canal.
sincequerystringNãoInstante ISO 8601 UTC, por exemplo, 2026-08-25T03:14:00Z. Ativa a paginação para frente, com limite inclusivo. Uma data sem horário resulta em 400.

Respostas

200Sucesso
CampoTipoDescrição
dataobject—
data.itemsarray—
data.items[].idstring—
data.items[].conversationIdstring—
data.items[].channelIdstringAceita null.
data.items[].externalIdstringAceita null.
data.items[].directionstringValores: inbound, outbound.
data.items[].senderPhonestringAceita null.
data.items[].recipientPhonestringAceita null.
data.items[].bodystring—
data.items[].previewTextstring—
data.items[].typestring—
data.items[].statusstring—
data.items[].readboolean—
data.items[].timestampstringFormato: date-time.
data.items[].statusTimestampstringFormato: date-time. Aceita null.
data.items[].errorMessagestringAceita null.
data.items[].quotedTextstringAceita null.
data.items[].quotedDirectionstringValores: inbound, outbound. Aceita null.
data.items[].quotedMessageIdstringAceita null.
data.items[].quotedTypestringAceita null.
data.items[].quotedMediaobjectAceita null.
data.items[].quotedMedia.mediaAssetIdstringAceita null.
data.items[].quotedMedia.statusstringEstado de ingestão da mídia armazenada. Aceita null.
data.items[].quotedMedia.mediaTypestring—
data.items[].quotedMedia.contentTypestringAceita null.
data.items[].quotedMedia.captionstringAceita null.
data.items[].quotedMedia.filenamestringAceita null.
data.items[].quotedMedia.sizeBytesintegerFormato: int64. Aceita null.
data.items[].quotedMedia.durationMsintegerAceita null.
data.items[].quotedMedia.widthintegerAceita null.
data.items[].quotedMedia.heightintegerAceita null.
data.items[].quotedMedia.providerMediaIdstringAceita null.
data.items[].quotedMedia.providerMediaUrlstringAceita null.
data.items[].quotedMedia.contentUrlstringURL relativa para baixar o arquivo. Nula enquanto a mídia não estiver READY. A cópia do provedor para o armazenamento é assíncrona. Aceita null.
data.items[].sentByUserIdstringAceita null.
data.items[].originstringOrigem da mensagem: api, app, automation, agent ou outra. Aceita null.
data.items[].originLabelstringAceita null.
data.items[].mediaobjectAceita null.
data.items[].media.mediaAssetIdstringAceita null.
data.items[].media.statusstringEstado de ingestão da mídia armazenada. Aceita null.
data.items[].media.mediaTypestring—
data.items[].media.contentTypestringAceita null.
data.items[].media.captionstringAceita null.
data.items[].media.filenamestringAceita null.
data.items[].media.sizeBytesintegerFormato: int64. Aceita null.
data.items[].media.durationMsintegerAceita null.
data.items[].media.widthintegerAceita null.
data.items[].media.heightintegerAceita null.
data.items[].media.providerMediaIdstringAceita null.
data.items[].media.providerMediaUrlstringAceita null.
data.items[].media.contentUrlstringURL relativa para baixar o arquivo. Nula enquanto a mídia não estiver READY. A cópia do provedor para o armazenamento é assíncrona. Aceita null.
data.items[].contentobjectDados estruturados de tipos sem corpo de texto, como anúncio de origem, localização, cartão de contato ou alvo de reação. Aceita null.
data.items[].createdAtstringFormato: date-time.
data.items[].editedAtstringFormato: date-time. Aceita null.
data.items[].deletedAtstringData da exclusão. O conteúdo pode permanecer no histórico de auditoria; a integração decide como exibi-lo. Formato: date-time. Aceita null.
data.nextCursorstringAceita null.
data.hasMoreboolean—
Esquema OpenAPI
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/ConversationMessage"
          }
        },
        "nextCursor": {
          "type": "string",
          "nullable": true
        },
        "hasMore": {
          "type": "boolean"
        }
      }
    }
  }
}
400Falha de validação dos campos; `fieldErrors` contém os erros.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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"
  ]
}
403Autenticado, mas sem acesso: falta de permissão (`FORBIDDEN`), recurso desligado no workspace (`FEATURE_DISABLED`) ou tentativa de acessar uma agenda não permitida.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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"
  ]
}
404Recurso não encontrado ou fora da visibilidade do membro.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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"
  ]
}

Precisa de ajuda?

Encontrou um problema ou ficou com uma dúvida? Fale com a equipe pelo WhatsApp.

Chamar no WhatsApp