Quickstart — Markdown source
Raw Markdown for copying or feeding to AI agents.
> **AI Agents**: Index `/api/llms.txt` | Full EN `/api/llms-full-en.txt` | Full ZH `/api/llms-full-zh.txt` | OpenAPI `/api/openapi.yaml`
> Base URL: `<BASE_URL>/v1`
# Quickstart
Get your first chat completion from SupaNexus in under two minutes.
## Prerequisites
1. Access to the SupaNexus API (see [Endpoints](./endpoints.md)).
2. A **project API key** created in the [Developer Console](https://console.supanexus.ai).
## Base URL
Examples below use the `<BASE_URL>` placeholder (usually with `/v1`):
```
<BASE_URL>/v1
```
> Fill `<BASE_URL>` from [Endpoints](./endpoints.md).
Replace `deepseek/deepseek-chat` with a model `id` from `GET /v1/models`.
## Send a chat completion
<!-- code-tabs default="curl" -->
```bash
export SNX_API_KEY="your-api-key"
export SNX_BASE_URL="<BASE_URL>/v1"
curl -s "${SNX_BASE_URL}/chat/completions" \
-H "Authorization: Bearer ${SNX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-chat",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}'
```
```python
from openai import OpenAI
client = OpenAI(
base_url="<BASE_URL>/v1",
api_key="your-api-key",
)
completion = client.chat.completions.create(
model="deepseek/deepseek-chat",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(completion.choices[0].message.content)
```
```typescript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "<BASE_URL>/v1",
apiKey: process.env.SNX_API_KEY,
});
const completion = await client.chat.completions.create({
model: "deepseek/deepseek-chat",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(completion.choices[0]?.message?.content);
```
```go
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
apiKey := os.Getenv("SNX_API_KEY")
baseURL := os.Getenv("SNX_BASE_URL") // <BASE_URL>/v1
body := []byte(`{"model":"deepseek/deepseek-chat","messages":[{"role":"user","content":"Say hello in one sentence."}]}`)
req, err := http.NewRequest(http.MethodPost, baseURL+"/chat/completions", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}
```
```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Quickstart {
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("SNX_API_KEY");
String baseUrl = System.getenv("SNX_BASE_URL"); // <BASE_URL>/v1
String json = """
{"model":"deepseek/deepseek-chat","messages":[{"role":"user","content":"Say hello in one sentence."}]}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "/chat/completions"))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
```
```c
#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *api_key = getenv("SNX_API_KEY");
const char *base_url = getenv("SNX_BASE_URL"); /* <BASE_URL>/v1 */
CURL *curl = curl_easy_init();
if (!curl) return 1;
char url[512];
snprintf(url, sizeof(url), "%s/chat/completions", base_url);
struct curl_slist *headers = NULL;
char auth[256];
snprintf(auth, sizeof(auth), "Authorization: Bearer %s", api_key);
headers = curl_slist_append(headers, auth);
headers = curl_slist_append(headers, "Content-Type: application/json");
const char *payload =
"{\"model\":\"deepseek/deepseek-chat\",\"messages\":[{\"role\":\"user\",\"content\":\"Say hello in one sentence.\"}]}";
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
CURLcode res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
return res == CURLE_OK ? 0 : 1;
}
```
```javascript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.SNX_BASE_URL ?? "<BASE_URL>/v1",
apiKey: process.env.SNX_API_KEY,
});
const completion = await client.chat.completions.create({
model: "deepseek/deepseek-chat",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(completion.choices[0]?.message?.content);
```
```ruby
require "openai"
client = OpenAI::Client.new(
access_token: ENV["SNX_API_KEY"],
uri_base: ENV.fetch("SNX_BASE_URL", "<BASE_URL>/v1"),
)
response = client.chat(
parameters: {
model: "deepseek/deepseek-chat",
messages: [{ role: "user", content: "Say hello in one sentence." }],
},
)
puts response.dig("choices", 0, "message", "content")
```
```php
<?php
$baseUrl = getenv("SNX_BASE_URL") ?: "<BASE_URL>/v1";
$apiKey = getenv("SNX_API_KEY");
$ch = curl_init("{$baseUrl}/chat/completions");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$apiKey}",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"model" => "deepseek/deepseek-chat",
"messages" => [
["role" => "user", "content" => "Say hello in one sentence."],
],
]),
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
```
```rust
use reqwest::blocking::Client;
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = env::var("SNX_API_KEY")?;
let base_url = env::var("SNX_BASE_URL").unwrap_or_else(|_| "<BASE_URL>/v1".into());
let client = Client::new();
let response = client
.post(format!("{base_url}/chat/completions"))
.bearer_auth(api_key)
.json(&serde_json::json!({
"model": "deepseek/deepseek-chat",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}))
.send()?;
println!("{}", response.text()?);
Ok(())
}
```
```csharp
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var apiKey = Environment.GetEnvironmentVariable("SNX_API_KEY");
var baseUrl = Environment.GetEnvironmentVariable("SNX_BASE_URL") ?? "<BASE_URL>/v1";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
var body = JsonSerializer.Serialize(new
{
model = "deepseek/deepseek-chat",
messages = new[] { new { role = "user", content = "Say hello in one sentence." } },
});
var response = await client.PostAsync(
$"{baseUrl}/chat/completions",
new StringContent(body, Encoding.UTF8, "application/json"));
Console.WriteLine(await response.Content.ReadAsStringAsync());
```
```kotlin
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
fun main() {
val apiKey = System.getenv("SNX_API_KEY")
val baseUrl = System.getenv("SNX_BASE_URL") ?: "<BASE_URL>/v1"
val json = """
{"model":"deepseek/deepseek-chat","messages":[{"role":"user","content":"Say hello in one sentence."}]}
""".trimIndent()
val request = HttpRequest.newBuilder()
.uri(URI.create("$baseUrl/chat/completions"))
.header("Authorization", "Bearer $apiKey")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build()
val response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString())
println(response.body())
}
```
```swift
import Foundation
let apiKey = ProcessInfo.processInfo.environment["SNX_API_KEY"]!
let baseURL = ProcessInfo.processInfo.environment["SNX_BASE_URL"] ?? "<BASE_URL>/v1"
var request = URLRequest(url: URL(string: "\(baseURL)/chat/completions")!)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"model":"deepseek/deepseek-chat","messages":[{"role":"user","content":"Say hello in one sentence."}]}
""".data(using: .utf8)
let semaphore = DispatchSemaphore(value: 0)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data, let text = String(data: data, encoding: .utf8) {
print(text)
}
semaphore.signal()
}.resume()
semaphore.wait()
```
```scala
import java.net.URI
import java.net.http.{HttpClient, HttpRequest, HttpResponse}
@main def quickstart(): Unit =
val apiKey = sys.env("SNX_API_KEY")
val baseUrl = sys.env.getOrElse("SNX_BASE_URL", "<BASE_URL>/v1")
val json =
"""{"model":"deepseek/deepseek-chat","messages":[{"role":"user","content":"Say hello in one sentence."}]}"""
val request = HttpRequest.newBuilder()
.uri(URI.create(s"$baseUrl/chat/completions"))
.header("Authorization", s"Bearer $apiKey")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build()
val response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString())
println(response.body())
```
```dart
import 'dart:convert';
import 'dart:io';
Future<void> main() async {
final apiKey = Platform.environment['SNX_API_KEY']!;
final baseUrl = Platform.environment['SNX_BASE_URL'] ?? '<BASE_URL>/v1';
final client = HttpClient();
final request = await client.postUrl(Uri.parse('$baseUrl/chat/completions'));
request.headers.set('Authorization', 'Bearer $apiKey');
request.headers.contentType = ContentType.json;
request.write(jsonEncode({
'model': 'deepseek/deepseek-chat',
'messages': [
{'role': 'user', 'content': 'Say hello in one sentence.'},
],
}));
final response = await request.close();
final body = await response.transform(utf8.decoder).join();
print(body);
client.close();
}
```
<!-- /code-tabs -->
## List available models
<!-- code-tabs default="curl" -->
```bash
curl -s "${SNX_BASE_URL}/models" \
-H "Authorization: Bearer ${SNX_API_KEY}"
```
```python
from openai import OpenAI
client = OpenAI(
base_url="<BASE_URL>/v1",
api_key="your-api-key",
)
models = client.models.list()
for model in models.data:
print(model.id)
```
```typescript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.SNX_BASE_URL ?? "<BASE_URL>/v1",
apiKey: process.env.SNX_API_KEY,
});
const models = await client.models.list();
for (const model of models.data) {
console.log(model.id);
}
```
```javascript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.SNX_BASE_URL ?? "<BASE_URL>/v1",
apiKey: process.env.SNX_API_KEY,
});
const models = await client.models.list();
for (const model of models.data) {
console.log(model.id);
}
```
```go
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
apiKey := os.Getenv("SNX_API_KEY")
baseURL := os.Getenv("SNX_BASE_URL") // <BASE_URL>/v1
req, err := http.NewRequest(http.MethodGet, baseURL+"/models", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}
```
```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ListModels {
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("SNX_API_KEY");
String baseUrl = System.getenv("SNX_BASE_URL"); // <BASE_URL>/v1
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "/models"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
```
```c
#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *api_key = getenv("SNX_API_KEY");
const char *base_url = getenv("SNX_BASE_URL"); /* <BASE_URL>/v1 */
CURL *curl = curl_easy_init();
if (!curl) return 1;
char url[512];
snprintf(url, sizeof(url), "%s/models", base_url);
struct curl_slist *headers = NULL;
char auth[256];
snprintf(auth, sizeof(auth), "Authorization: Bearer %s", api_key);
headers = curl_slist_append(headers, auth);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
CURLcode res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
return res == CURLE_OK ? 0 : 1;
}
```
```ruby
require "openai"
client = OpenAI::Client.new(
access_token: ENV["SNX_API_KEY"],
uri_base: ENV.fetch("SNX_BASE_URL", "<BASE_URL>/v1"),
)
response = client.models.list
response["data"].each { |model| puts model["id"] }
```
```php
<?php
$baseUrl = getenv("SNX_BASE_URL") ?: "<BASE_URL>/v1";
$apiKey = getenv("SNX_API_KEY");
$ch = curl_init("{$baseUrl}/models");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$apiKey}",
],
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
```
```rust
use reqwest::blocking::Client;
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = env::var("SNX_API_KEY")?;
let base_url = env::var("SNX_BASE_URL").unwrap_or_else(|_| "<BASE_URL>/v1".into());
let client = Client::new();
let response = client
.get(format!("{base_url}/models"))
.bearer_auth(api_key)
.send()?;
println!("{}", response.text()?);
Ok(())
}
```
```csharp
using System.Net.Http.Headers;
var apiKey = Environment.GetEnvironmentVariable("SNX_API_KEY");
var baseUrl = Environment.GetEnvironmentVariable("SNX_BASE_URL") ?? "<BASE_URL>/v1";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
var response = await client.GetAsync($"{baseUrl}/models");
Console.WriteLine(await response.Content.ReadAsStringAsync());
```
```kotlin
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
fun main() {
val apiKey = System.getenv("SNX_API_KEY")
val baseUrl = System.getenv("SNX_BASE_URL") ?: "<BASE_URL>/v1"
val request = HttpRequest.newBuilder()
.uri(URI.create("$baseUrl/models"))
.header("Authorization", "Bearer $apiKey")
.GET()
.build()
val response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString())
println(response.body())
}
```
```swift
import Foundation
let apiKey = ProcessInfo.processInfo.environment["SNX_API_KEY"]!
let baseURL = ProcessInfo.processInfo.environment["SNX_BASE_URL"] ?? "<BASE_URL>/v1"
var request = URLRequest(url: URL(string: "\(baseURL)/models")!)
request.httpMethod = "GET"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
let semaphore = DispatchSemaphore(value: 0)
URLSession.shared.dataTask(with: request) { data, _, _ in
if let data, let text = String(data: data, encoding: .utf8) {
print(text)
}
semaphore.signal()
}.resume()
semaphore.wait()
```
```scala
import java.net.URI
import java.net.http.{HttpClient, HttpRequest, HttpResponse}
@main def listModels(): Unit =
val apiKey = sys.env("SNX_API_KEY")
val baseUrl = sys.env.getOrElse("SNX_BASE_URL", "<BASE_URL>/v1")
val request = HttpRequest.newBuilder()
.uri(URI.create(s"$baseUrl/models"))
.header("Authorization", s"Bearer $apiKey")
.GET()
.build()
val response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString())
println(response.body())
```
```dart
import 'dart:convert';
import 'dart:io';
Future<void> main() async {
final apiKey = Platform.environment['SNX_API_KEY']!;
final baseUrl = Platform.environment['SNX_BASE_URL'] ?? '<BASE_URL>/v1';
final client = HttpClient();
final request = await client.getUrl(Uri.parse('$baseUrl/models'));
request.headers.set('Authorization', 'Bearer $apiKey');
final response = await request.close();
final body = await response.transform(utf8.decoder).join();
print(body);
client.close();
}
```
<!-- /code-tabs -->
## Next steps
- [Authentication](./authentication.md) — API key format and errors
- [Chat Completions](./chat-completions.md) — full request/response reference
- [OpenAI SDK Integration](./openai-sdk-integration.md) — drop-in migration guide