GET /v1/triggers/new-message-received

Messages entrants les plus récents de vos contacts, utilisé par les intégrations de polling comme n8n et Zapier.

Renvoie jusqu'à 100 messages entrants les plus récents pour le tenant, triés par created_at DESC. C'est la source de polling pour le nœud trigger Qyvo de n8n et les intégrations équivalentes.

GET /api/v1/triggers/new-message-received

Paramètres de requête

Paramètre Type Description
message_type string Optionnel. Filtre par text, image, audio, document, video, location, contacts, interactive

Requête

curl 'https://www.qyvo.io/api/v1/triggers/new-message-received?message_type=text' \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"
const messages = await fetch(
  'https://www.qyvo.io/api/v1/triggers/new-message-received?message_type=text',
  { headers: { Authorization: `Bearer ${process.env.QYVO_TOKEN}` } },
).then((r) => r.json());
$messages = Http::withToken(env('QYVO_TOKEN'))
    ->get('https://www.qyvo.io/api/v1/triggers/new-message-received', [
        'message_type' => 'text',
    ])
    ->json();
import os, httpx
messages = httpx.get(
    'https://www.qyvo.io/api/v1/triggers/new-message-received',
    params={'message_type': 'text'},
    headers={'Authorization': f"Bearer {os.environ['QYVO_TOKEN']}"},
).json()

Réponse — 200 OK

Un tableau (et non une enveloppe). [] vide quand il n'y a aucun message.

[
  {
    "id": "01J4M...",
    "direction": "inbound",
    "type": "text",
    "content": { "body": "Hi, do you ship to Canada?" },
    "status": "received",
    "contact_id": "01J1Y...",
    "contact_phone": "+14155550123",
    "contact_name": "Romain",
    "contact_email": null,
    "sent_at": null,
    "delivered_at": null,
    "read_at": null,
    "created_at": "2026-05-07T08:14:23+00:00"
  }
]
Champ Type Notes
id UUID Id de message Qyvo
direction string Toujours inbound
type string text, image, audio, …
content object La forme dépend de type{body} pour le texte, {url, mime_type} pour les médias
status string received pour les entrants normaux ; jamais sent/delivered/read (ceux-ci s'appliquent aux sortants)
contact_* divers Champs dénormalisés du contact joint
created_at ISO 8601 Heure d'insertion serveur — le champ que vous comparez pour les nouveaux depuis le dernier poll

Pattern de polling

Mémorisez l'id le plus récent que vous avez traité. Au poll suivant, arrêtez l'itération quand vous l'atteignez. Voir Pagination pour le pattern canonique.

Alternative webhook

Si vous pouvez recevoir des callbacks HTTPS, utilisez plutôt le webhook message.received — même payload, sans polling.