Skip to navigation
API: Getting Started

Helpers and monitoring

Health checks in Taurus-PROTECT

Any of our components are exposing Health checks through the same API endpoint: /api/rest/v1/health/all?tenantId=1

List of Taurus-PROTECT component names that produce health checks:

  • validatord
  • vaultd
  • hsm
  • blocksd
  • gated

Jobs perform component health checks and produce health reports accessible at /api/rest/v1/health/[component]/[check]. This is accessible without authentication so we must be careful with what we expose.

[component] can be replaced with values that you get from the “all” health checks.

For any of these endpoints, you can get those common values:

  • “tenantId”: is the tenant where health check was run against
  • “componentName”: name of the component
  • “componentId”: uinque ID for the component (can be retrieved from the logs)
  • “group”: group to whom the healthcheck belongs to
  • “healthCheck”: type of health check
  • “status”: status of the executed call
  • “report”:
    • “name”: group name
    • “status”: status of the executed call
    • “duration”: duration of the call
  • “lastUpdateDate”: when was the health check executed
  • “validUntilDate”: until when this health check will be valid.

How to setup

Make sure baseUrl is a variable pointing to your validator instance, example:

export baseUrl='https://your-protect-instance.example.com'

Get Explorers health checks

Description : Performs an health check on the connectivity between validatord and blocksd.

curl --location "$baseUrl/api/rest/v1/health/blocksd/connectivity" \

JSON
{
"health": {
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "blocksd",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "142.609264ms"
},
"lastUpdateDate": "2024-09-19T14:26:23.683065Z",
"validUntilDate": "2024-09-19T14:32:23.683065Z"
}
}

Get health checks list by tenant

Description : Performs a complete health check on validatord.

curl --location "$baseUrl/api/rest/v1/health/all?tenantId=1" \

{
"components": {
"1ae1e60d-031f-4e0d-bdb3-e19652186051": {
"groups": {
"cryptocompare": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "1ae1e60d-031f-4e0d-bdb3-e19652186051",
"group": "cryptocompare",
"healthCheck": "getcoins",
"status": "success",
"report": {
"name": "getcoins",
"status": "success",
"duration": "2.65891188s"
},
"lastUpdateDate": "2024-09-19T13:16:40.406863Z",
"validUntilDate": "2024-09-19T14:46:40.406863Z"
}
]
},
"scoreproviders": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "1ae1e60d-031f-4e0d-bdb3-e19652186051",
"group": "scoreproviders",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "225.54874ms",
"results": {
"chainalysis": "success",
"elliptic": "success"
}
},
"lastUpdateDate": "2024-09-19T13:46:19.123976Z",
"validUntilDate": "2024-09-19T14:31:19.123976Z"
}
]
}
}
},
"361de24b-5f25-4d3f-ac20-5216fc330c5e": {
"groups": {
"blocksd": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "blocksd",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "166.213736ms"
},
"lastUpdateDate": "2024-09-19T14:21:24.912016Z",
"validUntilDate": "2024-09-19T14:27:24.912016Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "blocksd",
"healthCheck": "getbalance",
"status": "success",
"report": {
"name": "getbalance",
"status": "success",
"duration": "13.052895501s",
"results": {
"ADA": "success",
"ALGO": "success",
"ATOM": "success",
"BCH": "success",
"BTC": "success",
"DOT": "success",
"ETH": "success",
"FTM": "success",
"LTC": "success",
"POL": "success",
"SOL": "success",
"XKI": "success",
"XLM": "success",
"XRP": "success",
"XTZ": "success"
}
},
"lastUpdateDate": "2024-09-19T14:21:57.677545Z",
"validUntilDate": "2024-09-19T14:27:57.677545Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "blocksd",
"healthCheck": "getfees",
"status": "success",
"report": {
"name": "getfees",
"status": "success",
"duration": "269.911029ms",
"results": {
"ADA": "success",
"AvalancheC": "success",
"BCH": "success",
"BTC": "success",
"ETH": "success",
"FTM": "success",
"ICP": "success",
"LTC": "success",
"NEAR": "success",
"Polygon": "success",
"XLM": "success",
"XRP": "success"
}
},
"lastUpdateDate": "2024-09-19T14:21:24.509285Z",
"validUntilDate": "2024-09-19T14:27:24.509285Z"
}
]
},
"database": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "database",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "107.516581ms"
},
"lastUpdateDate": "2024-09-19T14:21:23.545536Z",
"validUntilDate": "2024-09-19T14:27:23.545536Z"
}
]
},
"exchanges": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "exchanges",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "8.265041766s",
"results": {
"binance": "success",
"bitfinex": "success",
"bitfinex-kp": "success",
"bitstamp": "success",
"coinbase": "success",
"coinbase-prime-institutional-cockroach": "success",
"coinbase-pro": "success",
"huobi-af": "success",
"kraken": "success",
"kraken-jdr": "success",
"tdx-int": "success",
"woorton-uat": "success"
}
},
"lastUpdateDate": "2024-09-19T14:21:32.914822Z",
"validUntilDate": "2024-09-19T14:27:32.914822Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "exchanges",
"healthCheck": "getbalances",
"status": "failure",
"report": {
"name": "getbalances",
"status": "failure",
"duration": "30.00333571s",
"results": {
"binance": "success",
"bitfinex": "success",
"bitfinex-kp": "success",
"bitstamp": "success",
"coinbase": "success",
"coinbase-prime-institutional-cockroach": "success",
"coinbase-pro": "unable to get balances for exchange coinbase-pro: unable to create signature: unable to process signed request from tg-vaultd: unable to ProcessSignedRequest from Vaultd: failed to get vaultd client: no available healthy client",
"huobi-af": "success",
"kraken": "success",
"kraken-jdr": "success",
"tdx-int": "success",
"woorton-uat": "success"
}
},
"lastUpdateDate": "2024-09-19T14:21:54.026396Z",
"validUntilDate": "2024-09-19T14:27:54.026396Z"
}
]
},
"gated": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "gated",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "6.173706ms"
},
"lastUpdateDate": "2024-09-19T14:21:24.652932Z",
"validUntilDate": "2024-09-19T14:27:24.652932Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "gated",
"healthCheck": "proxy",
"status": "success",
"report": {
"name": "proxy",
"status": "success",
"duration": "162.53047ms"
},
"lastUpdateDate": "2024-09-19T14:21:25.729091Z",
"validUntilDate": "2024-09-19T14:27:25.729091Z"
}
]
},
"hsm": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "hsm",
"healthCheck": "status",
"status": "success",
"report": {
"name": "status",
"status": "success",
"duration": "858.526µs"
},
"lastUpdateDate": "2024-09-19T14:21:24.479556Z",
"validUntilDate": "2024-09-19T14:27:24.479556Z"
}
]
},
"jobs": {
"healthChecks": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "addresscreation",
"status": "success",
"report": {
"name": "addresscreation",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:21:24.623743Z",
"validUntilDate": "2024-09-19T14:41:24.623743Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "scorerefresh",
"status": "success",
"report": {
"name": "scorerefresh",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:21:24.170229Z",
"validUntilDate": "2024-09-19T14:41:24.170229Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "webhooks",
"status": "success",
"report": {
"name": "webhooks",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:21:24.659625Z",
"validUntilDate": "2024-09-19T14:41:24.659625Z"
}
]
}
}
}
}
}

Get health checks for a specific group

Description: Performs a health check on a specific group of monitored activities.

Example with gated group:

curl --location "$baseUrl/api/rest/v1/health/gated?tenantId=1" \

{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "gated",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "3.19926ms"
},
"lastUpdateDate": "2024-09-19T14:31:24.189337Z",
"validUntilDate": "2024-09-19T14:37:24.189337Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "gated",
"healthCheck": "proxy",
"status": "success",
"report": {
"name": "proxy",
"status": "success",
"duration": "34.785155ms"
},
"lastUpdateDate": "2024-09-19T14:31:24.282304Z",
"validUntilDate": "2024-09-19T14:37:24.282304Z"
}
]
}

Get Explorers Balances health checks by tenant

Description : Performs a health check by getting balances from blocksd. Results will give you the list of currencies where a balance has been returned.

curl --location "$baseUrl/api/rest/v1/health/blocksd/getbalance?tenantId=1" \

{
"health": {
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "blocksd",
"healthCheck": "getbalance",
"status": "success",
"report": {
"name": "getbalance",
"status": "success",
"duration": "11.55563498s",
"results": {
"ADA": "success",
"ALGO": "success",
"ATOM": "success",
"BCH": "success",
"BTC": "success",
"DOT": "success",
"ETH": "success",
"FTM": "success",
"LTC": "success",
"POL": "success",
"SOL": "success",
"XKI": "success",
"XLM": "success",
"XRP": "success",
"XTZ": "success"
}
},
"lastUpdateDate": "2024-09-19T14:26:43.820648Z",
"validUntilDate": "2024-09-19T14:32:43.820648Z"
}
}

Get Explorers Fees health checks by tenant

Description : Performs a health check by getting Blockchains current fees from blocksd. Results will give you the list of currencies where a fee has been returned.

curl --location "$baseUrl/api/rest/v1/health/blocksd/getfees?tenantId=1" \

{
"health": {
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "blocksd",
"healthCheck": "getfees",
"status": "success",
"report": {
"name": "getfees",
"status": "success",
"duration": "170.343854ms",
"results": {
"ADA": "success",
"AvalancheC": "success",
"BCH": "success",
"BTC": "success",
"ETH": "success",
"FTM": "success",
"ICP": "success",
"LTC": "success",
"NEAR": "success",
"Polygon": "success",
"XLM": "success",
"XRP": "success"
}
},
"lastUpdateDate": "2024-09-19T14:26:26.608262Z",
"validUntilDate": "2024-09-19T14:32:26.608262Z"
}
}

Get Database health checks by tenant

Description : Performs a health check by checking database connectivity between validatord and the database engine you are currently using.

curl --location "$baseUrl/api/rest/v1/health/database?tenantId=1" \

{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "database",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "4.324687ms"
},
"lastUpdateDate": "2024-09-19T14:46:25.600599Z",
"validUntilDate": "2024-09-19T14:52:25.600599Z"
}
]
}

Get Prices health checks by tenant

Description : Performs a health check between validatord and prices providers you are currently using. Example here with Cryptocompare.

curl --location "$baseUrl/api/rest/v1/health/database?tenantId=1" \

{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "2861035f-a361-47b6-b02f-14566d3106a5",
"group": "cryptocompare",
"healthCheck": "getcoins",
"status": "success",
"report": {
"name": "getcoins",
"status": "success",
"duration": "3.473873505s"
},
"lastUpdateDate": "2024-09-30T11:24:35.705457Z",
"validUntilDate": "2024-09-30T12:54:35.705457Z"
}
]
}

Get Score Providers health checks by tenant

Description : Performs a health check between validatord and KYC/KYT scoring providers you are currently using. Example here with Chainalysis and Elliptic.

curl --location "$baseUrl/api/rest/v1/health/scoreproviders?tenantId=1" \

JSON
{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "scoreproviders",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "219.606381ms",
"results": {
"chainalysis": "success",
"elliptic": "success"
}
},
"lastUpdateDate": "2024-09-19T14:36:25.103681Z",
"validUntilDate": "2024-09-19T15:21:25.103681Z"
}
]
}

Get Gated health checks by tenant

Description : Performs a health check on the connectivity between validatord and gated (proxy).

curl --location "$baseUrl/api/rest/v1/health/gated?tenantId=1" \

{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "gated",
"healthCheck": "connectivity",
"status": "success",
"report": {
"name": "connectivity",
"status": "success",
"duration": "5.667154ms"
},
"lastUpdateDate": "2024-09-19T14:51:27.017460Z",
"validUntilDate": "2024-09-19T14:57:27.017460Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "gated",
"healthCheck": "proxy",
"status": "success",
"report": {
"name": "proxy",
"status": "success",
"duration": "49.921336ms"
},
"lastUpdateDate": "2024-09-19T14:51:27.680519Z",
"validUntilDate": "2024-09-19T14:57:27.680519Z"
}
]
}

Get HSM health checks by tenant

Description : Performs a health check on the connectivity between validatord and hsm.

curl --location "$baseUrl/api/rest/v1/health/hsm?tenantId=1" \

{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "hsm",
"healthCheck": "status",
"status": "success",
"report": {
"name": "status",
"status": "success",
"duration": "765.692µs"
},
"lastUpdateDate": "2024-09-19T14:51:25.788486Z",
"validUntilDate": "2024-09-19T14:57:25.788486Z"
}
]
}

Get vaultd health checks by tenant

curl --location "$baseUrl/api/rest/v1/health/hsm?tenantId=1" \

Jobs API specific health checks

Get Jobs health checks by tenant

curl --location "$baseUrl/api/rest/v1/health/jobs?tenantId=1" \

{
"healths": [
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "addresscreation",
"status": "success",
"report": {
"name": "addresscreation",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:51:25.681248Z",
"validUntilDate": "2024-09-19T15:11:25.681248Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "scorerefresh",
"status": "success",
"report": {
"name": "scorerefresh",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:51:27.051554Z",
"validUntilDate": "2024-09-19T15:11:27.051554Z"
},
{
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "webhooks",
"status": "success",
"report": {
"name": "webhooks",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:51:27.223038Z",
"validUntilDate": "2024-09-19T15:11:27.223038Z"
}
]
}

Some job names examples:

  • Actions:

action_service_running-actions-handler,

action_service_sleeping-actions-handler

  • Audit

audit_service_trails-ingestor

  • Balance:

balance_service_balances-desync-checker balance_service_balances-garbage-collector balance_service_balances-history-garbage-collector balance_service_balances-history-refresher balance_service_balances-refresher balance_service_existential-balance-updates-processor balance_service_funds-releaser balance_service_rebase-token-balances-refresher

  • Change service:

change_service_email-event-task-handler

  • Events:

event_service_auto-transfer-events-task-handler event_service_initialized-auto-transfer-request-handler event_service_pending-auto-transfer-request-handler event_service_triggered-auto-transfer-events-handler eventbus_service_event-dispatcher eventbus_service_event-sequencer

  • Exchanges:

exchange_service_exchanges-balances-handler

  • Prices:

price_service_price-history-refresher price_service_price-refresher

  • Requests:

request_service_action-auto-prepared-2-requests-handler request_service_action-prepared-requests-handler request_service_approved-2-requests-handler request_service_approved-request-bundles-handler request_service_approved-requests-handler request_service_broadcasting-2-requests-handler request_service_broadcasting-request-bundles-handler request_service_broadcasting-requests-handler request_service_bundle-approved-requests-handler request_service_canceled-signed-requests-handler request_service_created-request-bundles-handler request_service_creating-request-bundles-handler request_service_creating-requests-handler request_service_diem-burn-broadcasted-requests-handler request_service_diem-mbs-approved-requests-handler request_service_diem-mbs-completed-requests-handler request_service_diem-mbs-pending-requests-handler request_service_dot-extrinsics-garbage-collector request_service_dot-extrinsics-refresher request_service_expired-requests-handler request_service_expired-to-cancel-signed-requests-handler request_service_failed-request-bundles-handler request_service_fast-approved-2-requests-handler request_service_fast-approved-requests-handler request_service_funds-releaser request_service_hsmfailed-2-requests-handler request_service_hsmfailed-requests-handler request_service_hsmready-2-requests-handler request_service_hsmready-request-bundles-handler request_service_hsmready-requests-handler request_service_hsmsigned-2-requests-handler request_service_hsmsigned-request-bundles-handler request_service_hsmsigned-requests-handler request_service_invalid-signed-requests-handler request_service_new-signed-requests-handler request_service_opt-ins-releaser request_service_pending-requests-handler request_service_pending-signed-requests-handler request_service_ready-requests-handler request_service_replaced-signed-requests-handler request_service_timeout-signed-requests-handler request_service_verified-request-batch-signatures-handler

  • Staking:

staking_service_active-icp-neurons-refresher staking_service_ada-staking-addresses-refresher staking_service_ada-staking-rewards-refresher staking_service_cosmoshub-staking-rewards-refresher staking_service_cosmoskichain-staking-rewards-refresher staking_service_disbursing-icp-neurons-handler staking_service_dissolved-icp-neurons-handler staking_service_dot-staking-withdraw-unbonded-handler staking_service_ftm-staking-addresses-refresher staking_service_icp-balance-activity-handler staking_service_icp-neurons-creator staking_service_icp-staking-activity-handler staking_service_merging-icp-neurons-handler staking_service_near-staking-rewards-refresher staking_service_new-icp-neurons-handler staking_service_observing-icp-neurons-handler staking_service_sol-staking-info-refresher staking_service_spawning-icp-neurons-handler staking_service_staking-states-collection-refresher staking_service_xtz-delegate-addresses-refresher

  • Transactions:

transaction_service_mig-hasanytransactionattribute transaction_service_network-migrater transaction_service_observed-transactions-handler transaction_service_populate-transaction-balance transaction_service_token-balances-garbage-collector transaction_service_token-balances-refresher transaction_service_token-holders-populator transaction_service_transactions-exporter

  • Wallets:

wallet_service_ada-staking-addresses-refresher wallet_service_addresses-nft-migrater wallet_service_algo-optin-status-refresher wallet_service_balances-history-refresher wallet_service_balances-refresher wallet_service_created-addresses-handler wallet_service_currency-wallets-businessrules-creator wallet_service_network-migrater wallet_service_nonces-refresher wallet_service_observed-addresses-handler wallet_service_signed-addresses-handler wallet_service_token-wallets-syncer wallet_service_xlm-address-flags-refresher wallet_service_xlm-existentialbalance-refresher wallet_service_xlm-trustline-refresher wallet_service_xtz-delegate-addresses-refresher wallet_service_xtz-initializing-addresses-handler wallet_service_xtz-ready-for-init-addresses-handler wallet_service_xtz-revelation-status-refresher wallet_service_xtz-uninitialized-addresses-handler

  • Webhooks:

webhook_service_webhook_caller webhook_service_webhook_event_handler

  • Whitelists:

whitelist_service_network-migrater whitelist_service_verified-wladdress-batch-signatures-handler

Get Job health checks by Job name and by tenant

Description : Returns computed statistics for a single job.

curl --location "$baseUrl/api/rest/v1/health/jobs/scorerefresh?tenantId=1" \

json
{
"health": {
"tenantId": "1",
"componentName": "tg-validatord",
"componentId": "361de24b-5f25-4d3f-ac20-5216fc330c5e",
"group": "jobs",
"healthCheck": "scorerefresh",
"status": "success",
"report": {
"name": "scorerefresh",
"status": "success",
"duration": "0s"
},
"lastUpdateDate": "2024-09-19T14:51:27.051554Z",
"validUntilDate": "2024-09-19T15:11:27.051554Z"
}
}

Get Jobs list

This endpoint requires authentication as the technical user.

Description : Collects data from the job_statuses table and computes simple statistics grouped by job name.

  • Number of successes.
  • Number of failures.
  • Number of pending.
  • job_statuses values for the last success.
  • job_statuses values for the last failure.
  • Average duration of successful runs.
  • Maximum duration of successful runs.
  • Minimum duration of successful runs.

curl --location "$baseUrl/api/rest/v1/jobs" \


Get Job data from database table

This endpoint requires authentication as the technical user.

Description : Returns values from a row in the job_statuses table. The job_uuid refers to a single job run. This can be found in logs.

curl --location "$baseUrl/api/rest/v1/jobs/request_service_approved-requests-handler" \

{
"job": {
"name": "request_service_approved-requests-handler",
"statistics": {
"successes": "13",
"lastSuccess": {
"id": "dffe5c12-ced9-4590-8257-b715f7ede2f1",
"startedAt": "2024-09-19T15:20:15.000523Z",
"updatedAt": "2024-09-19T15:20:15.240831Z",
"timeoutAt": "2024-09-19T15:25:15.000523Z",
"message": "null",
"status": "success"
},
"avgDuration": "0.566382384s",
"maxDuration": "3.628076s",
"minDuration": "0.128084s"
}
}
}

Get Job data by Job UUID

This endpoint requires authentication as the technical user.

Description : Returns values from a row in the job_statuses table. The job_uuid refers to a single job run. This can be found in logs.

curl --location "$baseUrl/api/rest/v1/jobs/request_service_approved-requests-handler/status/f8e36233-115c-438e-8893-a404b7a47f95" \

{
"status": {
"id": "f8e36233-115c-438e-8893-a404b7a47f95",
"startedAt": "2024-09-19T15:27:43.000734Z",
"updatedAt": "2024-09-19T15:27:44.495347Z",
"timeoutAt": "2024-09-19T15:32:43.000734Z",
"message": "null",
"status": "success"
}
}

HSM and vaultd specific health checks

Get HSM status

Description : perform a health check through vaultd and returns HSM status.

curl --location "$baseUrl/api/rest/v1/hsm/status" \

{
"status": "success",
"hsmReply": {
"code": "ValidationError",
"message": "failed to unpack signed_request_envelope: received empty requests envelope"
}
}

Get HSM version status

Description : perform an health check through vaultd and returns HSM version.

curl --location "$baseUrl/api/rest/v1/hsm/versions" \

{
"hsmVersion": "2.46.1",
"engineVersion": "2.46.1"
}

Usage of API and authentication

Authenticate

curl -X POST "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/authentication/token" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"email\": \"team1@bank.com\", \"password\": \"XXXX\"}"
#{"result":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTEsImV4dGVybmFsVXNlcklEIjoidGVhbTFAYmFuay5jb20iLCJ0ZW5hbnRJRCI6MSwiZmlyc3RuYW1lIjoiSm9obiIsImxhc3RuYW1lIjoiVDEiLCJyb2xlcyI6WyJyZXF1ZXN0Y3JlYXRvciIsInJlcXVlc3RhcHByb3ZlciJdLCJlbWFpbCI6InRlYW0xQGJhbmsuY29tIiwiZXhwIjoxNTgyMjAwMTQwLCJpYXQiOjE1ODIxMTM3NDB9.S88CqMcBVKMIEbFstNmUaWnp9QcyfYaIfTAyedinudw"}
export AUTH="Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTEsImV4dGVybmFsVXNlcklEIjoidGVhbTFAYmFuay5jb20iLCJ0ZW5hbnRJRCI6MSwiZmlyc3RuYW1lIjoiSm9obiIsImxhc3RuYW1lIjoiVDEiLCJyb2xlcyI6WyJyZXF1ZXN0Y3JlYXRvciIsInJlcXVlc3RhcHByb3ZlciJdLCJlbWFpbCI6InRlYW0xQGJhbmsuY29tIiwiZXhwIjoxNTgyMjY1MTY0LCJpYXQiOjE1ODIxNzg3NjR9.G0HL5XTy_yinun1LIW9g9cy66_FXdufomZbrG3VmAA0"

Get BTC nostro wallet

curl -H 'Accept: application/json' -H "$AUTH" https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/wallets/info | jq '.result[] | select(.seed == "btc" and .name == "nostro")'

Get all addresses from a currencies

curl -H 'Accept: application/json' -H "$AUTH" https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/addresses?currency=BTC | jq '.result[] | select(.seed="BTC")'

Get rules and decode the proto

curl "https://int-validator-core-crdb.t-bx.io/rjpyber72n6brsdzksotivcm33mw78q4/api/rest/v1/rules" -H "accept: application/json" -H "Content-Type: application/json" -H "$AUTH" | jq .result.rulesContainer
#"CtMBChljaHJpc3RvcGhlQHRhdXJ1c2dyb3VwLmNoErEBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTEpoRVVOTExIZ0k4TGlXSmFlSkdwYUJmZHZnbwpZeUtzalNGeVRNeEVDUi9FKzFxcHpEbE5OdWc3aERQZ0JQcFozWitVOFFXamFLQjRNcmJqMi9rSW1RPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tGgIABArOAQoUc3VwZXJhZG1pbjFAYmFuay5jb20SsgEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNMk50emFGaG03eElSM092V3E1Y2hXMy9HRXZXCkwrM3Vxb0U2bEVKMTNlV2J1bHhzUC81aDM2VkNxWURJR04vMHdEZVd3TFlkcHU1SGhTWFdoeENzQ0E9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KGgEDCs4BChRzdXBlcmFkbWluMkBiYW5rLmNvbRKyAS0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk5ekd1Z3pOTElmcFp1YVVyenl3RWgvOFpkdFgKNElJdUlwREhMdkozNmdsRmpmeHhTWmRPRzZ5SEtGRmxRaDFHWDNPQ0ZaeEhlK3hlT0dCSkhCZ3JhQT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQoaAQMKzgEKFHN1cGVyYWRtaW4zQGJhbmsuY29tErIBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVjJ6RUR2WmpKL3FSK1FoMXIwc0tOY2kzOXc3OQpCMDBOZzVNR2c0d1JNN0FoOXByMUdia2dyS0lVZjRrYUhQanJQVmFRS0lSOHpEVTNqZ20wbFd4ZUhBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tChoBAwrIAQoOdGVhbTFAYmFuay5jb20SsQEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVMSmhFVU5MTEhnSThMaVdKYWVKR3BhQmZkdmdvCll5S3NqU0Z5VE14RUNSL0UrMXFwekRsTk51ZzdoRFBnQlBwWjNaK1U4UVdqYUtCNE1yYmoyL2tJbVE9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0aAgQACscBCg50ZWFtMkBiYW5rLmNvbRKxAS0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTRVQW8rR054dzR0RXFkbVREaTZ2Mk1acTJ1ZzgKYWpXOC9NbnFKL1FkNGJuaVB5RHZJVHJTRVpVeVA5VHZZcGtMQWJnL0FDeGNSL3lBNmxCRWd0RTYwUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLRoBAArHAQoOdGVhbTNAYmFuay5jb20SsQEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVIaml3VThDd3hQUEYrU3hiVFZPbTdaMW5kOVA2Cm1UYkZDMkZZVVlpU2xBSndmRTd3b003QkFPZzZiOFcweTBKSUpBYyt0MTZWN3pPTVd6c0ZWbWVlNmc9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0aAQAK1wEKHXZhbGlkYXRvci1jb3JlQHRhdXJ1c2dyb3VwLmNoErEBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWVBYSUI0bXRxeTBBTHVFS2RZQWZRcFdtc0t1NgpEbTVhMDVkY1JVRlc1MkpHazBNNzdlc2FvSHNpSHVHODlxRnF5ZkZJLzJQZjRTL2hMbkhCR1dNbVJnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tGgIBAhIoCgdfX2dyb3VwEh12YWxpZGF0b3ItY29yZUB0YXVydXNncm91cC5jaBInCgZyZXZpZXcSHXZhbGlkYXRvci1jb3JlQHRhdXJ1c2dyb3VwLmNoEjIKBXRlYW0xEhljaHJpc3RvcGhlQHRhdXJ1c2dyb3VwLmNoEg50ZWFtMUBiYW5rLmNv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"
# Raw decode
echo -n "CtMBChljaHJpc3RvcGhlQHRhdXJ1c2dyb3VwLmNoErEBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTEpoRVVOTExIZ0k4TGlXSmFlSkdwYUJmZHZnbwpZeUtzalNGeVRNeEVDUi9FKzFxcHpEbE5OdWc3aERQZ0JQcFozWitVOFFXamFLQjRNcmJqMi9rSW1RPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tGgIABArOAQoUc3VwZXJhZG1pbjFAYmFuay5jb20SsgEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNMk50emFGaG03eElSM092V3E1Y2hXMy9HRXZXCkwrM3Vxb0U2bEVKMTNlV2J1bHhzUC81aDM2VkNxWURJR04vMHdEZVd3TFlkcHU1SGhTWFdoeENzQ0E9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KGgEDCs4BChRzdXBlcmFkbWluMkBiYW5rLmNvbRKyAS0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk5ekd1Z3pOTElmcFp1YVVyenl3RWgvOFpkdFgKNElJdUlwREhMdkozNmdsRmpmeHhTWmRPRzZ5SEtGRmxRaDFHWDNPQ0ZaeEhlK3hlT0dCSkhCZ3JhQT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQoaAQMKzgEKFHN1cGVyYWRtaW4zQGJhbmsuY29tErIBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVjJ6RUR2WmpKL3FSK1FoMXIwc0tOY2kzOXc3OQpCMDBOZzVNR2c0d1JNN0FoOXByMUdia2dyS0lVZjRrYUhQanJQVmFRS0lSOHpEVTNqZ20wbFd4ZUhBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tChoBAwrIAQoOdGVhbTFAYmFuay5jb20SsQEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVMSmhFVU5MTEhnSThMaVdKYWVKR3BhQmZkdmdvCll5S3NqU0Z5VE14RUNSL0UrMXFwekRsTk51ZzdoRFBnQlBwWjNaK1U4UVdqYUtCNE1yYmoyL2tJbVE9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0aAgQACscBCg50ZWFtMkBiYW5rLmNvbRKxAS0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTRVQW8rR054dzR0RXFkbVREaTZ2Mk1acTJ1ZzgKYWpXOC9NbnFKL1FkNGJuaVB5RHZJVHJTRVpVeVA5VHZZcGtMQWJnL0FDeGNSL3lBNmxCRWd0RTYwUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLRoBAArHAQoOdGVhbTNAYmFuay5jb20SsQEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVIaml3VThDd3hQUEYrU3hiVFZPbTdaMW5kOVA2Cm1UYkZDMkZZVVlpU2xBSndmRTd3b003QkFPZzZiOFcweTBKSUpBYyt0MTZWN3pPTVd6c0ZWbWVlNmc9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0aAQAK1wEKHXZhbGlkYXRvci1jb3JlQHRhdXJ1c2dyb3VwLmNoErEBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWVBYSUI0bXRxeTBBTHVFS2RZQWZRcFdtc0t1NgpEbTVhMDVkY1JVRlc1MkpHazBNNzdlc2FvSHNpSHVHODlxRnF5ZkZJLzJQZjRTL2hMbkhCR1dNbVJnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tGgIBAhIoCgdfX2dyb3VwEh12YWxpZGF0b3ItY29yZUB0YXVydXNncm91cC5jaBInCgZyZXZpZXcSHXZhbGlkYXRvci1jb3JlQHRhdXJ1c2dyb3VwLmNoEjIKBXRlYW0xEhljaHJpc3RvcGhlQHRhdXJ1c2dyb3VwLmNoEg50ZWFtMUBiYW5rLmNv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" | base64 -d | protoc --decode_raw
#Using proto file
echo -n "CtMBChljaHJpc3RvcGhlQHRhdXJ1c2dyb3VwLmNoErEBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTEpoRVVOTExIZ0k4TGlXSmFlSkdwYUJmZHZnbwpZeUtzalNGeVRNeEVDUi9FKzFxcHpEbE5OdWc3aERQZ0JQcFozWitVOFFXamFLQjRNcmJqMi9rSW1RPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tGgIABArOAQoUc3VwZXJhZG1pbjFAYmFuay5jb20SsgEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNMk50emFGaG03eElSM092V3E1Y2hXMy9HRXZXCkwrM3Vxb0U2bEVKMTNlV2J1bHhzUC81aDM2VkNxWURJR04vMHdEZVd3TFlkcHU1SGhTWFdoeENzQ0E9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KGgEDCs4BChRzdXBlcmFkbWluMkBiYW5rLmNvbRKyAS0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVk5ekd1Z3pOTElmcFp1YVVyenl3RWgvOFpkdFgKNElJdUlwREhMdkozNmdsRmpmeHhTWmRPRzZ5SEtGRmxRaDFHWDNPQ0ZaeEhlK3hlT0dCSkhCZ3JhQT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQoaAQMKzgEKFHN1cGVyYWRtaW4zQGJhbmsuY29tErIBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVjJ6RUR2WmpKL3FSK1FoMXIwc0tOY2kzOXc3OQpCMDBOZzVNR2c0d1JNN0FoOXByMUdia2dyS0lVZjRrYUhQanJQVmFRS0lSOHpEVTNqZ20wbFd4ZUhBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tChoBAwrIAQoOdGVhbTFAYmFuay5jb20SsQEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVMSmhFVU5MTEhnSThMaVdKYWVKR3BhQmZkdmdvCll5S3NqU0Z5VE14RUNSL0UrMXFwekRsTk51ZzdoRFBnQlBwWjNaK1U4UVdqYUtCNE1yYmoyL2tJbVE9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0aAgQACscBCg50ZWFtMkBiYW5rLmNvbRKxAS0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTRVQW8rR054dzR0RXFkbVREaTZ2Mk1acTJ1ZzgKYWpXOC9NbnFKL1FkNGJuaVB5RHZJVHJTRVpVeVA5VHZZcGtMQWJnL0FDeGNSL3lBNmxCRWd0RTYwUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLRoBAArHAQoOdGVhbTNAYmFuay5jb20SsQEtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVIaml3VThDd3hQUEYrU3hiVFZPbTdaMW5kOVA2Cm1UYkZDMkZZVVlpU2xBSndmRTd3b003QkFPZzZiOFcweTBKSUpBYyt0MTZWN3pPTVd6c0ZWbWVlNmc9PQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0aAQAK1wEKHXZhbGlkYXRvci1jb3JlQHRhdXJ1c2dyb3VwLmNoErEBLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWVBYSUI0bXRxeTBBTHVFS2RZQWZRcFdtc0t1NgpEbTVhMDVkY1JVRlc1MkpHazBNNzdlc2FvSHNpSHVHODlxRnF5ZkZJLzJQZjRTL2hMbkhCR1dNbVJnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tGgIBAhIoCgdfX2dyb3VwEh12YWxpZGF0b3ItY29yZUB0YXVydXNncm91cC5jaBInCgZyZXZpZXcSHXZhbGlkYXRvci1jb3JlQHRhdXJ1c2dyb3VwLmNoEjIKBXRlYW0xEhljaHJpc3RvcGhlQHRhdXJ1c2dyb3VwLmNoEg50ZWFtMUBiYW5rLmNv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" | base64 -d | protoc --decode tgvalidatord.Rules rule.proto

Health checks in Taurus-EXPLORERS

Taurus-EXPLORERS is exposing Health checks through the same API endpoint:

https://explorers.t-dx.com/api/rest/v1/health/all

You will get a list of different checks per blockchain:

  • height, giving you node head and what is currently stored in Explorers
  • indexing
  • collections:
    • balance
    • collection_erc_token_balance
    • staking
    • opt-in.

Taurus-EXPLORERS Health checks description

Height

The height health check ensures that the latest block processed by blocksd, and stored in blocksd internal database, is not more than acceptableLateBlock behind the current blockchain1 height in terms of blocks2. can be set in blocksd configuration yml file as such:

<coin>:
enabled: true
...
healthchecks:
height:
options:
acceptable_late_block: <Acceptable number of blocks of delay>

1 Note: the blockchain node connected to the blocksd instance is used as source of truth for querying the blockchain state.

2 Note: only for BTC, if indexing the testnet network, the check additionally verifies that, if behind more than acceptableLateBlock blocks, blocksd is still not more than acceptableLateBlockDelaylate with respect to the timestamp of the latest block of the blockchain.

Indexing

Collections

Taurus-Explorer Health checks list

Here is a non-exhaustive list of available checks for each enabled coin:

{
"b2da5a7e-49a5-4c03-9469-7428d0df7dd8": {
"ada": [
"collection_stake",
"height",
"indexing"
],
"algo": [
"collection_balance",
"collection_optin",
"height",
"indexing"
],
"avalanche-c": [
"collection_balance",
"collection_erc_token_balance",
"height",
"indexing"
],
"avalanche-c_erc": [
"height",
"indexing"
],
"bch": [
"height",
"indexing"
],
"btc": [
"height",
"indexing"
],
"cosmos": [
"collection_balance",
"collection_stake",
"height",
"indexing"
],
"dot": [
"collection_balance",
"collection_stake",
"height",
"indexing"
],
"erc20": [
"height",
"indexing"
],
"eth": [
"collection_balance",
"collection_erc_token_balance",
"height",
"indexing"
],
"ftm": [
"collection_balance",
"collection_stake",
"height",
"indexing"
],
"icp": [
"collection_balance",
"height",
"indexing"
],
"kichain": [
"collection_balance",
"collection_stake",
"height",
"indexing"
],
"ltc": [
"height",
"indexing"
],
"near": [
"collection_balance",
"collection_stake",
"height",
"indexing"
],
"polygon": [
"collection_balance",
"collection_erc_token_balance",
"height",
"indexing"
],
"polygon_erc20": [
"height",
"indexing"
],
"sol": [
"collection_balance",
"height",
"indexing"
],
"xlm": [
"collection_address_flags",
"collection_balance",
"collection_minimum_balance",
"collection_trustline",
"height",
"indexing"
],
"xrp": [
"collection_balance",
"height",
"indexing"
],
"xtz": [
"collection_balance",
"collection_fa_token_balance",
"collection_revelation",
"collection_stake",
"height",
"indexing"
]
}
}

Jobs perform component health checks and produce health reports. For any of these endpoints, you can get those common values:

  • “componentName”: name of the component
  • “componentId”: unique ID for the component (can be retrieved from the logs)
  • “group”: group to whom the healthcheck belongs to, generally a blockchain
  • “healthCheck”: type of health check
  • “status”: status of the executed call
  • “report”:
    • “name”: group name
    • “status”: status of the executed call
    • “msg”: an output message of the health check call
    • “duration”: duration of the call
  • “lastUpdateDate”: when was the health check executed
  • “validUntilDate”: until when this health check will be valid.

Get Explorers health check list

Description : Performs a complete health check on Explorers.

curl --location "https://explorers.t-dx.com/api/rest/v1/health/all"

Get Explorers health checks for a specific group

Description: Performs a health check on a specific group of monitored activities.

Example with FANTOM group:

curl --location "https://explorers.t-dx.com/api/rest/v1/health/ftm" \

[
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "ftm",
"health_check": "collection_balance",
"status": "success",
"report": {
"name": "collection_balance",
"status": "success",
"msg": "origin: 93125974 - transition: 93125960 - state: 93125954",
"duration": "125.03325ms"
},
"last_updated": "2024-09-30T12:51:29.565395Z",
"valid_until": "2024-09-30T12:52:29.565395Z"
},
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "ftm",
"health_check": "collection_stake",
"status": "success",
"report": {
"name": "collection_stake",
"status": "success",
"msg": "origin: 93125974 - transition: 93125964 - state: 93125957",
"duration": "53.552833ms"
},
"last_updated": "2024-09-30T12:51:29.60308Z",
"valid_until": "2024-09-30T12:52:29.60308Z"
},
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "ftm",
"health_check": "height",
"status": "success",
"report": {
"name": "height",
"status": "success",
"msg": "tg-blocksd: 93125974 - node: 93125976",
"duration": "5.141143ms"
},
"last_updated": "2024-09-30T12:51:29.589367Z",
"valid_until": "2024-09-30T12:52:29.589367Z"
},
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "ftm",
"health_check": "indexing",
"status": "success",
"report": {
"name": "indexing",
"status": "success",
"msg": "last block inserted: 2024-09-30 12:51:29.390029 +0000 UTC",
"duration": "162.893874ms"
},
"last_updated": "2024-09-30T12:51:29.572097Z",
"valid_until": "2024-09-30T12:52:29.572097Z"
}
]

Another example with Polkadot group:

Description: Performs a health check on a specific blockchain of monitored activities:

  • block height
  • collection balance
  • staking collection balance
  • indexing: when was the last inserted block

curl --location "https://explorers.t-dx.com/api/rest/v1/health/dot" \

[
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "dot",
"health_check": "collection_balance",
"status": "success",
"report": {
"name": "collection_balance",
"status": "success",
"msg": "origin: 22761846 - transition: 22761845 - state: 22761844",
"duration": "9.259814ms"
},
"last_updated": "2024-09-30T12:53:30.396071Z",
"valid_until": "2024-09-30T12:54:30.396071Z"
},
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "dot",
"health_check": "collection_stake",
"status": "success",
"report": {
"name": "collection_stake",
"status": "success",
"msg": "origin: 22761846 - transition: 22761846 - state: 22761844",
"duration": "22.802164ms"
},
"last_updated": "2024-09-30T12:53:30.372645Z",
"valid_until": "2024-09-30T12:54:30.372645Z"
},
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "dot",
"health_check": "height",
"status": "success",
"report": {
"name": "height",
"status": "success",
"msg": "tg-blocksd: 22761846 - node: 22761844",
"duration": "5.628137ms"
},
"last_updated": "2024-09-30T12:53:30.440603Z",
"valid_until": "2024-09-30T12:54:30.440603Z"
},
{
"component_name": "tg-blocksd",
"component_id": "fea89272-125e-4108-aa78-2153bf11e6c7",
"group": "dot",
"health_check": "indexing",
"status": "success",
"report": {
"name": "indexing",
"status": "success",
"msg": "last block inserted: 2024-09-30 12:53:26.734433 +0000 UTC",
"duration": "3.190728ms"
},
"last_updated": "2024-09-30T12:53:30.238531Z",
"valid_until": "2024-09-30T12:54:30.238531Z"
}
]

Get Explorers health checks for a specific chain

Description: Performs a specific health check on a chosen chain.

Example with Cardano:

curl --location "https://explorers.t-dx.com/api/rest/v1/health/ada/height" \

{
"component_name": "tg-blocksd",
"component_id": "b2da5a7e-49a5-4c03-9469-7428d0df7dd8",
"group": "ada",
"health_check": "height",
"status": "success",
"report": {
"name": "height",
"status": "success",
"msg": "head = 10901302 - stored = 10901302",
"duration": "31.398357ms"
},
"last_updated": "2024-09-30T08:49:28.099174Z",
"valid_until": "2024-09-30T08:50:28.099174Z"
}