DocumentationGetting started
All topics

SHVYDKO / Getting started

First request

From a Playground example to a typed decision in your application.

01. Try it in your account

Create an account and open Playground. Add context, write a question, and choose Choice, Score, or Noul. Before running it, check the active organization: its keys, limits, and request history are shared by its members.

Open the scenario “Where should this request go?” It is the same fictional payment failure shown on the homepage. Its full request is included below: in Playground, you can change one detail and check the new response.

02. Prepare your key and environment

An organization owner or admin creates a key in API Keys. The full value is shown only when the key is created. Store it in a secret manager or a server-side environment variable.

SHVYDKO_BASE_URL is the Shvydko address without a trailing slash. SHVYDKO_API_KEY is your secret key. Do not put the key in browser JavaScript, a repository, or an example link.

API address · shell
export SHVYDKO_BASE_URL='https://shvydko.ai'
# Supply SHVYDKO_API_KEY through your environment's secret manager.

03. Save request.json

One state contains the facts for all questions. team selects a team, impact rates the failure's impact, and human_review checks the urgent-review rule. Responses are returned under these same identifiers in answers.

request.json · fictional example
{
  "state": "An online store customer reports: “For the last 15 minutes, no customer has been able to pay for an order by card. The page shows payment unavailable. Payment on delivery works. We checked on three different devices. No money is being charged to the cards.” Routing policy: website failures go to engineering; questions about charges and invoices go to finance; delivery times go to logistics. A payment-method outage affecting many customers requires urgent human review.",
  "questions": {
    "team": {
      "type": "choice",
      "instructions": "Which team should handle this request? Choose based on the main cause of the problem.",
      "criteria": {
        "engineering": "Engineering: website or integration failure",
        "finance": "Finance: invoices and refunds of charged payments",
        "logistics": "Logistics: shipping and delivery"
      }
    },
    "impact": {
      "type": "score",
      "instructions": "Assess how the described issue affects placing orders.",
      "criteria": [
        "Does not prevent placing orders",
        "Makes ordering harder for one customer",
        "Blocks one payment method for many customers",
        "Blocks every ordering method for all customers"
      ]
    },
    "human_review": {
      "type": "noul",
      "instructions": "Under the stated policy, this request requires urgent human review."
    }
  }
}

04. Send the request

Check the HTTP status before reading answers. Find request_id, usage.input_tokens, and usage.cost_usd in the response. Then check the request against Usage history in your account.

Preview includes limited free runs. A published rate alone does not mean charging is enabled: service_mode reports the actual mode.

Terminal
curl --fail-with-body "$SHVYDKO_BASE_URL/v1/systemone" \
  -H "Authorization: Bearer $SHVYDKO_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

05. Compare with the recorded response

This response was obtained from the public API 2026-10-17T03:28:15.407106Z for the request above. It is one saved run on a fictional support request, not a result from your browser or an assessment of quality across all tasks. Your repeated request may return different values.

The API returned the engineering team, an impact score of 1.9987 on a 0–3 scale, and a Noul value of 0.9934 for the urgent-review rule. Confidence values are not measured proportions of correct responses.

In this run, the model reported 652.5 ms of processing; the request from the account server to the model took 784.29 ms; the full HTTPS request from the client that saved the recording took 1029.885 ms. These are different measurement boundaries for one run, not a speed guarantee. In preview mode, the charge was $0.

API response · recorded 2026-10-17
{
  "answers": {
    "team": {
      "type": "choice",
      "choice": "engineering",
      "probabilities": {
        "engineering": 0.9999,
        "finance": 0.0001,
        "logistics": 0
      },
      "confidence": 0.9998
    },
    "impact": {
      "type": "score",
      "score": 1.9987,
      "probabilities": {
        "0": 0.0007,
        "1": 0,
        "2": 0.9992,
        "3": 0.0001
      },
      "confidence": 0.9986,
      "legend": {
        "0": "Does not prevent placing orders",
        "1": "Makes ordering harder for one customer",
        "2": "Blocks one payment method for many customers",
        "3": "Blocks every ordering method for all customers"
      }
    },
    "human_review": {
      "type": "noul",
      "noul": 0.9934
    }
  },
  "usage": {
    "input_tokens": 208,
    "output_tokens": 208,
    "cost_microusd": 0,
    "cost_usd": "0.000000",
    "price_per_million_input_usd": null
  },
  "latency_ms": 652.5,
  "model": "shvydko-latest",
  "request_id": "req_uGar8EBEH-ufcmkx9dEtosrx",
  "service_mode": "preview",
  "gateway_latency_ms": 784.29
}

06. Pass the decision to your code

The engineering key means the technical queue, finance means payment review, and logistics means delivery support. An unknown or missing key is left for manual review. The function below prepares the next step; your integration connects it to your ticketing system.

Before enabling automatic routing, evaluate decisions on your own examples and define a manual-review rule. One successful run is not enough to assess quality across all your support requests.

JavaScript · next queue
function nextSupportStep(result) {
  const queues = new Map([
    ["engineering", "technical_support"],
    ["finance", "billing_review"],
    ["logistics", "delivery_support"],
  ]);
  const answer = result?.answers?.team;
  const queue = answer?.type === "choice" && queues.has(answer.choice)
    ? queues.get(answer.choice)
    : "manual_review";

  return { queue, request_id: result?.request_id ?? null };
}

// Returns a proposed queue; your integration performs the next action.
const nextStep = nextSupportStep(result);
console.log(nextStep);