Bazowy URL
oakmonttechnologies.com/api/v1
Uwierzytelnianie
Bearer
Format
REST · JSON
Limit
Wg planu
/ API dla programistów

Twórz na OAKMONT,we własnym stacku.

Wywołuj naszą platformę programowo - skany dostępności, wyceny i więcej - w CI, w swoim CMS lub we własnym produkcie. REST, JSON, uwierzytelnianie za pomocą klucza API i rozliczanie za każde wywołanie.

Uzyskaj klucz API Zobacz plany APINie masz jeszcze konta? Załóż je za darmo, a potem wygeneruj klucz w sekcji Portal → API dla programistów. Endpoint skanu działa na darmowym planie.

Żądanie

curl -X POST https://oakmonttechnologies.com/api/v1/scan \
  -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.gov/about"}'

Odpowiedź

{
  "id": "9f3c…",
  "url": "https://example.gov/about",
  "score": 82,
  "grade": "B",
  "totals": { "critical": 1, "serious": 2, "moderate": 1 },
  "issues": [
    { "impact": "critical", "wcag": "1.1.1",
      "title": "Images missing alt text (3)",
      "help": "Every <img> needs an alt attribute…", "count": 3 }
  ]
}

Uwierzytelnianie

Utwórz klucz w Portal → API dla programistów. Wysyłaj go przy każdym żądaniu:

Authorization: Bearer oak_live_xxx

Bazowy URL: https://oakmonttechnologies.com/api/v1

POST /scan - skan dostępności

Skanuj dowolny publiczny URL pod kątem typowych naruszeń WCAG 2.1 AA / Section 508.

Żądanie
curl -X POST https://oakmonttechnologies.com/api/v1/scan \
  -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.gov/about"}'
Odpowiedź
{
  "id": "9f3c…",
  "url": "https://example.gov/about",
  "score": 82,
  "grade": "B",
  "totals": { "critical": 1, "serious": 2, "moderate": 1 },
  "issues": [
    { "impact": "critical", "wcag": "1.1.1",
      "title": "Images missing alt text (3)",
      "help": "Every <img> needs an alt attribute…", "count": 3 }
  ]
}

POST /quote - wyceń zlecenie

Otrzymaj szczegółową wycenę zlecenia naprawczego na podstawie aktualnego cennika.

curl -X POST https://oakmonttechnologies.com/api/v1/quote \
  -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"plan_key": "page_508", "chars": 12000}'

Rodzina skanerów

Te same silniki co w darmowych narzędziach, wliczane do miesięcznego limitu: przejrzystość wg AI Act, trackery i zgody, dostarczalność e-maili oraz sprawdzenie struktury faktury FA. Pełne formaty żądań i odpowiedzi znajdziesz w indeksie maszynowym pod GET /api/v1.

# AI Act transparency (Article 50)
curl -X POST https://oakmonttechnologies.com/api/v1/ai-scan -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" -d '{"url": "https://example.com"}'

# Trackers and consent platform
curl -X POST https://oakmonttechnologies.com/api/v1/privacy-scan -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" -d '{"url": "https://example.com"}'

# Deliverability: MX, SPF, DMARC, DKIM
curl -X POST https://oakmonttechnologies.com/api/v1/email-check -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" -d '{"domain": "example.com"}'

# Polish FA invoice structure (KSeF)
curl -X POST https://oakmonttechnologies.com/api/v1/ksef-check -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" -d '{"xml": "<Faktura>...</Faktura>"}'

# LLM regression grading (deterministic, no model runs)
curl -X POST https://oakmonttechnologies.com/api/v1/eval -H "Authorization: Bearer oak_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"cases": [{"key": "refund", "assertions": [{"kind": "contains", "value": "30 days"}]}], "answers": {"refund": "You have 30 days to return it."}}'

POST /gate - Bramka buildu

Twój pipeline uruchamia sprawdzenia na gałęziach i hostach niedostępnych z zewnątrz i przesyła wyniki. Tu zapada decyzja, czy build przechodzi, z dokładnym uzasadnieniem - także tym, dlaczego pozostałe reguły się nie uruchomiły.

Żądanie
# The ruleset your build is held to, worst first by what we actually see
curl https://oakmonttechnologies.com/api/v1/rules/ci?level=AA -H "Authorization: Bearer oak_live_xxx"

# Your pipeline ran the checks; this decides the build and can sign the verdict
curl -X POST https://oakmonttechnologies.com/api/v1/gate -H "Authorization: Bearer oak_live_xxx"   -H "Content-Type: application/json"   -d '{"url": "https://staging.internal/checkout", "level": "AA", "fail_on": "serious",
       "prove": true, "findings": [{"code": "input-no-label", "selector": "#cvc"}]}'
Odpowiedź
{
  "passed": false,
  "level": "AA", "fail_on": "serious",
  "failures": [
    { "code": "input-no-label", "criterion": "1.3.1", "impact": "critical",
      "count": 1, "selectors": ["#cvc"] }
  ],
  "advisories": [
    { "code": "heading-skip", "criterion": "1.3.1",
      "advisory_because": "No criterion says heading levels may not skip." }
  ],
  "digest": "3f9a…",
  "proof": { "id": "…", "verify_url": "https://oakmonttechnologies.com/verify/…" }
}

Dwa fałszywe alarmy i ktoś dopisuje continue-on-error - od tej chwili bramka jest tylko ozdobą. Kryterium powyżej zamówionego poziomu, kryterium wycofane w WCAG 2.2 i wszystko, czego maszyna nie rozstrzygnie uczciwie, trafia do raportu i nigdy nie blokuje. Przy prove werdykt dostaje podpisane poświadczenie z dokładnym zestawem reguł, więc zielonego buildu nie da się później ocenić ponownie według zaostrzonego zestawu.

Notariat

Datowane, publicznie sprawdzalne potwierdzenie dla skrótu, który liczysz u siebie - plik zostaje u Ciebie. Rozliczane za potwierdzenie, nie za wywołanie, bo to właśnie potwierdzenie zachowuje Twój klient.

Jak działa notariat

Błędy

Nieudane wywołania zwracają standardowe kody stanu HTTP i treść JSON z komunikatem detail.

StatusZnaczenie
400Nieprawidłowa treść żądania, na przykład błędny URL lub brakujące pole.
401Brakujący, błędny lub odwołany klucz API.
404Nie znaleziono wskazanego zasobu, na przykład nieznany plan_key w /quote.
429Osiągnięto miesięczny limit API. Zobacz nagłówki Retry-After i X-RateLimit.
{ "detail": "Invalid or revoked API key." }

Limity

Wywołania są zliczane miesięcznie w zależności od planu (Free 100 · Basic 5000 · Pro 50 000). Po przekroczeniu limitu zwracany jest kod 429. Możesz w każdej chwili zmienić plan w sekcji rozliczeń.

Każda odpowiedź zawiera X-RateLimit-Limit, X-RateLimit-Remaining oraz X-RateLimit-Reset (znacznik czasu Unix wskazujący początek następnego miesiąca). Kod 429 zwraca dodatkowo Retry-After w sekundach.

HTTP/1.1 200 OK
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4987
X-RateLimit-Reset: 1751328000

# When the monthly quota is exhausted:
HTTP/1.1 429 Too Many Requests
Retry-After: 1209600
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0

Z JavaScriptu

Te same dwa wywołania, bez curla.

const res = await fetch("https://oakmonttechnologies.com/api/v1/scan", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OAKMONT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({url: "https://example.gov/about"}),
});
if (!res.ok) throw new Error(`OAKMONT ${res.status}: ${await res.text()}`);
const {score, grade, issues} = await res.json();

Specyfikacja czytelna maszynowo

API opisuje samo siebie. Wskaż generatorowi dokument OpenAPI i dostaniesz typowanego klienta zamiast ręcznie pisanych wywołań fetch.

Otwórz dokument OpenAPI https://oakmonttechnologies.com/api/openapi.json

Dokument powstaje z działającej usługi, więc nigdy nie rozjeżdża się z endpointami, które opisuje.

Osadź cennik

Jedna linijka kodu, bez klucza i bez budowania. Korzysta z tego samego katalogu co /pricing, więc strona, która go osadza, nie może się zdezaktualizować. data-ref przenosi Twój kod partnerski do każdego linku; data-group zawęża widok do jednej rodziny planów.

<script src="https://oakmonttechnologies.com/embed/rate-card.js"
        data-ref="your-partner-code"
        data-group="managed_sub"></script>

Albo odczytaj jako JSON: https://oakmonttechnologies.com/api/public/rate-card

Pełna dokumentacja

Przeglądaj pełny, maszynowo czytelny indeks endpointów pod adresem /api/v1.

Zaczynamy?

Utwórz pierwszy klucz i wykonaj wywołanie w niecałą minutę.