API
посилання.
312 кінцевих точок, повна специфікація OpenAPI, ідемпотентність для кожної мутації та загальнодоступний контракт на безвідмовну роботу. Без чорних ящиків.
"color:#22D3EE">curl "color:#22D3EE">-X "color:#34D399;font-weight:600">POST https://api.rozper.com/v2/calls \
"колір:#22D3EE">-H «Дозвіл: на пред’явника $ROZPER_API_KEY" \
"колір:#22D3EE">-H "Тип вмісту: додаток/json" \
"колір:#22D3EE">-д '{
"до": "+14155551234",
"від": "+12025550100",
"url": "https://your.app/voice/answer"
}'{
"id": "call_01HXY7ZQ9V3J3X8K5N",
"status": "queued",
"to": "+14155551234",
"from": "+12025550100",
"created_at": "2026-05-12T14:23:01Z"
}Жетони на пред'явника.
Охоплений. Поворотний.
Кожен запит містить ключ проекту як маркер носія. Ключі мають область дії (читання, запис, виставлення рахунків), їх можна обертати без простою та закріплювати за IP-адресою з інформаційної панелі.
- Ключі для кожного середовища (тестові/живі)
- Підтримуються облікові дані клієнта OAuth 2.0
- Взаємний TLS доступний на Enterprise
# .env → never commit me
ROZPER_API_KEY=sk_live_8FzqQ...XW7p
# request
curl https://api.rozper.com/v2/account \
-H "Authorization: Bearer $ROZPER_API_KEY"
# 200 OK
{
"id": "acct_01HXY7ZQ9V3J3X8K5N",
"scopes": ["calls.write", "messages.write", "numbers.read"],
"rate_limit": { "limit": 1000, "remaining": 998, "reset": 1715520000 }
}Досліджуйте кожну кінцеву точку.
Створіть дзвінок
Ініціювати вихідний виклик PSTN. Негайно повертається з об’єктом виклику в черзі — прослуховувати вебхуки для змін стану.
toрядокпотрібноНомер призначення E.164.
fromрядокпотрібноПеревірений або орендований номер Розпер.
urlрядокКінцева точка HTTPS, яка повертає голосові інструкції, коли виклик з’єднується.
recordлогічнийЗапишіть обидві ноги у своє сховище. За замовчуванням false.
timeoutціле числоЧас очікування дзвінка в секундах. За замовчуванням 60.
const call = await rozper.calls.create({
to: "+14155551234",
from: "+12025550100",
url: "https://your.app/voice/answer",
}){
"id": "call_01HXY7ZQ9V3J3X8K5N",
"object": "call",
"created_at": "2026-05-12T14:23:01Z"
}Передбачувані, машинозчитувані помилки.
Кожні 4xx і 5xx повертають ту саму форму: стайню code, зрозуміле для людини повідомлення та ідентифікатор запиту, який можна вставити для підтримки.
{
"error": {
"code": "invalid_param",
"message": "to: must be E.164",
"request_id": "req_01HXY7…",
"param_errors": [
{ "param": "to", "reason": "format" }
]
}
}bad_requestНеправильний текст запиту або відсутнє обов’язкове поле.
unauthorizedКлюч API відсутній, прострочений або відкликаний.
forbiddenКлючу бракує обсягу, необхідного для цього ресурсу.
not_foundІдентифікатор ресурсу не існує для цього облікового запису.
conflictКлюч ідемпотентності стикається з іншим корисним навантаженням.
invalid_paramНе вдалося перевірити параметр. Перевірте param_errors[].
rate_limitedВідмова за допомогою заголовка Retry-After.
server_errorНас повідомили. Повторіть ідемпотентні виклики.
Підписано, повторна спроба, захищено від повторного відтворення.
Кожна подія доставляється з підписом HMAC, унікальним ідентифікатором події та міткою часу UTC. Ми повторюємо спробу з експоненційною відстрочкою протягом до 24 годин.
import { verify } from "@rozper/sdk/webhooks"
app.post("/webhooks/rozper", (req, res) => {
const ok = verify({
payload: req.rawBody,
signature: req.header("Rozper-Signature"),
secret: process.env.ROZPER_WEBHOOK_SECRET,
})
if (!ok) return res.status(401).end()
const event = JSON.parse(req.rawBody)
switch (event.type) {
case "call.completed": /* … */
case "recording.ready": /* … */
}
res.json({ received: true })
})call.initiatedВихідний виклик прийнятий оператором.
call.ringingДальній кінець дзвонить.
call.answeredДалекий кінець відповів (або AMD виявив людину).
call.completedДзвінок завершено. Включає тривалість, виставлення рахунків, метадані етапу.
recording.readyДоступна завантажена та підписана URL-адреса запису.
message.deliveredКвитанція про доставку перевізником (якщо підтримується).
agent.handoffАгент штучного інтелекту перейшов до черги людини.
number.purchasedОтримання номера завершено.
Кожна зміна простою англійською мовою.
- 2026-05-10v2026.05
- featГолосові агенти тепер підтримують інструментальні виклики з потоковими відповідями.
- featНова кінцева точка /v2/numbers/port для програмних надсилань LNP.
- 2026-04-22v2026.04
- виправитиКеш ідемпотентності тепер правильно враховує 24-годинний TTL для викликів POST.
- рутинна роботаЗастарілі кінцеві точки v1 видалено (оголошено 2025-11).
- 2026-03-31v2026.03
- featБета-версія медіа-потоків WebSocket тепер загальнодоступна.
- featШаблонні повідомлення WhatsApp додано в /v2/messages.