import { PeriskopeApi } from '@periskope/periskope-client';
const client = new PeriskopeApi({
authToken: 'YOUR_API_KEY',
phone: '919876543210', // the phone to act with (x-phone)
});
async function main() {
const response = await client.messages.createMessageQueue({
queue_id: '00000000-0000-0000-0000-000000000000',
});
console.log(response);
}
main();curl -X POST 'https://api.periskope.app/v1/message/queues' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'x-phone: 919876543210' \
-H 'Content-Type: application/json' \
-d '{
"queue_id": "00000000-0000-0000-0000-000000000000"
}'[
{
"queue_id": "00000000-0000-0000-0000-000000000000",
"unique_id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"message_id": "true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"chat_id": "911111111111@c.us",
"performed_by": "api",
"status": "delivered",
"status_description": "Delivered to recipient.",
"message": {
"body": "Hello World",
"type": "chat",
"quoted_message_id": null
},
"timeline": {
"queued_at": "2026-01-15T09:30:00.000Z",
"sent_at": "2026-01-15T09:30:02.000Z",
"failed_at": null,
"processing_started_at": null
},
"attempts": 1
}
]{
"code": "ERROR",
"message": "The phone is off or its server is unreachable",
"status": 400
}{
"code": "UNAUTHORIZED_ERROR",
"message": "Invalid bearer auth token",
"status": 401
}{
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"status": 422,
"fields": {
"body.chat_id": {
"message": "chat_id is required"
}
}
}{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}List All Message Queues
Lists the jobs retained in the send queue of the phone. Pass broadcast_id to track a broadcast, or queue_id for a single job.
import { PeriskopeApi } from '@periskope/periskope-client';
const client = new PeriskopeApi({
authToken: 'YOUR_API_KEY',
phone: '919876543210', // the phone to act with (x-phone)
});
async function main() {
const response = await client.messages.createMessageQueue({
queue_id: '00000000-0000-0000-0000-000000000000',
});
console.log(response);
}
main();curl -X POST 'https://api.periskope.app/v1/message/queues' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'x-phone: 919876543210' \
-H 'Content-Type: application/json' \
-d '{
"queue_id": "00000000-0000-0000-0000-000000000000"
}'[
{
"queue_id": "00000000-0000-0000-0000-000000000000",
"unique_id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"message_id": "true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"chat_id": "911111111111@c.us",
"performed_by": "api",
"status": "delivered",
"status_description": "Delivered to recipient.",
"message": {
"body": "Hello World",
"type": "chat",
"quoted_message_id": null
},
"timeline": {
"queued_at": "2026-01-15T09:30:00.000Z",
"sent_at": "2026-01-15T09:30:02.000Z",
"failed_at": null,
"processing_started_at": null
},
"attempts": 1
}
]{
"code": "ERROR",
"message": "The phone is off or its server is unreachable",
"status": 400
}{
"code": "UNAUTHORIZED_ERROR",
"message": "Invalid bearer auth token",
"status": 401
}{
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"status": 422,
"fields": {
"body.chat_id": {
"message": "chat_id is required"
}
}
}{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}Authorizations
Your Periskope API token, sent as Authorization: Bearer <token>. Generate one from the Periskope dashboard under Settings → API & Webhooks. API access requires an active Pro or Enterprise plan.
Headers
Phone to act with: country code + number without symbols or spaces (e.g. 911111111111), or a phone_id (phone-xxxxxxxxxxxx). The phone must be connected to the org and accessible by the API token.
1"919876543210"
Body
Response
The matching queue jobs
Id of the queue job
"00000000-0000-0000-0000-000000000000"
unique_id of the queued message — the value returned by POST /message/send
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
WhatsApp message_id assigned once the message was submitted. null while the job has not completed.
"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Chat the message is being sent to
"911111111111@c.us"
Who queued the message: a member's email, or 'api' when queued via the API
"api"
Current state of the job: one of queued, scheduled, sending, sent, pending, delivered, read, played, failed. Queue states (queued, scheduled, sending, failed) come from the send queue; once the job completed, the state reflects the delivery acknowledgement (sent, delivered, read, played — or pending/failed).
"delivered"
Human-readable explanation of the status
"Delivered to recipient."
The content of the queued message
Show child attributes
Show child attributes
Timestamps of the job lifecycle
Show child attributes
Show child attributes
Number of submission attempts made so far
1
Was this page helpful?