Allomancy

Quickstart

Get an API key and make your first authenticated call in a few minutes.

This walkthrough takes you from zero to a working request: get a key, call the API, and read a paginated list.

Get an API key

API keys are created by the store owner inside Allomancy Stores, on the API Keys page. The owner clicks Create API Key, gives the key a name, picks the scopes it should have, and optionally sets an expiry date.

The full key is shown only once, at creation. It looks like this:

allo_live_8Kd2...redacted...zQ.Hk9...redacted...4w

The owner copies it with Copy and stores it somewhere secure right away. Allomancy stores only a hash, so the full key can never be retrieved again. If it is lost, the owner revokes it and creates a new one. See Authentication for the key format and lifecycle.

Make your first call

Send the key in the X-API-Key header. Start with GET /v1/store, which returns the store the key belongs to:

curl --fail-with-body https://integrations.allomancy.net/v1/store \
  -H "X-API-Key: allo_live_8Kd2...zQ.Hk9...4w"
import requests

response = requests.get(
    "https://integrations.allomancy.net/v1/store",
    headers={"X-API-Key": "allo_live_8Kd2...zQ.Hk9...4w"},
)
print(response.json())
const response = await fetch("https://integrations.allomancy.net/v1/store", {
  headers: { "X-API-Key": "allo_live_8Kd2...zQ.Hk9...4w" },
});
console.log(await response.json());
<?php
$ch = curl_init("https://integrations.allomancy.net/v1/store");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: allo_live_8Kd2...zQ.Hk9...4w"]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

A successful call returns 200 OK with the store details:

{
  "id": "6f9c1b2e-4a7d-4e91-9c3a-2b8d5e0f1a23",
  "name": "Aether & Ash",
  "logo": "0d4f8a11-9b2c-4e6d-8f1a-3c7b5d9e2f04",
  "blogListed": true,
  "applicationOpen": false,
  "bonus": { "baseBonus": 0, "groupBonus": 5 },
  "locationSlUrl": "http://maps.secondlife.com/secondlife/Aether/128/64/22",
  "ownerUuid": "a1b2c3d4-e5f6-4789-9abc-def012345678",
  "ownerUsername": "aether.ash"
}

If the key is missing or invalid you get 401; if it is valid but lacks the store:read scope you get 403. See Authentication for the full status-code model.

Read a paginated list

List endpoints return a cursor-paginated envelope. Request products, limiting the page to ten rows:

curl --fail-with-body "https://integrations.allomancy.net/v1/products?limit=10" \
  -H "X-API-Key: allo_live_8Kd2...zQ.Hk9...4w"
import requests

response = requests.get(
    "https://integrations.allomancy.net/v1/products",
    headers={"X-API-Key": "allo_live_8Kd2...zQ.Hk9...4w"},
    params={"limit": 10},
)
print(response.json())
const response = await fetch(
  "https://integrations.allomancy.net/v1/products?limit=10",
  {
    headers: { "X-API-Key": "allo_live_8Kd2...zQ.Hk9...4w" },
  },
);
console.log(await response.json());
<?php
$ch = curl_init("https://integrations.allomancy.net/v1/products?limit=10");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: allo_live_8Kd2...zQ.Hk9...4w"]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

The data array holds the rows, and pagination carries the cursors:

{
  "data": [
    {
      "id": "3a1f0c9b-7d2e-4c84-9a6f-1b5e8d0c2a37",
      "name": "Fancy hat",
      "price": 250,
      "activePrice": 225,
      "image": "0d4f8a11-9b2c-4e6d-8f1a-3c7b5d9e2f04",
      "bloggable": true,
      "active": true,
      "blockCredits": false,
      "item": "Fancy hat",
      "limited": false,
      "availableAmount": 0,
      "permissions": { "copy": true, "modify": false, "transfer": true },
      "discount": { "value": 10, "type": 0, "startDate": "2026-04-01T00:00:00Z", "endDate": "2026-05-01T00:00:00Z" },
      "description": "A very fancy hat.",
      "demoId": null,
      "mpListing": 4242,
      "profitShares": [
        { "userUuid": "b7c8d9e0-1f2a-4b3c-8d4e-5f6a7b8c9d0e", "percent": 10 }
      ]
    }
  ],
  "pagination": {
    "nextCursor": "Tjo3ZDJlNGM4NC05YTZmLTFiNWU4ZDBjMmEzNw",
    "previousCursor": null,
    "limit": 10
  }
}

To fetch the next page, send the nextCursor value back as the cursor query parameter. When nextCursor is null, there are no more rows. Cursors are opaque tokens: pass them back exactly as received, and do not build or decode them yourself. See Pagination and errors for the full envelope and the error format.

On this page