Obol Validator
POST /v1/user/obol/operator/register
Request verification for Obol operator registration.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/register?operatorAddress=0x1234567890123456789012345678901234567890"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/register"
payload = {'operatorAddress': '0x1234567890123456789012345678901234567890'}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
Response Body
| Name | Type | Description |
|---|---|---|
| available | boolean | Whether the operator address is available for registration |
| messageToSign | string | Message to sign for verification |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
POST /v1/user/obol/operator/deregister
Deregister an Obol operator.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/deregister?operatorAddress=0x1234567890123456789012345678901234567890"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/deregister"
payload = {'operatorAddress': '0x1234567890123456789012345678901234567890'}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
Response Body
| Name | Type | Description |
|---|---|---|
| success | boolean | Operation success status |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
POST /v1/user/obol/operator/verify
Verify Obol operator signature and complete registration.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/verify?operatorAddress=0x1234567890123456789012345678901234567890&signature=0x1234567890abcdef&autoImport=1"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/verify"
payload = {
'operatorAddress': '0x1234567890123456789012345678901234567890',
'signature': '0x1234567890abcdef',
'autoImport': '1'
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
| signature | YES | string | Signature of the message to sign (hex format) |
| autoImport | NO | boolean | Whether to automatically import cluster definitions (default: false) |
Response Body
| Name | Type | Description |
|---|---|---|
| operator | object | Registered operator object |
| └ operatorId | integer | Unique operator ID |
| └ userId | integer | User ID associated with the operator |
| └ address | string | Operator address (hex format) |
| └ ofac | boolean | OFAC compliance status |
| └ accountId | integer | Associated account ID |
| └ collateralPerSlot | string | Collateral per slot amount |
| └ validatorKey | string | Validator key (if any) |
| └ clusterId | integer | Cluster ID (if any) |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
| OBOL_OPERATOR_INVALID_SIGNATURE | Invalid signature format or verification failed |
POST /v1/user/obol/operator/refresh
Refresh Obol operator cluster definitions.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/refresh?operatorAddress=0x1234567890123456789012345678901234567890"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/refresh"
payload = {'operatorAddress': '0x1234567890123456789012345678901234567890'}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
Response Body
| Name | Type | Description |
|---|---|---|
| clusters | object | Map of cluster definitions |
| └ [clusterKey] | object | Cluster definition object |
| └└ clusterId | integer | Unique cluster ID |
| └└ config | string | Cluster configuration (hex format) |
| └└ operators | string[] | List of operator addresses |
| └└ distributedValidatorKeys | string[] | List of distributed validator keys |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
GET /v1/user/obol/operators
List all Obol operators for the current user.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X GET "$ETHGAS_API_URL/v1/user/obol/operators"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operators"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.get(url, headers=headers)
print(response.text)
Request
No parameters required.
Response Body
| Name | Type | Description |
|---|---|---|
| operators | object[] | List of operator objects |
| └ operatorId | integer | Unique operator ID |
| └ userId | integer | User ID associated with the operator |
| └ address | string | Operator address (hex format) |
| └ ofac | boolean | OFAC compliance status |
| └ accountId | integer | Associated account ID |
| └ collateralPerSlot | string | Collateral per slot amount |
| └ validatorKey | string | Validator key (if any) |
| └ clusterId | integer | Cluster ID (if any) |
GET /v1/user/obol/operator/validators
List validators for a specific Obol operator.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X GET "$ETHGAS_API_URL/v1/user/obol/operator/validators?operatorAddress=0x1234567890123456789012345678901234567890"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/validators"
params = {'operatorAddress': '0x1234567890123456789012345678901234567890'}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.get(url, headers=headers, params=params)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
Response Body
| Name | Type | Description |
|---|---|---|
| validators | string[] | List of validator public keys (hex format) |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
POST /v1/user/obol/operator/validator/register
Register validators with an Obol operator.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/validator/register?operatorAddress=0x1234567890123456789012345678901234567890&publicKeys=0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890,0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/validator/register"
payload = {
'operatorAddress': '0x1234567890123456789012345678901234567890',
'publicKeys': '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890,0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
| publicKeys | YES | string | Comma-separated validator public keys (hex, max 100) |
Response Body
| Name | Type | Description |
|---|---|---|
| added | string[] | List of successfully added validator public keys |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
| OBOL_VALIDATORS_REQUIRED | At least one validator public key is required |
| OBOL_VALIDATORS_INVALID | Invalid validator public key format |
| VALIDATORS_MAX | Maximum 100 validators allowed per request |
POST /v1/user/obol/operator/validator/deregister
Deregister validators from an Obol operator.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/validator/deregister?operatorAddress=0x1234567890123456789012345678901234567890&publicKeys=0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/validator/deregister"
payload = {
'operatorAddress': '0x1234567890123456789012345678901234567890',
'publicKeys': '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890'
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| operatorAddress | YES | string | Obol operator address (hex format) |
| publicKeys | YES | string | Comma-separated validator public keys (hex, max 100) |
Response Body
| Name | Type | Description |
|---|---|---|
| removed | string[] | List of successfully removed validator public keys |
Error Codes
| Code | Description |
|---|---|
| OBOL_OPERATOR_INVALID_ADDRESS | Invalid operator address format |
| OBOL_VALIDATORS_REQUIRED | At least one validator public key is required |
| OBOL_VALIDATORS_INVALID | Invalid validator public key format |
| VALIDATORS_MAX | Maximum 100 validators allowed per request |
POST /v1/user/obol/operator/validator/update/ofac
Update OFAC flag for Obol validators.
- HTTP
- Python
curl -H "Authorization: Bearer {{access_token}}" -X POST "$ETHGAS_API_URL/v1/user/obol/operator/validator/update/ofac?publicKeys=0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890&ofac=true"
import requests
url = f"{ETHGAS_API_URL}/v1/user/obol/operator/validator/update/ofac"
payload = {
'publicKeys': '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890',
'ofac': 'true'
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-auth-token>'
}
response = requests.post(url, headers=headers, params=payload)
print(response.text)
Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| publicKeys | NO | string | Comma-separated validator public keys (hex, max 100). If not provided, updates all for user |
| ofac | YES | boolean | OFAC compliance flag |
Response Body
| Name | Type | Description |
|---|---|---|
| success | boolean | Operation success status |
Error Codes
| Code | Description |
|---|---|
| INVALID_PUBLIC_KEY | Invalid validator public key format |
| VALIDATORS_MAX | Maximum 100 validators allowed per request |