Reference·API quickstartIndex

Abliterated LLM API quickstart

Calling Cyber v1, Nodecode's abliterated model: a key, a base URL, the three wire shapes it answers, Claude Code and Codex on it, and the one thing that goes wrong with a reasoning model.

.mdllms.txt

Cyber v1 is nodecode-cyber-v1: DeepSeek V4.1 Flash 1017 with its refusal direction abliterated, 1,048,576 tokens of context, served on machines Foresight Labs runs in Europe with zero data retention. Its own page says what it is and who it is for; this one is how to call it.

A key

Make one at nodecode.ai/account/keys. It starts sk-nc-, and it is shown once. A balance is topped up at Top up. The Nodecode CLI needs no pasted key: nodecode login signs the machine in and saves a key of its own, as Models and providers says.

The first call

a shell
curl https://api.nodecode.ai/v1/chat/completions \
  -H "Authorization: Bearer $NODECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nodecode-cyber-v1",
    "messages": [{"role": "user", "content": "22/tcp and 8080/tcp are open. What next, in order?"}],
    "max_tokens": 600
  }'

Three wires

One model, three shapes of request. A client that speaks any of them points here with a base URL and a key, and needs nothing else.

WirePathClients that speak it
OpenAI chat completions/v1/chat/completionsOpenAI SDK, LiteLLM, LangChain, Strix
OpenAI Responses/v1/responsesCodex CLI
Anthropic Messages/v1/messagesAnthropic SDK, Claude Code

All three answered on 2026-11-10 against this endpoint. Beside them the key answers POST /v1/messages/count_tokens, GET /v1/models, GET /v1/models/ID and GET /v1/usage, which says what is left of the balance.

Claude Code

a shell
export ANTHROPIC_BASE_URL=https://api.nodecode.ai
export ANTHROPIC_AUTH_TOKEN=sk-nc-...
export ANTHROPIC_MODEL=nodecode-cyber-v1
claude

No /v1 on this base URL: the client adds it. API keys shows the same lines.

Codex CLI

Add this to ~/.codex/config.toml, then export NODECODE_API_KEY=sk-nc-... and run codex:

model = "nodecode-cyber-v1"
model_provider = "nodecode"

[model_providers.nodecode]
name = "Nodecode"
base_url = "https://api.nodecode.ai/v1"
env_key = "NODECODE_API_KEY"
wire_api = "responses"

Codex 0.162.1 refuses wire_api = "chat", so "responses" is the shape that works. It opens with "Model metadata for nodecode-cyber-v1 not found": that is harmless.

A reasoning model

It thinks first, and max_tokens covers the thinking. A call given 100 tokens spends them reasoning and returns an empty content with finish_reason: "length", which reads like a refusal and is not one: give a call a few hundred tokens.

WireWhere the thinking arrives
chat completionsmessage.reasoning, with the answer in message.content
Responsesan output item of type: "reasoning", before the message
Messagesa thinking block, before the text block

What it costs

Per token, from a balance you top up, the same number in euros or dollars: one price for input the model had cached, one for the rest of the input, one for the output. Pricing has the three figures, the weekend price and what a long prompt pays.

With your agent

  • Strix: three environment variables.
  • PentAGI: four lines of .env.
  • PentestGPT: a provider block for the Codex it drives.
Esc

    Loading the index…

    ↑↓ moveEnter openEsc close