Evenbead docs

Crypto

23 operations. All areas

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
  • 200 Settings (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
  • enabled boolean
  • quote_minutes integer
  • btc_confirmations integer
  • xmr_confirmations integer
  • remeasure boolean
  • realized_account string
  • unrealized_account string
  • settlement_account string
  • fair_value_account string
  • fee_account string
Responses
  • 200 Settings (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_archived query, boolean
Responses
  • 200 Wallets (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_tron
  • name string, required
  • key string
  • address string
  • view_key string
  • restore_height integer
  • lot_method "fifo" | "specific"
  • gap_limit integer
  • ledger_account string
Responses
  • 201 Added (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
  • id path, string, required
Responses
  • 200 Wallet (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
  • id path, string, required
Request body
  • reason string, required
Responses
  • 200 Archived (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
  • id path, string, required
Request body
  • lot_method "fifo" | "specific", required
Responses
  • 200 Wallet (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
  • id path, string, required
Request body
  • quantity string, required A quantity in the asset's units (decimal string)
  • cost_cents integer, required US cents
  • acquired_at string, required A date (end of that day, UTC) or an ISO 8601 time
  • offset_account string, required
  • memo string
  • dry_run boolean
Responses
  • 200 Dry run
  • 201 Recorded (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
  • id path, string, required
Request body
  • kind "sell" | "spend" | "transfer" | "fee" | "other", required
  • quantity string, required A quantity in the asset's units (decimal string)
  • disposed_at string, required A date (end of that day, UTC) or an ISO 8601 time
  • proceeds_cents integer US cents
  • price string US dollars per whole unit (decimal string)
  • counter_account string
  • to_wallet_id string
  • picks array of object
  • txid string
  • memo string
  • dry_run boolean
Responses
  • 200 Dry run
  • 201 Recorded (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_id query, string
  • all query, boolean
Responses
  • 200 Lots (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
  • status query, string
  • document_id query, string
  • wallet_id query, string
  • limit query, integer
Responses
  • 200 Receipts (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
  • id path, string, required
Responses
  • 200 Receipt (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
  • id path, string, required
Request body
  • document_id string
  • account string
  • memo string
  • ignore boolean
  • reason string
  • price string US dollars per whole unit (decimal string)
  • dry_run boolean
Responses
  • 200 Settled (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_id query, string
  • from query, string
  • to query, string
Responses
  • 200 Disposals (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
  • from query, string, required
  • to query, string, required
  • format query, "json" | "csv"
Responses
  • 200 Gains (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
  • asset query, "BTC" | "XMR" | "USDC" | "USDT"
  • status query, "confirmed" | "proposed" | "rejected"
  • manual query, boolean
Responses
  • 200 Valuations (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", required
  • at string, required A date (end of that day, UTC) or an ISO 8601 time
  • price string, required US dollars per whole unit (decimal string)
  • reason string, required
Responses
  • 201 Recorded (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
  • id path, string, required
Request body
  • confirm boolean, required
Responses
  • 200 Decided (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
  • 200 Remeasurements (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_end string, required
  • dry_run boolean
Responses
  • 200 Dry run
  • 201 Posted (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
  • id path, string, required
Responses
  • 200 Crypto 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
  • id path, string, required
Request body
  • rails array of "btc" | "xmr" | "usdc_base" | "usdc_ethereum" | "usdc_solana" | "usdt_ethereum" | "usdt_tron", required
Responses
  • 200 Options (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
  • id path, 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
  • 201 Quoted (object)
  • Errors 400, 401, 403, 404, 409, 422, 429, 500, 503 (Error: error.type, message)