# Polygon zkEVM API Quickstart

> How to get started building on Polygon zkEVM using Alchemy

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

<Tip title="Don't have an API key?" icon="star">
  Build faster with production-ready APIs, smart wallets and rollup infrastructure across 70+ chains. Create your free Alchemy API key and{" "}
  <a href="https://dashboard.alchemy.com/signup">get started today</a>.
</Tip>

Polygon zkEVM is a decentralized Ethereum Layer 2 network that uses cryptographic zero-knowledge proofs to offer validity and quick finality to offchain transactions. Emulating the Ethereum Virtual Machine (EVM), zkEVM allows transparent deployment of existing Ethereum smart contracts while enhancing scalability, security, and transaction throughput. With zkEVM, you can build decentralized applications with quick finality and improved performance, all within the Ethereum ecosystem.

The Polygon zkEVM API is a collection of JSON-RPC methods that let you interact with the Polygon zkEVM network. Using the endpoints provided by the API, you can access up-to-date network data and submit transactions.

## Send your first request on Alchemy

Let's use the [`viem`](https://www.npmjs.com/package/viem) package to create a Polygon zkEVM client connected to Alchemy and fetch the latest block number!

<CodeGroup>
  ```text npm
  npm install --save viem
  ```

  ```text yarn
  yarn add viem
  ```
</CodeGroup>

## Create a client connected to Alchemy

<CodeGroup>
```js
import { createPublicClient, http } from "viem"; 
import { polygonZkEvm } from "viem/chains";

const client = createPublicClient({
  chain: polygonZkEvm,
  transport: http("https://polygonzkevm-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY"),
});
```
</CodeGroup>

Now that you've created a client connected to Alchemy, you can continue with some basics:

## Get the latest block number

<CodeGroup>
```js
const blockNumber = await client.getBlockNumber();
console.log("Current block number:", blockNumber);
```
</CodeGroup>

## Get an address balance

<CodeGroup>
```js 
const balance = await client.getBalance({ address: "0xab5801a7d398351b8be11c439e05c5b3259aec9b" });
console.log("Balance (ETH):", Number(balance) / 1e18);
```
</CodeGroup>

## Read block data

<CodeGroup>
```js
const block = await client.getBlock({
  blockNumber: blockNumber, // from previous example
});
console.log(block);
```
</CodeGroup>

## Fetch a transaction by hash

<CodeGroup> 
```js 
const tx = await client.getTransaction({ hash: "0xYOUR_TX_HASH" });
console.log(tx);
```
</CodeGroup>

## Fetch a transaction receipt

<CodeGroup>
```js
const receipt = await client.getTransactionReceipt({
  hash: "0xYOUR_TX_HASH"
});
console.log(receipt);
```
</CodeGroup>

# Polygon zkEVM APIs

For the full list of Polygon zkEVM APIs, see the [Polygon zkEVM API Endpoints](/docs/chains#polygon-zkevm-apis).