# Resultado & erros CheckoutResult, PaymentResult e FaciPayError. O checkout devolve um `CheckoutResult`. ```swift enum CheckoutResult { case approved(PaymentResult) // pagamento confirmado case pending(PaymentResult) // referência gerada case cancelled // utilizador cancelou case failed(FaciPayError) // erro } ``` ```swift completion: { result in switch result { case .approved(let payment): updateUI(status: "Confirmado", orderId: payment.orderId) case .pending(let payment): showReference(payment.rawData) case .cancelled: updateUI(status: "Cancelado") case .failed(let error): showError(error.localizedDescription) } } ``` ## PaymentResult Identificador da ordem FaciPay. `.created` | `.pending` | `.cancelled` | `.confirmed`. `.direct` | `.mcx` | `.reference`. Campos adicionais da resposta (referência, entidade, etc.). ## FaciPayError ```swift .invalidKey(String) .paymentFailed(String) .keyValidationFailed(String) .cancelled .networkError(String) .invalidRequest(String) .sdkNotInitialized .uiError(String) .timeout .unknown(String) ``` Todos os erros expõem `errorDescription` e `recoverySuggestion` (via `LocalizedError`). Como na web, o **webhook no seu backend** é a fonte da verdade. Confirme o pagamento pelo webhook antes do fulfillment. Ver [Webhooks](/pt/api-reference/webhooks).