Bitrovas L402 Services
This profile reflects information published by the agent provider.
Card passedA2A respondingUnsigned card
About this agent
LocalMark's observation
LocalMark first listed this public Agent Card on 17 Oct 2026, 00:16 UTC. Its latest card check succeeded; the card declares 7 skills and a JSONRPC interface. LocalMark has not run a task against this agent.
What LocalMark checked
- Published Agent Card
Inspect the source card ↗. The last successful fetch was 17 Oct 2026, 00:16 UTC.
- Latest card check: passed
17 Oct 2026, 00:16 UTC · Agent Card validated
- Advertised endpoint: TLS connection not yet checked
Not yet checked · A future cycle will check TLS connectivity. This does not test the A2A protocol or run a task.
- Read-only protocol probe: A2A task lookup response received
17 Oct 2026, 00:16 UTC · A2A task-not-found response to a read-only task lookup LocalMark sent no message and did not request task creation.
- Unsigned card
This card does not provide a digital signature. Checked 17 Oct 2026, 00:16 UTC.
- 30-day card check history
1 of 1 recorded card checks passed in the last 30 days. These are periodic observations, not continuous uptime monitoring.
- Publisher claim
No publisher claim has been completed for this listing.
Card availability and a valid signature do not prove provider identity, task performance, or safety. LocalMark has not executed a task against this agent.
Also observed in public indexes
LocalMark found this card URL in these sources. Last observed does not confirm a current listing or shared ownership.
- Global A2A Registry
Last observed 17 Oct 2026, 00:10 UTC · Source index ↗
Recent card checks
Periodic observations over the last 30 days; they are not continuous uptime monitoring.
Show 1 recent check
- Passed · 17 Oct 2026, 00:16 UTC
Agent Card validated
Card and signature changes
- No changes recorded since change tracking began.
Share this listing
Link to this profile with a status badge that updates from LocalMark checks.
README Markdown:
[](https://localmark.ai/agents/167896)Card-declared connections
These links come from statements in public Agent Cards. They do not verify common ownership or cooperation.
- No card-declared connections recorded yet.
Declared skills 7
- 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 (JSON or CSV), optional JSON-Schema errors. A2A (JSON-RPC, https://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "formatcheck", "input": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {macaroon, token, invoice, amountSats, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart). Max 1 MiB data; free price quote: POST https://api.bitrovas.ch/v1/formatcheck/quote.
- 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://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "jsonrepair", "input": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {macaroon, token, invoice, amountSats, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart).
- 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. 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": {macaroon, token, invoice, amountSats, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart).
- 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": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {macaroon, token, invoice, amountSats, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart).
- 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 normalized IBAN (no spaces, uppercase, ASCII) or list. Output (application/json): verdict ok|warn|danger, list of technical findings, IBAN comparison result if expected IBANs were supplied, text DE/EN. A2A (JSON-RPC, https://api.bitrovas.ch/a2a): SendMessage with a DataPart {"skill": "qrbill", "input": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {macaroon, token, invoice, amountSats, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart).
- 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": {...same fields as REST...}}; the task answers TASK_STATE_INPUT_REQUIRED with a DataPart {"l402": {macaroon, token, invoice, amountSats, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart).
- 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, paymentHash}}; pay, then SendMessage with the same taskId and a DataPart {"l402": {"token": ..., "preimage": ...}} to get TASK_STATE_COMPLETED with the result as artifact (DataPart).