> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hostlinku.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK & Sample Code

> Python and Node.js examples for the three Hostlinku API dialects-Anthropic Messages, OpenAI Chat Completions, and OpenAI Responses.

A single API key works for all three dialects. The only differences are the **base URL** and **auth header**:

| Dialect | Base URL | Header |
| - | - | - |
| Anthropic Messages | `https://api.hostlinku.com` (without `/v1`) | `x-api-key: <API_KEY>` |
| OpenAI Chat Completions | `https://api.hostlinku.com/v1` | `Authorization: Bearer <API_KEY>` |
| OpenAI Responses | `https://api.hostlinku.com/v1` | `Authorization: Bearer <API_KEY>` |

Replace the model name with the slug from the [catalog](https://docs.hostlinku.com/en/models.md) - the example below uses a model available in Service Mode Performance.

## Python

### Anthropic Messages

```bash theme={null}
pip install anthropic
```

```python theme={null}
import anthropic

client = anthropic.Anthropic(
    api_key="sk-isi-api-key-kamu",
    base_url="https://api.hostlinku.com",
)

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "Jelaskan API gateway dalam dua kalimat."}],
)
print(message.content[0].text)
print(message.usage.input_tokens, message.usage.output_tokens)
```

Streaming:

```python theme={null}
with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "Tulis satu paragraf pendek."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
```

### OpenAI Chat Completions

```bash theme={null}
pip install openai
```

```python theme={null}
from openai import OpenAI

client = OpenAI(api_key="sk-isi-api-key-kamu", base_url="https://api.hostlinku.com/v1")

response = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[
        {"role": "system", "content": "Kamu asisten yang ringkas."},
        {"role": "user", "content": "Halo dari SDK OpenAI!"},
    ],
)
print(response.choices[0].message.content)
```

Streaming:

```python theme={null}
stream = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[{"role": "user", "content": "Tulis satu paragraf pendek."}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)
```

### OpenAI Responses

```python theme={null}
response = client.responses.create(
    model="gpt-6-astra",
    instructions="Jawab singkat dalam bahasa Indonesia.",
    input="Apa itu API gateway?",
    max_output_tokens=256,
)
print(response.output_text)
```

Streaming:

```python theme={null}
with client.responses.stream(
    model="gpt-6-astra",
    input="Tulis satu paragraf pendek.",
) as stream:
    for event in stream:
        if event.type == "response.output_text.delta":
            print(event.delta, end="", flush=True)
```

## Node.js / TypeScript

### Anthropic Messages

```bash theme={null}
npm install @anthropic-ai/sdk
```

```ts theme={null}
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "sk-isi-api-key-kamu",
  baseURL: "https://api.hostlinku.com",
});

const message = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 256,
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(message.content[0].text);
```

Streaming:

```ts theme={null}
const stream = client.messages.stream({
  model: "claude-sonnet-5",
  max_tokens: 256,
  messages: [{ role: "user", content: "Tulis satu paragraf pendek." }],
});

stream.on("text", (text) => process.stdout.write(text));
await stream.finalMessage();
```

### OpenAI Chat Completions

```bash theme={null}
npm install openai
```

```ts theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-isi-api-key-kamu",
  baseURL: "https://api.hostlinku.com/v1",
});

const response = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(response.choices[0].message.content);
```

Streaming:

```ts theme={null}
const stream = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: [{ role: "user", content: "Tulis satu paragraf pendek." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
```

### OpenAI Responses

```ts theme={null}
const response = await client.responses.create({
  model: "gpt-6-astra",
  input: "Halo!",
  max_output_tokens: 256,
});
console.log(response.output_text);
```

Streaming:

```ts theme={null}
const stream = await client.responses.create({
  model: "gpt-6-astra",
  input: "Tulis satu paragraf pendek.",
  stream: true,
});

for await (const event of stream) {
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  }
}
```

## Notes

Other languages

Java, Go, and PHP use the same pattern: replace `base_url` with Hostlinku, then use the official Anthropic (Messages) or OpenAI (Chat/Responses) SDK. There is no dedicated Hostlinku library.

Limit per client

**The Codex CLI is for OpenAI models only** (`gpt-*`) - Claude models and other non-OpenAI models are rejected upstream due to differences in tool types. **Claude Code** can use non-Claude models, but it displays an `unrecognized_model` warning and assumes a 200k-token context. Details are available on the [Codex CLI](https://docs.hostlinku.com/en/integrations/codex-cli.md) and [Claude Code](https://docs.hostlinku.com/en/integrations/claude-code.md) pages.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.