walospublic
Docs

Quickstart

Register a Sui package and query indexed events in under 10 minutes.

Migrating from direct polling?

Walos is designed for teams moving away from direct fullnode event polling. This migration path keeps your package filters, lets Walos handle historical backfill, and points your application at the query gateway instead of stitching together your own pagination and retries.

# Before: direct fullnode polling
sui client call --method suix_queryEvents ...

# After: Walos query gateway
curl -H "x-api-key: YOUR_API_KEY" \
  "http://127.0.0.1:3001/v1/events?package=0xYOUR_PACKAGE_ID&limit=10"

Storage SDK quickstart

Building a storage workflow instead of an indexing workflow? Start with the server-side SDK path for bucket creation, uploads, reads, namespace usage, and S3 presigned URLs.

Open Storage SDK docs
1

Create an account

Open the login page for your Walos deployment. Continue with your email, Google, GitHub, or Sui wallet. If you do not have an account yet, the same Privy flow creates it and provisions a default project and environment automatically.

2

Register a Sui package

Go to Packages in the dashboard and click "Register Package". Enter the on-chain package ID and an optional MVR name. Walos begins indexing events immediately and starts a historical backfill.

3

Create an API key

Navigate to API Keys and create a key. Copy the key — it is shown only once. Use this key to authenticate requests to the query gateway.

4

Query your events

Send a GET request to the query gateway with your API key. Events are returned as JSON sorted by checkpoint sequence.

curl -H "x-api-key: YOUR_API_KEY" \
  "http://127.0.0.1:3001/v1/events?package=0xYOUR_PACKAGE_ID&limit=10"

API Response Format

Every response from /v1/events follows this shape. The meta object includes cursor-based pagination helpers.

{
  "data": [
    {
      "packageId": "0x188247e1d63f44588c761c5c3db98aef9076e52af607a1d1028ddb502b987505",
      "eventType": "events::OfferMadeEvent<...>",
      "sender": "0xabc...",
      "txDigest": "8cFF3y4ZET9f...",
      "eventSeq": 0,
      "checkpoint": 300563601,
      "bcs": null,
      "data": { "price": "1000000000", "nft_id": "0x..." },
      "timestamp": "2026-03-25T10:03:43.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "limit": 10,
    "hasMore": false,
    "nextCursor": null
  }
}

Pagination

Use the after query parameter with the meta.nextCursor value from the previous response to fetch the next page. When meta.hasMore is false you have reached the last page.

# First page
curl -H "x-api-key: YOUR_API_KEY" \
  "http://127.0.0.1:3001/v1/events?package=YOUR_PACKAGE_ID&limit=10"

# Next page (use nextCursor from previous response)
curl -H "x-api-key: YOUR_API_KEY" \
  "http://127.0.0.1:3001/v1/events?package=YOUR_PACKAGE_ID&after=CURSOR_VALUE&limit=10"

Query Filters

All filters are optional query string parameters on GET /v1/events.

ParameterDescription
event_typeFilter by Sui event type (e.g., events::OfferMadeEvent<...>)
senderFilter by sender address
fromFilter by timestamp lower bound (ISO 8601)
toFilter by timestamp upper bound (ISO 8601)
afterCursor for pagination (value of meta.nextCursor)
orderasc or desc — sort order by checkpoint (default: desc)
limit1–500 — number of events per page (default: 50)

Error Codes

The API uses standard HTTP status codes. Error responses include a JSON body with a message field.

StatusMeaning
401Invalid or missing API key
403Package not registered for this project
409Package backfill in progress — try again later
429Daily API quota exceeded
Next steps