Complete GraphQL Structure for Transactions
The following GraphQL query returns all of the properties of a transaction captured by the indexing service.
query {
transactions {
pageInfo {
hasNextPage
}
edges {
cursor
node {
id
anchor
signature
recipient
owner {
address
key
}
fee {
winston
ar
}
quantity {
winston
ar
}
data {
size
type
}
tags {
name
value
}
block {
id
timestamp
height
previous
}
parent {
id
}
}
}
}
}
Pagination
By default, GraphQL queries return the first 10 results. Larger result sets can be requested by adding the first: X
option (where X
is a value from 1 to 100) to the transactions query.
query
{
transactions(
first:100,
tags: [
{
name: "App-Name",
values: ["PublicSquare"]
}
]
)
{
edges {
node {
id
tags {
name
value
}
}
}
}
}
If there are more than 100 items in the result set, subsequent pages of results can be retrieved by using a cursor.
query
{
transactions(
first:100,
tags: [
{
name: "App-Name",
values: ["PublicSquare"]
}
]
)
{
pageInfo {
hasNextPage
}
edges {
cursor
node {
id
tags {
name
value
}
}
}
}
}
If there are subsequent result pages hasNextPage
will have a value of true
. Take the cursor
value of the last item in the result set and use it as the value for the after
query parameter.
query
{
transactions(
first:100,
after: "WyIyMDIyLTEyLTMwVDE2OjQ0OjIzLjc0OVoiLDEwMF0=",
tags: [
{
name: "App-Name",
values: ["PublicSquare"]
}
]
)
{
pageInfo {
hasNextPage
}
edges {
cursor
node {
id
tags {
name
value
}
}
}
}
}
To retrieve the entire results set, repeat the after
query with an updated cursor
value from the last item of each page until hasNextPage
is false
.
Rate Limiting
Indexing services will implement rate limiting to prevent attacks and abuse of their services. The arweave.net/graphql
service limits GraphQL queries to 600 queries every 5 minutes (per IP address). Always check the results of your queries to see if they have a status code in the 200s before parsing the response. A HTTP Status code of 429 will indicate rate limiting is being enforced. A HTTP Status code of 503 usually indicates that the query result set is too large for arweave.net/graphql
.
Resources
- For a more complete listing of the Arweave GraphQL schema see the Arweave GraphQL Guide
- ArDB package
- ar-gql package
- For a general guide to graphql graphql.org/learn is a good starting point