REST · WebSocket · gRPC

API
Referenz.

312 Endpunkte, vollständige OpenAPI-Spezifikation, Idempotenz bei jeder Mutation und ein öffentlicher Uptime-Vertrag. Keine Blackboxen.

Basis-URL
api.rozper.com
Version
v2026.05
Ratenbegrenzung
1000 U/s
POST/v2/calls
"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“
  }'
201Antwort · 84 ms
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "status": "queued",
  "to":     "+14155551234",
  "from":   "+12025550100",
  "created_at": "2026-05-12T14:23:01Z"
}
§01 · Authentifizierung

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
Autorisierungsheader
cURLKnotenPythonGehen
# .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 }
}
§02 · Referenz

Erkunden Sie jeden Endpunkt.

AnrufeErstellen Sie einen Anruf

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.

POST/v2/calls
Parameter
toZeichenfolgeerforderlich

E.164-Zielnummer.

fromZeichenfolgeerforderlich

Verifizierte oder gemietete Rozper-Nummer.

urlZeichenfolge

HTTPS-Endpunkt, der Sprachanweisungen zurückgibt, wenn der Anruf verbunden wird.

recordBoolescher Wert

Nehmen Sie beide Beine in Ihren Speicher auf. Standardmäßig falsch.

timeoutganze Zahl

Klingel-Timeout in Sekunden. Standard 60.

Anfrage · Knoten● leben
const call = await rozper.calls.create({
  to:   "+14155551234",
  from: "+12025550100",
  url:  "https://your.app/voice/answer",
})
Antwort · 201 erstellt84 ms
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "object": "call",
  "created_at": "2026-05-12T14:23:01Z"
}
§03 · Fehler

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.

Fehlerumschlag
{
  "error": {
    "code": "invalid_param",
    "message": "to: must be E.164",
    "request_id": "req_01HXY7…",
    "param_errors": [
      { "param": "to", "reason": "format" }
    ]
  }
}
400
bad_request

Fehlerhafter Anfragetext oder fehlendes Pflichtfeld.

401
unauthorized

Fehlender, abgelaufener oder widerrufener API-Schlüssel.

403
forbidden

Dem Schlüssel fehlt der für diese Ressource erforderliche Bereich.

404
not_found

Die Ressourcen-ID existiert für dieses Konto nicht.

409
conflict

Der Idempotenzschlüssel kollidiert mit einer anderen Nutzlast.

422
invalid_param

Die Validierung eines Parameters ist fehlgeschlagen. Untersuchen Sie param_errors[].

429
rate_limited

Backoff mithilfe des Retry-After-Headers.

500
server_error

Wir wurden benachrichtigt. Wiederholen Sie idempotente Aufrufe.

§04 · Webhooks

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.

HMAC-SHA256-Signatur in Rozper-Signatur
Bis zu 8 Wiederholungsversuche · 24-Stunden-Fenster
Senden Sie gleichzeitig an mehrere Endpunkte
Überprüfen Sie einen Webhook · Knoten✓ Zeitkonstanter Vergleich
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 })
})
Veranstaltungskatalog · 32 insgesamt
call.initiated

Ausgehender Anruf vom Netzbetreiber angenommen.

call.ringing

Die Gegenstelle klingelt.

call.answered

Die Gegenstelle hat geantwortet (oder AMD hat einen Menschen erkannt).

call.completed

Anruf beendet. Beinhaltet Dauer, Abrechnung und Streckenmetadaten.

recording.ready

Aufnahme-Asset hochgeladen und signierte URL verfügbar.

message.delivered

Lieferschein des Spediteurs (sofern unterstützt).

agent.handoff

Der KI-Agent wurde zu einer menschlichen Warteschlange eskaliert.

number.purchased

Nummernerfassung abgeschlossen.

§05 · Änderungsprotokoll

Jede Änderung, im Klartext.

  1. 2026-05-10
    v2026.05
    • featSprachagenten unterstützen jetzt Tool-Calls mit Streaming-Antworten.
    • featNeuer /v2/numbers/port-Endpunkt für programmatische LNP-Übermittlungen.
  2. 2026-04-22
    v2026.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).
  3. 2026-03-31
    v2026.03
    • featDie Betaversion von WebSocket Media-Streams ist jetzt allgemein verfügbar.
    • featUnter /v2/messages hinzugefügte WhatsApp-Vorlagennachrichten.
API-Referenz · Rozper REST- und WebSocket-Dokumente | Rozper heute