Querying Irys Transactions
Irys transaction metadata can be queried using GraphQL. You can use it to search for transactions by:
- Signer's address
- Payment token
- Metadata tags
- Timestamps
GraphQL Clients​
You can query using an HTTP library like fetch or axios, or use specialized clients like Apollo Client or urql.
Endpoint​
https://uploader.irys.xyz/graphql
Query Arguments​
Any of the following query arguments can be used as search parameters:
Field | Description |
---|---|
ids | An array of transaction IDs passed as strings. Values are ORed together, matching results will include transactions that have any of the supplied IDs. |
owner | The address used when posting the transaction. Can be a native address from any of the chains supported by Irys. Note in results fields, this is referred to as address . |
token | The token used to pay for the transaction. |
tags | An array of tag name / value pairs passed as JSON objects. |
Results Fields​
When building a query, any of the following values be included in your results:
| Field | Description | |---|---| | id
| The transaction ID. | | address
|
The address used when posting the transaction. Can be a native address from any
of the chains supported by Irys. Note in query arguements, this is referred to
as owner
. | | token
| The token used to pay for the transaction. | |
receipt {
  deadlineHeight
  signature
  version
}
| An optional receipt, only exists if a user requested one at upload.
deadlineHeight
: The block number by which the transaction must be finalized.
signature
: A signed deep hash of the JSON receipt. | |
tags {
  name
  value
}
| An
array of tags supplied as name / value pairs. Exists if the user added them at
upload. | |timestamp
| The timestamp, accurate to the millisecond of when the
transaction was posted. This value is the same as the receipt timestamp. |
Sample Queries​
Queries return transaction metadata. To then retrieve data, use the returned transaction ID and download the data from the Irys gateway using a URL formed as follows:
https://gateway.irys.xyz/:transactionId
.
Transaction IDs​
Search by transaction IDs.
query getByIds {
transactions(
ids: [
"--52WQHJIJod_rni8pkl1Vxt9MFGoXZAm8SC7ex6C1o"
"--52THRWpX_RJzGcNXmtQ2DSP37d1e1VQ4YmvbY5ZXo"
]
) {
edges {
node {
id
tags {
name
value
}
}
}
}
}
Timestamps​
Search by timestamps:
query getByTimestamp {
transactions(timestamp: { from: 1688144401000, to: 1688317201000 }) {
edges {
node {
id
}
}
}
}
Irys timestamps are accurate to the millisecond, so you need to provide a timestamp in millisecond format when querying. You can convert from human-readable time to UNIX timestamp using websites like Epoch101, be sure to convert in millisecond format, not second.
Owners​
Search for transactions matching the wallet address used when posting the transaction:
query getByOwner {
transactions(
owners: [
"0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"
"0xaC568a981B1370B2e1bAA8cE30BD5AC9E28C572D"
]
) {
edges {
node {
id
address
}
}
}
}
Tags​
Search for transactions matching tag name / value pairs:
query getAllPNGs {
transactions(tags: [{ name: "Content-Type", values: ["image/png"] }]) {
edges {
node {
id
address
}
}
}
}
Search for transactions matching the tag with name Content-Type and the values of image/png OR image/jpg:
query getTagsWithOR {
transactions(
tags: [{ name: "Content-Type", values: ["image/png", "image/jpg"] }]
) {
edges {
node {
tags {
name
value
}
}
}
}
}
Search for transactions matching the tag with name Content-Type and the values of image/png AND image/jpg:
query getTagsWithAnd {
transactions(
tags: [
{ name: "Content-Type", values: ["image/jpg"] }
{ name: "Content-Type", values: ["image/png"] }
]
) {
edges {
node {
tags {
name
value
}
}
}
}
}
Limiting Results​
Limit the number of results returned by including the limit
parameter:
query getAllPNGs {
transactions(
limit: 10
tags: [{ name: "Content-Type", values: ["image/png"] }]
) {
edges {
node {
id
address
}
}
}
}
Pagination​
You can request a maximum of 100 results returned from each query, to obtain additional results use pagination.
When using pagination you:
- Retrieve the
cursor
field, this acts like a bookmark in the search results you can then return to. - Use saved
cursor
value to obtain subsequent search results.
The following query returns 10 transactions tagged image/png
occurring after
the cursor with value:
LS02d1NsM3R6aUprd3dKUzVjN1FXaWg5aUxsbXh5dVJJbGlydHJtNlpPbw
. To then obtain the
next 10 transactions, use the final cursor
value returned from this query as
the value of the after
parameter in the following query.
query getPNGs {
transactions(
limit: 10
tags: [{ name: "Content-Type", values: ["image/png"] }]
after: "LS02d1NsM3R6aUprd3dKUzVjN1FXaWg5aUxsbXh5dVJJbGlydHJtNlpPbw"
) {
edges {
node {
id
}
cursor
}
}
}
Sorting​
You can sort results by timestamp in either ascending or descending order using
the order
field.
query getAllByOwnerAsc {
transactions(
owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"]
order: ASC
) {
edges {
node {
id
address
}
}
}
}
query getAllByOwnerDesc {
transactions(
owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"]
order: DESC
) {
edges {
node {
id
address
}
}
}
}