Using the Nilkick API
Everything the warmer and the scout decide, over HTTP: pull the day's tasks and drafted copy with an API key, act with your own hands, and write results back.
Last updated July 26, 2026The API hands your own scripts the same judgment the app runs on: which subreddit an account should join today, which thread deserves a reply this morning, and the words to say. It is built for people who already have hands, a fleet of Reddit accounts in an anti-detect browser, their own Playwright scripts, their own scheduler, and want a brain driving them.
01 · The shapeWhat the API is
Setup stays in the dashboard: the intake wizards ask the niche and expertise questions that make the output good, and that is worth doing once per account with a human. The API is the daily loop that follows. Your script pulls the day’s tasks, fetches drafts as it needs them, and reports what happened, and everything you report feeds the next day’s judgment.
Nilkick decides and drafts; it never posts, holds credentials, or automates a browser. What you publish, when, and how stays on your side, which also keeps every account relationship yours.
02 · KeysGet a key
Open the account menu in the app and choose API & Webhooks. Keys look like nk_live_ followed by 43 random characters, and the full value is shown exactly once: we store a hash, not the key, so nobody (including us) can read it back later. The list shows only the first characters, plus when each key was last used.
A key authenticates as your whole account, so issue one per integration and name it after the thing that holds it. Rotating a key issues a replacement and revokes the original in one step; revoking is immediate and permanent.
03 · First requestYour first request
The base URL is https://api.nilkick.com/v1. Send the key as a bearer token on every request:
curl https://api.nilkick.com/v1/warmups \
-H "Authorization: Bearer nk_live_YOUR_KEY"{
"warmups": [
{
"id": "3f2b7c1e-9d5a-4f42-8f6e-2a91d0c47b13",
"username": "quiet_builder",
"status": "active",
"day": 6,
"today": { "done": 1, "total": 2 },
"created_at": "2026-07-12T03:41:09.000Z"
}
]
}GET /v1/scouts mirrors it for scouts, including each scout’s project and how many new conversations landed today. The reddit username on every row is the natural join key to your own profile manager, since your profiles are usually named after the accounts they hold. From there, the whole daily flow lives in the API task loop.
04 · ErrorsWhen something goes wrong
Every non-2xx response has one shape, and the code values are stable:
{
"error": {
"code": "invalid_request",
"message": "limit must be an integer between 1 and 200."
}
}Codes you will meet: unauthorized (401, missing or revoked key), invalid_request (400, the message names the offending field), not_found (404, which also covers “not yours”), conflict (409, the action does not fit the task’s state), rate_limited (429), and internal (500, our side).
05 · LimitsRate limits
Two budgets apply, both counted per account, so issuing more keys never widens them: 240 requests per minute across the whole API, plus a separate 20 per minute on the draft endpoint (the one call that spends model time). A 429 comes with Retry-After: 60; wait it out and retry. Treat the numbers as approximate rather than exact, and design for far less: a fleet polling once per account per day barely registers.
06 · CompatibilityThe compatibility promise
The namespace is versioned (/v1/) and changes are additive only: we add fields and endpoints, we do not remove or repurpose what your script already depends on. If a breaking change is ever unavoidable it arrives as a new version, not a surprise.