Periskope API: New Endpoints, Search & More

We've shipped a major upgrade to the Periskope API with new endpoints, search and filtering across list endpoints, and several developer-experience improvements.
Everything is live and fully backward-compatible, so existing integrations continue to work unchanged.
📅 Scheduled Messages
You can now schedule one-off or recurring messages and manage their full lifecycle through the API:
POST /v1/message/scheduled- Create a scheduled message with text/media,scheduled_at, and repeat configurationGET /v1/message/scheduled- List scheduled messages with filters for chat, status, repeat,q, and time windowGET /v1/message/scheduled/{id}- Fetch a scheduled message and its current statusPATCH /v1/message/scheduled/{id}- Edit, pause, resume, or skip the next runDELETE /v1/message/scheduled/{id}- Delete a scheduled message while preserving run historyGET /v1/message/scheduled/{id}/occurrences- Retrieve paginated run history
📨 Send & confirm
Send a message and wait for delivery confirmation in the same request, with a default 20-second wait and automatic asynchronous fallback if it times out.
POST /v1/message/send-sync
📜 Audit logs
Audit trails are now available for chats and tickets, filterable by actor, action, and time.
GET /v1/chats/{chat_id}/audit-logsGET /v1/tickets/{ticket_id}/audit-logs
🤖 Per-chat AI controls
Turn AI replies and AI flagging on or off for an individual chat.
PATCH /v1/chats/{chat_id}/ai
🔎 Search & filters, now across list endpoints
Major list endpoints now support free-text q search and consistent filtering. q uses literal substring matching.
Multi-value filters are comma-separated, with OR logic within a filter and AND logic across filters. Most endpoints also support time windows and sort_by / sort_order.
Message search is also faster: POST /v1/message/search now supports full-text search, date filters, and a limit of up to 50.
Chat and contact search are more reliable too, with q now matching phone numbers as well as names.
⚡ Developer experience
x-phone is now optional on most routes. When omitted, the API automatically derives it from the chat, message, or request body where possible.
Validation is now more consistent. Invalid requests return clear 422 field-level errors upfront.
Full endpoint details and request/response examples are in the API reference doc. If you run into issues or have questions, let us know. ✨