{ "schemes": [ "http", "https" ], "swagger": "2.0", "info": { "description": "This is the API documentation for the Dora Explorer application.", "title": "Dora Explorer API", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "http://www.swagger.io/support", "email": "support@swagger.io" }, "license": { "name": "MIT", "url": "https://opensource.org/licenses/MIT" }, "version": "1.0" }, "basePath": "/api", "paths": { "/v1/clients/consensus": { "get": { "description": "Returns a list of all connected consensus clients with their node information, including PeerDAS support. Sensitive information (PeerID, NodeID, ENR) is only included if ShowSensitivePeerInfos is enabled in the configuration.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "clients" ], "summary": "Get consensus clients information", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.APIConsensusClientsResponse" } }, "429": { "description": "Rate limit exceeded", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal server error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/v1/clients/execution": { "get": { "description": "Returns a list of all connected execution clients with their node information. Sensitive information (IP addresses, ports, enode) is only included if ShowSensitivePeerInfos is enabled in the configuration.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "clients" ], "summary": "Get execution clients information", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/api.APIExecutionClientsResponse" } }, "429": { "description": "Rate limit exceeded", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "Internal server error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/v1/epoch/{epoch}": { "get": { "description": "Returns information for a specified epoch by the epoch number or an epoch tag (can be latest or finalized)", "produces": [ "application/json" ], "tags": [ "Epoch" ], "summary": "Get epoch by number, latest, finalized", "parameters": [ { "type": "string", "description": "Epoch number, the string latest or the string finalized", "name": "epoch", "in": "path", "required": true } ], "responses": { "200": { "description": "Success", "schema": { "allOf": [ { "$ref": "#/definitions/api.ApiResponse" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/api.APIEpochResponseV1" } } } ] } }, "400": { "description": "Failure", "schema": { "$ref": "#/definitions/api.ApiResponse" } }, "500": { "description": "Server Error", "schema": { "$ref": "#/definitions/api.ApiResponse" } } } } }, "/v1/validator": { "post": { "description": "This POST endpoint exists because the GET endpoint can lead to a \"URI too long\" error when searching for too many validators based on their pubkeys.", "produces": [ "application/json" ], "tags": [ "Validator" ], "summary": "Get up to 100 validators", "parameters": [ { "description": "Up to 100 validator indicesOrPubkeys, comma separated", "name": "indexOrPubkey", "in": "body", "required": true, "schema": { "$ref": "#/definitions/api.ApiValidatorRequestV1" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/api.ApiResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/api.ApiValidatorResponseV1" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/api.ApiResponse" } } } } }, "/v1/validator/eth1/{eth1address}": { "get": { "produces": [ "application/json" ], "tags": [ "Validator" ], "summary": "Get all validators that belong to an eth1 address", "parameters": [ { "type": "string", "description": "Eth1 address from which the validator deposits were sent", "name": "eth1address", "in": "path", "required": true }, { "type": "string", "description": "Limit the number of results (default: 2000)", "name": "limit", "in": "query" }, { "type": "string", "description": "Offset the results (default: 0)", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/api.ApiResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/api.ApiValidatorEth1ResponseV1" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/api.ApiResponse" } } } } }, "/v1/validator/withdrawalCredentials/{withdrawalCredentialsOrEth1address}": { "get": { "produces": [ "application/json" ], "tags": [ "Validator" ], "summary": "Get all validators that have a specific withdrawal credentials", "parameters": [ { "type": "string", "description": "Provide a withdrawal credential or an eth1 address with an optional 0x prefix", "name": "withdrawalCredentialsOrEth1address", "in": "path", "required": true }, { "type": "integer", "default": 10, "description": "Limit the number of results, maximum: 200", "name": "limit", "in": "query" }, { "type": "integer", "default": 0, "description": "Offset the number of results", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/api.ApiResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/api.ApiWithdrawalCredentialsResponseV1" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/api.ApiResponse" } } } } }, "/v1/validator/{indexOrPubkey}": { "get": { "description": "Searching for too many validators based on their pubkeys will lead to a \"URI too long\" error", "produces": [ "application/json" ], "tags": [ "Validator" ], "summary": "Get up to 100 validators", "parameters": [ { "type": "string", "description": "Up to 100 validator indicesOrPubkeys, comma separated", "name": "indexOrPubkey", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/api.ApiResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/api.ApiValidatorResponseV1" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/api.ApiResponse" } } } } }, "/v1/validator/{indexOrPubkey}/deposits": { "get": { "description": "Get all eth1 deposits for up to 100 validators", "produces": [ "application/json" ], "tags": [ "Validators" ], "summary": "Get validator execution layer deposits", "parameters": [ { "type": "string", "description": "Up to 100 validator indicesOrPubkeys, comma separated", "name": "indexOrPubkey", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/api.ApiResponse" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/api.ApiValidatorDepositsResponseV1" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/api.ApiResponse" } } } } } }, "definitions": { "api.APIConsensusClientNodeInfo": { "type": "object", "properties": { "client_name": { "type": "string" }, "client_type": { "type": "string" }, "column_indexes": { "type": "array", "items": { "type": "integer" } }, "enr": { "type": "string" }, "head_root": { "type": "string" }, "head_slot": { "type": "integer" }, "last_error": { "type": "string" }, "last_refresh": { "type": "string" }, "node_id": { "type": "string" }, "peer_count": { "type": "integer" }, "peer_id": { "type": "string" }, "peers_inbound": { "type": "integer" }, "peers_outbound": { "type": "integer" }, "status": { "type": "string" }, "supports_data_column": { "type": "boolean" }, "version": { "type": "string" } } }, "api.APIConsensusClientsResponse": { "type": "object", "properties": { "clients": { "type": "array", "items": { "$ref": "#/definitions/api.APIConsensusClientNodeInfo" } }, "count": { "type": "integer" } } }, "api.APIEpochResponseV1": { "type": "object", "properties": { "attestationscount": { "type": "integer" }, "attesterslashingscount": { "type": "integer" }, "averagevalidatorbalance": { "type": "integer" }, "blockscount": { "type": "integer" }, "depositscount": { "type": "integer" }, "eligibleether": { "type": "integer" }, "epoch": { "type": "integer" }, "finalized": { "type": "boolean" }, "globalparticipationrate": { "type": "integer" }, "missedblocks": { "type": "integer" }, "orphanedblocks": { "type": "integer" }, "proposedblocks": { "type": "integer" }, "proposerslashingscount": { "type": "integer" }, "rewards_exported": { "type": "integer" }, "scheduledblocks": { "type": "integer" }, "totalvalidatorbalance": { "type": "integer" }, "ts": { "type": "integer" }, "validatorscount": { "type": "integer" }, "voluntaryexitscount": { "type": "integer" }, "votedether": { "type": "integer" }, "withdrawalcount": { "type": "integer" } } }, "api.APIExecutionClientNodeInfo": { "type": "object", "properties": { "client_name": { "type": "string" }, "enode": { "type": "string" }, "ip": { "type": "string" }, "last_update": { "type": "string" }, "node_id": { "type": "string" }, "port": { "type": "integer" }, "status": { "type": "string" }, "version": { "type": "string" } } }, "api.APIExecutionClientsResponse": { "type": "object", "properties": { "clients": { "type": "array", "items": { "$ref": "#/definitions/api.APIExecutionClientNodeInfo" } }, "count": { "type": "integer" } } }, "api.ApiResponse": { "type": "object", "properties": { "data": {}, "status": { "type": "string" } } }, "api.ApiValidatorDepositsResponseV1": { "type": "object", "properties": { "amount": { "type": "integer" }, "block_number": { "type": "integer" }, "block_ts": { "type": "integer" }, "from_address": { "type": "string" }, "merkletree_index": { "type": "string" }, "publickey": { "type": "string" }, "removed": { "type": "boolean" }, "signature": { "type": "string" }, "tx_hash": { "type": "string" }, "tx_index": { "type": "integer" }, "tx_input": { "type": "string" }, "valid_signature": { "type": "boolean" }, "withdrawal_credentials": { "type": "string" } } }, "api.ApiValidatorEth1ResponseV1": { "type": "object", "properties": { "public_key": { "type": "string" }, "valid_signature": { "type": "boolean" }, "validator_index": { "type": "integer" } } }, "api.ApiValidatorRequestV1": { "type": "object", "properties": { "indicesOrPubkey": { "type": "string" } } }, "api.ApiValidatorResponseV1": { "type": "object", "properties": { "activationeligibilityepoch": { "type": "integer" }, "activationepoch": { "type": "integer" }, "balance": { "type": "integer" }, "effectivebalance": { "type": "integer" }, "exitepoch": { "type": "integer" }, "isonline": { "type": "boolean" }, "name": { "type": "string" }, "pubkey": { "type": "string" }, "slashed": { "type": "boolean" }, "status": { "type": "string" }, "validatorindex": { "type": "integer" }, "withdrawableepoch": { "type": "integer" }, "withdrawalcredentials": { "type": "string" } } }, "api.ApiWithdrawalCredentialsResponseV1": { "type": "object", "properties": { "publickey": { "type": "string" }, "validatorindex": { "type": "integer" } } } }, "securityDefinitions": { "BasicAuth": { "type": "basic" } }, "tags": [ { "description": "Validator related endpoints", "name": "Validator" }, { "description": "Epoch related endpoints", "name": "Epoch" }, { "description": "Client information endpoints", "name": "clients" } ] }