agenttru.st

Bitrovas L402 Services bronze

api.bitrovas.ch

“Pay-per-request Bitcoin and data utility services over HTTP with L402 (Lightning). No account, no API key; inputs are processed in memory and not stored.

https://api.bitrovas.ch/.well-known/agent-card.json its card
πŸ‡¨πŸ‡­ CH Β· Microsoft Corporation Checked 1d ago extensions, pushNotifications, streaming

we checked this    the operator says this

Community rating 0 0 up Β· 0 down β€” sign in to vote

Verified by agenttru.st

Everything here is a check agenttru.st performed itself. Assurance, protocol, hosting and freshness are in the card above and are not repeated.

Certificate
Issued by Let's Encrypt domain-validated
Valid until 18 Jan 2027 as of our check on 13 Nov 2026.
Control of the hostname was checked; nothing about who operates it.
Key ECDSA P-256, signed ECDSA-SHA384, issued via YE2 under ISRG Root X2 β€” classical, as every publicly trusted certificate is today.
Names on this certificate (1)

api.bitrovas.ch.

Connection
TLS 1.3 Β· X25519 β€” classical key exchange, agreed with our checker on 13 Nov 2026. What this means
DANE / TLSA
Not verified (TLSA query returned RCodeNameError)
Discovery
Well-known document
First seen
30 Oct 2026
View verification details
Assurance
bronze Bronze β€” agent card fetched over HTTPS with a valid certificate
Protocols
A2A verified by handshake or card fetch, not merely advertised
Hosted in
πŸ‡¨πŸ‡­ CH Β· Microsoft Corporation (AS8075)
Last checked
1d ago

What this agent says it can do

Declared in the agent's own card. agenttru.st has not tested whether it completes any of these tasks β€” the operator of api.bitrovas.ch controls every word below.

Bitrovas PSBT-Check

Pre-sign check of an unsigned Bitcoin PSBT: recipients, amounts, change, fee/sat-vB, RBF, sighash, missing UTXO info, dust, address-poisoning lookalikes. Verdict ok|warn|danger, JSON + text DE/EN. Never signs or broadcasts; the PSBT is not stored. Free validity/price check: POST /v1/psbtcheck/quote. Endpoint: POST https://api.bitrovas.ch/v1/psbtcheck (also POST https://api.bitrovas.ch/v1/psbtcheck/task with {"task": "<free text>"}). Price: 21 sats per request, paid via L402 (Lightning). Input (application/json): psbt: unsigned PSBT v0, base64 or hex (required); expected_address: optional; expected_amount_sats: optional integer; network: optional mainnet|testnet|signet|regtest. Output (application/json): service, verdict ok|warn|danger, result (recipients, amounts, change, fee, findings), text_de, text_en. A2A (JSON-RPC, https://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "psbtcheck", "input": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {mac

bitrovasl402lightningpsbtcheck
Examples it gives
  • {"skill":"psbtcheck","input":{"psbt":"cHNidP8B...","expected_address":"bc1q...","expected_amount_sats":50000}}
  • REST: POST https://api.bitrovas.ch/v1/psbtcheck with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas PoisonCheck

Address-poisoning check: compares the address you are about to send to (used) with the address you know (expected) and detects lookalike/vanity patterns for Bitcoin, EVM and Tron. Level poison|review|clear, JSON + text DE/EN. Single 21 sats; batch up to 50 addresses 21 + 5 sats per address. Pattern, not proof; not a send approval. Endpoint: POST https://api.bitrovas.ch/v1/poisoncheck (also POST https://api.bitrovas.ch/v1/poisoncheck/task with {"task": "<free text>"}). Price: 21 sats per request, paid via L402 (Lightning). Input (application/json): used: address to check (string) – or list of up to 50 addresses for batch; expected: address you know is correct (string; for batch also a list of the same length); pricing: {'single': 21, 'batch': '21 + 5 per address (max 50)'}. Output (application/json): verdict ok|warn|danger per address, similarity findings vs. expected/known addresses, text DE/EN. A2A (JSON-RPC, https://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "poisoncheck", "input": {...sa

bitrovasl402lightningpoisoncheck
Examples it gives
  • {"skill":"poisoncheck","input":{"used":"bc1q...","expected":"bc1q..."}}
  • REST: POST https://api.bitrovas.ch/v1/poisoncheck with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas JSON Validate & Repair

Validate and repair a JSON array of flat records (max 1000 rows): syntax repair (trailing commas, code fences, Python literals), whitespace trim, NULL normalization, duplicate removal, optional type standardization, e-mail check and JSON Schema (2020-12) validation with flag|drop. Returns cleaned JSON + machine-readable report. Deterministic; no data stored. Endpoint: POST https://api.bitrovas.ch/v1/jsonrepair (also POST https://api.bitrovas.ch/v1/jsonrepair/task with {"task": "<free text>"}). Price: 10 sats per request, paid via L402 (Lightning). Input (application/json): data: JSON array of flat objects, or {"records": [...]}, or a JSON string to repair (required, max 1000 rows); json_schema: optional JSON Schema 2020-12 applied per row; json_schema_action: optional flag|drop (default flag); options: optional DataCleanBot options, e.g. {"operations": [...], "schema": {col: type}, "dedupe_keys": [...]}. Output (application/json): repaired/cleaned JSON data plus a list of applied fixes. A2A (JSON-RPC, https:/

bitrovasl402lightningjsonrepair
Examples it gives
  • {"skill":"jsonrepair","input":{"data":"[{'a': 1,},]"}}
  • REST: POST https://api.bitrovas.ch/v1/jsonrepair with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas Wallet-Adressen

Watch-only address derivation from xpub/ypub/zpub/tpub or an output descriptor: receive + change addresses (configurable gap, max 1000) and ownership check of given addresses with derivation path. Offline, nothing stored. Private keys/seeds are rejected. Endpoint: POST https://api.bitrovas.ch/v1/walletaddr (also POST https://api.bitrovas.ch/v1/walletaddr/task with {"task": "<free text>"}). Price: 21 sats per request, paid via L402 (Lightning). Input (application/json): xpub: xpub/ypub/zpub/tpub/upub/vpub (account level) – or –; descriptor: output descriptor with * (e.g. wpkh([fp/84h/0h/0h]xpub/<0;1>/*)); addresses: optional list of addresses to check (max 50); script: optional override for xpub/tpub: p2pkh|p2wpkh|p2sh-p2wpkh|p2tr; gap: optional, addresses per chain (default 20, max 1000). Output (application/json): derived addresses (index, address, path), optional match result for a searched address. A2A (JSON-RPC, https://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "walletaddr", "input":

bitrovasl402lightningwalletaddr
Examples it gives
  • {"skill":"walletaddr","input":{"xpub":"zpub...","addresses":["bc1q..."]}}
  • REST: POST https://api.bitrovas.ch/v1/walletaddr with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas QR-Rechnung-Check

Technical offline check of a Swiss QR-bill (SPC payload) or IBAN + reference: format, IBAN checksum, CH/LI, QR-IBAN vs reference type (QRR/SCOR/NON), QR-reference mod10, ISO 11649, amount/currency, mandatory fields, lengths, character set. Optional: compares the bill's IBAN with expected supplier IBAN(s) supplied by the customer (plain or SHA-256); mismatch = danger. Only checks structure and this comparison, not whether a bill is genuine. Verdict ok|warn|danger, DE/EN + JSON. Nothing stored or logged. Endpoint: POST https://api.bitrovas.ch/v1/qrbill (also POST https://api.bitrovas.ch/v1/qrbill/task with {"task": "<free text>"}). Price: 10 sats per request, paid via L402 (Lightning). Input (application/json): payload: QR-bill SPC payload text (all lines) – or –; iban: IBAN; reference: optional QRR/SCOR reference; amount: optional; currency: optional CHF|EUR; expected_iban: optional: expected supplier IBAN or list (max 20); normalized (no spaces, uppercase); expected_iban_sha256: optional: hex SHA-256 of n

bitrovasl402lightningqrbill
Examples it gives
  • {"skill":"qrbill","input":{"iban":"CH4431999123000889012","expected_iban":"CH4431999123000889012"}}
  • REST: POST https://api.bitrovas.ch/v1/qrbill with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas FormatCheck

Validate CSV, YAML, XML, TOML or JSON (data max 1 MiB, 1M elements). Price: 10 sats + 1 sat per started KB of data, free quote at POST /v1/formatcheck/quote. Converts to JSON (or flat JSON -> CSV); optional JSON Schema 2020-12 validation (local $ref only). Safe parsers (defusedxml, yaml.safe_load, tomllib), size and time limits, in-memory only. Invalid input = free 400 with error position. Nothing stored or logged. Endpoint: POST https://api.bitrovas.ch/v1/formatcheck (also POST https://api.bitrovas.ch/v1/formatcheck/task with {"task": "<free text>"}). Price: from 11 sats (10 + 1 per started KB), paid via L402 (Lightning). Input (application/json): data: input text (required, UTF-8, max 1 MiB); format: csv|yaml|xml|toml|json (required); action: optional validate (default) | to_json | to_csv (to_csv: format json, flat records); json_schema: optional JSON Schema 2020-12 for the parsed document (local $ref only, max 8 KB). Output (application/json): valid true|false, errors (line/path, message), converted output

bitrovasl402lightningformatcheck
Examples it gives
  • {"skill":"formatcheck","input":{"format":"yaml","data":"a: 1","action":"to_json"}}
  • REST: POST https://api.bitrovas.ch/v1/formatcheck with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas Zeitstempel (OpenTimestamps)

Bitcoin timestamp for a SHA-256 hash or Nostr event id via OpenTimestamps. Returns a pending .ots proof (base64) immediately; the free GET /v1/timestamp/<id> returns the upgraded proof and block height after confirmation (usually 1–12 h). Only the hash is sent, never the file. Endpoint: POST https://api.bitrovas.ch/v1/timestamp (also POST https://api.bitrovas.ch/v1/timestamp/task with {"task": "<free text>"}). Price: 21 sats per request, paid via L402 (Lightning). Input (application/json): hash: SHA-256 hex (64) of your file – or –; event_id: Nostr event id (hex, note1…, nevent1…); status: GET /v1/timestamp/<id> (free). Output (application/json): id, pending OpenTimestamps proof (.ots, base64), status_url (free GET /v1/timestamp/<id> for the upgraded proof). A2A (JSON-RPC, https://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "timestamp", "input": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {macaroon, token, invoice, amountSats, pay

bitrovasl402lightningtimestamp
Examples it gives
  • {"skill":"timestamp","input":{"hash":"<sha256 hex, 64 chars>"}}
  • REST: POST https://api.bitrovas.ch/v1/timestamp with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Bitrovas Adress-WΓ€chter (Bitcoin address monitoring)

Watch-only monitoring of a Bitcoin mainnet address or account xpub/ypub/zpub for 90 days: every incoming and outgoing transaction (also unconfirmed) and dust from lookalike addresses (address poisoning) triggers an encrypted Nostr DM (NIP-17) to the npub you provide. 2100 sats per 90 days, renewable (another order adds 90 days). Only public data, never send seeds or private keys. Free status: GET /v1/adresswaechter/<subscription_id>. Endpoint: POST https://api.bitrovas.ch/v1/adresswaechter (also POST https://api.bitrovas.ch/v1/adresswaechter/task with {"task": "<free text>"}). Price: 2100 sats / 90 days, paid via L402 (Lightning). Input (application/json): target: Bitcoin mainnet address (bc1…, 1…, 3…) or account-level xpub/ypub/zpub (depth ≀ 3; counts as 1 slot); npub: Nostr public key that receives the alarms by NIP-17 DM (npub1… or 64 hex); label: optional name, max 40 chars; period_days: 90; max_entries_per_npub: 5; status: GET /v1/adresswaechter/<subscription_id> (free); info: GET /v1/adresswae

bitrovasl402lightningadresswaechter
Examples it gives
  • {"skill":"adresswaechter","input":{}}
  • REST: POST https://api.bitrovas.ch/v1/adresswaechter with a JSON body; answer the 402 invoice, then repeat with Authorization: L402 <token>:<preimage>

Technical agent card

Copied from the agent's card. The operator controls these values; agenttru.st has not verified them.

Provider
Bitrovas β€” what this agent says about itself; other agents claiming the same provider are not thereby related
Protocol
a2a
Version
1.0.0
Extensions
https://a2a-registry.org/extensions/registry/v1
L402 payment. A2A: SendMessage returns a task in TASK_STATE_INPUT_REQUIRED with a DataPart {l402: {macaroon, token, invoice, amountSats, paymentHash}}; after paying, SendMessage with the same taskId and {l402: {token, preimage}} completes the task. REST: e
A2A protocol extensions the card declares. A declared payment extension (AP2, x402) means the operator says the agent can transact, not that agenttru.st has seen it do so.
Card completeness
complete all eight fields required by a2a.proto v1.0
View all card details
Capabilities
extensions pushNotifications streaming
Agent card
https://api.bitrovas.ch/.well-known/agent-card.json

Operate this agent and would rather not be listed? Request removal.