{"schema_version":"2026-15","name":"XR-Trust","provider":"XRPL-Utilities™","description":"Public directory and explorer for XRPL Permissioned Domains (XLS-80). Lists active domains, their accepted credentials, and credential issuers. Descriptive only; not a compliance verdict, certification, or endorsement of any domain or its members.","contact":"hello@xrpl-utilities.com","getting_started":"Before your first paid call, GET /schema once and cache it. The schema document enumerates every field in the response, the reserved fields not yet shipped (member_count_estimate, verified_attestation, health_score), and the not-provided list (compliance_certification, domain_legitimacy_verdict, member_kyc_verification, credential_issuer_endorsement, regulatory_advice). Watch the top-level schema_version field on every response to detect catalog changes and refresh your cache.","location":"Cloud-Native / Global","data_residency":"agnostic","pii":"none","capabilities":{"domain":"XRPL Permissioned Domains (XLS-80)","outputs":["domain_id","owner_address","owner_label_via_xrpscan","accepted_credentials_array_of_issuer_and_credential_type","credential_type_decoded_best_effort_hex_to_ascii_e_g_4B5943_to_KYC","issuer_label_per_credential_via_xrpscan_drilldown_only","institutional_issuer_count_distinct_nonself_xrpscan_labeled_issuer_count_per_domain_in_list_and_drilldown","institutional_issuers_sorted_unique_xrpscan_display_names_per_domain_in_list_and_drilldown","events_stream_at_GET_slash_events_returns_xls70_80_lifecycle_AND_xls81_permissioned_dex_txs_OfferCreate_OfferCancel_AMMCreate_AMMDeposit_AMMWithdraw_AMMVote_AMMBid_Payment_when_DomainID_is_set_observed_via_persistent_xrpl_subscribe","permissioned_market_block_drilldown_only_owner_side_offers_and_amms_that_target_this_domain_with_offer_count_amm_count_taker_gets_taker_pays_per_offer_xls81","owner_did_brief_on_every_list_row_when_owner_has_xls40_did_org_name_org_url_description_principals_count_first_three_principal_names_source_toml_url","identity_block_drilldown_only_did_ledger_object_uri_did_document_data_plus_parsed_well_known_xrp_ledger_toml_org_name_description_principals_when_did_uri_points_to_a_toml","lifecycle_block_drilldown_only_with_created_at_iso_unix_ledger_tx_id_last_modified_at_iso_unix_ledger_tx_id_modification_count_lifecycle_status","sequence","owner_node","previous_txn_id","previous_txn_lgr_seq","flags","issuers_aggregated_with_domains_referencing_count_and_credential_types_issued","pagination_total_limit_offset_next_offset","schema_version_stamped_on_every_response","generated_at_unix_stamped_on_every_response"],"reserved_fields":["member_count_estimate (RESERVED for v2)","member_count_methodology (RESERVED for v2)","member_count_confidence (RESERVED for v2)","verified_attestation (RESERVED for v2 - T.7 self-attested domain ownership)","health_score (RESERVED - v1 ships descriptive only; no scoring)"],"not_provided":["compliance_certification","domain_legitimacy_verdict","member_kyc_verification","credential_issuer_endorsement","regulatory_advice","behavioral_classification","risk_score","sanctions_screening"],"external_label_source":"api.xrpscan.com (best-effort, cached, graceful on failure)","free_via_preview_token":"Browser-based callers from xrpl-utilities.com obtain a short-TTL JWT via the marketing site's Cloudflare Pages Function (Turnstile-gated) and attach it as Authorization: Bearer <jwt>. Non-browser clients have no free path - they pay via x402.","v1_scope_note":"v1 is intentionally minimal: list domains, drill down into one, list credential issuers, scan by domain_id or owner_address. Member counts, self-attested ownership verification (T.7), Sentinel/Telemetry/Pulse cross-references, and the Pulse permissioned_domain_lifecycle event source are deferred to v2.","indexing_note":"Discovery is event-driven, not walk-based. The persisted /domains snapshot is hydrated from disk on startup, kept current by a 5-min incremental refresh of every known owner via account_objects, and extended in real time by a long-lived WebSocket subscription that inline-seeds new owners the moment a PermissionedDomainSet from them is validated. POST /admin/seed?owner=<addr> is the manual backfill path. There is no periodic ledger_data walk - that path was retired in 2026-13 because the Clio type filter still scans the full ~250M-entry ledger server-side. /domain/{domain_id} drill-down uses ledger_entry index=<id> and is O(1)."},"payment":{"spec":"x402","x402_version":2,"scheme":"exact","network":"xrpl:0","facilitator_url":"https://xrpl-facilitator-mainnet.t54.ai","amount_usd":"0.10","recipient":"rKxTzCKYKPPdXEzuioEQ6KekQK26w2DBd5","currencies_accepted":["XRP"],"xrp":{"note":"XRP amount is dynamic - equivalent to $0.10 USD at current spot. Exact required drops are advertised per-request in the 402 PaymentRequirements body."},"auth_header":"PAYMENT-SIGNATURE","auth_value":"Base64(JSON) of a v2 PaymentPayload with `accepted` set to the chosen PaymentRequirements, `payload.signedTxBlob` (presigned XRPL Payment hex), and `payload.invoiceId` matching accepts[].extra.invoiceId.","settlement_header":"PAYMENT-RESPONSE","settlement_value":"Base64(JSON) of the facilitator settle response on success: {success, transaction, network, payer}.","challenge_format":"x402-spec PaymentRequired body with accepts[]; mirrored base64 in PAYMENT-REQUIRED header.","freshness_seconds":600,"scope":"single use per invoice; bound by extra.invoiceId and replay-protected by the facilitator.","client_sdk":"x402-xrpl (PyPI) or any x402 v2 client supporting the XRPL exact scheme.","verify_before_settle":true,"refund_policy":"Verify-before-settle - if the upstream XRPL node fails (HTTP 502 from XR-Trust), settlement is skipped and the presigned tx is never broadcast. Successful reads are paid; no refunds otherwise.","data_availability_gate":"/domains, /credentials/issuers, and /scan-by-owner_address skip the x402 challenge while the materialized directory is empty (no owners have been seeded yet, or mainnet genuinely has 0 PermissionedDomain objects). Charging for an empty enumeration is bad incentive design; those endpoints flip to paid the moment the directory has at least one entry. /domain/{id} and /scan-by-domain_id stay paid because they hit ledger_entry directly and return useful results independent of snapshot state. Every response carries a `pricing_status` field with value `paid` or `free_until_data_available` so agents can detect the regime."},"endpoints":{"base_url":"https://trust.xrpl-utilities.io","discovery":"/llms.txt","schema":"/schema","tos":"/tos","list_domains":"/domains","domain_drilldown":"/domain/{domain_id}","credential_issuers":"/credentials/issuers","scan":"/scan","events":"/events?since=<event_id>&limit=<n>&tx_type=<comma_separated>","manifest":"/agents.json","well_known_manifest":"/.well-known/agents.json","health":"/healthz","stats":"/stats","docs":"/docs","openapi":"/openapi.json"},"rate_limits":{"requests_per_minute":30,"key":"Per-IP, derived from CDN-trusted client-IP headers (CF-Connecting-IP / Fastly-Client-IP / True-Client-IP / X-Real-IP) with rightmost-XFF fallback.","retry_after_seconds_on_429":60},"ledger_data_source":{"method":"Event-driven: persisted snapshot + WebSocket subscribe + per-owner account_objects via marker pagination. No periodic full-ledger walk.","node":"QuickNode XRPL mainnet (configurable via QUICKNODE_URL env). The same node serves the WebSocket subscribe stream (scheme-swapped to wss://).","freshness":"/domains served from the in-memory snapshot, refreshed every 5 minutes per known owner via account_objects and the moment a PermissionedDomainSet is observed in the subscribe stream. Per-domain drill-down cached 1 minute; XRPScan owner labels cached 24 hours.","empty_state_note":"PermissionedDomain ledger objects are sparse on mainnet as of 2026-05 - the XLS-80 amendment activated in February 2026 and institutional adoption is in early days. An empty /domains response is the expected initial state, not an error."},"legal":{"notice":"ON-CHAIN PERMISSIONED DOMAIN DESCRIPTION ONLY. Not a compliance verdict, certification, or endorsement of any domain, owner, credential issuer, or member. Domain inclusion in this directory does not imply legitimacy; absence does not imply illegitimacy. Always do your own research and independently verify any domain or its credential issuers before transacting or extending credit.","user_responsibility":"XRPL-Utilities provides on-chain data classification and technical ledger analysis. We do not provide compliance verdicts, certifications, KYC verification, regulatory advice, or risk ratings. Users are responsible for ensuring their use of these tools complies with local digital asset and AI regulations, including the California Digital Financial Assets Law and the Colorado AI Act where applicable. This service is offered void where prohibited; use is not authorized in California or Colorado."}}