Ejemplos de cURL / SDK
Todos los ejemplos usan la URL base pública:
https://api.zelnum.com/api/v1Reemplaza YOUR_KEY_HERE por una clave de Autenticación y toma los IDs de producto de Productos en tiempo real — los IDs siguientes son ejemplos y cambian a medida que se agregan productos.
Un número de teléfono, un producto
Sección titulada «Un número de teléfono, un producto»curl -X POST "https://api.zelnum.com/api/v1/realtime/check/phone" \ -H "X-API-Key: YOUR_KEY_HERE" \ -H "Idempotency-Key: 8f14e45f-ceea-467a-9f3f-1b2c3d4e5f60" \ -H "Content-Type: application/json" \ -d '{"identifier":"+8613800138000","country":"CN","product_ids":[47]}'country es opcional cuando el número ya está en formato E.164 completo. Inclúyelo cuando envíes un número nacional.
Un número de teléfono, varios productos
Sección titulada «Un número de teléfono, varios productos»curl -X POST "https://api.zelnum.com/api/v1/realtime/check/phone" \ -H "X-API-Key: YOUR_KEY_HERE" \ -H "Idempotency-Key: 5c2f1a90-6b7d-4e8f-9a01-2b3c4d5e6f70" \ -H "Content-Type: application/json" \ -d '{"identifier":"+8613800138000","country":"CN","product_ids":[47,50,51]}'Tres productos, un request_id, tres entradas en results, tres cobros. Consulta Productos en tiempo real para ver el límite de diez IDs.
Una dirección de correo
Sección titulada «Una dirección de correo»curl -X POST "https://api.zelnum.com/api/v1/realtime/check/email" \ -H "X-API-Key: YOUR_KEY_HERE" \ -H "Idempotency-Key: 0d9c8b7a-6543-4321-fedc-ba9876543210" \ -H "Content-Type: application/json" \ -d '{"identifier":"user@example.com","product_ids":[49]}'Observa la ausencia de country — los productos de correo lo rechazan.
Leer solo lo que necesitas
Sección titulada «Leer solo lo que necesitas»curl -s -X POST "https://api.zelnum.com/api/v1/realtime/check/phone" \ -H "X-API-Key: YOUR_KEY_HERE" \ -H "Idempotency-Key: 3a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9" \ -H "Content-Type: application/json" \ -d '{"identifier":"+8613800138000","product_ids":[47,50]}' \ | jq '{status, charged: .total_charged, items: [.results[] | {product: .product, result: .result, billed: .billing_status}]}'Revisa billing_status por entrada, no solo el estado HTTP — un 200 igual puede contener entradas reembolsadas. Consulta Facturación y reembolsos.
Un bucle de reintento que no puede cobrar dos veces
Sección titulada «Un bucle de reintento que no puede cobrar dos veces»La razón de ser de Idempotency-Key es que este script es seguro de ejecutar dos veces:
KEY=$(uuidgen)BODY='{"identifier":"+8613800138000","country":"CN","product_ids":[47]}'
for attempt in 1 2 3; do response=$(curl -s -w '\n%{http_code}' -X POST \ "https://api.zelnum.com/api/v1/realtime/check/phone" \ -H "X-API-Key: YOUR_KEY_HERE" \ -H "Idempotency-Key: $KEY" \ -H "Content-Type: application/json" \ -d "$BODY")
code=$(printf '%s' "$response" | tail -n1) printf '%s' "$response" | sed '$d'
case "$code" in 200) exit 0 ;; # Resultado incierto: la clave es lo esencial. Reenvía el mismo cuerpo. 500|000) sleep 2 ;; # Aún en ejecución, o limitado por tasa: respeta Retry-After y conserva la misma clave. 409|429) sleep "$(printf '%s' "$response" | sed '$d' | jq -r '.retry_after // 2')" ;; *) exit 1 ;; esacdoneNunca generes una clave nueva para reintentar una solicitud cuyo resultado no observaste — así es exactamente como una verificación se paga dos veces. Consulta Idempotencia y reintentos.
Forma de la respuesta
Sección titulada «Forma de la respuesta»{ "request_id": "8c1e4f91-7bd8-4d7e-a3ae-3d7e5b0c6c11", "identifier": "+8613800138000", "status": "succeeded", "request_status": "completed", "replayed": false, "total_reserved": 0.004000, "total_charged": 0.004000, "total_refunded": 0.000000, "results": [ { "product_id": 47, "product": "wavalid-realtime", "result": "valid", "cached": false, "billing_status": "charged", "charged_amount": 0.002000, "refunded_amount": 0.000000, "checked_at": "2026-09-13T10:00:00Z", "error_code": null } ]}Para la referencia completa de campos, consulta Formato de respuesta.