ORYKSAORYKSADevelopers
Get API keys

The ORYKSA model (OpenAI compatible)

Use ORYKSA as the AI model of any automation, in place of OpenAI or OpenRouter. Your n8n nodes talk to YouTube, Instagram, LinkedIn, Google Drive or Google Sheets with your own accounts; ORYKSA writes, summarises, classifies, extracts and decides which tool to call. The usage comes out of the interactions of your plan.

POST/v1/chat/completions
GET/v1/models

Two models

ModelWhat it is
oryksaThe general model. It follows your system prompt and your messages exactly as you send them. It supports tools, JSON output and streaming. It knows nothing about your account and never acts on it. This is the one that replaces OpenAI.
oryksa-assistantYour own ORYKSA assistant, with the knowledge and the data of your business. It only answers. Tools are ignored.

Any other model name (for example gpt-4o, already written in a flow) is answered by oryksa, so existing flows keep working.

curl https://api.oryksa.com/v1/chat/completions \
  -H "Authorization: Bearer oryk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "oryksa",
    "messages": [
      {"role": "system", "content": "You write LinkedIn posts. Short, one idea, no hashtags."},
      {"role": "user", "content": "New video: 5 mistakes when pricing your services."}
    ]
  }'
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["ORYKSA_API_KEY"], base_url="https://api.oryksa.com/v1")
out = client.chat.completions.create(
    model="oryksa",
    messages=[
        {"role": "system", "content": "You write LinkedIn posts. Short, one idea, no hashtags."},
        {"role": "user", "content": "New video: 5 mistakes when pricing your services."},
    ],
)
print(out.choices[0].message.content, out.usage.total_tokens)

What is supported

FeatureSupport
messagessystem, developer, user, assistant and tool, whole and in order. Text and images (image_url with https or data:image, up to 4).
tools, tool_choiceFunction calling in the OpenAI format: the reply brings tool_calls and finish_reason: "tool_calls".
response_formatjson_object and json_schema.
streamReal server-sent events, piece by piece, tool calls included, ending with [DONE]. stream_options.include_usage is supported.
usageReal token counts. Your interactions come in the extra field oryksa.
temperature, top_p, stop, seed, max_tokens, max_completion_tokensSupported.
nOnly 1.
functions, function_callNot supported: use tools.

Tools

Send the tools your flow has. When the model wants one, it answers with the call; your flow runs it and sends the result back in a tool message. Each reply of the model uses one interaction, so an agent that takes 4 turns uses 4.

{
  "model": "oryksa",
  "messages": [{"role": "user", "content": "Add Ana with 3 units to the sheet"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "sheets_append",
      "description": "Append a row to the sheet",
      "parameters": {"type": "object", "properties": {"row": {"type": "array", "items": {"type": "string"}}}, "required": ["row"]}
    }
  }]
}
{
  "id": "chatcmpl-8f1c2a7e5b9d4c3fa1e0b6d2c4f7a9e1",
  "object": "chat.completion",
  "created": 1791072000,
  "model": "oryksa",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": null,
      "tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "sheets_append", "arguments": "{\"row\": [\"Ana\", \"3\"]}"}}]
    },
    "finish_reason": "tool_calls"
  }],
  "usage": {"prompt_tokens": 96, "completion_tokens": 18, "total_tokens": 114},
  "oryksa": {"interactions_spent": 1, "interactions_remaining": 2873, "interactions_limit": 3000}
}

JSON output

For extraction and classification, ask for a fixed shape:

"response_format": {
  "type": "json_schema",
  "json_schema": {
    "name": "lead",
    "strict": true,
    "schema": {
      "type": "object",
      "properties": {"name": {"type": "string"}, "email": {"type": "string"}},
      "required": ["name", "email"],
      "additionalProperties": false
    }
  }
}

Limits

LimitValue
Text in one request (messages, tool definitions, tool arguments)32 000 characters
Reply2 000 tokens (a higher max_tokens is limited to this; a reply that does not fit ends with finish_reason: "length")
Requests60 per minute per account
Images4 per request

Above a limit the API answers 400 and names the field in param. Nothing is ever cut in silence.

Interactions

One interaction for each reply the model generates, the same count as every other channel. When the plan has none left the API answers 402 interaction_limit_reached.

Use it in n8n

  1. In n8n, create a credential of type OpenAI. In API Key paste your oryk_live_ key and in Base URL write https://api.oryksa.com/v1.
  2. In any node that takes a chat model (AI Agent, Basic LLM Chain, Information Extractor, Text Classifier, Summarization Chain), add an OpenAI Chat Model with that credential and choose the model oryksa.
  3. The Use Responses API option can be on or off: ORYKSA answers in both formats.
  4. Connect your other nodes (YouTube, Google Sheets, Google Drive, LinkedIn) with your own accounts, as you would with any other model.

Errors

CodeWhat it is
400 invalid_requestThe body is not valid. param names the field.
400 input_too_largeMore than 32 000 characters of text.
400 content_policyThe request was refused by the content safety filter.
402 interaction_limit_reachedNo interactions left in this period.
429 rate_limitedMore than 60 requests per minute.
503 model_unavailableThe model is not available right now. Try again in a moment.

Label your requests in the usage statement

In the HTTP Request node, turn on Send Headers and add:

  • X-Oryksa-Source = n8n
  • X-Oryksa-Workflow = {{ encodeURIComponent($workflow.name) }}
  • X-Oryksa-Workflow-Id = {{ $workflow.id }}
  • X-Oryksa-Execution-Id = {{ $execution.id }}

In the OpenAI node you can only set a fixed header, in the credential: add X-Oryksa-Source = n8n. The statement then shows n8n, without the name of the workflow. To see each workflow, use the HTTP Request node.

Make and Zapier work the same way, with make or zapier in X-Oryksa-Source.

Responses API

POST https://api.oryksa.com/v1/responses is OpenAI's Responses format over the same model as /v1/chat/completions. It is for the nodes and libraries that already use that format: change only the base URL and the key.

What works: input (text or a list of messages), instructions, function tools (tools, tool_choice, and the function_call and function_call_output items in the conversation), JSON output (text.format with json_object or json_schema), max_output_tokens, temperature, top_p and stream.

What does not exist: OpenAI's own tools (web search, file search, code interpreter) and stored conversations. ORYKSA stores nothing: store is always false and previous_response_id returns a 400 error. Send the whole conversation in each request.

Cost: 1 interaction per reply, the same as /v1/chat/completions. Limits: the same (32,000 characters of text per request, a reply of up to 2,000 tokens, 60 requests a minute). Nothing is charged when a request fails.

The models are the same: oryksa (the general model; any other name is treated as oryksa) and oryksa-assistant (your assistant, answer only).

curl https://api.oryksa.com/v1/responses \
  -H "Authorization: Bearer oryk_live_..." -H "Content-Type: application/json" \
  -d '{"model": "oryksa", "instructions": "Answer in one sentence.", "input": "What is an embedding?"}'

Embeddings

POST https://api.oryksa.com/v1/embeddings turns texts into vectors, in OpenAI's format, for search by meaning and knowledge bases (for example the vector nodes of n8n).

Send input (one text or a list of texts; up to 256 texts and 32,000 characters in all per request). Optional: dimensions and encoding_format (float or base64). The model field is accepted and ignored: the model is always oryksa-embeddings.

Cost: 1 interaction per request, whatever the number of texts. Nothing is charged when a request fails.

Important: vectors can only be compared with vectors made by the same model. Do not mix, in the same store, ORYKSA vectors with vectors from another provider.

curl https://api.oryksa.com/v1/embeddings \
  -H "Authorization: Bearer oryk_live_..." -H "Content-Type: application/json" \
  -d '{"input": ["first text", "second text"]}'