API
riferimento.
312 endpoint, specifiche OpenAPI complete, idempotenza su ogni mutazione e un contratto pubblico di uptime. Nessuna scatola nera.
"color:#22D3EE">curl "color:#22D3EE">-X "colore:#34D399;peso-carattere:600">POST https://api.rozper.com/v2/calls \
"colore:#22D3EE">-H "Autorizzazione: Portatore $ROZPER_API_KEY" \
"colore:#22D3EE">-H "Tipo di contenuto: application/json" \
"colore:#22D3EE">-d '{
"A": "+14155551234",
"da": "+12025550100",
"URL": "https://tua.app/voce/risposta"
}'{
"id": "call_01HXY7ZQ9V3J3X8K5N",
"status": "queued",
"to": "+14155551234",
"from": "+12025550100",
"created_at": "2026-05-12T14:23:01Z"
}Gettoni al portatore.
Ambito. Girevole.
Ogni richiesta trasporta una chiave di progetto come token al portatore. Le chiavi hanno un ambito (lettura, scrittura, fatturazione), possono essere ruotate senza tempi di inattività e possono essere bloccate su IP dal dashboard.
- Chiavi per ambiente (test/live)
- Credenziali client OAuth 2.0 supportate
- TLS reciproco disponibile su 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 }
}Esplora ogni endpoint.
Crea una chiamata
Origina una chiamata PSTN in uscita. Restituisce immediatamente un oggetto chiamata in coda: ascolta sui webhook le modifiche di stato.
tocordanecessarioNumero di destinazione E.164.
fromcordanecessarioNumero Rozper verificato o noleggiato.
urlcordaEndpoint HTTPS che restituisce istruzioni vocali quando la chiamata si connette.
recordbooleanoRegistra entrambe le gambe nella tua memoria. Predefinito falso.
timeoutinteroTimeout squillo in secondi. Predefinito 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"
}Errori prevedibili e leggibili dalla macchina.
Ogni 4xx e 5xx restituisce la stessa forma: una stalla code, un messaggio leggibile e un ID richiesta che puoi incollare per supportare.
{
"error": {
"code": "invalid_param",
"message": "to: must be E.164",
"request_id": "req_01HXY7…",
"param_errors": [
{ "param": "to", "reason": "format" }
]
}
}bad_requestCorpo della richiesta non valido o campo obbligatorio mancante.
unauthorizedChiave API mancante, scaduta o revocata.
forbiddenLa chiave non ha l'ambito richiesto per questa risorsa.
not_foundL'ID risorsa non esiste per questo account.
conflictLa chiave di idempotenza entra in collisione con un carico utile diverso.
invalid_paramLa convalida di un parametro non è riuscita. Ispeziona param_errors[].
rate_limitedBackoff utilizzando l'intestazione Retry-After.
server_errorSiamo stati avvisati. Riprovare le chiamate idempotenti.
Firmato, riprovato, protetto da riproduzione.
Ogni evento viene fornito con una firma HMAC, un ID evento univoco e un timestamp UTC. Riproviamo con backoff esponenziale per un massimo di 24 ore.
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.initiatedChiamata in uscita accettata dal corriere.
call.ringingIl posto remoto sta squillando.
call.answeredRisposta dall'estremità remota (o AMD ha rilevato un essere umano).
call.completedChiamata terminata. Include durata, fatturazione, metadati della gamba.
recording.readyRisorsa di registrazione caricata e URL firmato disponibile.
message.deliveredRicevuta di consegna del corriere (ove supportato).
agent.handoffL'agente AI è passato a una coda umana.
number.purchasedAcquisizione del numero completata.
Ogni cambiamento, in parole povere.
- 2026-05-10v2026.05
- impresaGli agenti vocali ora supportano le chiamate agli strumenti con risposte in streaming.
- impresaNuovo endpoint /v2/numbers/port per invii LNP programmatici.
- 2026-04-22v2026.04
- aggiustareLa cache di idempotenza ora rispetta correttamente il TTL 24 ore su POST /chiamate.
- lavorettoEndpoint v1 deprecati rimossi (annunciati nel 2025-11).
- 2026-03-31v2026.03
- impresaLa versione beta dei flussi multimediali WebSocket è ora disponibile a livello generale.
- impresaMessaggi modello WhatsApp aggiunti in /v2/messages.