# DataLink tutorials (Pull Delivery)
Source: https://docs.chain.link/datalink/pull-delivery/tutorials


These tutorials guide you through integrating with DataLink pull-delivery feeds, from basic data fetching to onchain verification. Choose the tutorial that matches your preferred programming language and integration method.

> **CAUTION: Disclaimer**
>
> These guides represent examples of using a Chainlink product or service and is provided to help you understand how to
> interact with Chainlink's systems and services so that you can integrate them into your own. This template is provided
> "AS IS" and "AS AVAILABLE" without warranties of any kind, has not been audited, and may be missing key checks or
> error handling to make the usage of the product more clear. Do not use the code in this example in a production
> environment without completing your own audits and application of best practices. Neither Chainlink Labs, the
> Chainlink Foundation, nor Chainlink node operators are responsible for unintended outputs that are generated due to
> errors in code

## Getting started

Before starting any tutorial, ensure you have:

1. **API Credentials**: Access to pull-based DataLink feeds requires API credentials to connect to the Aggregation Network. If you haven't already, [contact us](https://chain.link/contact) to request access.
2. **Development Environment**: Set up your development environment for your chosen programming language (Go or Rust).
3. **Basic Understanding**: Familiarity with report schemas and the [DataLink architecture](/datalink/pull-delivery/overview) for pull-based feeds.

## Tutorials

### Fetch and decode reports (API)

Learn how to fetch and decode reports using REST API calls. This method is ideal for applications that need on-demand data retrieval.

- [Fetch and decode reports using the Go SDK (API)](/datalink/pull-delivery/tutorials/fetch-decode/api-go)
- [Fetch and decode reports using the Rust SDK (API)](/datalink/pull-delivery/tutorials/fetch-decode/api-rust)

### Stream and decode reports (WebSocket)

Learn how to establish real-time data streams using WebSocket connections. This method is ideal for applications that need continuous, low-latency data updates.

- [Stream and decode reports using the Go SDK (WebSocket)](/datalink/pull-delivery/tutorials/stream-decode/ws-go)
- [Stream and decode reports using the Rust SDK (WebSocket)](/datalink/pull-delivery/tutorials/stream-decode/ws-rust)

### Onchain verification

Learn how to verify the authenticity and integrity of report data onchain using the Verifier Proxy contracts.

- [Verify Report Data Onchain (EVM)](/datalink/pull-delivery/tutorials/onchain-verification-evm)