Skip to content

Get one account

GET
/accounts/{id}
curl --request GET \
--url https://api.tovarifinancial.com/accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>'
id
required
string format: uuid

Account id

Account

Media typeapplication/json
object
data
required
object
id
required
string format: uuid
userId
string
name
required
string
accountType
required
string
Allowed values: checking savings investment credit_card loan
balanceCents
required

Integer minor units (cents)

integer format: int64
startingBalanceCents

Integer minor units (cents)

integer format: int64
institution
string
nullable
maskLast4
string
nullable
lastReconciledAt
string format: date-time
nullable
currency
required
string
isActive
required
boolean
apy
number
nullable
creditLimitCents

Integer minor units (cents)

integer format: int64
nullable
displayOrder
integer
includeInSafeToSpend
boolean
clearedBalanceCents

Integer minor units (cents)

integer format: int64
unclearedBalanceCents

Integer minor units (cents)

integer format: int64
monthChangeCents

Integer minor units (cents)

integer format: int64
hasTransactions
boolean
plaidLinked
boolean
plaidInstitutionName
string
nullable
plaidLastBalanceCents

Integer minor units (cents)

integer format: int64
nullable
plaidLastBalanceAt
string format: date-time
nullable
balanceSource
string
Allowed values: ledger investment-snapshot
investmentValue
object
state
string
Allowed values: value awaiting-first-snapshot reconnect-required unsupported-currency unavailable
valueCents

Integer minor units (cents)

integer format: int64
nullable
effectiveAsOf
string format: date-time
nullable
plaidAsOfPresent
boolean
changeSincePreviousCents

Integer minor units (cents)

integer format: int64
nullable
source
string
Allowed values: plaid-holdings
taxTreatment
object
bucket
string
Allowed values: taxable tax_deferred tax_free health education other out_of_scope
source
string
Allowed values: detected user
detectedBucket
string
Allowed values: taxable tax_deferred tax_free health education other out_of_scope
confirmationState
string
Allowed values: unconfirmed confirmed overridden deferred
isAmbiguous
boolean
promptReason
string
Allowed values: ira_traditional_or_roth
confirmedAt
string format: date-time
nullable
promptFirstShownAt
string format: date-time
nullable
promptShownCount
integer
bankBalanceStatus
string
Allowed values: reported unreported unapplied
bankBalanceAsOf

The bank’s own instant for plaidLastBalanceCents (Plaid’s last_updated_datetime, else the last live sync-page write). Non-null only when bankBalanceAsOfBasis is provider or sync-page. plaidLastBalanceAt is OUR read time and must never be rendered as a bank as-of.

string format: date-time
nullable
bankBalanceAsOfBasis

Where bankBalanceAsOf comes from. cached = nothing dates the figure (a cached read with no provider time): bankBalanceAsOf is null and only bankBalanceCheckedAt travels. Non-null exactly when plaidLastBalanceCents is non-null.

string
nullable
Allowed values: provider sync-page cached
bankBalanceCheckedAt

OUR read time for a cached figure (render as “checked”, never “as of”). Non-null only when bankBalanceAsOfBasis is cached.

string format: date-time
nullable
plaidLastAvailableCents

Plaid’s available balance, signed integer cents. Null for credit_card, loan and investment accounts, when Plaid supplied none, or when plaidLastBalanceCents is null.

integer format: int64
nullable
bankBalanceComparison

Working ledger vs bank figure: matches (equal), pending-activity (cleared equals the bank figure), in-transit (neither — recent bank activity may not have arrived yet). The single render gate for the per-account bank line; non-null only for linked, active, non-investment, reported accounts with a bank figure.

string
nullable
Allowed values: matches pending-activity in-transit
bankBalanceDeltaCents

Working ledger balance minus the bank figure. Informational; non-null exactly when bankBalanceComparison is non-null.

integer format: int64
nullable
permanentDelete
object
eligible
required
boolean
reason
required

Why the account can only be closed FOR THIS CALLER, in precedence order admin_only (the caller is not a household admin, KAN-3437) > linked_to_bank > has_cross_account_transfer > scheduled_transfer_target. Null exactly when eligible is true.

string
nullable
Allowed values: admin_only linked_to_bank has_cross_account_transfer scheduled_transfer_target
transactionCount
required

Live (not soft-deleted) transactions of the account.

integer
billCount
required

Every bill on the account, active or not. All are deleted with it.

integer
message
string
requestId
required
string
timestamp
required
string format: date-time
Example
{
"data": {
"accountType": "checking",
"balanceSource": "ledger",
"investmentValue": {
"state": "value",
"source": "plaid-holdings"
},
"taxTreatment": {
"bucket": "taxable",
"source": "detected",
"detectedBucket": "taxable",
"confirmationState": "unconfirmed",
"promptReason": "ira_traditional_or_roth"
},
"bankBalanceStatus": "reported",
"bankBalanceAsOfBasis": "provider",
"bankBalanceComparison": "matches",
"permanentDelete": {
"reason": "admin_only"
}
}
}

Missing, invalid, or expired bearer token

Media typeapplication/json
object
errorCode
required

Machine-readable error code (AUTH_ERROR_CODES).

string
Allowed values: INVALID_EMAIL_FORMAT USER_ALREADY_EXISTS INVALID_INVITE_CODE WRONG_PASSWORD USER_NOT_FOUND AUTHENTICATION_FAILED EXPIRED_CODE INVALID_CODE INVALID_PASSWORD VALIDATION_ERROR SIGNUP_FAILED DATABASE_ERROR SERVICE_UNAVAILABLE PLAID_ERROR IDEMPOTENCY_CONFLICT ACCOUNT_ALREADY_LINKED NOT_FOUND
message
required
string
fieldErrors

Optional field-level validation errors, keyed by field name.

object
key
additional properties
Array<string>
requestId
required
string
timestamp
required
string format: date-time
Example
{
"errorCode": "INVALID_EMAIL_FORMAT"
}

Authenticated, but the tenant gate refuses the request until the caller resolves a precondition. errorCode is one of EMAIL_NOT_VERIFIED, POLICY_ACCEPTANCE_REQUIRED, or SUBSCRIPTION_REQUIRED, evaluated in exactly that order (contract term CCR-1: email verification first, then policy acceptance, then subscription — so a subscriber who has merely not re-accepted the current policies always sees POLICY_ACCEPTANCE_REQUIRED). A POLICY_ACCEPTANCE_REQUIRED body additionally carries details.outstanding (the policy versions still to accept) and details.firstAcceptance. The SUBSCRIPTION_REQUIRED arm is INERT unless the server-side BILLING_ENABLED flag is exactly the string true; while it is off, only the first two codes are reachable. Not retryable as sent — resolve the named condition, then resend.

Media typeapplication/json
object
errorCode
required

Which precondition refused the request. Evaluated in this order (CCR-1); SUBSCRIPTION_REQUIRED is unreachable while BILLING_ENABLED is not exactly true.

string
Allowed values: EMAIL_NOT_VERIFIED POLICY_ACCEPTANCE_REQUIRED SUBSCRIPTION_REQUIRED
message
required
string
details
object
outstanding
required

Active policy versions the user has not yet accepted.

Array<object>
object
id
required
string format: uuid
policyType
required
string
version
required
integer
title
required
string
firstAcceptance
required

True when the user has accepted no policy before — the client renders the new-signup screen rather than the re-acceptance one.

boolean
requestId
required
string
timestamp
required
string format: date-time
Example
{
"errorCode": "EMAIL_NOT_VERIFIED"
}

Resource not found or not owned by the caller org

Media typeapplication/json
object
errorCode
required

Machine-readable error code (AUTH_ERROR_CODES).

string
Allowed values: INVALID_EMAIL_FORMAT USER_ALREADY_EXISTS INVALID_INVITE_CODE WRONG_PASSWORD USER_NOT_FOUND AUTHENTICATION_FAILED EXPIRED_CODE INVALID_CODE INVALID_PASSWORD VALIDATION_ERROR SIGNUP_FAILED DATABASE_ERROR SERVICE_UNAVAILABLE PLAID_ERROR IDEMPOTENCY_CONFLICT ACCOUNT_ALREADY_LINKED NOT_FOUND
message
required
string
fieldErrors

Optional field-level validation errors, keyed by field name.

object
key
additional properties
Array<string>
requestId
required
string
timestamp
required
string format: date-time
Example
{
"errorCode": "INVALID_EMAIL_FORMAT"
}

Internal error (no internal detail leaked)

Media typeapplication/json
object
errorCode
required

Machine-readable error code (AUTH_ERROR_CODES).

string
Allowed values: INVALID_EMAIL_FORMAT USER_ALREADY_EXISTS INVALID_INVITE_CODE WRONG_PASSWORD USER_NOT_FOUND AUTHENTICATION_FAILED EXPIRED_CODE INVALID_CODE INVALID_PASSWORD VALIDATION_ERROR SIGNUP_FAILED DATABASE_ERROR SERVICE_UNAVAILABLE PLAID_ERROR IDEMPOTENCY_CONFLICT ACCOUNT_ALREADY_LINKED NOT_FOUND
message
required
string
fieldErrors

Optional field-level validation errors, keyed by field name.

object
key
additional properties
Array<string>
requestId
required
string
timestamp
required
string format: date-time
Example
{
"errorCode": "INVALID_EMAIL_FORMAT"
}

Service temporarily unavailable — errorCode is SERVICE_UNAVAILABLE. A TRANSIENT, RETRYABLE condition rather than a defect in the request: a query that exceeded its time budget, a lost or refused database connection, a saturated connection pool, or an outage at an upstream provider the request depends on (the authentication provider, or the bank data provider on a bank-connection operation). The identical request may succeed on retry — back off briefly and, on a write, resend the same X-Idempotency-Key where the operation accepts one.

Media typeapplication/json
object
errorCode
required

Machine-readable error code (AUTH_ERROR_CODES).

string
Allowed values: INVALID_EMAIL_FORMAT USER_ALREADY_EXISTS INVALID_INVITE_CODE WRONG_PASSWORD USER_NOT_FOUND AUTHENTICATION_FAILED EXPIRED_CODE INVALID_CODE INVALID_PASSWORD VALIDATION_ERROR SIGNUP_FAILED DATABASE_ERROR SERVICE_UNAVAILABLE PLAID_ERROR IDEMPOTENCY_CONFLICT ACCOUNT_ALREADY_LINKED NOT_FOUND
message
required
string
fieldErrors

Optional field-level validation errors, keyed by field name.

object
key
additional properties
Array<string>
requestId
required
string
timestamp
required
string format: date-time
Example
{
"errorCode": "INVALID_EMAIL_FORMAT"
}