Pular para o conteúdo principal

Modelos e Estruturas de Dados

Referência das estruturas públicas do SDK (com.tupifintech.apossdk.sdk.api.model, salvo indicação). Valores monetários são sempre Long em centavos.

PaymentResult​

Resultado de uma venda, captura ou estorno. Retornado por onTransactionCompleted e onRefundCompleted.

data class PaymentResult(
var status: PaymentStatus,
var errorCode: SdkErrorCode? = null,
var displayMessage: String? = null,
val slip: String? = null,
val receipt: TransactionReceipt? = null, // null em DECLINED/ERROR
val requiresCardRemoval: Boolean = false, // true se o cartão foi lido pelo chip (ICC)
val voucherBalance: Long? = null
) {
enum class PaymentStatus { APPROVED, DECLINED, ERROR }
}
CampoTipoDescrição
statusPaymentStatusAPPROVED, DECLINED ou ERROR
errorCodeSdkErrorCode?Código do erro quando não aprovado
displayMessageString?Mensagem amigável pronta para exibição
slipString?Texto do comprovante para impressão
receiptTransactionReceipt?Dados estruturados (apenas quando aprovado)
requiresCardRemovalBooleantrue sempre que o cartão foi lido pelo chip, em qualquer status: chame removeCard() e peça a retirada
voucherBalanceLong?Saldo do voucher, quando a adquirente informa. Vem também em negadas. null significa não informado

TransactionReceipt​

Comprovante estruturado da transação aprovada.

data class TransactionReceipt(
val transactionId: String,
val amount: Long,
val feeAmount: Long? = null, // valor de juros, quando houver
val transactionType: TransactionType,
val paymentMethod: PaymentMethod,
val authCode: String,
val installments: Int? = null,
val installmentValue: Long? = null,
val timestamp: Date = Date(),
val merchantId: String? = null,
val merchantName: String? = null,
val merchantCnpj: String? = null,
val merchantDocument: String,
val merchantAddress: String,
val merchantIdentifier: String? = null, // código EC no adquirente
val cardBrand: String? = null,
val cardLastDigits: String? = null,
val cardFirstDigits: String? = null, // BIN (6 primeiros dígitos); o número completo nunca sai do SDK
val cvmMethod: CvmMethod? = null,
val arqc: String? = null,
val aid: String? = null,
val serialNumber: String? = null,
val terminalId: String? = null, // TID do adquirente
val signature: Boolean? = null,
val cardHolderName: String? = null,
val captureMethod: String? = null, // "CHIP", "CLESS" (aproximação), "TARJA"
val nsuLocal: String? = null, // NSU do autorizador
val codVenda: String? = null, // STAN do gateway
val originalAmount: Long? = null, // ex.: captura de pré-autorização com valor diferente
val voucherBalance: Long? = null,
val acquirerName: String? = null // adquirente que processou (ex.: "pagseguro")
)
  • nsuLocal é o NSU do autorizador, o que concilia com o portal e o adquirente. O nome foi mantido por compatibilidade: não é um contador local.
  • codVenda é o STAN do gateway (código da venda), impresso na via do estabelecimento.
  • acquirerName e voucherBalance null significam "não informado".

Enums​

PaymentMethod​

Serializado para a API conforme o @SerializedName.

enum class PaymentMethod { DEBIT, CREDIT, PIX, CASH, VOUCHER, UNKNOWN }
ValorAPIDescrição
DEBITdebit_cardDébito (com PIN)
CREDITcredit_cardCrédito (à vista/parcelado)
PIXpixPIX (use createPixPayment)
CASHcashDinheiro
VOUCHERvoucherVale-refeição e vale-alimentação (sempre à vista)
UNKNOWNunknownNão mapeado

TransactionType​

enum class TransactionType {
AUTHORIZATION, VOID, PRE_AUTHORIZE, CONFIRM_PRE_AUTHORIZED,
TRANSACTION_CONFIRM, REVERSAL, ADVICE, PIXQR_CODE,
PIX_PAYMENT_STATUS_CHECK, UNKNOWN
}
ValorAPIDescrição
AUTHORIZATIONauthorizationAutorização (venda)
VOIDvoidCancelamento/estorno
PRE_AUTHORIZEpre_authorizationPré-autorização (reserva)
CONFIRM_PRE_AUTHORIZEDcaptureCaptura de pré-autorização
TRANSACTION_CONFIRMconfirmationConfirmação de transação
REVERSALreversalReversão (desfazimento)
ADVICEadviceAdvice
PIXQR_CODEpix_qr_code_generateGeração de QR PIX
PIX_PAYMENT_STATUS_CHECKpix_payment_status_checkConsulta de status PIX
UNKNOWN—Não mapeado

Em createPayment, use AUTHORIZATION para venda e PRE_AUTHORIZE para pré-autorização. Os demais tipos aparecem em consultas e comprovantes.

CardReadType​

Retornado por waitForCard().

enum class CardReadType { CHIP, CONTACTLESS, MAGSTRIPE, UNKNOWN }

CvmMethod​

com.tupifintech.apossdk.domain.model.CvmMethod — método de verificação do portador.

enum class CvmMethod(val displayName: String) {
NO_CVM("Sem verificação"),
SIGNATURE("Assinatura"),
ONLINE_PIN("Senha online"),
OFFLINE_PIN_CLEAR("Senha offline"),
OFFLINE_PIN_ENCRYPTED("Senha offline criptografada"),
CONTACTLESS("Aproximação"),
UNKNOWN("Desconhecido")
}

InputCode​

Tipo de dado solicitado em onRequestUserInput.

enum class InputCode { CVV, LAST_4_DIGITS }

NotificationType​

Categoria da mensagem em onUiNotify. ERROR é reservado: o SDK não o emite hoje.

enum class NotificationType { INFO, ERROR, WAITING_CARD, PROCESSING }

Transação​

TransactionMetadata​

Dados do app que seguem com a transação até o gateway. O SDK não os lê. Veja Configuração.

@JvmInline
value class TransactionMetadata(val values: Map<String, String>) {
companion object {
const val MAX_ENTRIES = 20
const val MAX_KEY_LENGTH = 40
const val MAX_VALUE_LENGTH = 256
const val MAX_TOTAL_BYTES = 4_096
val EMPTY: TransactionMetadata
}
}

Chaves em [A-Za-z0-9_.-]. Fora dos limites, ou com valor que pareça número de cartão, o construtor lança IllegalArgumentException. Não envie dado de portador.

CardReadTimeouts​

Tempo de espera do cartão, aplicado com posPinpad.setCardReadTimeouts(...). Veja Configuração.

data class CardReadTimeouts(
val perAttemptSeconds: Int = 30, // 1..300
val maxAttempts: Int = 3, // 1..10
val totalSeconds: Int = 60 // perAttemptSeconds..300
)

totalSeconds é o teto da captura no estorno e na pré-autorização. Na venda valem só perAttemptSeconds e maxAttempts.

Impressão​

PrintAttributes​

data class PrintAttributes(
val align: Align = Align.LEFT,
val textSize: Int = 24,
val typeface: Typeface = Typeface.NORMAL,
val marginLeft: Int = 1,
val lineSpace: Int = 10, // mínimo aceito pela Positivo (~2mm)
val weight: Int = 10 // divisão proporcional em printColumns (ignorado em printText)
)

enum class Align(val value: Int) { CENTER(0), LEFT(1), RIGHT(2) }
enum class Typeface(val value: Int) { NORMAL(0), BOLD(1), SERIF(2), ARIAL(3) }

Align e Typeface são do SDK (com.tupifintech.apossdk.sdk.api.model), não de android.graphics.

Configuração e Inicialização​

TerminalConfigResponse​

Personalização do terminal por parceiro, retornada por getTerminalConfig().

data class TerminalConfigResponse(
val partner: PartnerIdentity,
val scope: OrganizationScope,
val registrationSchema: RegistrationSchema? = null,
val dashboardButtons: Map<DashboardFeature, DashboardButtonConfig>? = null,
val legalDocuments: LegalDocuments,
val receiptCustom: ReceiptCustom? = null,
val resourceId: String? = null, // identificador da configuração
val updatedAt: String? = null // data da última alteração
)

data class PartnerIdentity(
val brandName: String, val companyName: String,
val logoUrl: String, val logoPrintUrl: String? = null, val logoNegativeUrl: String? = null,
val supportPhone: String, val website: String,
val primaryColor: String, // #RRGGBB
val uiAlias: String? = null,
val fontFamily: String? = null // "roboto", "inter", "open_sans", "poppins"
)

data class OrganizationScope( // ao menos 1 não-nulo; viram headers nas chamadas
val acquirerId: String? = null, // X-Acquirer-Id
val subAcquirerId: String? = null, // X-Subacquirer-Id
val independentSalesOrganizationId: String? = null // X-Independent-Sales-Organization-Id
)

data class LegalDocuments(
val privacyPolicyUrl: String? = null,
val termsOfUseUrl: String? = null
)

RegistrationSchema​

Define os campos da tela de registro. O app renderiza cada campo aplicando máscara/validação conforme type.

data class RegistrationSchema(
val title: String,
val submitLabel: String,
val fields: List<RegistrationSchemaField>
)

data class RegistrationSchemaField(
val id: String, // chave usada no payload de register (ex.: "cnpj", "token")
val type: String, // "EMAIL", "PASSWORD", "CNPJ", "TOKEN", ...
val label: String? = null,
val required: Boolean? = false,
val minLength: Int? = null,
val maxLength: Int? = null
)

DashboardFeature / DashboardButtonConfig​

enum class DashboardFeature {
PAYMENT, REFUND, PRE_AUTH, CONFIRM_PRE_AUTH, REPRINT, SALES_HISTORY
}

data class DashboardButtonConfig(
val visible: Boolean = true,
val requiresPassword: Boolean = false
)

ReceiptCustom​

data class ReceiptCustom(
val title: String? = null,
val description: String? = null,
val ouvidoriaPhone: String? = null // SAC/Ouvidoria (requisito BACEN)
)

AuthenticationRequest / AuthenticationResponse​

data class AuthenticationRequest(val identifier: String, val password: String) // identifier: e-mail ou CNPJ

data class AuthenticationResponse(
val user: AuthenticatedUser? = null,
val expiresIn: Int? = null,
val issuedAt: String? = null,
val error: AuthError? = null,
val success: Boolean = (error == null) && (user != null)
)

data class AuthenticatedUser(val id: String, val name: String, val email: String, val role: String)
data class AuthError(val code: String, val message: String, val details: String? = null)

RegistrationResult​

data class RegistrationResult(
val token: String? = null,
val refreshToken: String? = null,
val user: AuthenticatedUser? = null,
val terminalId: String? = null,
val merchantId: String? = null,
val merchantName: String? = null,
val acquirerId: String? = null,
val subacquirerId: String? = null,
val independentSalesOrganizationId: String? = null,
val error: AuthError? = null // recusa com mensagem pronta para exibir
) {
val success: Boolean get() = error == null && (terminalId != null || token != null)
}

TerminalInitializationRequest / Response​

data class TerminalInitializationRequest(val merchantId: String)

data class TerminalInitializationResponse(
val terminalId: String? = null,
val success: Boolean = true,
val merchant: MerchantInfo? = null
)

MerchantInfo​

Dados do estabelecimento (header, recibo). accessPassword é sensível — nunca logar.

data class MerchantInfo(
val merchantId: String? = null,
val name: String? = null, val corporateName: String? = null,
val taxId: String? = null, val personType: String? = null, val mcc: String? = null,
val address: String? = null, val city: String? = null, val state: String? = null,
val postalCode: String? = null, val phone: String? = null,
val accessPassword: String? = null, // senha numérica de acesso a operações restritas
val accessibilityKeyboard: Boolean = false, // true: exibir o teclado de senha de acessibilidade
val voucherEnabled: Boolean = false // voucher habilitado para o estabelecimento
)
  • accessibilityKeyboard: quando true, exiba o teclado de senha de acessibilidade (4 colunas, compatível com a película tátil da Positivo). Afeta só a tela de senha do cartão.
  • voucherEnabled: para decidir se oferece voucher, use getAvailableProducts(PaymentMethod.VOUCHER).

Terminal e Dispositivo​

DeviceInfo​

Retornado por getDeviceInfo().

data class DeviceInfo(
val manufacturer: String,
val hardwareModel: String,
val firmwareVersion: String,
val applicationVersion: String,
val specificationVersion: String,
val serialNo: String,
val deviceInterfaces: DeviceInterfacesInfo,
val ctlsVersion: String, val masterCtlsVersion: String, val visaCtlsVersion: String,
val amexCtlsVersion: String, val discoverCtlsVersion: String,
val jcbCtlsVersion: String, val unionPayCtlsVersion: String,
val soVersion: String,
val acquirerName: String, val acquirerVersion: String, val acquirerProprietaryInfo: String
) {
data class DeviceInterfacesInfo(
val hasCtlsInterface: Boolean,
val hasChipInterface: Boolean,
val hasMagstripeInterface: Boolean
)
}

TablesInfo​

Retornado por getTablesInfo(); null se as tabelas nunca foram carregadas.

data class TablesInfo(val versions: List<TableVersionInfo>, val lastUpdateAtMs: Long?)

data class TableVersionInfo(
val acquirerName: String,
val tableVersion: String,
val keyTableVersion: String? = null,
val normalizedHash: String? = null
)

TransactionLimits​

Limites por operação, retornado por getTransactionLimits(). Campos com 0 significam "sem limite": compare só quando o limite for maior que zero.

data class TransactionLimits(
val featureCode: Int, // código da operação no gateway (ex.: 1 = crédito à vista, 3 = crédito sem juros)
val transactionName: String, // nome da operação no gateway (ex.: "CREDITO A VISTA")
val minTransactionValueCents: Long, val maxTransactionValueCents: Long,
val minInstallments: Int, val maxInstallments: Int,
val minInstallmentValueCents: Long, val maxInstallmentValueCents: Long
)

ProductInfo​

Retornado por getAvailableProducts(...).

data class ProductInfo(val name: String, val productCode: Int, val aidCode: Int? = null)

SimInfo​

Retornado por getSimInfo().

data class SimInfo(val iccid: String?, val operatorName: String?, val transport: NetworkTransport)

enum class NetworkTransport { WIFI, MOBILE, ETHERNET, OTHER, NONE }

HealthCheckResult​

data class HealthCheckResult(
val isConnected: Boolean,
val hasNetworkConnection: Boolean,
val isApiReachable: Boolean,
val latencyMs: Long?,
val errorMessage: String?
)

PixQrCodeData​

data class PixQrCodeData(
val qrCode: String,
val transactionId: String,
val expiresInSeconds: Int? = null
)

Consulta de Transações​

QueryFilterBuilder​

Builder para os filtros das consultas. Padrão da API: <campo>_<operador>=<valor> (para EQ, apenas <campo>=<valor>). Valores nulos ou em branco são ignorados.

val filters = QueryFilterBuilder()
.pagination(cursor = null, limit = 20, preloads = true)
.add(FilterField.STATUS, FilterOperator.EQ, "approved")
.add(FilterField.CREATED_AT, FilterOperator.GE, "2026-10-01")
.addIn(FilterField.CARD_BRAND, listOf("visa", "mastercard"))
.addContains(FilterField.AUTHORIZATION_CODE, "12")

val copia = filters.copyOf() // cópia independente
FilterOperatorSignificado
EQ, NEIgual, diferente
GT, LT, GE, LEMaior, menor, maior ou igual, menor ou igual
LKContém (LIKE)
INLista de valores

Campos (FilterField): STATUS, PAYMENT_METHOD, ACQUIRER, CREATED_AT, UPDATED_AT, TERMINAL_ID, CARD_BRAND, CARD_FIRST_DIGITS, CARD_LAST_DIGITS, TYPE, SYSTEM_TRACE_AUDIT_NUMBER, RETRIEVAL_REFERENCE_NUMBER, AUTHORIZATION_CODE, GATEWAY_TRANSACTION_ID.

TransactionSummaryResponse / TransactionSummary​

data class TransactionSummaryResponse(
val metadata: Metadata, // nextCursor, previousCursor, limit
val links: Links?, // first
val data: List<TransactionSummary>
) {
val isEmpty: Boolean
val isNotEmpty: Boolean
val count: Int
}

data class TransactionCycleListResponse(
val metadata: Metadata,
val data: List<TransactionCycle>
)

data class TransactionSummary(
val id: String,
val acquirerId: String?,
val createdAt: String, val updatedAt: String?, // ISO-8601
val gatewayTransactionId: String?,
val acquirer: String?, val currency: String?,
val paymentMethod: PaymentMethod,
val status: String, // "approved", "denied", "pre_approved", "refunded", "partial_refunded", "voided", "pending", "expired", "failed", ...
val amount: Amount, // Amount(amount, scale)
val installments: Int? = null,
val installmentsInterest: Boolean? = null,
val card: TransactionCard?,
val payer: Payer? = null, // PIX
val endToEndId: String? = null,
val acquirerTerminalIdentifier: String? = null,
val terminalId: String? = null,
val acquirerMerchantIdentifier: String? = null,
val gatewayStan: String? = null,
val productAid: String? = null,
val cycles: List<TransactionCycle>? = null, // com preloads = true ou em getTransactionSummary
val transactionType: TransactionType? = null
)

Atalhos de TransactionSummary:

GrupoAtalhos
ValoramountInCents, amountAsDouble, refundedAmountInCents (soma dos estornos aprovados)
CartãocardBrand, cardFirstDigits, cardLastDigits, cardHolderName
PIXpayerName, payerTaxId, payerBankName
StatusisApproved, isDenied, isRefunded, isVoided, isPartialRefunded, isPreApproved, isPending, isExpired, isFailed, isUnknown
Ciclosnsu, authorizationCode, rrn (no PIX, o end-to-end), displayNsu (o NSU a exibir), compactNsu, refundNsu, deviceSerialNumber, hasCycles, getCycleByType(type)

isDeclined e isPartialRefund estão obsoletos: use isDenied e isPartialRefunded.

data class Amount(val amount: Long, val scale: Int) {
fun toDouble(): Double // Amount(15000, 2).toDouble() == 150.0
fun toCents(): Long
}

data class TransactionCard(
val brand: String?, val firstDigits: String?, val lastDigits: String?,
val holderName: String?, val expirationMonth: Int?, val expirationYear: Int?,
val arqc: String? = null, val entryMode: String? = null
)

data class TransactionCycle(
val type: String?, // authorization, pre_authorization, refund, void, ...
val authorizationCode: String?,
val systemTraceAuditNumber: String?, // NSU (STAN)
val retrievalReferenceNumber: String?, // RRN (no PIX, o end-to-end)
val processedAt: String?, // ISO-8601
val status: String? = null,
val amount: Amount? = null,
val transactionSummaryId: String? = null, // id do TransactionSummary a que o ciclo pertence
val device: TransactionDevice? = null // serialNumber, manufacturer, model, communicationType
)

data class Payer(val name: String?, val taxId: String?, val bankName: String?)

TransactionStats​

Totais do conjunto filtrado, retornados por getTransactionStats.

data class TransactionStats(
val approvedAmount: Amount, // soma das aprovadas pelo valor original, sem descontar estornos
val netAmount: Amount? = null,
val count: Long
)

Usuários Locais​

ModeloDescrição
LocalUserInfoid, name, cpf, profile. Nunca traz senha nem hash
LocalUserProfileSUPERVISOR, OPERATOR
LocalUserResult<T>Success(value) ou Failure(error)
LocalUserErrorINVALID_DATA, INVALID_PASSWORD, DUPLICATE_CPF, NOT_FOUND, LAST_SUPERVISOR, SUPERVISOR_LIMIT, SUPERVISOR_REQUIRED, STORAGE_UNAVAILABLE
LegacyLocalUserid, name, cpf, profile, sha256Hex. Só para importLegacy (exige @OptIn(LegacyLocalUserImport::class))

Constantes: LOCAL_USER_PASSWORD_LENGTH = 6 e MAX_LOCAL_SUPERVISORS = 10. Veja Configuração.

MtlsCertificate​

Certificado cliente opcional para PosPinpad.create(...). Veja Configuração.

MtlsCertificate.fromAssets(context, certificateChainAsset, privateKeyAsset)
MtlsCertificate.fromPem(certificateChain: String, privateKey: String)
MtlsCertificate.fromPem(certificateChain: ByteArray, privateKey: ByteArray)

SdkErrorCode​

com.tupifintech.apossdk.sdk.model.SdkErrorCode — catálogo de erros recebido em onAppError(error, message) e PaymentResult.errorCode. Cada valor tem um code: Int. Os códigos PP_* (0 a 155 e PP_UNKNOWN = 1000) vêm do pinpad; UNKNOWN_ERROR (-1) e os códigos de 1001 em diante são do SDK. Para título e mensagem a partir do código, use ErrorMessageProvider (veja Callbacks).

Erros do pinpad​

CódigoValorDescrição
PP_OK0Sucesso
PP_PROCESSING1Em processamento
PP_NOTIFY2Notificação
PP_SECURITYERR3Erro de segurança
PP_SECPACKETERR9Erro de segurança no pacote
PP_INVCALL10Chamada inválida
PP_INVPARM11Parâmetro inválido
PP_TIMEOUT12Tempo esgotado
PP_CANCEL13Operação cancelada
PP_ALREADYCONNECTED14Conexão já estabelecida
PP_NOTCONNECTED15Conexão não estabelecida
PP_EXECERR16Erro de execução
PP_NOPARAM19Parâmetro obrigatório não informado
PP_TABEXP20Tabela desatualizada
PP_TABERR21Erro no carregamento de tabela
PP_RSPERR33Resposta em formato inválido
PP_MCDATAERR41Erro na leitura da tarja
PP_ERRPIN42Erro na captura da senha
PP_CARDREMOVED43Cartão removido
PP_PINBUSY44Terminal ocupado
PP_DUMBCARD60Cartão ausente ou sem resposta
PP_ERRCARD61Erro de comunicação com o chip
PP_CARDINV62Cartão inválido
PP_CARDBLOCKED63Cartão bloqueado
PP_CARDNAUTH64Cartão não autorizado
PP_CARDEXPIRED65Cartão expirado
PP_CARDINVALIDAT67Cartão inválido
PP_CARDPROBLEMS68Falha ao processar o cartão
PP_CARDINVDATA69Dados do cartão inválidos
PP_CARDAPPNAV70Sem aplicação válida no chip: use a tarja
PP_CARDAPPNAUT71Aplicação do cartão não autorizada
PP_ERRFALLBACK76Use a tarja magnética (fallback)
PP_CTLSMULTIPLE80Mais de um cartão por aproximação detectado
PP_CTLSCOMMERR81Erro de comunicação na aproximação
PP_CTLSINVALIDAT82Cartão inválido na aproximação
PP_CTLSPROBLEMS83Falha ao processar o cartão na aproximação
PP_CTLSAPPNAV84Sem aplicação para aproximação: use o chip
PP_CTLSAPPNAUT85Aplicação não autorizada na aproximação
PP_CTLSEXTCVM86Confirme no dispositivo do portador e aproxime de novo
PP_CTLSINTERFACECHANGE87Use o chip ou passe o cartão
PP_DEVICEFAULT152Falha no dispositivo
PP_ABORTED154Operação abortada
PP_ERRKEY155Chave do adquirente ausente no terminal. Acione o suporte
PP_UNKNOWN1000Erro desconhecido do pinpad

Erros do SDK​

CódigoValorDescrição
UNKNOWN_ERROR-1Erro desconhecido
NO_CONTEXT1001Contexto de transação indisponível
TERMINAL_NOT_INITIALIZED1002Operação chamada antes de terminalInitialization()
TERMINAL_INITIALIZATION_FAILED1003Falha na inicialização do terminal
INVALID_CARD_ENTRYMODE1004Modo de entrada do cartão não suportado
MAGNETIC_STRIPE_WITH_CHIP1005Cartão com chip passado na tarja
PRODUCT_NOT_FOUND1006Produto do cartão não aceito: tente outro meio de pagamento ou cartão
INVALID_SELECTION1007Seleção inválida
INVALID_LAST_DIGITS1008Últimos dígitos não conferem
INVALID_CVV1009CVV inválido
ENCRYPTION_ERROR1010Erro de criptografia
PIN_ERROR1011Erro na senha
GO_ON_CHIP_DENIED1012O chip recusou a transação
FINISH_CHIP_DENIED1013O chip recusou a finalização
CACHE_INVALID1014Cache interno inválido
GATEWAY_UNAUTHORIZED1015Terminal não autorizado no gateway
GATEWAY_INVALID_REQUEST1016Requisição recusada pelo gateway
GATEWAY_NETWORK_ERROR1017Falha de rede na comunicação com o gateway
NO_PRE_AUTHORIZATIONS1018Nenhuma pré-autorização disponível
CONNECTION_FAILED1019Falha na conexão com o pinpad
DISCONNECTION_FAILED1020Falha na desconexão do pinpad
NO_TRANSACTIONS_FOUND1021Nenhuma pré-autorização para o cartão lido
PRE_AUTH_NOT_FOUND_FOR_CARD1022A pré-autorização informada não é deste cartão
GATEWAY_TIMEOUT1023O gateway não respondeu a tempo
TRANSACTION_UNDONE1024Transação desfeita
PIN_BLOCKED1025Senha offline bloqueada por excesso de tentativas
AMOUNT_BELOW_MINIMUM1026Valor abaixo do mínimo da carga
AMOUNT_ABOVE_MAXIMUM1027Valor acima do máximo da carga
INSTALLMENTS_EXCEEDED1028Parcelas acima do permitido
INSTALLMENT_VALUE_BELOW_MINIMUM1029Valor da parcela abaixo do mínimo
CONTACTLESS_LIMIT_EXCEEDED1030Acima do limite por aproximação: insira o cartão
MAGNETIC_FALLBACK_NOT_ALLOWED1031Fallback para tarja não permitido
INVALID_PAN_LENGTH1032Número do cartão com tamanho inválido
INVALID_TRACK_DATA1033Leitura de tarja incompleta: passe o cartão de novo
NO_TRANSACTIONS_FOR_METHOD1034O cartão tem vendas no dia, mas de outro tipo
GATEWAY_SERVER_ERROR1035Erro do servidor do gateway (HTTP 5xx)

Exceções​

Pacote com.tupifintech.apossdk.sdk.exceptions.

ExceçãoQuando
SdkExceptionBase de todas as exceções abaixo
TerminalActivationExceptionFalha no registro do terminal junto ao gateway
TerminalConfigExceptionFalha em getTerminalConfig
PartnerNotFoundExceptionSubclasse de TerminalConfigException: parceiro inexistente no ambiente. Expõe slug. Erro permanente
ServerErrorExceptionErro do servidor, com statusCode. Reservada: a versão atual não a lança
NetworkExceptionFalha de rede. Reservada: a versão atual não a lança

Além delas, IllegalStateException é lançada em createPayment/createPixPayment sem terminal inicializado e em getDeviceInfo() antes de o pinpad conectar, e IllegalArgumentException nos construtores de TransactionMetadata e CardReadTimeouts fora dos limites.