Neurall

Quickstart

Five steps from an empty account to an animated logo reveal you can play. The first two are in a browser, the other three are one HTTP call each.

1Create a key

Keys are made in the app, at Settings › Project › API keys. A key looks like nl-a1b2c3…-… and is shown once, at creation. Copy it then; we store only a hash and cannot show it to you again.

A key belongs to one project, and everything it does is scoped to that project. Export it so the snippets below run as written:

export NEURALL_KEY=nl-… then check it works

curl "https://api.neurall.io/v3/pricing" \
  -H "Authorization: $NEURALL_KEY"

A list of prices comes back if the key is good, and 401 Unauthorized if it is not. Full detail on Authentication.

2Add funds

There is no free tier and no trial credit, so an empty wallet answers 402 Insufficient balance on the first submit. Top up at Settings › Organization › Billing.

One prepaid balance covers the whole organization, every project inside it, and both the app and the API. The reveal below costs $1. Optional auto-recharge, on the Payments tab, tops the wallet back up when it falls below a threshold you set, so production does not stop at an empty balance.

3Upload the input files

Input files go up first and come back as file ids you pass in a feature’s args. The field is named files, up to 30 MB each and 10 per request. In this walkthrough the input is one file, the logo the reveal animates.

curl -X POST "https://api.neurall.io/v3/files/upload" \
  -H "Authorization: nl-YOUR_API_KEY" \
  -F "files=@logo.png"

A file id is for the render you are about to make

Uploads are deleted 24 hours after they land. Upload again for the next render rather than storing an id and reusing it a week later.

4Submit the generation

One endpoint runs every feature: POST /v3/generations. feature picks what to make, args carries that feature’s inputs. Paste your file id into args.image.

curl -X POST "https://api.neurall.io/v3/generations" \
  -H "Authorization: nl-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "feature": "video/logo-reveal",
    "args": {
      "image": "f_9c21e0b4",
      "prompt": "A lens-flare reveal: a horizontal blue anamorphic flare streaks across the black frame from left to right in the opening beat; the logo materializes exactly in the flare's wake, settling into its true colors by the final beat. Sound design: one long cinematic whoosh, fading to quiet.",
      "mode": "intro",
      "aspectRatio": "16:9",
      "background": "#000000",
      "generateAudio": true,
      "duration": 4
    }
  }'

It answers in milliseconds, because it has not rendered anything yet. The balance is charged here, at submit:

{
  "generation": {
    "id": "9f2c1d84-6a3b-4f21-9c77-2f0a1b8e5d43",
    "feature": "video/logo-reveal",
    "kind": "video",
    "status": "pending"
  }
}

5Collect the result

Poll the generation every few seconds until status leaves pending and running. A reveal typically takes two to three minutes, so every 5 to 10 seconds is plenty; the quick features (images, speech) are worth a couple of seconds.

# repeat every 5s or so until status is done, error or timeout
curl "https://api.neurall.io/v3/generations/9f2c1d84-6a3b-4f21-9c77-2f0a1b8e5d43" \
  -H "Authorization: nl-YOUR_API_KEY"

Once status is done

{
  "generation": {
    "id": "9f2c1d84-6a3b-4f21-9c77-2f0a1b8e5d43",
    "status": "done",
    "output": {
      "video": "https://cdn.neurall.io/…/video.mp4",
      "mime": "video/mp4"
    }
  }
}

output.video is a signed CDN URL. Download the file. Generations created through the API carry an expiresAt 24 hours out, and the asset goes with it, so a URL you saved into a database will eventually stop resolving.

That is the whole pattern

Every feature in the platform is that same shape: upload what it needs, POST the feature and its args, collect the output. Only the contents of args change from one feature to the next.

  • How a generation works covers the rest of the model: every status, webhooks instead of polling, what a failure refunds, and how long an output lives.
  • The feature pages in the sidebar each document one args object, with its real limits and a worked call.
  • The API reference is generated from the contract the API serves itself, and is also available as openapi.json to generate a client from.