---
updatedAt: 2026-05-27T08:50:48.000Z
agentTools:
  projectIndex: https://docs.tatum.io/llms.txt
---

# Submit Attestation objects to node

Submits attestations to the node. Each attestation in the request body is processed individually.

If an attestation is validated successfully, the node MUST publish that attestation on the appropriate subnet.

If one or more attestations fail validation, the node MUST return a 400 error with details of which attestations have failed, and why.

Prior to the Electra hard fork, this endpoint MUST be sent Attestation objects only.  At and after the Electra hard fork, this endpoint MUST be sent SingleAttestation objects only.


# OpenAPI definition

```json
{
  "paths": {
    "/eth/v2/beacon/pool/attestations": {
      "post": {
        "operationId": "rpc-ethereum-submitPoolAttestationsV2",
        "summary": "Submit Attestation objects to node",
        "description": "Submits attestations to the node. Each attestation in the request body is processed individually.\n\nIf an attestation is validated successfully, the node MUST publish that attestation on the appropriate subnet.\n\nIf one or more attestations fail validation, the node MUST return a 400 error with details of which attestations have failed, and why.\n\nPrior to the Electra hard fork, this endpoint MUST be sent Attestation objects only.  At and after the Electra hard fork, this endpoint MUST be sent SingleAttestation objects only.\n",
        "parameters": [
          {
            "in": "header",
            "schema": {
              "type": "string",
              "enum": [
                "phase0",
                "altair",
                "bellatrix",
                "capella",
                "deneb",
                "electra"
              ],
              "example": "electra"
            },
            "required": true,
            "name": "Eth-Consensus-Version",
            "description": "The consensus version to which the attestations being submitted belong."
          }
        ],
        "tags": [
          "Ethereum - Beacon REST API"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "description": "The [`SingleAttestation`](https://github.com/ethereum/consensus-specs/blob/v1.5.0-beta.2/specs/electra/beacon-chain.md#singleattestation) object from the CL spec.",
                      "required": [
                        "committee_index",
                        "attester_index",
                        "data",
                        "signature"
                      ],
                      "properties": {
                        "committee_index": {
                          "type": "string",
                          "example": "1",
                          "description": "The attestations committee index."
                        },
                        "attester_index": {
                          "type": "string",
                          "example": "1",
                          "description": "The validator index that signed this attestation."
                        },
                        "data": {
                          "type": "object",
                          "description": "The [`AttestationData`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#attestationdata) object from the CL spec.",
                          "required": [
                            "slot",
                            "index",
                            "beacon_block_root",
                            "source",
                            "target"
                          ],
                          "properties": {
                            "slot": {
                              "type": "string",
                              "example": "1"
                            },
                            "index": {
                              "type": "string",
                              "example": "1"
                            },
                            "beacon_block_root": {
                              "type": "string",
                              "format": "hex",
                              "example": 9.387974378126018e+76,
                              "pattern": "^0x[a-fA-F0-9]{64}$",
                              "description": "LMD GHOST vote."
                            },
                            "source": {
                              "type": "object",
                              "description": "The [`Checkpoint`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#checkpoint) object from the CL spec.",
                              "required": [
                                "epoch",
                                "root"
                              ],
                              "properties": {
                                "epoch": {
                                  "type": "string",
                                  "example": "1"
                                },
                                "root": {
                                  "type": "string",
                                  "format": "hex",
                                  "example": 9.387974378126018e+76,
                                  "pattern": "^0x[a-fA-F0-9]{64}$"
                                }
                              }
                            },
                            "target": {
                              "type": "object",
                              "description": "The [`Checkpoint`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#checkpoint) object from the CL spec.",
                              "required": [
                                "epoch",
                                "root"
                              ],
                              "properties": {
                                "epoch": {
                                  "type": "string",
                                  "example": "1"
                                },
                                "root": {
                                  "type": "string",
                                  "format": "hex",
                                  "example": 9.387974378126018e+76,
                                  "pattern": "^0x[a-fA-F0-9]{64}$"
                                }
                              }
                            }
                          }
                        },
                        "signature": {
                          "type": "string",
                          "format": "hex",
                          "pattern": "^0x[a-fA-F0-9]{192}$",
                          "example": 1.6617440412512548e+230,
                          "description": "BLS aggregate signature."
                        }
                      }
                    }
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "description": "The [`Attestation`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#attestation) object from the CL spec.",
                      "required": [
                        "aggregation_bits",
                        "data",
                        "signature"
                      ],
                      "properties": {
                        "aggregation_bits": {
                          "description": "Attester aggregation bits.",
                          "type": "string",
                          "format": "hex",
                          "example": "0x01",
                          "pattern": "^0x[a-fA-F0-9]{2,}$"
                        },
                        "data": {
                          "type": "object",
                          "description": "The [`AttestationData`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#attestationdata) object from the CL spec.",
                          "required": [
                            "slot",
                            "index",
                            "beacon_block_root",
                            "source",
                            "target"
                          ],
                          "properties": {
                            "slot": {
                              "type": "string",
                              "example": "1"
                            },
                            "index": {
                              "type": "string",
                              "example": "1"
                            },
                            "beacon_block_root": {
                              "type": "string",
                              "format": "hex",
                              "example": 9.387974378126018e+76,
                              "pattern": "^0x[a-fA-F0-9]{64}$",
                              "description": "LMD GHOST vote."
                            },
                            "source": {
                              "type": "object",
                              "description": "The [`Checkpoint`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#checkpoint) object from the CL spec.",
                              "required": [
                                "epoch",
                                "root"
                              ],
                              "properties": {
                                "epoch": {
                                  "type": "string",
                                  "example": "1"
                                },
                                "root": {
                                  "type": "string",
                                  "format": "hex",
                                  "example": 9.387974378126018e+76,
                                  "pattern": "^0x[a-fA-F0-9]{64}$"
                                }
                              }
                            },
                            "target": {
                              "type": "object",
                              "description": "The [`Checkpoint`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/phase0/beacon-chain.md#checkpoint) object from the CL spec.",
                              "required": [
                                "epoch",
                                "root"
                              ],
                              "properties": {
                                "epoch": {
                                  "type": "string",
                                  "example": "1"
                                },
                                "root": {
                                  "type": "string",
                                  "format": "hex",
                                  "example": 9.387974378126018e+76,
                                  "pattern": "^0x[a-fA-F0-9]{64}$"
                                }
                              }
                            }
                          }
                        },
                        "signature": {
                          "type": "string",
                          "format": "hex",
                          "pattern": "^0x[a-fA-F0-9]{192}$",
                          "example": 1.6617440412512548e+230,
                          "description": "BLS aggregate signature."
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Attestations are stored in pool and broadcast on the appropriate subnet"
          },
          "400": {
            "description": "Errors with one or more attestations",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message",
                    "failures"
                  ],
                  "properties": {
                    "code": {
                      "description": "Either specific error code in case of invalid request or http status code",
                      "type": "number",
                      "example": 400
                    },
                    "message": {
                      "description": "Message describing error",
                      "type": "string",
                      "example": "some failures"
                    },
                    "failures": {
                      "description": "List of individual items that have failed",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "index",
                          "message"
                        ],
                        "properties": {
                          "index": {
                            "description": "Index of item in the request list that caused the error",
                            "type": "number",
                            "example": 3
                          },
                          "message": {
                            "description": "Message describing error",
                            "type": "string",
                            "example": "invalid signature"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Beacon node internal error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "description": "Either specific error code in case of invalid request or http status code",
                      "type": "number",
                      "example": 404
                    },
                    "message": {
                      "description": "Message describing error",
                      "type": "string"
                    },
                    "stacktraces": {
                      "description": "Optional stacktraces, sent when node is in debug mode",
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "example": {
                  "code": 500,
                  "message": "Internal server error"
                }
              }
            }
          }
        },
        "security": [
          {
            "X-API-Key": []
          }
        ]
      }
    }
  },
  "openapi": "3.1.0",
  "info": {
    "title": "Eth Beacon Node API",
    "description": "API specification for the beacon node, which enables users to query and participate in Ethereum 2.0 phase 0 beacon chain.\n\nAll requests by default send and receive JSON, and as such should have either or both of the \"Content-Type: application/json\"\nand \"Accept: application/json\" headers.  In addition, some requests can send and receive data in the SSZ format.  The header\n\"Content-Type: application/octet-stream\" should be set in requests that contain SSZ data; a preference to receive SSZ data in\nresponse can be indicated by setting the \"Accept: application/octet-stream;q=1.0,application/json;q=0.9\" header.  Note that\nonly a subset of requests can respond with data in SSZ format; these are noted in each individual request.\n\nWhen handling requests, the server should return a 415 status code if the \"Content-Type\" header in the request specifies a format\nthat is not supported.  Similarly, it should return a 406 status code if it cannot produce a response in the format accepted by\nthe client as specified in the \"Accept\" header; if no \"Accept\" header is provided then it is assumed to be \"application/json\".\nIn any case, the server should indicate the format of the response by setting the corresponding \"Content-Type\" header.\n\nAPI endpoints are individually versioned.  As such, there is no direct relationship between all v1 endpoints, all v2 endpoints,\n_etc._ and no such relationship should be inferred.  All JSON responses return the requested data under a `data` key in the top\nlevel of their response.  Additional metadata may or may not be present in other keys at the top level of the response, dependent\non the endpoint.  The rules that require an increase in version number are as follows:\n\n  - no field that is listed in an endpoint shall be removed without an increase in the version number\n  - no field that is listed in an endpoint shall be altered in terms of format (_e.g._ from a string to an array) without an\n    increase in the version number\n\nNote that it is possible for a field to be added to an endpoint's data or metadata without an increase in the version number.\n",
    "version": "v3.0.0 - Ethereum Proof-of-Stake Consensus Specification v1.5.0",
    "contact": {
      "name": "Ethereum Github",
      "url": "https://github.com/ethereum/beacon-apis/issues"
    },
    "license": {
      "name": "CC0-1.0",
      "url": "https://creativecommons.org/publicdomain/zero/1.0/"
    }
  },
  "components": {
    "securitySchemes": {
      "X-API-Key": {
        "type": "apiKey",
        "name": "x-api-key",
        "in": "header",
        "description": "Your **API key** is used to identify your account & your plan, including the number of API calls per second and total monthly calls you have.\n\nEach key is for individual use only.\n\nIf you don't have a key already you can [Sign up for a Free Tatum account](https://co.tatum.io/signup) to get two keys (testnet and mainnet), allowing up to 5 API calls per second and 1,000,000 Credits.\n\nFor testing purposes, you can use the following key which only works inside docs and has limited functionality (e.g. you cannot create virtual accounts or notification subscriptions with it):\n* t-66a730ccccfd17001c479705-2f597d14ad7543f289a03418\n\nFor more details on limits and plans, [click here](https://docs.tatum.io/docs/plans-limits).\n"
      }
    }
  },
  "servers": [
    {
      "url": "https://{network-ethereum}.gateway.tatum.io",
      "description": "RPC Gateway - Recommended",
      "variables": {
        "network-ethereum": {
          "default": "ethereum-hoodi",
          "enum": [
            "ethereum-hoodi",
            "ethereum-mainnet",
            "ethereum-sepolia"
          ]
        }
      }
    },
    {
      "url": "https://api.tatum.io/v3/blockchain/node/{network-ethereum}",
      "description": "Deprecated",
      "variables": {
        "network-ethereum": {
          "default": "ethereum-hoodi",
          "enum": [
            "ethereum-hoodi",
            "ethereum-mainnet",
            "ethereum-sepolia"
          ]
        }
      }
    }
  ]
}
```