<!-- This file is auto-generated by error_glossary. Do not edit manually. -->

# XMTP error code glossary

This document lists all error codes defined in LibXMTP, the core library underlying the XMTP SDKs. Each error code is a unique identifier returned to help diagnose issues.

**30 error types** across **10 crates** with **342 total error codes**.

## mobile

### GenericError <sub>enum</sub>

<small>`bindings/mobile/src/lib.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `GenericError::Generic` | Generic error. Unclassified error with string message. May be retryable. |
| `GenericError::FailedToConvertToU32` | Failed to convert to u32. Numeric conversion failed. Not retryable. |
| `GenericError::JoinError` | Join error. Tokio task join failed. Not retryable. |
| `GenericError::IoError` | I/O error. File or network I/O failed. May be retryable. |
| `GenericError::LogInit` | Log init error. Failed to initialize log file. Not retryable. |
| `GenericError::ReloadLog` | Reload log error. Failed to reload log subscriber. Not retryable. |
| `GenericError::Log` | Log error. Error initializing debug log file. Not retryable. |
| `GenericError::Expired` | Timer expired. Operation timed out. Retryable. |

## wasm

### ContentTypeError <sub>enum</sub>

<small>`bindings/wasm/src/content_types/mod.rs`</small>

Error type for content type conversion failures in WASM bindings.

Provides structured error codes via `ErrorCode` derive, ensuring
all content type errors are prefixed with `[ContentTypeError::Variant]`
when surfaced to JavaScript.

| Error Code | Description |
|:-----------|:------------|
| `ContentTypeError::InvalidData` | Invalid data. Content type data failed validation. Not retryable. |
| `ContentTypeError::TimestampOutOfRange` | Timestamp out of range. Timestamp value is outside the representable range. Not retryable. |
| `ContentTypeError::Codec` | Codec error. Content type codec encoding or decoding failed. Not retryable. |
| `ContentTypeError::Crypto` | Crypto error. Cryptographic operation for content type failed. Not retryable. |

## xmtp_api

### ApiError <sub>enum</sub>

<small>`crates/xmtp_api/src/lib.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `ApiError::Api` | API client error. API operation error (network, deserialization, or other). May be retryable. |
| `ApiError::MismatchedKeyPackages` | Mismatched key packages. Number of key packages doesn't match installation keys. Not retryable. |
| `ApiError::ProtoConversion` | Proto conversion error. Protobuf conversion failed. Not retryable. |

## xmtp_api_d14n

### MessageBackendBuilderError <sub>enum</sub>

<small>`crates/xmtp_api_d14n/src/queries/builder.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `MessageBackendBuilderError::MissingXmtpdHost` | Missing XMTPD host. XMTPD host was not set on the builder. Not retryable. |
| `MessageBackendBuilderError::MissingV3Host` | Missing V3 host. V3 host was not set on the builder. Not retryable. |
| `MessageBackendBuilderError::GrpcBuilder` | gRPC builder error. gRPC client builder failed. Not retryable. |
| `MessageBackendBuilderError::MultiNode` | Multi-node error. Multi-node client builder failed. Not retryable. |
| `MessageBackendBuilderError::Scw` | SCW verifier error. Smart contract wallet verifier error. Not retryable. |
| `MessageBackendBuilderError::CursorStoreNotReplaced` | Cursor store not replaced. Stateful client cursor store not set. Not retryable. |
| `MessageBackendBuilderError::UninitializedField` | Read/write client builder error. Read/write client builder failed. Not retryable. |
| `MessageBackendBuilderError::ReadonlyBuilder` | Readonly builder error. Readonly client builder failed. Not retryable. |
| `MessageBackendBuilderError::Builder` | Builder error. Uninitialized field in builder. Not retryable. |
| `MessageBackendBuilderError::MissingGatewayHost` | Missing XMTP Gateway host. XMTP Gateway host was not set on the builder. Not retryable. |
| `MessageBackendBuilderError::InvalidUrl` | Invalid host URL given Url is not valid. Not retryable. |

## xmtp_api_grpc

### GrpcBuilderError <sub>enum</sub>

<small>`crates/xmtp_api_grpc/src/error.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `GrpcBuilderError::MissingAppVersion` | Missing app version. App version not set on builder. Not retryable. |
| `GrpcBuilderError::MissingLibxmtpVersion` | Missing LibXMTP version. Core library version not set. Not retryable. |
| `GrpcBuilderError::MissingHostUrl` | Missing host URL. Host URL not set on builder. Not retryable. |
| `GrpcBuilderError::MissingXmtpdGatewayUrl` | Missing gateway URL. xmtpd gateway URL not set. Not retryable. |
| `GrpcBuilderError::Metadata` | Metadata error. Invalid gRPC metadata value. Not retryable. |
| `GrpcBuilderError::InvalidUri` | Invalid URI. URI is malformed. Not retryable. |
| `GrpcBuilderError::Url` | URL parse error. URL string is malformed. Not retryable. |
| `GrpcBuilderError::Transport` | Transport error. gRPC transport creation failed (native only). Not retryable. |

### GrpcError <sub>enum</sub>

<small>`crates/xmtp_api_grpc/src/error.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `GrpcError::InvalidUri` | Invalid URI. URI for channel creation is malformed. Retryable. |
| `GrpcError::Metadata` | Metadata error. Invalid gRPC metadata value. Retryable. |
| `GrpcError::Status` | gRPC status error. gRPC call returned error status. Retryable. |
| `GrpcError::NotFound` | Not found. Requested resource not found, empty, or proto conversion failed. Retryable. |
| `GrpcError::UnexpectedPayload` | Unexpected payload. Payload not expected in response. Retryable. |
| `GrpcError::MissingPayload` | Missing payload. Expected payload not in response. Retryable. |
| `GrpcError::Decode` | Decode error. Protobuf decoding failed. Retryable. |
| `GrpcError::Unreachable` | Unreachable. Infallible error -- should never occur. Retryable. |
| `GrpcError::Transport` | Transport error. gRPC transport layer error (native only). Retryable. |

## xmtp_db

### ConnectionError <sub>enum</sub>

<small>`crates/xmtp_db/src/encrypted_store/mod.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `ConnectionError::Database` | Database error. Diesel database query error. May be retryable. |
| `ConnectionError::DecodeError` | Decode error. Protobuf decode failed within DB layer. Not retryable. |
| `ConnectionError::DisconnectInTransaction` | Disconnect in transaction. Cannot disconnect while transaction is active. Retryable. |
| `ConnectionError::ReconnectInTransaction` | Reconnect in transaction. Cannot reconnect while transaction is active. Retryable. |
| `ConnectionError::InvalidQuery` | Invalid query. Invalid query parameters or configuration. Not retryable. |
| `ConnectionError::InvalidVersion` | Invalid version. DB migration version mismatch -- running a newer DB on older LibXMTP. Not retryable. |

### NotFound <sub>enum</sub>

<small>`crates/xmtp_db/src/errors.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `NotFound::GroupByWelcome` | Group with welcome ID not found. No group matches the welcome ID. Retryable. |
| `NotFound::GroupById` | Group with ID not found. Group does not exist in local DB. Retryable. |
| `NotFound::InstallationTimeForGroup` | Installation time for group not found. Missing installation timestamp. Retryable. |
| `NotFound::InboxIdForAddress` | Inbox ID for address not found. Address has no associated inbox. Retryable. |
| `NotFound::MessageById` | Message ID not found. Message does not exist in local DB. Retryable. |
| `NotFound::DmByInbox` | DM by inbox ID not found. No DM conversation with this inbox. Retryable. |
| `NotFound::IntentForToPublish` | Intent for ToPublish not found. Failed to transition intent from ToPublish to Published. Retryable. |
| `NotFound::IntentForPublish` | Intent for Published not found. Intent with specified ID not in expected state. Retryable. |
| `NotFound::IntentForCommitted` | Intent for Committed not found. Failed to transition intent from Published to Committed. Retryable. |
| `NotFound::IntentById` | Intent by ID not found. Intent does not exist. Retryable. |
| `NotFound::RefreshStateByIdKindAndOriginator` | Refresh state not found. No refresh state matching criteria. Retryable. |
| `NotFound::CipherSalt` | Cipher salt not found. Database encryption salt missing. Retryable. |
| `NotFound::SyncGroup` | Sync group not found. No sync group for this installation. Retryable. |
| `NotFound::KeyPackageReference` | Key package reference not found. Key package handle not in store. Retryable. |
| `NotFound::MlsGroup` | MLS group not found. OpenMLS group not in local state. Retryable. |
| `NotFound::PostQuantumPrivateKey` | Post-quantum private key not found. PQ key pair not in store. Retryable. |
| `NotFound::KeyPackage` | Key package not found. Key package not in store. Retryable. |

### PlatformStorageError <sub>enum</sub>

<small>`crates/xmtp_db/src/encrypted_store/database/native.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `PlatformStorageError::Pool` | Pool error. Database connection pool error. Retryable. |
| `PlatformStorageError::DbConnection` | DB connection error. R2D2 connection manager error. Not retryable. |
| `PlatformStorageError::PoolNeedsConnection` | Pool needs connection. Pool must reconnect before use. Retryable. |
| `PlatformStorageError::PoolRequiresPath` | Pool requires path. DB pool requires a persistent file path. Not retryable. |
| `PlatformStorageError::SqlCipherNotLoaded` | SQLCipher not loaded. Encryption key given but SQLCipher not available. Retryable. |
| `PlatformStorageError::SqlCipherKeyIncorrect` | SQLCipher key incorrect. PRAGMA key or salt has wrong value. Not retryable. |
| `PlatformStorageError::DatabaseLocked` | Database locked. Database file is locked by another process. Retryable. |
| `PlatformStorageError::DieselResult` | Diesel result error. Database query error. May be retryable. |
| `PlatformStorageError::NotFound` | Not found. Record not found in storage. Not retryable. |
| `PlatformStorageError::Io` | I/O error. File system I/O error. Retryable. |
| `PlatformStorageError::FromHex` | Hex decode error. Failed to decode hex string. Not retryable. |
| `PlatformStorageError::DieselConnect` | Diesel connection error. Failed to establish connection. Retryable. |
| `PlatformStorageError::Boxed` | Boxed error. Wrapped dynamic error. Not retryable. |

### PlatformStorageError <sub>enum</sub>

<small>`crates/xmtp_db/src/encrypted_store/database/wasm.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `PlatformStorageError::SAH` | OPFS error. Origin Private File System (OPFS) error. Retryable. |
| `PlatformStorageError::Connection` | Connection error. Diesel connection error. Retryable. |
| `PlatformStorageError::DieselResult` | Diesel result error. Database query error. Retryable. |

### SqlKeyStoreError <sub>enum</sub>

<small>`crates/xmtp_db/src/sql_key_store.rs`</small>

Errors thrown by the key store.
General error type for Mls Storage Trait

| Error Code | Description |
|:-----------|:------------|
| `SqlKeyStoreError::UnsupportedValueTypeBytes` | Unsupported value type. Key store does not allow storing serialized values. Not retryable. |
| `SqlKeyStoreError::UnsupportedMethod` | Unsupported method. PSK operations not supported by this key store. Not retryable. |
| `SqlKeyStoreError::SerializationError` | Serialization error. Failed to serialize value for key store. Not retryable. |
| `SqlKeyStoreError::NotFound` | Value not found. Requested key not in OpenMLS key store. Not retryable. |
| `SqlKeyStoreError::Storage` | Database error. Underlying Diesel database error. May be retryable. |
| `SqlKeyStoreError::Connection` | Connection error. Database connection error. Retryable. |

### StorageError <sub>enum</sub>

<small>`crates/xmtp_db/src/errors.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `StorageError::DieselConnect` | Diesel connection error. Failed to connect to SQLite. Retryable. |
| `StorageError::DieselResult` | Diesel result error. Database query returned an error. May be retryable. |
| `StorageError::MigrationError` | Migration error. Database migration failed. Not retryable. |
| `StorageError::NotFound` | Not found. Requested record does not exist. Not retryable. |
| `StorageError::Duplicate` | Duplicate item. Attempted to insert a duplicate record. Not retryable. |
| `StorageError::OpenMlsStorage` | OpenMLS storage error. OpenMLS key store operation failed. Not retryable. |
| `StorageError::IntentionalRollback` | Intentional rollback. Transaction was intentionally rolled back. Not retryable. |
| `StorageError::DbDeserialize` | DB deserialization failed. Failed to deserialize data from database. Not retryable. |
| `StorageError::DbSerialize` | DB serialization failed. Failed to serialize data for database. Not retryable. |
| `StorageError::Builder` | Builder error. Required fields missing from stored type. Not retryable. |
| `StorageError::Platform` | Platform storage error. Platform-specific storage error. May be retryable. |
| `StorageError::Prost` | Protobuf decode error. Failed to decode protobuf from database. Not retryable. |
| `StorageError::Conversion` | Conversion error. Proto conversion failed. Not retryable. |
| `StorageError::Connection` | Connection error. Database connection error. Retryable. |
| `StorageError::InvalidHmacLength` | Invalid HMAC length. HMAC key must be 42 bytes. Not retryable. |
| `StorageError::GroupIntent` | Group intent error. Group intent processing failed. May be retryable. |

## xmtp_id

### AccountIdError <sub>enum</sub>

<small>`crates/xmtp_id/src/associations/signature.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `AccountIdError::InvalidChainId` | Invalid chain ID. Chain ID is not a valid u64. Not retryable. |
| `AccountIdError::MissingEip155Prefix` | Missing EIP-155 prefix. Chain ID is not prefixed with `eip155:`. Not retryable. |

### AssociationError <sub>enum</sub>

<small>`crates/xmtp_id/src/associations/association_log.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `AssociationError::Generic` | Generic association error. Unclassified association error. Not retryable. |
| `AssociationError::MultipleCreate` | Multiple create operations. Duplicate inbox creation detected. Not retryable. |
| `AssociationError::NotCreated` | XID not yet created. Operating on inbox that doesn't exist yet. Not retryable. |
| `AssociationError::MemberNotAllowed` | Member not allowed. Member kind cannot add the specified kind. Not retryable. |
| `AssociationError::MissingExistingMember` | Missing existing member. Required signer not found or signer identity mismatch. Not retryable. |
| `AssociationError::LegacySignatureReuse` | Legacy signature reuse. Legacy delegated signature used in disallowed context. Not retryable. |
| `AssociationError::NewMemberIdSignatureMismatch` | New member ID signature mismatch. Signer doesn't match new member identifier. Not retryable. |
| `AssociationError::WrongInboxId` | Wrong Inbox ID. Incorrect inbox_id in association. Not retryable. |
| `AssociationError::SignatureNotAllowed` | Signature not allowed. Signature type not permitted for this role. Not retryable. |
| `AssociationError::Replay` | Replay detected. Replayed identity update detected. Not retryable. |
| `AssociationError::MissingIdentityUpdate` | Missing identity update. Required identity update not provided. Not retryable. |
| `AssociationError::ChainIdMismatch` | Chain ID mismatch. Smart contract wallet chain ID changed. Not retryable. |
| `AssociationError::InvalidAccountAddress` | Invalid account address. Address is not 42-char hex starting with 0x. Not retryable. |
| `AssociationError::NotIdentifier` | Not an identifier. Value is not a valid public identifier. Not retryable. |

### DeserializationError <sub>enum</sub>

<small>`crates/xmtp_id/src/associations/serialization.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `DeserializationError::MissingAction` | Missing action. Identity action not present in update. Not retryable. |
| `DeserializationError::MissingUpdate` | Missing update. Identity update not present. Not retryable. |
| `DeserializationError::MissingMemberIdentifier` | Missing member identifier. Member identifier field empty. Not retryable. |
| `DeserializationError::Signature` | Missing signature. Signature field not present. Not retryable. |
| `DeserializationError::MissingMember` | Missing member. Member field not present. Not retryable. |
| `DeserializationError::Decode` | Decode error. Protobuf decoding failed. Not retryable. |
| `DeserializationError::InvalidAccountId` | Invalid account ID. CAIP-10 account ID is malformed. Not retryable. |
| `DeserializationError::InvalidPasskey` | Invalid passkey. Passkey data is malformed. Not retryable. |
| `DeserializationError::InvalidHash` | Invalid hash. Hash must be 32 bytes. Not retryable. |
| `DeserializationError::Unspecified` | Unspecified value. An unrecognized or unsupported value was encountered. Not retryable. |
| `DeserializationError::Deprecated` | Deprecated field. A deprecated field was used. Not retryable. |
| `DeserializationError::Ed25519` | Ed25519 key error. Failed to create public key from bytes. Not retryable. |
| `DeserializationError::Bincode` | Unable to deserialize. Bincode deserialization failed. Not retryable. |

### KeyPackageVerificationError <sub>enum</sub>

<small>`crates/xmtp_id/src/key_package/verified_key_package_v2.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `KeyPackageVerificationError::TlsError` | TLS codec error. MLS TLS encoding/decoding failed. Not retryable. |
| `KeyPackageVerificationError::MlsValidation` | MLS validation error. Key package verification failed. Not retryable. |
| `KeyPackageVerificationError::WrongCredentialType` | Wrong credential type. Unexpected MLS credential type. Not retryable. |

### SignatureError <sub>enum</sub>

<small>`crates/xmtp_id/src/associations/signature.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `SignatureError::MalformedLegacyKey` | Malformed legacy key. Legacy key format is invalid. Not retryable. |
| `SignatureError::Ed25519Error` | Ed25519 signature failed. Ed25519 signature verification failed. Not retryable. |
| `SignatureError::TryFromSliceError` | Slice conversion error. Byte slice conversion failed. Not retryable. |
| `SignatureError::Invalid` | Signature validation failed. Signature did not verify. Not retryable. |
| `SignatureError::UrlParseError` | URL parse error. URL parsing failed. Not retryable. |
| `SignatureError::DecodeError` | Decode error. Protobuf decoding failed. Not retryable. |
| `SignatureError::Signer` | Signer error. Cryptographic signer operation failed. Not retryable. |
| `SignatureError::InvalidPublicKey` | Invalid public key. Public key is not valid. Not retryable. |
| `SignatureError::InvalidClientData` | Invalid client data. Client data is malformed. Not retryable. |
| `SignatureError::SignerError` | Alloy signer error. Ethereum signer failed. Not retryable. |
| `SignatureError::Signature` | Alloy signature error. Ethereum signature parsing failed. Not retryable. |

### SignatureRequestError <sub>enum</sub>

<small>`crates/xmtp_id/src/associations/builder.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `SignatureRequestError::UnknownSigner` | Unknown signer. Signer not recognized for this request. Not retryable. |
| `SignatureRequestError::MissingSigner` | Missing signer. Required signature was not provided. Not retryable. |
| `SignatureRequestError::BlockNumber` | Unable to get block number. Block number not returned after successful SCW verification. May be retryable. |

### VerifierError <sub>enum</sub>

<small>`crates/xmtp_id/src/scw_verifier/mod.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `VerifierError::UnexpectedERC6492Result` | Unexpected ERC-6492 result. Smart contract wallet signature verification returned unexpected result. Not retryable. |
| `VerifierError::Provider` | Provider error. Ethereum RPC provider error. Retryable. |
| `VerifierError::Url` | URL parse error. Verifier URL is malformed. Not retryable. |
| `VerifierError::Io` | I/O error. I/O operation failed. May be retryable. |
| `VerifierError::Serde` | Serialization error. JSON serialization/deserialization failed. Not retryable. |
| `VerifierError::MalformedEipUrl` | Malformed chain ID. Chain ID string lacks expected eip155: prefix. Not retryable. |
| `VerifierError::NoVerifier` | No verifier. Verifier not configured for the given chain ID. Retryable. |
| `VerifierError::InvalidHash` | Invalid hash. Hash has invalid length or format. Not retryable. |
| `VerifierError::Other` | Other error. Unclassified verifier error. May be retryable. |

## xmtp_mls

### ClientBuilderError <sub>enum</sub>

<small>`crates/xmtp_mls/src/builder.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `ClientBuilderError::MissingParameter` | Missing parameter. Required builder parameter not provided. Not retryable. |
| `ClientBuilderError::ClientError` | Client error. Client operation failed during build. May be retryable. |
| `ClientBuilderError::StorageError` | Storage error. Storage initialization failed. Not retryable. |
| `ClientBuilderError::Identity` | Identity error. Identity creation/loading failed. Not retryable. |
| `ClientBuilderError::WrappedApiError` | API error. API client initialization failed. Retryable. |
| `ClientBuilderError::GroupError` | Group error. Group operation failed during build. Not retryable. |
| `ClientBuilderError::DeviceSync` | Device sync error. Device sync setup failed. Not retryable. |
| `ClientBuilderError::OfflineBuildFailed` | Offline build failed. Builder tried to access the network in offline mode. Not retryable. |

### ClientError <sub>enum</sub>

<small>`crates/xmtp_mls/src/client.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `ClientError::PublishError` | Could not publish. Failed to publish messages to the network. May be retryable. |
| `ClientError::Storage` | Storage error. Database operation failed. May be retryable. |
| `ClientError::Api` | API error. Network request to XMTP backend failed. Retryable. |
| `ClientError::Identity` | Identity error. Problem with identity operations. Not retryable. |
| `ClientError::TlsError` | TLS Codec error. Encoding/decoding MLS TLS structures failed. Not retryable. |
| `ClientError::KeyPackageVerification` | Key package verification failed. Invalid key package received from network. Not retryable. |
| `ClientError::StreamInconsistency` | Stream inconsistency. Message stream state became inconsistent. Not retryable. |
| `ClientError::Association` | Association error. Identity association operation failed. Not retryable. |
| `ClientError::SignatureValidation` | Signature validation error. A signature failed verification. Not retryable. |
| `ClientError::IdentityUpdate` | Identity update error. Failed to process identity update. Not retryable. |
| `ClientError::SignatureRequest` | Signature request error. Failed to create/process signature request. Not retryable. |
| `ClientError::Group` | Group error. Group operation failed. May be retryable. |
| `ClientError::LocalEvent` | Local event error. Failed to process local event. Not retryable. |
| `ClientError::Db` | Database connection error. Connection to database failed. Retryable. |
| `ClientError::Generic` | Generic error. Unclassified error. May be retryable. |
| `ClientError::MlsStore` | MLS store error. OpenMLS key store operation failed. Not retryable. |
| `ClientError::EnrichMessage` | Message enrichment error. Failed to enrich message content. Not retryable. |
| `ClientError::Conversion` | Conversion Error Data type failed to convert. Not retryable. |
| `ClientError::RegistrationNotVisible` | Registration not visible. Registration was not visible on the required number of nodes within the timeout. Not retryable. |
| `ClientError::EnvelopesNotYetVisible` | Envelopes not yet visible. Registration envelopes haven't propagated to the node yet. Retryable. |

### DeviceSyncError <sub>enum</sub>

<small>`crates/xmtp_mls/src/worker/device_sync/mod.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `DeviceSyncError::IO` | I/O error. File system or network I/O failed. May be retryable. |
| `DeviceSyncError::Serde` | Serialization error. JSON serialization/deserialization failed. Retryable. |
| `DeviceSyncError::AesGcm` | AES-GCM encryption error. Encryption/decryption of sync payload failed. Retryable. |
| `DeviceSyncError::Reqwest` | HTTP request error. HTTP request for sync payload failed. Retryable. |
| `DeviceSyncError::Conversion` | Type conversion error. Internal type conversion failed. Retryable. |
| `DeviceSyncError::UTF8` | UTF-8 error. String is not valid UTF-8. Retryable. |
| `DeviceSyncError::NoPendingRequest` | No pending request. No pending sync request to reply to. Retryable. |
| `DeviceSyncError::InvalidPayload` | Invalid payload. Sync message payload is malformed. Retryable. |
| `DeviceSyncError::UnspecifiedDeviceSyncKind` | Unspecified sync kind. Device sync kind not specified. Not retryable. |
| `DeviceSyncError::SyncPayloadTooOld` | Sync payload too old. Sync reply is outdated. Retryable. |
| `DeviceSyncError::Bincode` | Bincode error. Binary serialization failed. Retryable. |
| `DeviceSyncError::Archive` | Archive error. Sync archive operation failed. Retryable. |
| `DeviceSyncError::Decode` | Decode error. Protobuf decoding failed. Retryable. |
| `DeviceSyncError::AlreadyAcknowledged` | Already acknowledged. Sync interaction already acknowledged. Not retryable. |
| `DeviceSyncError::MissingOptions` | Missing options. Sync request options not provided. Retryable. |
| `DeviceSyncError::MissingSyncServerUrl` | Missing sync server URL. Sync server URL not configured. Not retryable. |
| `DeviceSyncError::MissingSyncGroup` | Missing sync group. Sync group not found. Not retryable. |
| `DeviceSyncError::Sync` | Sync summary. Sync completed with errors. May be retryable. |
| `DeviceSyncError::MlsStore` | MLS store error. OpenMLS key store operation failed. Retryable. |
| `DeviceSyncError::Recv` | Receive error. Channel receive failed. Retryable. |
| `DeviceSyncError::MissingField` | Missing field. Required field not present. Retryable. |
| `DeviceSyncError::MissingPayload` | Missing payload. Sync payload not found for PIN. Retryable. |

### EnrichMessageError <sub>enum</sub>

<small>`crates/xmtp_mls/src/messages/enrichment.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `EnrichMessageError::CodecError` | Codec decode error. Content type codec failed. Not retryable. |
| `EnrichMessageError::DecodeError` | Decode error. Protobuf decoding failed. Not retryable. |

### GroupError <sub>enum</sub>

<small>`crates/xmtp_mls/src/groups/error.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `GroupError::UserLimitExceeded` | Max user limit exceeded. Attempted to add too many members. Not retryable. |
| `GroupError::MissingSequenceId` | Sequence ID not found. Missing sequence ID in local database. Not retryable. |
| `GroupError::AddressNotFound` | Addresses not found. Specified addresses have no XMTP identity. Not retryable. |
| `GroupError::WrappedApi` | API error. Network request failed. Retryable. |
| `GroupError::InvalidGroupMembership` | Invalid group membership. Group membership state is invalid. Not retryable. |
| `GroupError::LeaveCantProcessed` | Leave cannot be processed. Group leave validation failed. Not retryable. |
| `GroupError::Storage` | Storage error. Database operation failed. May be retryable. |
| `GroupError::Intent` | Intent error. Failed to process group intent. Not retryable. |
| `GroupError::CreateMessage` | Create message error. MLS message creation failed. Not retryable. |
| `GroupError::TlsError` | TLS codec error. MLS TLS encoding/decoding failed. Not retryable. |
| `GroupError::UpdateGroupMembership` | Update group membership error. Failed to update group membership. May be retryable. |
| `GroupError::GroupCreate` | Group create error. MLS group creation failed. May be retryable. |
| `GroupError::SelfUpdate` | Self update error. MLS self-update operation failed. May be retryable. |
| `GroupError::WelcomeError` | Welcome error. Processing MLS welcome message failed. May be retryable. |
| `GroupError::InvalidExtension` | Invalid extension. MLS extension validation failed. Not retryable. |
| `GroupError::Signature` | Invalid signature. MLS signature verification failed. Not retryable. |
| `GroupError::Client` | Client error. Client operation failed within group. May be retryable. |
| `GroupError::ReceiveError` | Receive error. Processing received group message failed. May be retryable. |
| `GroupError::ReceiveErrors` | Receive errors. Multiple message processing failures. May be retryable. |
| `GroupError::AddressValidation` | Address validation error. An address/identifier is invalid. Not retryable. |
| `GroupError::LocalEvent` | Local event error. Failed to process local event. Not retryable. |
| `GroupError::InvalidPublicKeys` | Invalid public keys. Keys are not valid Ed25519 public keys. Not retryable. |
| `GroupError::CommitValidation` | Commit validation error. MLS commit validation failed. May be retryable. |
| `GroupError::Identity` | Identity error. Identity operation failed. Not retryable. |
| `GroupError::ConversionError` | Conversion error. Proto conversion failed. Not retryable. |
| `GroupError::CryptoError` | Crypto error. Cryptographic operation failed. Not retryable. |
| `GroupError::CreateGroupContextExtProposalError` | Group context proposal error. Failed to create group context extension proposal. May be retryable. |
| `GroupError::ProposeAddMember` | Propose add member error. Failed to create an add-member proposal. May be retryable. |
| `GroupError::ProposeRemoveMember` | Propose remove member error. Failed to create a remove-member proposal. May be retryable. |
| `GroupError::Proposal` | Proposal error. Generic MLS proposal creation/handling failure. May be retryable. |
| `GroupError::CommitToPendingProposals` | Commit to pending proposals error. Failed to commit pending proposals into an MLS commit. May be retryable. |
| `GroupError::MergePendingCommit` | Merge pending commit error. Failed to merge a pending commit into local state. May be retryable. |
| `GroupError::ProposalsNotSupported` | Proposals not supported. Encountered a proposal when our client does not support proposals. Not retryable. |
| `GroupError::CredentialError` | Credential error. MLS credential validation failed. Not retryable. |
| `GroupError::LeafNodeError` | Leaf node error. MLS leaf node operation failed. Not retryable. |
| `GroupError::InstallationDiff` | Installation diff error. Installation diff computation failed. May be retryable. |
| `GroupError::NoPSKSupport` | No PSK support. Pre-shared keys are not supported. Not retryable. |
| `GroupError::SqlKeyStore` | SQL key store error. OpenMLS key store operation failed. May be retryable. |
| `GroupError::SyncFailedToWait` | Sync failed to wait. Waiting for intent sync failed. Retryable. |
| `GroupError::MissingPendingCommit` | Missing pending commit. Expected pending commit not found. Not retryable. |
| `GroupError::ProcessIntent` | Process intent error. Failed to process group intent. May be retryable. |
| `GroupError::LockUnavailable` | Failed to load lock. Concurrency lock acquisition failed. Retryable. |
| `GroupError::TooManyCharacters` | Exceeded max characters. Field value exceeds character limit. Not retryable. |
| `GroupError::GroupPausedUntilUpdate` | Group paused until update. Group is paused until a newer version is available. Not retryable. |
| `GroupError::GroupInactive` | Group is inactive. Operation on an inactive group. Not retryable. |
| `GroupError::Sync` | Sync summary. Sync operation completed with errors. May be retryable. |
| `GroupError::Db` | Database connection error. Database connection failed. Retryable. |
| `GroupError::MlsStore` | MLS store error. OpenMLS key store failed. Not retryable. |
| `GroupError::MetadataPermissionsError` | Metadata permissions error. Metadata permission check failed. Not retryable. |
| `GroupError::FailedToVerifyInstallations` | Failed to verify installations. Installation verification failed. Not retryable. |
| `GroupError::NoWelcomesToSend` | No welcomes to send. No welcome messages to send to new members. Not retryable. |
| `GroupError::CodecError` | Codec error. Content type codec failed. Retryable. |
| `GroupError::WrapWelcome` | Wrap welcome error. Failed to wrap welcome message. Not retryable. |
| `GroupError::UnwrapWelcome` | Unwrap welcome error. Failed to unwrap welcome message. Not retryable. |
| `GroupError::WelcomeDataNotFound` | Welcome data not found. Welcome data missing from topic. Not retryable. |
| `GroupError::UninitializedResult` | Result not initialized. Expected result was not initialized. Not retryable. |
| `GroupError::Diesel` | Diesel ORM error. Raw database query failed. May be retryable. |
| `GroupError::UninitializedField` | Uninitialized field. Builder field not initialized. Not retryable. |
| `GroupError::DeleteMessage` | Delete message error. Failed to delete message. Not retryable. |
| `GroupError::DeviceSync` | Device sync error. Device sync operation failed. May be retryable. |

### GroupMutablePermissionsError <sub>enum</sub>

<small>`crates/xmtp_mls/src/groups/group_permissions.rs`</small>

Errors that can occur when working with GroupMutablePermissions.

| Error Code | Description |
|:-----------|:------------|
| `GroupMutablePermissionsError::Serialization` | Serialization error. Failed to encode permissions protobuf. Not retryable. |
| `GroupMutablePermissionsError::Deserialization` | Deserialization error. Failed to decode permissions protobuf. Not retryable. |
| `GroupMutablePermissionsError::Policy` | Policy error. Permission policy validation failed. Not retryable. |
| `GroupMutablePermissionsError::InvalidConversationType` | Invalid conversation type. Wrong conversation type for this operation. Not retryable. |
| `GroupMutablePermissionsError::MissingPolicies` | Missing policies. Required permission policies not present. Not retryable. |
| `GroupMutablePermissionsError::MissingExtension` | Missing extension. Required MLS extension not found. Not retryable. |
| `GroupMutablePermissionsError::InvalidPermissionPolicyOption` | Invalid permission policy option. Invalid permission policy configuration. Not retryable. |

### IdentityError <sub>enum</sub>

<small>`crates/xmtp_mls/src/identity.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `IdentityError::CredentialSerialization` | Credential serialization error. Failed to encode MLS credential. Not retryable. |
| `IdentityError::Decode` | Decode error. Protobuf decoding failed. Not retryable. |
| `IdentityError::InstallationIdNotFound` | Installation not found. Installation ID not found in network association state. Not retryable. |
| `IdentityError::BasicCredential` | Basic credential error. MLS basic credential validation failed. Not retryable. |
| `IdentityError::LegacyKeyReuse` | Legacy key re-use. Attempted to reuse a legacy key. Not retryable. |
| `IdentityError::UninitializedIdentity` | Uninitialized identity. Identity not yet initialized. Not retryable. |
| `IdentityError::InstallationKey` | Installation key error. Problem with installation key. Not retryable. |
| `IdentityError::MalformedLegacyKey` | Malformed legacy key. Legacy key format is invalid. Not retryable. |
| `IdentityError::LegacySignature` | Legacy signature error. Legacy signature is invalid. Not retryable. |
| `IdentityError::Crypto` | Crypto error. Cryptographic operation failed. Not retryable. |
| `IdentityError::LegacyKeyMismatch` | Legacy key mismatch. Legacy key does not match address. Not retryable. |
| `IdentityError::OpenMls` | OpenMLS error. OpenMLS library error. Not retryable. |
| `IdentityError::KeyPackageGenerationError` | Key package generation error. Failed to generate MLS key package. Not retryable. |
| `IdentityError::InboxIdMismatch` | Inbox ID mismatch. Associated InboxID does not match stored value. Not retryable. |
| `IdentityError::NoAssociatedInboxId` | No associated Inbox ID. Address has no associated InboxID. Not retryable. |
| `IdentityError::RequiredIdentityNotFound` | Required identity not found. Identity was not found in cache. Not retryable. |
| `IdentityError::NewIdentity` | New identity creation error. Error creating a new identity. Not retryable. |
| `IdentityError::Signer` | Signer error. Cryptographic signer failed. Not retryable. |
| `IdentityError::TooManyInstallations` | Too many installations. InboxID has reached max installation count. Not retryable. |
| `IdentityError::InvalidExtension` | Invalid extension error. MLS extension validation failed. Not retryable. |
| `IdentityError::MissingPostQuantumPublicKey` | Missing PQ public key. Post-quantum public key not found. Not retryable. |
| `IdentityError::Bincode` | Bincode serialization error. Binary serialization failed. Not retryable. |
| `IdentityError::UninitializedField` | Uninitialized field. Builder field not initialized. Not retryable. |

### SubscribeError <sub>enum</sub>

<small>`crates/xmtp_mls/src/subscriptions/mod.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `SubscribeError::Group` | Group error. Group operation failed during subscription. May be retryable. |
| `SubscribeError::NotFound` | Not found. Subscribed resource not found. Retryable. |
| `SubscribeError::GroupMessageNotFound` | Group message not found. Expected message missing from database. Retryable. |
| `SubscribeError::ReceiveGroup` | Receive group error. Processing streamed group message failed. May be retryable. |
| `SubscribeError::Storage` | Storage error. Database operation failed. May be retryable. |
| `SubscribeError::Decode` | Decode error. Protobuf decoding failed. Not retryable. |
| `SubscribeError::MessageStream` | Message stream error. Message stream failed. Retryable. |
| `SubscribeError::ConversationStream` | Conversation stream error. Conversation stream failed. Retryable. |
| `SubscribeError::ApiClient` | API client error. Network request failed. Retryable. |
| `SubscribeError::BoxError` | Boxed error. Wrapped dynamic error. May be retryable. |
| `SubscribeError::Db` | Database connection error. Database connection failed. Retryable. |
| `SubscribeError::Conversion` | Conversion error. Proto conversion failed. Not retryable. |
| `SubscribeError::Envelope` | Envelope error. Decentralized API envelope error. May be retryable. |

## xmtp_mls_common

### GroupMetadataError <sub>enum</sub>

<small>`crates/xmtp_mls_common/src/group_metadata.rs`</small>

| Error Code | Description |
|:-----------|:------------|
| `GroupMetadataError::Serialization` | Serialization error. Failed to encode metadata protobuf. Not retryable. |
| `GroupMetadataError::Deserialization` | Deserialization error. Failed to decode metadata protobuf. Not retryable. |
| `GroupMetadataError::InvalidConversationType` | Invalid conversation type. Protobuf conversation type not recognized. Not retryable. |
| `GroupMetadataError::MissingExtension` | Missing extension. Immutable metadata MLS extension not found. Not retryable. |
| `GroupMetadataError::InvalidDmMembers` | Invalid DM members. DM member data is invalid. Not retryable. |
| `GroupMetadataError::MissingDmMember` | Missing DM member. A DM member field is not set. Not retryable. |

## xmtp_proto

### ConversionError <sub>enum</sub>

<small>`crates/xmtp_proto/src/error.rs`</small>

General Error types for use when converting/deserializing From/To Protos
Loosely Modeled after serdes [error](https://docs.rs/serde/latest/serde/de/value/struct.Error.html) type.
This general error type avoid circular hard-dependencies on crates further up the tree
(xmtp_id/xmtp_mls) if they had defined the error themselves.

| Error Code | Description |
|:-----------|:------------|
| `ConversionError::Missing` | Missing field. Required field missing during proto conversion. Not retryable. |
| `ConversionError::Unspecified` | Unspecified field. Protobuf field is unspecified. Not retryable. |
| `ConversionError::Deprecated` | Deprecated field. A deprecated protobuf field was used. Not retryable. |
| `ConversionError::InvalidLength` | Invalid length. Data has wrong length for conversion. Not retryable. |
| `ConversionError::InvalidValue` | Invalid value. Data has unexpected value. Not retryable. |
| `ConversionError::Decode` | Decode error. Protobuf decoding failed. Not retryable. |
| `ConversionError::Encode` | Encode error. Protobuf encoding failed. Not retryable. |
| `ConversionError::UnknownEnumValue` | Unknown enum value. Protobuf enum has unrecognized value. Not retryable. |
| `ConversionError::EdSignature` | Ed25519 signature error. Ed25519 signature bytes invalid. Not retryable. |
| `ConversionError::InvalidPublicKey` | Invalid public key. Public key validation failed. Not retryable. |
| `ConversionError::InvalidVersion` | Invalid version. Protocol version not supported. Not retryable. |
| `ConversionError::OpenMls` | OpenMLS error. OpenMLS library error. Not retryable. |
| `ConversionError::Protocol` | Protocol message error. MLS protocol message error. Not retryable. |
| `ConversionError::Builder` | Builder error. Builder field not initialized. Not retryable. |
| `ConversionError::Slice` | Slice error. Byte slice conversion failed. Not retryable. |

### ProtoError <sub>enum</sub>

<small>`crates/xmtp_proto/src/error.rs`</small>

Error resulting from proto conversions/mutations

| Error Code | Description |
|:-----------|:------------|
| `ProtoError::Hex` | Hex error. Hex encoding/decoding failed. Not retryable. |
| `ProtoError::Decode` | Decode error. Protobuf decoding failed. Not retryable. |
| `ProtoError::Encode` | Encode error. Protobuf encoding failed. Not retryable. |
| `ProtoError::OpenMls` | OpenMLS error. OpenMLS library error. Not retryable. |
| `ProtoError::MlsProtocolMessage` | MLS protocol message error. MLS framing error. Not retryable. |
| `ProtoError::KeyPackage` | Key package error. Key package verification failed. Not retryable. |
| `ProtoError::NotFound` | Not found. Proto resource not found. Not retryable. |

