---
# System prepended metadata

title: Provenance Proofs Integration

---

# Provenance Proofs Integration

This document outlines:
- Using just data hashes to inherit strong provenance
- How to post provenance proofs
- How to use Bundlr's GraphQL for retrieving provenance proofs

### Prerequisites

- You have funded node1 which can be done [here](https://docs.bundlr.network/developer-docs/cli/funding-a-node)


### Code snippets


This example demonstrates:
- Posting a `sha256` hash of the data in the provenance proof (you can use any other standard hash function)
- Using ETH for Bundlr

```js
import Bundlr from "@bundlr-network/client";
import crypto from "crypto";

const bundlr = new Bundlr("https://node1.bundlr.network", "ethereum", "<eth-private-key>");

const hashingAlgo = "sha256";
const uploader = "Josh";
const data = "Hello world";

const hash = crypto
    .createHash(hashingAlgo)
    .update(data)
    .digest()
    .toString("hex");


const result = await bundlr.upload("", {
    tags: [
        { name: "Data-Protocol", value: "Provenance-Confirmation" },
        { name: "Hashing-Algo", value: hashingAlgo },
        { name: "Data-Hash", value: hash },
        { name: "Uploaded-For", value: uploader }
    ],
});

// Transaction ID which can be used to retrieve the proof
const { id } = result;

console.log("See tx at https://gateway.bundlr.network/tx/" + id);
```

This example demonstrates:
- Getting a proof for a specific piece of data via GraphQL


```js
import axios from "axios";

const hash = ...;

const queryObject = {
    query:
        `{
		transactions(
			tags: [
				{
					name: "Data-Protocol",
					values: ["Provenance-Confirmation"]
				},
				{
					name: "Data-Hash",
					values: ["${hash}"]
				}
			]
		) 
		{
			edges {
				node {
					id
					tags {
						name
						value
					}
                    timestamp
				}
			}
		}
	}`
};

const results = await axios.post("https://node1.bundlr.network/graphql", queryObject);

// Get first instance of proof
const proof = results.data.data.transactions.edges[0]?.node;

console.log(proof);

// {
//     id: "...",
//     tags: [...],
//     timestamp: ...,
//     ...
// }
```