Crea una key, lista conversaciones, envía una respuesta, registra un webhook. Sin install de SDK. Los SDKs son endulzante.
Abre Ajustes → API Keys, haz clic en Nueva key, ponle label, elige scopes. Copia una vez. Las keys que empiezan con ir_live_ envían mensajes reales. Las que empiezan con ir_test_ nunca lo hacen.
# .env
IR_API_KEY=ir_live_3f2a...Cada endpoint de lista usa cursor pagination. Pasa ?cursor= para la siguiente página. Máximo 100 por llamada.
curl https://api.instantreply.co/v1/conversations \
-H "Authorization: Bearer $IR_API_KEY"POST un mensaje a una conversación. Con una test key la llamada devuelve un 201 falso y nunca toca Meta. Con una live key la plataforma maneja entrega, reintentos y compliance.
curl -X POST https://api.instantreply.co/v1/conversations/$ID/messages \
-H "Authorization: Bearer $IR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "content": "Thanks for reaching out." }'La respuesta incluye un signing secret (whsec_...). Verifica X-InstantReply-Signature en cada payload con HMAC_SHA256(secret, timestamp + "." + rawBody). La entrega es al menos una vez con tres intentos; procesa X-InstantReply-Delivery de forma idempotente y revisa GET /v1/webhooks/:id/deliveries.
curl -X POST https://api.instantreply.co/v1/webhooks \
-H "Authorization: Bearer $IR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/webhooks/ir",
"events": [
"message.received",
"message.sent",
"conversation.created",
"conversation.closed",
"conversation.assigned",
"contact.updated",
"template.status_update",
"message.delivery_failed"
]
}'