# Core Types Core types are the shared records the SDK uses across the client, connectors, and verticals — as opposed to the parameters and results specific to a single operation. They fall into three groups: the [account records](#account) that identify and reference XRPL accounts, the [submission types](#submissionresult) every write resolves to, and the [connector identifiers](#custodiankind) that say which backend owns what. ## Account [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L37) A discovered account: its r-address paired with the connector that owns and signs for it. The SDK hands you an `Account` from `client.accounts` and [`connector.listAccounts()`](/docs/simplexrpl/references/connectors). It extends [`AccountRef`](#accountref), so `address` and `custodianRef` come from there. This is distinct from `AccountData`, the on-chain snapshot returned by [`account.retrieve`](/docs/simplexrpl/references/verticals/account/retrieve). | Field | Type | Description | | --- | --- | --- | | `address` | `string` | The XRPL r-address — the canonical key the SDK uses to identify the account. Inherited from [`AccountRef`](#accountref). | | `custodianRef` | [`CustodianRef`](#custodianref) *(optional)* | The owning connector's opaque native id for the account. Inherited from [`AccountRef`](#accountref). | | `signer` | [`Custodian`](/docs/simplexrpl/references/connectors) | The connector that discovered and signs for this account. | | `alias` | `string` *(optional)* | A connector-side alias, when the backend exposes one. | | `ledgerId` | `string` *(optional)* | The connector-specific ledger id backing this address, when the backend needs one disambiguated — e.g. Ripple Custody's multi-ledger Vault accounts, which carry no ledger default of their own. | | `publicKey` | `string` *(optional)* | The account's XRPL public key (hex), when the connector exposes it. Used to populate `SigningPubKey` on transactions signed by a backend that returns only the signature, e.g. Palisade's raw sign-only path. | | `metadata` | `object` *(optional)* | Advisory-only. Shape `{ kind?, tags? }`, where `kind` is a [`CustodianKind`](#custodiankind) and `tags` is a list of strings. | ## AccountRef [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L25) The minimal reference to an account — just its r-address and the owning connector's native id. [`Account`](#account) extends it, and a connector's `primary` field is an `AccountRef`. | Field | Type | Description | | --- | --- | --- | | `address` | `string` | The XRPL r-address. | | `custodianRef` | [`CustodianRef`](#custodianref) *(optional)* | The owning connector's opaque native id for the account. | ## AccountSelector [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L79) How you choose the source account for an operation — the `from` option on writes. It is one of three forms: | Form | Type | Description | | --- | --- | --- | | r-address | `string` | A bare r-address string. | | `{ address }` | `object` | An object holding an explicit r-address. | | `{ signer, account? }` | `object` | A connector, optionally narrowed to one of the accounts it owns (by r-address). | ## SubmissionResult [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L194) `SubmissionResult` is generic over `T`, the operation-specific `intent` payload — each operation's reference page lists its own return fields. The table below is the same one those pages inline under **Returns**. Every simpleXRPL write resolves to a `SubmissionResult` — a union tagged by `source`, with the backend's raw response preserved verbatim. Its common fields are: | Field | Type | Description | | --- | --- | --- | | `intent` | `T` | The operation-specific output — see the operation's own return fields. | | `source` | `'xrpld' | 'custody' | 'palisade'` | Which backend produced the result; discriminates `response`. | | `response` | `TxResponse` | custody record | Palisade record | The backend's raw response, preserved verbatim. | | `txHash` | `string` *(optional)* | The XRPL transaction hash, once the transaction is on-ledger. | | `intentId` | `string` *(optional)* | The custodian intent id, when the path produced one. Hold onto this to resume via `client.intent`. | | `idempotencyKey` | `string` *(optional)* | The UUIDv7 this submission carried. Pass it back as a later call's `idempotencyKey` to retry to the same intent rather than creating a duplicate. | Note `txHash` being absent doesn't mean the write failed — on a governed connector the intent may still be awaiting approval. Hold onto `intentId` and resume through [`client.intent`](/docs/simplexrpl/references/intent-inspector); see [Intent Inspector](/docs/simplexrpl/references/intent-inspector). ## SubmissionHandle [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L212) Returned by an async submission, and by [`client.intent.handleFor()`](/docs/simplexrpl/references/intent-inspector#handlefor). `kind` is a [`CustodianKind`](#custodiankind); `custodian` is the [connector](/docs/simplexrpl/references/connectors) itself. A `SubmissionHandle` lets you poll or wait for a terminal state without holding the original request open. | Field | Type | Description | | --- | --- | --- | | `kind` | `CustodianKind` | The connector kind that owns the underlying intent or transaction. | | `id` | `string` | The custodian-native id (an intent id), or the XRPL transaction hash for local signing. | | `custodian` | `Custodian` | The connector that produced this handle. | | `poll` | `() => Promise` | A non-blocking snapshot of the current state. | | `wait` | `(timeoutMs?: number) => Promise` | Block until terminal state or the timeout (defaults to the connector's). | | `cancel` | `() => Promise` *(optional)* | Cancel the pending intent, where the backend supports it. | ## OnChainResult [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L308) The outcome of a transaction confirmed on-ledger, returned by [`client.intent.awaitOnChain()`](/docs/simplexrpl/references/intent-inspector#awaitonchain). An `OnChainResult` reports a transaction that reached the ledger. | Field | Type | Description | | --- | --- | --- | | `txHash` | `string` | The XRPL transaction hash. | | `mptIssuanceId` | `string` *(optional)* | Present only when the transaction created an MPT issuance. | ## FeeIntent [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L99) A normalized fee intent. The public surface never takes raw drops for the fee itself — each path translates this to its backend's fee model. Used as a connector's `defaultFee` and as the per-write `fee` option. | Field | Type | Description | | --- | --- | --- | | `priority` | `'low' | 'medium' | 'high'` *(optional)* | Priority tier. Backends that cannot honor it auto-price and warn. | | `maxFeeDrops` | `string` *(optional)* | The maximum fee cap, in drops — the common contract across all paths. | ## CustodianKind [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L10) Which signing backend a [connector](/docs/simplexrpl/references/connectors) adapts. One of four string literals: `'local'` · `'ripple-custody'` · `'palisade-custody'` · `'external'` ## CustodianRef [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/domain/model.ts#L18) A connector's opaque native identifier for an account, read only by the connector that owns it. One of: | Form | Type | Used by | | --- | --- | --- | | account id | `string` | Account-id connectors. | | `{ vaultId, walletId }` | `object` | Vault-based connectors, e.g. [Palisade](/docs/simplexrpl/references/connectors/palisade). | | absent | `undefined` | Local wallets, which have no backend-side id. |