Are.na Channel Blocks
arena.channel.blocks-list
List the blocks in a public channel, page by page: each link, image or text with its title, source URL, class and the date it was added.
At a glance
- Endpoint ID
arena.channel.blocks-list- Price
- 1 credit per call; failed calls are free
- Runs for up to
- 15 seconds
Request
Send the endpoint ID as capability and its fields as input. Set UPSCRAPE_API_KEY to your key first.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "arena.channel.blocks-list", "input": { "slug": "websites-with-novel-navs" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "arena.channel.blocks-list", "input": { "slug": "websites-with-novel-navs" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "arena.channel.blocks-list", "input": { "slug": "websites-with-novel-navs" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
Input
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
slug |
string | yes | The channel's name in its URL, such as websites-with-novel-navs, or its full URL. | websites-with-novel-navs |
limit |
integer | no | How many items per page. | |
page |
integer | no | Which page to return, starting at 1. |
Response
A finished call answers with HTTP 200; the data is in results[0].data, and billing.credits_charged is what it cost. A call still running after the wait answers 202: see jobs and results.
This is results[0].data from a real run:
{ "has_more": true, "page": 1, "per": 24, "total": 191, "total_pages": 8, "blocks": [ { "title": "Loïc Ponceau", "created_at": "2026-05-28T09:55:15Z", "class": "Link", "connected_at": "2026-09-22T11:50:01Z", "id": 46553438, "image_height": 2560, "image_width": 2560, "position": 191, "source_url": "https://maisquiestdonccezoukeur.org/", "state": "available", "updated_at": "2026-09-23T21:13:59Z", "source": { "title": "Loïc Ponceau", "url": "https://maisquiestdonccezoukeur.org/" } }, { "title": "ME.JSON", "created_at": "2026-08-22T18:03:44Z", "class": "Link", "connected_at": "2026-08-22T18:03:44Z", "description": "oh noooooooo", "id": 49733825, "image_height": 2560, "image_width": 2560, "position": 190, "source_url": "https://mejson.intermedialegestaltung.de/", "state": "available", "updated_at": "2026-10-01T18:46:00Z", "source": { "title": "ME.JSON", "url": "https://mejson.intermedialegestaltung.de/" } } ]}
Fields
| Field | Type | What it is | Example |
|---|---|---|---|
blocks |
array | How many blocks the channel has. | 22 records |
blocks[].class |
string | The kind of block, such as Link, Image or Text. | Link |
blocks[].connected_at |
string | When the block was added to the channel. | 2026-09-22T11:50:01Z |
blocks[].created_at |
string | When it was created. | 2026-05-28T09:55:15Z |
blocks[].id |
integer | Are.na's ID for it. | 46,553,438 |
blocks[].image_height |
integer | The image's height in pixels. | 2560 |
blocks[].image_width |
integer | The image's width in pixels. | 2560 |
blocks[].position |
integer | Where the block sits in the channel. | 191 |
blocks[].source |
object | 2 fields | |
blocks[].source.title |
string | The block's title. | Loïc Ponceau |
blocks[].source.url |
string | The address it links to. | https://maisquiestdonccezoukeur.org/ |
blocks[].source_url |
string | The page the block was saved from. | https://maisquiestdonccezoukeur.org/ |
blocks[].state |
string | Whether the block is available. | available |
blocks[].title |
string | The block's title. | Loïc Ponceau |
blocks[].updated_at |
string | When it last changed. | 2026-09-23T21:13:59Z |
has_more |
boolean | Whether more results follow this page. | true |
page |
integer | The page this response holds. | 1 |
per |
integer | How many results each page holds. | 24 |
total |
integer | How many results there are in all. | 191 |
total_pages |
integer | How many pages of results there are. | 8 |
If a call fails
A failed call costs nothing. The response carries an error.code you can branch on; Errors and retries lists every code and which ones to retry.
Other Are.na endpoints
Something missing or unclear? Ask the team that builds the Are.na endpoints.