🔗Staking API

Preparation

Before you use API, you need to login the website to create API Key with proper permissions.

You can manage your API Keys here.

Please remember below information after creation:

  • Access Key: It is used in API request

  • Private Key: It is used to generate the signature (only visible once after creation)

Every user can create at most 10 API Keys,every API Key can bind maximum 10 IP address.

Interface URL

https://stakingapi.xhash.com:18000

Authentication

  • All interfaces are requested using the private key signature and public key verification

  • The request header contains the following signature information:

access_key: The 'accessKey' in your API Key
sign: The value after signed, it uses MD5withRSA, MD5withRSA(requestBody+timestamp), requestBody equal "" if no request param。
timestamp: The time stamp(ms)
  • All interfaces use post requests with request parameters placed in requestBody

such as : /api/v1/xhash/getUserDailyIncome
header:
"access_key":"50CEA00402A84BFF9B47CF44A947DA0B"
"sign":"sEm3E4qD8fD7mb54SxJLKajf28gItAkHNjk44QJgrjRqh9XQX6xNMdhsKXSAabcfQ77Mpp/PI6i9hW1XPnfkrLKDlAeaTMXKWxQaRKryzB99p782Re0mRoWFW1iZcvaUFzgb3aY3Oj7/xD0Qz6Y+cg/SZGM6KcTC2IL3PosoWPk="
"timestamp":"1666854104527"

requestBody:
{
    "pageNum": 1,
    "pageSetNum": 10
}
  • Response Format

  {
      "code": "",
      "data": object,
      "msg": ""
  }
  
  code="200" is success, other is fail

Example

String accessKey = "A95B2CFA7B1940B799EFCE792AD...";
String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMQzb3GI8fTGUUXaZsZxnLBWnihO9iSua4z7v9tY...";
String url = "https://stakingapi.xhash.com:18000/api/v1/xhash/getUserDailyIncome";

Map<String, Object> requestBody = new HashMap<>();
requestBody.put("pageNum", 1);
requestBody.put("pageSetNum", 10);

String content = new GsonBuilder().serializeNulls().create().toJson(requestBody);

long timestamp = System.currentTimeMillis();
System.out.println(content + timestamp);
String sign = RSACoder.sign((content + timestamp).getBytes(), privateKey);

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("access_key",accessKey);
httpHeaders.add("timestamp",timestamp + "");
httpHeaders.add("sign",sign);

HttpEntity<String> httpEntity = new HttpEntity<>(content, httpHeaders);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> result = restTemplate.postForEntity(url, httpEntity, String.class);
System.out.println(result);

Interface details

Get user balance and unpaid amount

HTTP Request

POST /api/v1/xhash/getUserStatus

RequestBody

No param

Response

Parameter

Data Type

Description

remark

clBalance

int

balance of consensus-layer

Gwei

waitPayment

float

balance of execution-layer

Gwei

Example

{
  "code": "200",
  "data": {
    "clBalance": 1446286721091,
    "waitPayment": 1596525011
  },
  "msg": "Success"
}

Get user detail status

HTTP request

POST /api/v1/xhash/getUserDetailStatus

RequestBody No param

Response

Parameter

Data Type

Description

remark

validatorsOnline

int

validators num online

validatorsOffline

int

validators num offline

totalBalance

string

balance of consensus-layer

Gwei

totalChange

string

total reward (Execution+consensus)

Gwei

hoursIncome24

string

24 hour reward

(Execution+consensus)

Gwei

partailWithdrawalsAmount

number

consensus withdrawals amount

Gwei

waitPayment

string

execution-layer wait payment

Gwei

pendingPayment

string

execution-layer pending payment

Gwei

paid

string

execution-layer paid

Gwei

avgRealApr

float

average apr of all validators

Example

{
    "code": "200",
    "data": {
        "validatorsOnline": 45,
        "validatorsOffline": 0,
        "totalBalance": "1440081374281",
        "totalChange": "48615375055.435027176",
        "hoursIncome24": "236051566.84745468",
        "partailWithdrawalsAmount": 35685091263,
        "waitPayment": "400428103.199571345",
        "pendingPayment": "0",
        "paid": "13441757945.295420862",
        "avgRealApr": 0.05681605041
    },
    "msg": "Success"
}

Get user daily Income

HTTP Request

POST /api/v1/xhash/getUserDailyIncome

RequestBody

Parameter

Data Type

Required

Default

Description

pageNum

int

true

-

Number of pages [1,...]

pageSetNum

int

true

-

Number each page [10,100]

Response

Parameter

Data Type

Description

remark

userId

int

user ID

totalReward

float

total reward

Eth

clReward

float

consensus-layer reward

Eth

elReward

float

execution-layer reward

Eth

mevReward

float

mev reward of execution-layer

Eth

txReward

float

txfee reward of execution-layer

Eth

rewardDay

int

timestamp of reward day

second

validatorNum

int

number of validators generating revenue that day

total

int

number of all rewards

Example

{
  "code": "200",
  "data": {
    "pageNum": 1,
    "pageData": [
      {
        "userId": 123456,
        "totalReward": 0.15852195658793655,
        "clReward": 0.142707974,
        "elReward": 0.01581398258793658,
        "mevReward": 0.001352162267224239,
        "txReward": 0.014461820320712356,
        "rewardDay": 1666569600,
        "validatorNum": 2
      },
      ...
      ...
    ],
    "total": 27
  },
  "msg": "Success"
}

Get user payment history

HTTP Request

POST /api/v1/xhash/getUserPaymentHistory

RequestBody

Parameter

Data Type

Required

Default

Description

pageNum

int

true

-

Number of pages [1,...]

pageSetNum

int

true

-

Number each page [10,100]

Response

Parameter

Data Type

Description

remark

userId

int

user ID

realAmount

float

payment amount

Eth

chainAmount

float

execution-layer amount on chain

Eth

withHoldTxFee

float

tx fee withholding

Eth

realTxFee

float

tx fee on chain

Eth

retained

float

tx feen retained

Eth

txHash

string

tx hash on chain

status

int

payment status

0:paying, 1:finished

chainTime

int

the time on chain

updateTime

int

payment update time

total

int

number of all rewards

Example

{
  "code": "200",
  "data": {
    "pageNum": 1,
    "pageData": [
      {
        "userId": 123456,
        "realAmount": 0.148897612,
        "chainAmount": 0,
        "withHoldTxFee": 0.148897612,
        "realTxFee": 0,
        "retained": 0,
        "txHash": "",
        "status": 0,
        "chainTime": 0,
        "updateTime": 1666842847
      }
    ],
    "total": 1
  },
  "msg": "Success"
}

Get user validator list

HTTP Request

POST /api/v1/xhash/getUserValidatorList

RequestBody

Parameter

Data Type

Required

Default

Description

pageNum

int

true

-

Number of pages [1,...]

pageSetNum

int

true

-

Number each page [10,100]

Response

Parameter

Data Type

Description

remark

id

int

sequence id

userId

int

user ID

validatorIndex

int

validator index

validatorPublicKey

string

validator publicKey

totalIncome

int

consensus-layer income

Gwei

effectiveBalance

int

consensus-layer effective balance

Gwei

finalizedBalance

int

consensus-layer finalized balance

Gwei

currentBalance

int

consensus-layer balance

Gwei

currentEffectiveness

string

effectiveness

apr

float

apr by 7 day

node_status

string

validator status in xhash

chain_status

string

consensus-layer status

created_time

timestamp in xhash

second

total

int

number of all rewards

Example

{
  "code": "200",
  "data": {
    "pageNum": 1,
    "pageData": [
      {
        "id": 45,
        "userId": 123456,
        "validatorIndex": 429489,
        "validatorPublicKey": "0x827b58e886b0024022120a549a7a50bc2b44b51e0d09663d5f543c17fba3f2ec3faf30126979241d0fd1297838de74d8",
        "totalIncome": 118681206,
        "effectiveBalance": 32000000000,
        "finalizedBalance": 32118648446,
        "currentBalance": 32118648446,
        "currentEffectiveness": 99.01,
        "apr": 0.03623521,
        "node_status": "Active",
        "chain_status": "Active",
        "created_time": 1663310642
      },
      ...
      ...
    ],
    "total": 45
  },
  "msg": "Success"
}

Get consensus-layer withdrawals

HTTP Request

POST /api/v1/xhash/getUserPartailWithdrawals

RequestBody

Parameter

Data Type

Required

Default

Description

pageNum

int

true

-

Number of pages [1,...]

pageSetNum

int

true

-

Number each page [10,100]

Response

Parameter

Data Type

Description

remark

id

int

sequence id

userId

int

userId

validatorIndex

int

validator index

validatorPublicKey

string

validator publicKey

blockSlot

int

slot

withdrawalIndex

int

withdrawal Index

address

string

withdrawal address

amount

float

withdrawal amount

eth

createdTime

long

timestamp,second

Example

{
    "code": "200",
    "data": {
        "pageNum": 1,
        "pageData": [
            {
                "id": 0,
                "userId": 101527,
                "validatorIndex": 429481,
                "validatorPublicKey": "0xac34188ca2c6ec29e40534229698d38fc733908c34eeecd77df0f477481344b10fcebbabbb9cc233a09390d1afb6121d",
                "blockSlot": 6281691,
                "withdrawalIndex": 1122084,
                "address": "0x0708f87a089a91c65d48721aa941084648562287",
                "amount": "0.012279707",
                "createdTime": 1682204315
            },
            ...
            ...
        ],
        "total": 135
    },
    "msg": "Success"
}

Error Code

code

message

200

success

400

Param error

401

Authentication failed

403

Ip not on whitelist

404

Path Not Found

405

Request timestamp expire

429

Requests has exceeded the per second limit

500

Server error

4001

Select user balance failed

4002

Page invalid

4003

Select user reward failed

4004

Select user payments history failed

4005

Select validator list failed

Last updated