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.
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.
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.
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.
/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ę.
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
| Pole | Typ | Opis |
|---|---|---|
| model | string | Model dostępny na koncie |
| messages | array | 1–100 wiadomości |
| max_tokens | integer | 1–16384; podstawa rezerwacji |
| temperature | number | Opcjonalnie 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
- Cost Autopilot BYOK: klient płaci OpenRouter bezpośrednio; LangSwap pobiera wyłącznie ujawniony udział w dodatniej estymowanej oszczędności.
- LLM: cena bazuje na faktycznych tokenach
usage; niewykorzystana rezerwa jest zwracana. - Proxy: cena per request jest blokowana przed wykonaniem.
- Agent-to-Agent: pełna kwota wyceny jest rezerwowana z salda opłaconego przez Stripe; LangSwap księguje prowizję dopiero po poprawnym wyniku.
- Doładowania: Stripe Checkout, kredyt dopisywany dopiero po zweryfikowanym webhooku.
- Saldo niewystarczające: HTTP 402 bez wykonania upstreamu.
Błędy
| Status | Znaczenie |
|---|---|
| 401 | Brak, błędny lub unieważniony klucz |
| 402 | Niewystarczające saldo |
| 403 | Origin albo cel scrapingu poza allowlistą |
| 422 | Niepoprawne dane wejściowe |
| 429 | Przekroczony limit SLA |
| 502/503 | Upstream 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.