REST · WebSocket · gRPC

API
référence.

312 points de terminaison, spécifications OpenAPI complètes, idempotence sur chaque mutation et contrat de disponibilité public. Pas de boîtes noires.

URL de base
api.rozper.com
Version
v2026.05
Limite de taux
1000 rps
POSTE/v2/appels
"color:#22D3EE">curl "color:#22D3EE">-X "couleur : #34D399 ; poids de la police : 600 »> POSTER https://api.rozper.com/v2/calls\
  "couleur : #22D3EE">-H "Autorisation : Porteur $ROZPER_API_KEY" \
  "couleur : #22D3EE">-H "Type de contenu : application/json" \
  "couleur : #22D3EE">-d '{
    "à":   "+14155551234",
    "depuis": "+12025550100",
    "url":  "https://votre.app/voice/answer"
  }'
201Réponse · 84 ms
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "status": "queued",
  "to":     "+14155551234",
  "from":   "+12025550100",
  "created_at": "2026-05-12T14:23:01Z"
}
§01 · Authentification

Jetons au porteur.
Portée. Rotatif.

Chaque requête comporte une clé de projet en tant que jeton Bearer. Les clés sont limitées (lecture, écriture, facturation), rotatives sans temps d'arrêt et peuvent être épinglées par IP à partir du tableau de bord.

  • Clés par environnement (test / live)
  • Identifiants client OAuth 2.0 pris en charge
  • TLS mutuel disponible sur Enterprise
En-tête d'autorisation
boucleNœudPythonAller
# .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 · Référence

Explorez chaque point de terminaison.

appelsCréer un appel

Créer un appel

Émettez un appel PSTN sortant. Renvoie immédiatement avec un objet d'appel en file d'attente - écoutez les webhooks pour les changements d'état.

POSTE/v2/appels
Paramètres
tochaînerequis

Numéro de destination E.164.

fromchaînerequis

Numéro Rozper vérifié ou loué.

urlchaîne

Point de terminaison HTTPS qui renvoie des instructions vocales lorsque l'appel est connecté.

recordbooléen

Enregistrez les deux jambes dans votre stockage. Faux par défaut.

timeoutentier

Délai d'expiration de la sonnerie en secondes. Par défaut 60.

Demande · nœud● en direct
const call = await rozper.calls.create({
  to:   "+14155551234",
  from: "+12025550100",
  url:  "https://your.app/voice/answer",
})
Réponse · 201 créés84 ms
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "object": "call",
  "created_at": "2026-05-12T14:23:01Z"
}
§03 · Erreurs

Erreurs prévisibles et lisibles par machine.

Tous les 4xx et 5xx renvoient la même forme : une stable code, un message lisible par l'homme et un identifiant de demande que vous pouvez coller sur le support.

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

Corps de la demande mal formé ou champ obligatoire manquant.

401
unauthorized

Clé API manquante, expirée ou révoquée.

403
forbidden

La clé n'a pas la portée requise pour cette ressource.

404
not_found

L'ID de ressource n'existe pas pour ce compte.

409
conflict

La clé d'idempotence entre en collision avec une charge utile différente.

422
invalid_param

La validation d'un paramètre a échoué. Inspectez param_errors[].

429
rate_limited

Interruption à l’aide de l’en-tête Retry-After.

500
server_error

Nous avons été prévenus. Réessayez les appels idempotents.

§04 · Webhooks

Signé, réessayé, protégé contre la relecture.

Chaque événement est livré avec une signature HMAC, un identifiant d'événement unique et un horodatage UTC. Nous réessayons avec une interruption exponentielle pendant 24 heures maximum.

Signature HMAC-SHA256 dans Rozper-Signature
Jusqu'à 8 tentatives · Fenêtre de 24 h
Envoyer à plusieurs points de terminaison simultanément
Vérifier un webhook · Nœud✓ comparaison à temps constant
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 })
})
Catalogue d'événements · 32 au total
call.initiated

Appel sortant accepté par l'opérateur.

call.ringing

L'extrémité sonne.

call.answered

L'extrémité distante a répondu (ou AMD a détecté un humain).

call.completed

Appel terminé. Inclut la durée, la facturation et les métadonnées des étapes.

recording.ready

Actif d'enregistrement téléchargé et URL signée disponible.

message.delivered

Récépissé de livraison par le transporteur (si pris en charge).

agent.handoff

L'agent IA a été transféré vers une file d'attente humaine.

number.purchased

Acquisition du numéro terminée.

§05 · Journal des modifications

Chaque changement, dans un anglais simple.

  1. 2026-05-10
    v2026.05
    • exploitLes agents vocaux prennent désormais en charge les appels d'outils avec des réponses en continu.
    • exploitNouveau point de terminaison /v2/numbers/port pour les soumissions LNP programmatiques.
  2. 2026-04-22
    v2026.04
    • réparerLe cache d'idempotence honore désormais correctement le TTL 24h sur les appels POST/.
    • corvéePoints de terminaison v1 obsolètes supprimés (annoncé le 2025-11).
  3. 2026-03-31
    v2026.03
    • exploitLa version bêta de WebSocket Media-Streams est désormais généralement disponible.
    • exploitModèles de messages WhatsApp ajoutés sous /v2/messages.
Référence API · Documents Rozper REST et WebSocket | Rozper aujourd'hui