Create backfill
curl --request POST \
--url https://api.example.com/api/v1/beam/backfillsimport requests
url = "https://api.example.com/api/v1/beam/backfills"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/api/v1/beam/backfills', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/beam/backfills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/beam/backfills"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/beam/backfills")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/beam/backfills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyBackfills
Create backfill
Starts a job that delivers historical data from an Allium table to your destination.
POST
/
api
/
v1
/
beam
/
backfills
Create backfill
curl --request POST \
--url https://api.example.com/api/v1/beam/backfillsimport requests
url = "https://api.example.com/api/v1/beam/backfills"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/api/v1/beam/backfills', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/beam/backfills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/beam/backfills"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/beam/backfills")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/beam/backfills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyDelivers historical data from an Allium table to exactly one destination for the window you specify. The job moves through
Response:
Use
Request body:
Backfills select rows by block timestamp.
Only rows where
Transforms use the same
staging → transporting → completed, or ends as failed or cancelled.
Backfills read from stream-compatible views, so delivered records match the live Beam stream for the same source. Supported tables:
Contact [email protected] to request additional tables.
| Table | Chains |
|---|---|
intermediate.{chain}_assets.int_{chain}_assets__erc20_token_transfers_stream_compat | arbitrum, arbitrum_sepolia, avalanche, base, base_sepolia, bsc, bsc_testnet, ethereum, megaeth, monad, monad_testnet, optimism, optimism_sepolia, plasma, polygon, polygon_amoy, sei |
intermediate.{chain}_assets.int_{chain}_assets__native_token_transfers_stream_compat | Same chains as above |
intermediate.solana_assets.int_solana_assets__token_transfers_stream_compat | solana |
intermediate.solana_raw.int_solana_raw__instructions_stream_compat | solana |
curl -X POST https://api.allium.so/api/v1/beam/backfills \
-H "X-API-Key: ${ALLIUM_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"job_name": "USDC transfers on Base — Sep 2026",
"table": "intermediate.base_assets.int_base_assets__erc20_token_transfers_stream_compat",
"backfill_window": {
"partition_key": "block_timestamp",
"start": "2026-09-01T00:00:00Z",
"end": "2026-10-01T00:00:00Z"
},
"filter": {
"column": "token_address",
"values": ["0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"]
},
"destinations": [
{ "type": "kafka", "name": "base-usdc-transfers-backfill" }
]
}'
{
"job_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"workflow_id": "beam-backfill-org123-f47ac10b-58cc-4372-a567-0e02b2c3d479"
}
job_id to track the job with List backfills or stop it with Cancel backfill.
Request body:
{
"job_name": str,
"table": str,
"backfill_window": { ... },
"filter": { ... },
"transforms": [ ... ],
"destinations": [ ... ],
"static_egress_ip": bool
}
| Field | Type | Required | Description |
|---|---|---|---|
job_name | string | Yes | Display name for the job |
table | string | Yes | Fully qualified DATABASE.SCHEMA.TABLE name. Must be one of the supported tables above |
backfill_window | object | Yes | Time range to deliver. See backfill_window |
filter | object | No | Restrict delivery to matching rows. See filter. Default: null |
transforms | Transform[] | No | Transforms applied to each row before delivery. Default: [] |
destinations | Sink[] | Yes | Exactly one destination |
static_egress_ip | boolean | No | Send webhook traffic from a static outbound IP. Default: false |
backfill_window
Backfills select rows by block timestamp. start is inclusive, end is exclusive, and start must be earlier than end. start must be within the last 90 days. Timestamps without a timezone are treated as UTC.
{
"partition_key": "block_timestamp",
"start": "2026-09-01T00:00:00Z",
"end": "2026-10-01T00:00:00Z"
}
| Field | Type | Required | Description |
|---|---|---|---|
partition_key | "block_timestamp" | Yes | block_timestamp for all currently supported tables |
start | string | No | Inclusive ISO 8601 start timestamp. Default: now − 90 days + 1 minute |
end | string | No | Exclusive ISO 8601 end timestamp. Default: now |
filter (optional)
{
"column": "token_address",
"values": ["0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"]
}
| Field | Type | Required | Description |
|---|---|---|---|
column | string | Yes | Column to match. Letters, digits, _ and . only (^[A-Za-z0-9_.]+$) |
values | string[] | Yes | At least one value |
column matches one of values are delivered.
transforms (optional)
Transforms use the same v8 and redis_set_filter shapes as pipeline transforms. See the transforms reference. Datasets referenced with beam.contains() must belong to your organization.
destinations
destinations takes exactly one entry, using the same types as pipeline sinks. See the sinks reference.Was this page helpful?