backend/provider-contract.md
Provider Contract
Interfaz lógica:
interface OtpProvider {
send(request: ProviderSendRequest): Promise<ProviderSendResponse>;
health(): Promise<ProviderHealth>;
}
Errores normalizados:
- PROVIDER_UNAVAILABLE
- PROVIDER_TIMEOUT
- PROVIDER_AUTH_ERROR
- PROVIDER_RATE_LIMIT
- PROVIDER_INVALID_TARGET
- PROVIDER_TEMPLATE_ERROR
- PROVIDER_DELIVERY_FAILED
Regla: si el proveedor no acepta el envío por indisponibilidad previa, no se crea usage del canal primario. Si Kodenix ya aceptó el envío y lo despachó, cuenta.