API
Referenz.
312 Endpunkte, vollständige OpenAPI-Spezifikation, Idempotenz bei jeder Mutation und ein öffentlicher Uptime-Vertrag. Keine Blackboxen.
"color:#22D3EE">curl "color:#22D3EE">-X „Farbe:#34D399;Schriftstärke:600“>POST https://api.rozper.com/v2/calls \
„Farbe:#22D3EE“>-H „Autorisierung: Inhaber $ROZPER_API_KEY" \
„Farbe:#22D3EE“>-H „Inhaltstyp: application/json“ \
„Farbe:#22D3EE“>-d '{
"Zu": "+14155551234",
"aus": "+12025550100",
„URL“: „https://your.app/voice/answer“
}'{
"id": "call_01HXY7ZQ9V3J3X8K5N",
"status": "queued",
"to": "+14155551234",
"from": "+12025550100",
"created_at": "2026-05-12T14:23:01Z"
}Inhabertoken.
Zielfernrohr. Drehbar.
Jede Anfrage trägt einen Projektschlüssel als Bearer-Token. Schlüssel haben einen Gültigkeitsbereich (Lesen, Schreiben, Abrechnung), sind ohne Ausfallzeiten drehbar und können über das Dashboard per IP angeheftet werden.
- Schlüssel pro Umgebung (Test/Live)
- OAuth 2.0-Client-Anmeldeinformationen werden unterstützt
- Gegenseitiges TLS auf Enterprise verfügbar
# .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 }
}Erkunden Sie jeden Endpunkt.
Erstellen Sie einen Anruf
Leiten Sie einen ausgehenden PSTN-Anruf ein. Kehrt sofort mit einem Anrufobjekt in der Warteschlange zurück – überwacht Webhooks auf Statusänderungen.
toZeichenfolgeerforderlichE.164-Zielnummer.
fromZeichenfolgeerforderlichVerifizierte oder gemietete Rozper-Nummer.
urlZeichenfolgeHTTPS-Endpunkt, der Sprachanweisungen zurückgibt, wenn der Anruf verbunden wird.
recordBoolescher WertNehmen Sie beide Beine in Ihren Speicher auf. Standardmäßig falsch.
timeoutganze ZahlKlingel-Timeout in Sekunden. Standard 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"
}Vorhersehbare, maschinenlesbare Fehler.
Jedes 4xx und 5xx gibt die gleiche Form zurück: einen Stall code, eine für Menschen lesbare Nachricht und eine Anfrage-ID, die Sie zur Unterstützung einfügen können.
{
"error": {
"code": "invalid_param",
"message": "to: must be E.164",
"request_id": "req_01HXY7…",
"param_errors": [
{ "param": "to", "reason": "format" }
]
}
}bad_requestFehlerhafter Anfragetext oder fehlendes Pflichtfeld.
unauthorizedFehlender, abgelaufener oder widerrufener API-Schlüssel.
forbiddenDem Schlüssel fehlt der für diese Ressource erforderliche Bereich.
not_foundDie Ressourcen-ID existiert für dieses Konto nicht.
conflictDer Idempotenzschlüssel kollidiert mit einer anderen Nutzlast.
invalid_paramDie Validierung eines Parameters ist fehlgeschlagen. Untersuchen Sie param_errors[].
rate_limitedBackoff mithilfe des Retry-After-Headers.
server_errorWir wurden benachrichtigt. Wiederholen Sie idempotente Aufrufe.
Signiert, erneut versucht, wiedergabegeschützt.
Jedes Ereignis wird mit einer HMAC-Signatur, einer eindeutigen Ereignis-ID und einem UTC-Zeitstempel übermittelt. Wir versuchen es erneut mit exponentiellem Backoff für bis zu 24 Stunden.
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.initiatedAusgehender Anruf vom Netzbetreiber angenommen.
call.ringingDie Gegenstelle klingelt.
call.answeredDie Gegenstelle hat geantwortet (oder AMD hat einen Menschen erkannt).
call.completedAnruf beendet. Beinhaltet Dauer, Abrechnung und Streckenmetadaten.
recording.readyAufnahme-Asset hochgeladen und signierte URL verfügbar.
message.deliveredLieferschein des Spediteurs (sofern unterstützt).
agent.handoffDer KI-Agent wurde zu einer menschlichen Warteschlange eskaliert.
number.purchasedNummernerfassung abgeschlossen.
Jede Änderung, im Klartext.
- 2026-05-10v2026.05
- featSprachagenten unterstützen jetzt Tool-Calls mit Streaming-Antworten.
- featNeuer /v2/numbers/port-Endpunkt für programmatische LNP-Übermittlungen.
- 2026-04-22v2026.04
- FixDer Idempotenz-Cache berücksichtigt jetzt korrekt die 24-Stunden-TTL bei POST-/Aufrufen.
- lästige PflichtVeraltete v1-Endpunkte entfernt (angekündigt 2025-11).
- 2026-03-31v2026.03
- featDie Betaversion von WebSocket Media-Streams ist jetzt allgemein verfügbar.
- featUnter /v2/messages hinzugefügte WhatsApp-Vorlagennachrichten.