Production API

Jeden klucz do LLM i danych internetowych.

Endpoint produkcyjny: https://api.langswap.com. Wszystkie płatne operacje najpierw rezerwują maksymalny koszt, a po odpowiedzi rozliczają faktyczne użycie.

Utwórz konto

Quickstart

Wygeneruj klucz ls_live_… w panelu. Sekret jest wyświetlany tylko raz; przechowuj go w menedżerze sekretów.

cURL

curl https://api.langswap.com/llm/v1/chat/completions \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o",
    "messages": [{"role": "user", "content": "Summarize this text."}],
    "max_tokens": 300
  }'

JavaScript — Fetch

const response = await fetch(
  "https://api.langswap.com/llm/v1/chat/completions",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.LANGSWAP_API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "openai/gpt-4o",
      messages: [{ role: "user", content: "Summarize this text." }],
      max_tokens: 300
    })
  }
);
if (!response.ok) throw new Error(`LangSwap ${response.status}`);
const result = await response.json();

JavaScript — Axios

import axios from "axios";

const { data } = await axios.post(
  "https://api.langswap.com/llm/v1/chat/completions",
  {
    model: "openai/gpt-4o",
    messages: [{ role: "user", content: "Summarize this text." }],
    max_tokens: 300
  },
  { headers: { Authorization: `Bearer ${process.env.LANGSWAP_API_KEY}` } }
);

Python — Requests

import os
import requests

response = requests.post(
    "https://api.langswap.com/llm/v1/chat/completions",
    headers={"Authorization": f"Bearer {os.environ['LANGSWAP_API_KEY']}"},
    json={
        "model": "openai/gpt-4o",
        "messages": [{"role": "user", "content": "Summarize this text."}],
        "max_tokens": 300,
    },
    timeout=130,
)
response.raise_for_status()
result = response.json()

Autoryzacja i Origin

Każde wywołanie używa Authorization: Bearer ls_live_…. Klucze są haszowane SHA-256. Integracje backendowe nie wysyłają Origin. Dla wywołań z przeglądarki dodaj dokładny HTTPS Origin do klucza w panelu; niezgodny Origin zwraca 403.

Klucza API nie umieszczaj w publicznym kodzie frontendowym. Allowlista Origin ogranicza użycie przeglądarkowe, lecz nie zastępuje backendowego przechowywania sekretu.

LLM Cost Autopilot — BYOK

Autopilot porównuje model bazowy z modelami dopuszczonymi przez klienta, wybiera najtańszą wycenę i wykonuje zapytanie przez własny klucz OpenRouter klienta. LangSwap nie zapisuje klucza dostawcy i nie finansuje kosztu modelu.

Wybór modelu jest optymalizacją kosztu, nie gwarancją równoważnej jakości. Koszt wybranego wykonania pochodzi z rzeczywistego usage.cost OpenRouter. Baseline pozostaje jawnym kontrfaktycznym przeliczeniem ceny modelu bazowego przy tej samej liczbie tokenów; nie wykonujemy drugiego, kosztownego zapytania kontrolnego.

1. Wycena bez wywołania modelu

curl https://api.langswap.com/autopilot/v1/quotes \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "baseline_model":"openai/gpt-4o",
    "eligible_models":["openai/gpt-5-mini","google/gemini-2.5-flash"],
    "messages":[{"role":"user","content":"Classify this support ticket"}],
    "max_tokens":300
  }'

2. Wykonanie przez klucz klienta

curl https://api.langswap.com/autopilot/v1/execute \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "X-OpenRouter-Key: $OPENROUTER_API_KEY" \
  -H "Idempotency-Key: $(python3 -c 'import uuid; print(uuid.uuid4())')" \
  -H "Content-Type: application/json" \
  -d '{"quote_id":"AUTO_QUOTE_ID","messages":[{"role":"user","content":"Classify this support ticket"}],"max_tokens":300}'

Klucz OpenRouter wysyłaj wyłącznie z backendu. Wykonanie rezerwuje z opłaconego salda jedynie maksymalną opłatę LangSwap, obecnie 25% dodatniej estymowanej oszczędności. Awaria dostawcy zwraca całą rezerwację. Powtórzenie tego samego Idempotency-Key nie wywoła modelu ponownie.

Managed LLM paused: operator-funded /llm/v1/chat/completions is disabled. Use Cost Autopilot BYOK so each customer pays their own provider cost.

Agent-to-Agent — płatne zadanie

Zamknięta brama pozwala agentowi kupić allowlistowaną usługę z salda opłaconego przez Stripe. Cena i prowizja są ustalane przez serwer. Środki promocyjne nie finansują zadań A2A.

1. Utwórz mandat wydatkowy

MANDATE_ID=$(curl -fsS https://api.langswap.com/agents/v1/mandates \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_ref":"my-production-agent","allowed_services":["text.metrics"],"max_per_job_usd":"0.20","total_limit_usd":"10.00"}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["mandate_id"])')

2. Pobierz wycenę serwerową

QUOTE_ID=$(curl -fsS https://api.langswap.com/agents/v1/quotes \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"service_type":"text.metrics","request":{"text":"agent to agent"}}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["quote_id"])')

3. Zaakceptuj i wykonaj

JOB_ID=$(curl -fsS -X POST "https://api.langswap.com/agents/v1/quotes/$QUOTE_ID/accept" \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "Idempotency-Key: $(python3 -c 'import uuid; print(uuid.uuid4())')" \
  -H "Content-Type: application/json" \
  -d "{\"mandate_id\":\"$MANDATE_ID\"}" \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["job_id"])')

curl -fsS -X POST "https://api.langswap.com/agents/v1/jobs/$JOB_ID/execute" \
  -H "Authorization: Bearer $LANGSWAP_API_KEY"

Odpowiedź zawiera status, wynik Base64, result_sha256 i podpis odbioru. Wynik pojawia się dopiero po trwałym rozliczeniu. Błąd wykonania lub timeout zwraca całą rezerwację.

Najpierw wywołaj GET /agents/v1/managed-services, aby odkryć dostępne usługi. Po niepewnym timeoutcie nie wysyłaj zadania ponownie — odczytaj GET /agents/v1/jobs/{job_id}/result.

LLM Chat Completions

POST /llm/v1/chat/completions

PoleTypOpis
modelstringModel dostępny na koncie
messagesarray1–100 wiadomości
max_tokensinteger1–16384; podstawa rezerwacji
temperaturenumberOpcjonalnie 0–2

Odpowiedź zawiera standardowe choices, usage oraz obiekt billing z kosztem, ceną, zwrotem i saldem.

Web Scraping

Najpierw dodaj domenę docelową do „Cele scrapingu” w panelu. Obsługiwane są wyłącznie publiczne adresy HTTPS; prywatne IP, dane logowania w URL i niestandardowe porty są blokowane.

curl https://api.langswap.com/proxy/v1/scrape \
  -H "Authorization: Bearer $LANGSWAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/products","geo_location":"United States"}'

Rozliczenia

Błędy

StatusZnaczenie
401Brak, błędny lub unieważniony klucz
402Niewystarczające saldo
403Origin albo cel scrapingu poza allowlistą
422Niepoprawne dane wejściowe
429Przekroczony limit SLA
502/503Upstream lub księgowanie tymczasowo niedostępne

Każda odpowiedź zawiera X-Request-ID do diagnostyki.

Wsparcie

W zgłoszeniu podaj X-Request-ID, nazwę endpointu i przybliżony czas UTC. Nie przesyłaj pełnego klucza API. Kontakt: support@langswap.com lub formularz wsparcia.