Documentation Index
Fetch the complete documentation index at: https://docs.allium.so/llms.txt
Use this file to discover all available pages before exploring further.
Adds values to a dataset. Duplicates are ignored. Changes are reflected immediately in beam.contains() lookups — no redeploy needed.
Path parameters:
| Parameter | Description |
|---|
dataset_id | Dataset ID |
Request body:
{
"values": ["0x3c499c542cef5e3811e1192ce70d8cc03d5c3359", "0xc2132d05d31c914a87c6611c10748aeb04b58e8f"]
}
| Field | Required | Description |
|---|
values | Yes | Array of string values to add |
curl -X POST https://api.allium.so/api/v1/beam/datasets/${DATASET_ID}/entries \
-H "X-API-Key: ${ALLIUM_API_KEY}" \
-H "Content-Type: application/json" \
-d '{ "values": ["0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"] }'
Response:
Uploading large datasets
Each request supports up to 250,000 values. For larger datasets, split into chunks and upload in parallel. We recommend a maximum of 5 concurrent requests to avoid overloading the database:
import asyncio
import httpx
CHUNK_SIZE = 250_000
async def upload_dataset(dataset_id: str, values: list[str], api_key: str):
chunks = [values[i:i + CHUNK_SIZE] for i in range(0, len(values), CHUNK_SIZE)]
semaphore = asyncio.Semaphore(5) # max 5 concurrent requests
async def upload_chunk(chunk: list[str]):
async with semaphore:
await client.post(
f"https://api.allium.so/api/v1/beam/datasets/{dataset_id}/entries",
json={"values": chunk},
headers={"X-API-Key": api_key},
)
async with httpx.AsyncClient() as client:
await asyncio.gather(*[upload_chunk(chunk) for chunk in chunks])
Use lowercase values when filtering by addresses — this is how values are normalized in the system.