Cylink Developer console v0.1.0

Playground

Send a real request and watch how it was routed, which models ran, and where the time went.

Request

Endpoint
Environment
Headers — set for you
Content-Type: application/json · Authorization: Bearer <session>
to send

Response

No response yet

Send a request and the answer, the routing decision and a timing breakdown all land here.

Pipeline

Nothing to trace yet

Once a request completes you'll see which route ARI picked, which models Axion ran, and how long each stage took.

Overview

Traffic, spend and keys across your account.

Requests
All time
Completed
Share that finished cleanly
Active keys
Not revoked or expired
Spend
Estimated, all time

Your plan

Current plan
Sign in to see usage

Recent requests

Sign in to see your requests

Analytics

Request volume and latency for the last seven days.

Requests (7d)
Median latency
Tokens per request

Requests per day

Sign in to see analytics

Usage

Where you stand against your plan's limits this cycle.

Requests this month
Left today
Cost this month
Estimated

Monthly allowance

Sign in to see usage

Resets on the 1st of each month

Today's limit

Sign in to see usage

Daily request limit, resets at midnight UTC

API keys

Keys authenticate your requests. A key is shown in full once, when you create it.

Sign in to manage keys

Billing & plans

Pick the plan that fits your workload. Changes take effect immediately.

Current plan
Sign in to see usage
2 months free

Prices in USD. This console is the front end — connect a payment provider and enforce limits server-side before going live.
Need something custom? or email sales.

Docs

Everything you need for your first call. The API is OpenAI-compatible, so existing clients work unchanged.

Quickstart

Authenticate with a key from , then POST a list of messages to get a model response back.

Base URL

https://cylinkdev.vercel.app/api/cylink-api

Your first request

curl https://cylinkdev.vercel.app/api/cylink-api \
  -H "Authorization: Bearer cyk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cyanix-core",
    "messages": [{ "role": "user", "content": "Hello!" }]
  }'

Authentication

Every request needs your API key as a bearer token. Keys start with cyk_ and are shown in full only once, so store it somewhere safe as soon as you create it.

Authorization: Bearer cyk_your_key_here

Rotate or revoke keys from . Revoking takes effect immediately.

Models

ModelBest for
cyanix-quickFastest responses — low-latency or lightweight tasks.
cyanix-vistaBalanced speed and reasoning, large context window.
cyanix-apexComplex, multi-step reasoning, large context window.
cyanix-coreGeneral purpose. Used when model is omitted.

Request body

FieldTypeDescription
messagesarrayRequired. OpenAI-style [{ role, content }] turns, where role is system, user or assistant.
system_promptstringYour own system prompt. Replaces the default Cyanix persona entirely. Takes precedence over system turns in messages, which are used if this is omitted. Max 8,000 characters.
message / querystringShorthand for a single user turn. Used only when messages is omitted.
modelstringOne of the aliases above. Defaults to cyanix-core.
max_tokensnumberDefaults to 2048, capped at 8192.
streambooleanDefaults to false. See Streaming.

Your own system prompt

By default the assistant answers as Cyanix Intelligence. Send system_prompt — or a system turn in messages — and your instructions take that slot instead, so the assistant is yours.

curl https://cylinkdev.vercel.app/api/cylink-api \
  -H "Authorization: Bearer cyk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "system_prompt": "You are Otter, a terse assistant for a plumbing supply store. Never discuss anything else.",
    "messages": [{ "role": "user", "content": "Do you stock 15mm compression elbows?" }]
  }'

Three things change when you supply one. Tool use, grounding and citations still work — those are mechanics, not personality — but the assistant loses access to the Cyanix knowledge base and Devit, keeping only web search, YouTube search, image search and page reading. Stored user memories are not injected, so nothing personal leaks into your app's replies. And responses aren't scored against Cyanix's own principles, since they aren't Cyanix's responses.

The response reports cylink.system_prompt_used so you can confirm yours was applied.

JavaScript

const res = await fetch("https://cylinkdev.vercel.app/api/cylink-api", {
  method: "POST",
  headers: {
    "Authorization": "Bearer cyk_your_key_here",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "cyanix-core",
    messages: [{ role: "user", content: "Hello!" }]
  })
});
const data = await res.json();
console.log(data.choices[0].message.content);

Python

import requests

res = requests.post(
    "https://cylinkdev.vercel.app/api/cylink-api",
    headers={"Authorization": "Bearer cyk_your_key_here"},
    json={
        "model": "cyanix-core",
        "messages": [{"role": "user", "content": "Hello!"}],
    },
)
print(res.json()["choices"][0]["message"]["content"])

OpenAI SDK recommended

Point baseURL at Cylink and the official SDKs work as-is — there's no Cylink client to install.

import OpenAI from "openai";

const client = new OpenAI({
  apiKey:  "cyk_your_key_here",
  baseURL: "https://cylinkdev.vercel.app/api/v1"
});

const res = await client.chat.completions.create({
  model: "cyanix-core",
  messages: [{ role: "user", content: "Hello!" }]
});
console.log(res.choices[0].message.content);
Two things to know. Sampling parameters Cylink doesn't implement — temperature, top_p, n, stop, presence_penalty — are accepted and ignored rather than rejected, so they won't error but won't do anything either. And client.models.list() isn't implemented; use the aliases above.

Streaming

Set "stream": true for a text/event-stream response: data: {...} chunks ending in data: [DONE], the same shape other OpenAI-compatible APIs use.

const res = await fetch(BASE_URL, {
  method: "POST",
  headers: { "Authorization": `Bearer ${apiKey}`, "Content-Type": "application/json" },
  body: JSON.stringify({ messages, stream: true })
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buf = "";
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  buf += decoder.decode(value, { stream: true });
  // split buf on newlines, parse each "data: {...}" line as JSON
}

Errors

StatusCodeWhat to do
401MISSING_AUTHAdd an Authorization: Bearer header.
401UNAUTHORIZEDThe key is invalid, revoked or expired. Create a new one.
429RATE_LIMITEDYou're over your per-minute or daily limit. Check /usage for what's left.
400BAD_REQUESTMalformed body, or no messages / message / query.
405METHOD_NOT_ALLOWEDUse POST.
502MODEL_ERRORThe upstream model failed. Read the detail field and retry.
500SERVER_MISCONFIGUREDServer-side configuration issue. Contact support.

Errors carry a machine-readable code, a short message, and a details string naming the specific cause.

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication failed.",
    "details": "This API key has been revoked and can no longer be used."
  }
}

Other endpoints

These take the same Authorization: Bearer cyk_your_key_here header and return errors in the same shape. They also accept your dashboard session token, which is how the Playground calls them — you don't need a key for that.

/axion — grounded chat recommended

One call that routes the query, pulls the knowledge base plus live web search, and answers — with the full trace attached. Free keys get a single grounded model; paid keys get the ensemble.

curl https://cylinkdev.vercel.app/api/axion \
  -H "Authorization: Bearer cyk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "query": "What is the latest news about Groq?" }'

Returns selected_route, confidence, trace_events and response with the final answer.

/axion — run one route

Skips the routing decision and executes the route you name, for example one you got back from ARI.

curl https://cylinkdev.vercel.app/api/axion \
  -H "Authorization: Bearer cyk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "query": "Reverse a string in Rust", "route": "code_execution" }'

Returns { model, response }. An optional context string is injected into the system prompt.

/usage — quota and spend

Live usage for the calling key. A key can only read its own stats.

curl https://cylinkdev.vercel.app/api/usage \
  -H "Authorization: Bearer cyk_your_key_here"

Returns { key_name, requests, cost_usd, limits, last_used_at }.

>