Crypto
23 operations. All areas
- GET /v1/crypto/settings
- POST /v1/crypto/settings
- GET /v1/crypto/wallets
- POST /v1/crypto/wallets
- GET /v1/crypto/wallets/{id}
- POST /v1/crypto/wallets/{id}/archive
- POST /v1/crypto/wallets/{id}/lot-method
- POST /v1/crypto/wallets/{id}/acquisitions
- POST /v1/crypto/wallets/{id}/disposals
- GET /v1/crypto/lots
- GET /v1/crypto/receipts
- GET /v1/crypto/receipts/{id}
- POST /v1/crypto/receipts/{id}/assign
- GET /v1/crypto/disposals
- GET /v1/crypto/gains
- GET /v1/crypto/valuations
- POST /v1/crypto/valuations
- POST /v1/crypto/valuations/{id}/decide
- GET /v1/crypto/remeasurements
- POST /v1/crypto/remeasurements
- GET /v1/documents/{id}/crypto
- POST /v1/documents/{id}/crypto
- POST /v1/documents/{id}/crypto/quote
GET/v1/crypto/settings
The crypto receipts add-on: whether it is on, the networks, quote validity, confirmations, remeasurement and the accounts it posts to
- Operation
getCryptoSettings - Scope: read
- Read
- Responses
200Settings (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/settings
Switch crypto receipts on or off (needs the add-on), set the quote validity (5-1440 minutes), Bitcoin confirmations (1-6), Monero confirmations (10-30), month-end remeasurement, and the realized, unrealized, settlement, fair value adjustment and network fee accounts (made when first switched on unless given). The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
updateCryptoSettings - Scope: admin
- Write: sets a value, no Idempotency-Key needed
- Request body
enabledbooleanquote_minutesintegerbtc_confirmationsintegerxmr_confirmationsintegerremeasurebooleanrealized_accountstringunrealized_accountstringsettlement_accountstringfair_value_accountstringfee_accountstring
- Responses
200Settings (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/wallets
The company's crypto wallets (watch-only), their balances (quantity and cost in lots) and the watcher's state
- Operation
listCryptoWallets - Scope: read
- Read
- Parameters
include_archivedquery, boolean
- Responses
200Wallets (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/wallets
Add a watch-only wallet: a Bitcoin extended PUBLIC key (xpub/ypub/zpub, tpub/upub/vpub on testnet) or output descriptor; a Monero primary address and its private VIEW key; or a stablecoin receiving address. Seeds, private keys and spend keys are refused (crypto_secret_refused) and never stored; keys are sealed at rest. Makes the wallet's own asset account unless ledger_account is given. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
addCryptoWallet - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Request body
rail"btc" | "xmr" | "usdc_base" | "usdc_ethereum" | "usdc_solana" | "usdt_ethereum" | "usdt_tron", required btc (Bitcoin), xmr (Monero), usdc_base, usdc_ethereum, usdc_solana, usdt_ethereum, usdt_tronnamestring, requiredkeystringaddressstringview_keystringrestore_heightintegerlot_method"fifo" | "specific"gap_limitintegerledger_accountstring
- Responses
201Added (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/wallets/{id}
One wallet with its open lots
- Operation
getCryptoWallet - Scope: read
- Read
- Parameters
idpath, string, required
- Responses
200Wallet (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/wallets/{id}/archive
Archive a wallet: no new quotes (open ones are cancelled); its lots stay and disposals can still be recorded. A wallet is never edited: to change a key, archive it and add a new one. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
archiveCryptoWallet - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
reasonstring, required
- Responses
200Archived (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/wallets/{id}/lot-method
How future disposals from the wallet pick lots: fifo (first in, first out; the default) or specific (each disposal names its lots). The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
setCryptoWalletLotMethod - Scope: admin
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
lot_method"fifo" | "specific", required
- Responses
200Wallet (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/wallets/{id}/acquisitions
Record crypto the wallet already held or bought (not received on an invoice): a lot at its cost, posted against the offset account (e.g. Opening Balance Equity, or the bank it was bought from). dry_run previews. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
recordCryptoAcquisition - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
quantitystring, required A quantity in the asset's units (decimal string)cost_centsinteger, required US centsacquired_atstring, required A date (end of that day, UTC) or an ISO 8601 timeoffset_accountstring, requiredmemostringdry_runboolean
- Responses
200Dry run201Recorded (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/wallets/{id}/disposals
Record a disposal done outside Evenbead (Evenbead never moves funds): sold (proceeds_cents received into counter_account), spent (its fair value to counter_account), moved to another of the company's wallets (transfer: lots and dates move, no gain), a network fee, or other. Lots by the wallet's method (FIFO) or the lots named in picks; realized gain/loss to the realized account, split short/long term. dry_run previews the lots and the gain. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
recordCryptoDisposal - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
kind"sell" | "spend" | "transfer" | "fee" | "other", requiredquantitystring, required A quantity in the asset's units (decimal string)disposed_atstring, required A date (end of that day, UTC) or an ISO 8601 timeproceeds_centsinteger US centspricestring US dollars per whole unit (decimal string)counter_accountstringto_wallet_idstringpicksarray of objecttxidstringmemostringdry_runboolean
- Responses
200Dry run201Recorded (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/lots
Lots (open by default): what was acquired when, at what cost, and what is left
- Operation
listCryptoLots - Scope: read
- Read
- Parameters
wallet_idquery, stringallquery, boolean
- Responses
200Lots (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/receipts
Payments received in crypto, newest first: confirmations, the invoice, the fair value when received and the books
- Operation
listCryptoReceipts - Scope: read
- Read
- Parameters
statusquery, stringdocument_idquery, stringwallet_idquery, stringlimitquery, integer
- Responses
200Receipts (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/receipts/{id}
One crypto receipt
- Operation
getCryptoReceipt - Scope: read
- Read
- Parameters
idpath, string, required
- Responses
200Receipt (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/receipts/{id}/assign
Settle a confirmed receipt that matched no quote (or waited for a valuation): apply it to an invoice (document_id), book it to an account (account, e.g. other income or a loan), or mark it ignored (ignore: true, with a reason: dust, a double spend). Valued at the price for its time (or price). dry_run previews. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
assignCryptoReceipt - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
document_idstringaccountstringmemostringignorebooleanreasonstringpricestring US dollars per whole unit (decimal string)dry_runboolean
- Responses
200Settled (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/disposals
Disposals with their lots and realized gain or loss
- Operation
listCryptoDisposals - Scope: read
- Read
- Parameters
wallet_idquery, stringfromquery, stringtoquery, string
- Responses
200Disposals (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/gains
Realized gains and losses on digital assets for a range, short and long term (holding over one year), per lot: the basis of Form 8949 / Schedule D (a worksheet for the preparer, not a filed form). csv: one row per lot piece
- Operation
getCryptoGains - Scope: read
- Read
- Parameters
fromquery, string, requiredtoquery, string, requiredformatquery, "json" | "csv"
- Responses
200Gains (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/valuations
Prices: the shared medians of public sources (with every source's quote) and the company's manual valuations (proposed ones wait for a person)
- Operation
listCryptoValuations - Scope: read
- Read
- Parameters
assetquery, "BTC" | "XMR" | "USDC" | "USDT"statusquery, "confirmed" | "proposed" | "rejected"manualquery, boolean
- Responses
200Valuations (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/valuations
Record a manual valuation (US dollars per unit at a time, with a reason): used for a receipt or a month end with no market price. A person's is confirmed at once; an agent's is proposed until the owner or CPA confirms it. Audited.
- Operation
recordCryptoValuation - Scope: propose
- Write: needs Idempotency-Key (or dry_run)
- Request body
asset"BTC" | "XMR" | "USDC" | "USDT", requiredatstring, required A date (end of that day, UTC) or an ISO 8601 timepricestring, required US dollars per whole unit (decimal string)reasonstring, required
- Responses
201Recorded (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/valuations/{id}/decide
Confirm or reject an agent's proposed valuation. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
decideCryptoValuation - Scope: approve
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
confirmboolean, required
- Responses
200Decided (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
GET/v1/crypto/remeasurements
Month-end fair value remeasurements (ASC 350-60) and their reversals
- Operation
listCryptoRemeasurements - Scope: read
- Read
- Responses
200Remeasurements (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
POST/v1/crypto/remeasurements
Remeasure the wallets at fair value at a month end now (the worker does it on the first days of each month): an entry to the fair value adjustment account and unrealized gain/loss, reversed the next day. dry_run previews. The company's own owner or CPA, signed in (agents, AI apps and firm members refused). Not an MCP tool.
- Operation
remeasureCrypto - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Request body
period_endstring, requireddry_runboolean
- Responses
200Dry run201Posted (object)- Errors
400,401,403,409,422,429,500,503(Error:error.type,message)
GET/v1/documents/{id}/crypto
An invoice's crypto options, its open and recent quotes, and the crypto received for it
- Operation
getInvoiceCrypto - Scope: read
- Read
- Parameters
idpath, string, required
- Responses
200Crypto on the invoice (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/documents/{id}/crypto
Offer crypto on an invoice: the rails the customer may pay with (each needs an active wallet). An empty list turns crypto off on it (open quotes end). The pay page, the PDF and the email then show them.
- Operation
setInvoiceCrypto - Scope: propose
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
railsarray of "btc" | "xmr" | "usdc_base" | "usdc_ethereum" | "usdc_solana" | "usdt_ethereum" | "usdt_tron", required
- Responses
200Options (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)
POST/v1/documents/{id}/crypto/quote
Quote what is open on the invoice in one crypto option: a receive address of its own (Bitcoin, Monero) or the exact tagged amount (stablecoins), the amount at the latest median price, valid for the company's quote minutes; replaces an open quote on the same rail. Returns the payment URI for a QR code.
- Operation
createCryptoQuote - Scope: propose
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
rail"btc" | "xmr" | "usdc_base" | "usdc_ethereum" | "usdc_solana" | "usdt_ethereum" | "usdt_tron", required btc (Bitcoin), xmr (Monero), usdc_base, usdc_ethereum, usdc_solana, usdt_ethereum, usdt_tron
- Responses
201Quoted (object)- Errors
400,401,403,404,409,422,429,500,503(Error:error.type,message)