Przejdź do treści
Dokumentacja dla programistów

API v1 i serwer MCP

Wszystko, czego potrzebujesz do wywoływania API: uwierzytelnianie, każdy punkt końcowy z żądaniem i odpowiedzią, błędy i limity oraz przykłady w curl, JavaScript i Python.

Na tej stronie

Pierwsze kroki

Przegląd

Wersja API jest częścią ścieżki: /api/v1. Każdy punkt końcowy przyjmuje POST z treścią JSON i odpowiada w JSON, także przy błędach.

Bazowy URL https://blurwrite.com

Tylko na stronie, nie w API: licznik słów, licznik znaków, wykrywacz plagiatu i opcja „Poświęć więcej czasu” w humanizerze.

Wygenerowana z dokumentu OpenAPI, więc zawiera dokładnie te punkty końcowe i pola, które akceptuje API. Dokument OpenAPI

Twoje pierwsze wywołanie

Tekst musi mieć co najmniej 50 słów.

Najpierw sprawdź "calibrated": gdy ma wartość false, język nie ma jeszcze dopasowanej krzywej, więc podanej wartości nie wolno używać jako wyniku.

Każda wartość jest przedstawiona jako jej typ. Rzeczywista odpowiedź zawiera wynik dla twojego tekstu.

Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}'
Przykładowa odpowiedź
{
  "figure": "number, od 0 do 100",
  "low": "number, od 0 do 100",
  "high": "number, od 0 do 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, od 0 do 1",
      "verdict": "human | uncertain | ai"
    }
  ],
  "words": "integer",
  "language": "string",
  "model": "string",
  "calibrated": "boolean",
  "bandHumanFlagRate": "number | null",
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

Uwierzytelnianie

Wyślij klucz w nagłówku Authorization jako token typu bearer. Klucz w adresie URL zostanie odrzucony.

Klucz ma zakresy uprawnień: detect, rewrite, summarize i grammar. Punkt końcowy zwraca 403 out_of_scope, gdy klucz nie ma wymaganego zakresu.

Uwierzytelnianie
Authorization: Bearer YOUR_API_KEY

Punkty końcowe

POST /api/v1/detect

Sprawdź jeden tekst. Wynik detektora dla jednego tekstu: wartość od 0 do 100, przedział wokół niej, wynik dla każdego zdania i informacja o kalibracji języka.

Zakres uprawnień klucza: detect

Treść żądania

PoleTypWymaganeOpis
textstringtakTekst do sprawdzenia lub przeredagowania.
languagestringnieKod języka, np. "en" lub "de". Jeśli go pominiesz, język zostanie rozpoznany na podstawie tekstu.
contentTypestringnieRodzaj tekstu, np. "essay" lub "email", gdy analiza ma korzystać z krzywej dla tego rodzaju tekstu.

Odpowiedź

PoleTypOpis
figurenumberWynik od 0 do 100: prawdopodobieństwo, że tekst został napisany maszynowo.
lownumberDolna granica przedziału wokół wyniku.
highnumberGórna granica przedziału wokół wyniku.
uncertaintynumberPołowa szerokości przedziału, w punktach.
verdictstringPrzedział, w którym mieści się wynik; to przedział, nigdy ustalenie autorstwa tekstu. Jedna z wartości: human, uncertain, ai.
confidencestringNa ile można polegać na wyniku. Jedna z wartości: low, medium, high.
sentencestablica elementów SentenceScoreWynik dla każdego zdania.
wordsintegerSprawdzone słowa.
languagestringJęzyk, w którym analizowano tekst.
modelstringModel, który wygenerował wynik.
calibratedbooleanCzy język ma dopasowaną krzywą. Gdy wartość to false, podanej wartości nie wolno używać jako wyniku.
bandHumanFlagRatenumber | nullJak często w naszych pomiarach tekst człowieka w tym przedziale uznawano za maszynowy lub null.
usageUsageCo zostało naliczone w tym wywołaniu.

Błędy specyficzne dla tego punktu końcowego

StatusKodZnaczenie
400no_textW treści żądania brakuje pola "text".
422too_shortTekst jest krótszy niż wymagana minimalna długość.
413text_too_longTekst jest dłuższy, niż silnik może sprawdzić w jednym wywołaniu. Podziel go. Nic nie naliczono.
422not_calibratedTego języka nie można jeszcze analizować.
503engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
502engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
503engine_startingSilnik się uruchamia i nie był gotowy na czas. Nic nie naliczono. Spróbuj ponownie za minutę.
503engine_busySilnik był zajęty i analiza nie mogła rozpocząć się na czas; analizy użytkowników Pro na stronie mają pierwszeństwo przed wywołaniami API. Nic nie naliczono. Spróbuj ponownie za chwilę.
504engine_timeoutSilnik nie ukończył analizy tekstu na czas. Nic nie naliczono. Spróbuj ponownie lub wyślij krótszy tekst.
429concurrency_limitedTen klucz ma już maksymalną dozwoloną liczbę trwających wywołań tego typu. Poczekaj na zakończenie jednego z nich lub odczekaj czas podany w Retry-After.
Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}'
Przykładowa odpowiedź
{
  "figure": "number, od 0 do 100",
  "low": "number, od 0 do 100",
  "high": "number, od 0 do 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, od 0 do 1",
      "verdict": "human | uncertain | ai"
    }
  ],
  "words": "integer",
  "language": "string",
  "model": "string",
  "calibrated": "boolean",
  "bandHumanFlagRate": "number | null",
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

POST /api/v1/detect/batch

Sprawdź kilka tekstów. Jedno wywołanie może zawierać tyle tekstów, ile wynosi limit partii. Przed wywołaniem musisz mieć dostępne słowa dla każdego tekstu, który może zostać sprawdzony (50 słów lub więcej); słowa tekstów, dla których nie uzyskano wyniku, są później zwracane. Błąd jednego tekstu nie powoduje błędu całej partii.

Zakres uprawnień klucza: detect

Treść żądania

PoleTypWymaganeOpis
itemstablica elementów objecttakTeksty, każdy z własnym polem "text" i opcjonalnymi polami "id", "language" i "contentType".
items[].idstringnieTwój identyfikator elementu, zwracany wraz z wynikiem. Jeśli go pominiesz, zostanie użyta pozycja elementu.
items[].textstringtakTekst do sprawdzenia lub przeredagowania.
items[].languagestringnieKod języka, np. "en" lub "de". Jeśli go pominiesz, język zostanie rozpoznany na podstawie tekstu.
items[].contentTypestringnieRodzaj tekstu, np. "essay" lub "email", gdy analiza ma korzystać z krzywej dla tego rodzaju tekstu.

Odpowiedź

PoleTypOpis
resultstablica elementów BatchResultJeden wynik na element, w kolejności wysłania.
usageUsageCo zostało naliczone w tym wywołaniu.

Błędy specyficzne dla tego punktu końcowego

StatusKodZnaczenie
400batch_emptyW treści żądania brakuje pola "items" lub lista jest pusta.
413batch_too_largePartia zawiera więcej elementów, niż pozwala limit.
429concurrency_limitedTen klucz ma już maksymalną dozwoloną liczbę trwających wywołań tego typu. Poczekaj na zakończenie jednego z nich lub odczekaj czas podany w Retry-After.
Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/detect/batch \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"id":"1","text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."},{"id":"2","text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}]}'
Przykładowa odpowiedź
{
  "results": [
    {
      "id": "string",
      "detection": {
        "figure": "number, od 0 do 100",
        "low": "number, od 0 do 100",
        "high": "number, od 0 do 100",
        "uncertainty": "number",
        "verdict": "human | uncertain | ai",
        "confidence": "low | medium | high",
        "sentences": [
          {
            "text": "string",
            "score": "number, od 0 do 1",
            "verdict": "human | uncertain | ai"
          }
        ],
        "words": "integer",
        "language": "string",
        "model": "string",
        "calibrated": "boolean",
        "bandHumanFlagRate": "number | null"
      },
      "error": {
        "code": "string",
        "message": "string"
      }
    }
  ],
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

POST /api/v1/humanize

Nadaj tekstowi naturalne brzmienie. Humanizer z weryfikacją faktów: liczby, nazwy i cytaty pozostają bez zmian, a przeredagowany tekst ze zmienionym faktem jest poprawiany lub zgłaszany. Tryb "custom" (Pro) pisze w twoim stylu, rozpoznanym na podstawie próbki twojego tekstu.

Przez API humanizer wykonuje standardowe przepisanie. „Poświęć więcej czasu” jest dostępne tylko na stronie.

Zakres uprawnień klucza: rewrite

Treść żądania

PoleTypWymaganeOpis
textstringtakTekst do sprawdzenia lub przeredagowania.
modestringnieTryb przeredagowania. Jedna z wartości: natural, formal, simple, academic, creative, shorten, expand, custom. Domyślnie: natural.
style_samplestringnieW trybie "custom": próbka twojego tekstu, od 150 do 2000 słów, analizowana na serwerze. Jeśli ją pominiesz, zostanie użyta próbka zapisana na twoim koncie.
tabstringnieZakładka narzędzia do humanizacji: określa styl przeredagowanego tekstu. Opcja Standard zachowuje styl tekstu wejściowego. Jedna z wartości: standard, academic, professional, casual. Domyślnie: standard.
strengthstringniePoziom zwykły zachowuje treść i styl. Poziom agresywny może zmienić kolejność treści i pominąć rozwinięcia, ale zachowuje wszystkie główne myśli. Niektóre fragmenty mogą brzmieć nietypowo. Jedna z wartości: regular, aggressive. Domyślnie: regular.
ownTouchstringnieSzczegół, przykład lub opinia wyrażone twoimi słowami, do 400 znaków, które zostaną wplecione w przeredagowany tekst.
languagestringnieKod języka, np. "en" lub "de". Jeśli go pominiesz, język zostanie rozpoznany na podstawie tekstu.

Odpowiedź

PoleTypOpis
textstringPrzeredagowany tekst.
beforeDetectionWynik detektora dla twojego tekstu lub null, gdy go nie ma.
afterDetectionWynik detektora dla przeredagowanego tekstu lub null.
passesintegerLiczba wersji tekstu utworzonych przed wybraniem tej wersji.
factsobjectCo wykazała weryfikacja faktów i dlaczego przeredagowany tekst nie przeszedł jej pomyślnie, jeśli tak się stało.
latebooleanTrue, gdy przeredagowany tekst zwrócono po osiągnięciu limitu czasu, bez ukończonej weryfikacji.
usageUsageCo zostało naliczone w tym wywołaniu.

Błędy specyficzne dla tego punktu końcowego

StatusKodZnaczenie
400no_textW treści żądania brakuje pola "text".
422too_shortTekst jest krótszy niż wymagana minimalna długość.
400unknown_modeTen punkt końcowy nie oferuje wybranego trybu.
400unknown_optionTen punkt końcowy nie obsługuje wybranej zakładki lub poziomu zmian.
402plan_requiredTryb, karta, siła zmian lub własne wskazówki wymagają planu, którego konto nie ma; tryb "custom" wymaga Pro. Nic nie naliczono.
400no_sampleTryb "custom" wymaga próbki tekstu, wysłanej lub zapisanej na koncie.
400sample_too_shortPróbka tekstu jest krótsza niż wymagana minimalna długość.
400sample_too_longPróbka tekstu przekracza maksymalną długość.
429concurrency_limitedTen klucz ma już maksymalną dozwoloną liczbę trwających wywołań tego typu. Poczekaj na zakończenie jednego z nich lub odczekaj czas podany w Retry-After.
422no_rewriteSilnik odpowiedział, ale żaden szkic nie przeszedł kontroli (pusty, odmowa lub kopia tekstu). Nic nie naliczono.
503timeoutPrzeredagowanie trwało zbyt długo i zostało zatrzymane. Nic nie naliczono.
503engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
502engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/humanize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}'
Przykładowa odpowiedź
{
  "text": "string",
  "before": {
    "figure": "number, od 0 do 100",
    "low": "number, od 0 do 100",
    "high": "number, od 0 do 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, od 0 do 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, od 0 do 100",
    "low": "number, od 0 do 100",
    "high": "number, od 0 do 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, od 0 do 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "passes": "integer",
  "facts": "object",
  "late": "boolean",
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

POST /api/v1/paraphrase

Sparafrazuj tekst. Parafraza z taką samą listą trybów jak w narzędziu do parafrazowania.

Zakres uprawnień klucza: rewrite

Treść żądania

PoleTypWymaganeOpis
textstringtakTekst do sprawdzenia lub przeredagowania.
modestringnieTryb przeredagowania. Jedna z wartości: standard, fluency, formal, academic, simple, creative, expand, shorten. Domyślnie: standard.
strengthstringnieJak bardzo przeredagowany tekst może odbiegać od oryginału. Jedna z wartości: readable, balanced, strong. Domyślnie: balanced.
readabilitystringnieRejestr językowy tekstu. Jedna z wartości: casual, professional, academic, creative. Domyślnie: professional.
purposestringniePrzeznaczenie tekstu. Jedna z wartości: general, essay, article, email, marketing, report, story. Domyślnie: general.
synonymsstringnieJak swobodnie można zastępować słowa. Jedna z wartości: few, some, many. Domyślnie: some.
freezeWordstablica elementów stringnieSłowa i frazy, które muszą pozostać dokładnie w podanej formie: maksymalnie 25, każda do 60 znaków. Ich słowa wliczają się do słów wywołania.
customInstructionstringnieTwoja krótka instrukcja przeredagowania, do 500 znaków. Jej słowa wliczają się do słów wywołania.
languagestringnieKod języka, np. "en" lub "de". Jeśli go pominiesz, język zostanie rozpoznany na podstawie tekstu.
closedLoopbooleannieUstaw false, aby pominąć zamkniętą pętlę. Domyślnie: true.

Odpowiedź

PoleTypOpis
textstringPrzeredagowany tekst.
beforeDetectionWynik detektora dla twojego tekstu lub null, gdy go nie ma.
afterDetectionWynik detektora dla przeredagowanego tekstu lub null.
passesintegerLiczba wersji tekstu utworzonych przed wybraniem tej wersji.
factsobjectCo wykazała weryfikacja faktów i dlaczego przeredagowany tekst nie przeszedł jej pomyślnie, jeśli tak się stało.
latebooleanTrue, gdy przeredagowany tekst zwrócono po osiągnięciu limitu czasu, bez ukończonej weryfikacji.
usageUsageCo zostało naliczone w tym wywołaniu.

Błędy specyficzne dla tego punktu końcowego

StatusKodZnaczenie
400no_textW treści żądania brakuje pola "text".
422too_shortTekst jest krótszy niż wymagana minimalna długość.
400unknown_modeTen punkt końcowy nie oferuje wybranego trybu.
400option_invalidfreezeWords nie jest listą słów ani wyrażeń. Nic nie zostało naliczone.
400option_too_longfreezeWords lub customInstruction przekracza swój limit. Nic nie zostało naliczone.
429concurrency_limitedTen klucz ma już maksymalną dozwoloną liczbę trwających wywołań tego typu. Poczekaj na zakończenie jednego z nich lub odczekaj czas podany w Retry-After.
422no_rewriteSilnik odpowiedział, ale żaden szkic nie przeszedł kontroli (pusty, odmowa lub kopia tekstu). Nic nie naliczono.
503timeoutPrzeredagowanie trwało zbyt długo i zostało zatrzymane. Nic nie naliczono.
503engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
502engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/paraphrase \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}'
Przykładowa odpowiedź
{
  "text": "string",
  "before": {
    "figure": "number, od 0 do 100",
    "low": "number, od 0 do 100",
    "high": "number, od 0 do 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, od 0 do 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, od 0 do 100",
    "low": "number, od 0 do 100",
    "high": "number, od 0 do 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, od 0 do 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "passes": "integer",
  "facts": "object",
  "late": "boolean",
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

POST /api/v1/summarize

Podsumuj tekst. Podsumowanie w formie kluczowych zdań, akapitu lub listy punktów.

Zakres uprawnień klucza: summarize

Treść żądania

PoleTypWymaganeOpis
textstringtakTekst do sprawdzenia lub przeredagowania.
modestringnieForma podsumowania. Jedna z wartości: key-sentences, paragraph, bullets. Domyślnie: key-sentences.
lengthstringnieDługość podsumowania. Jedna z wartości: short, medium, long. Domyślnie: medium.

Odpowiedź

PoleTypOpis
textstringPodsumowanie.
usageUsageCo zostało naliczone w tym wywołaniu.

Błędy specyficzne dla tego punktu końcowego

StatusKodZnaczenie
400no_textW treści żądania brakuje pola "text".
422too_shortTekst jest krótszy niż wymagana minimalna długość.
429concurrency_limitedTen klucz ma już maksymalną dozwoloną liczbę trwających wywołań tego typu. Poczekaj na zakończenie jednego z nich lub odczekaj czas podany w Retry-After.
503timeoutPrzeredagowanie trwało zbyt długo i zostało zatrzymane. Nic nie naliczono.
503engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
502engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/summarize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}'
Przykładowa odpowiedź
{
  "text": "string",
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

POST /api/v1/grammar

Sprawdź gramatykę. Problemy z gramatyką, pisownią, interpunkcją i stylem, każdy z położeniem w tekście i propozycjami poprawek.

Zakres uprawnień klucza: grammar

Treść żądania

PoleTypWymaganeOpis
textstringtakTekst do sprawdzenia lub przeredagowania.
languagestringnieKod języka do sprawdzenia, np. "en-US" lub "de-DE". Domyślnie: en-US.

Odpowiedź

PoleTypOpis
issuestablica elementów GrammarIssueZnalezione problemy w kolejności występowania.
usageUsageCo zostało naliczone w tym wywołaniu.

Błędy specyficzne dla tego punktu końcowego

StatusKodZnaczenie
400no_textW treści żądania brakuje pola "text".
503engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
502engine_unavailableSilnik nie odpowiedział. Nic nie naliczono.
503engine_startingSilnik się uruchamia i nie był gotowy na czas. Nic nie naliczono. Spróbuj ponownie za minutę.
504engine_timeoutSilnik nie ukończył analizy tekstu na czas. Nic nie naliczono. Spróbuj ponownie lub wyślij krótszy tekst.
Przykładowe żądanie
curl -X POST https://blurwrite.com/api/v1/grammar \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komitet zebrał się we wtorek, aby omówić plan nowej biblioteki. Członkowie zgodzili się, że czytelnia powinna być otwarta dłużej w dni powszednie, i poprosili pracowników o przygotowanie budżetu na dodatkowe godziny. Na kolejnym spotkaniu omówione zostaną koszty, przewidywana liczba odwiedzających i wpływ na pozostałą część budynku."}'
Przykładowa odpowiedź
{
  "issues": [
    {
      "offset": "integer",
      "length": "integer",
      "message": "string",
      "shortMessage": "string",
      "category": "grammar | spelling | punctuation | style | typography",
      "replacements": [
        "string"
      ],
      "context": "string"
    }
  ],
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

Dokumentacja

Błędy

Błąd odpowiada swoim statusem HTTP i treścią w tej postaci. Kieruj się kodem; komunikat mówi, co poszło nie tak i co zrobić dalej.

Błędy wspólne dla wszystkich punktów końcowych

StatusKodZnaczenie
401key_in_urlKlucz wysłano w adresie URL. Wyślij go w nagłówku Authorization.
401no_keyNie wysłano klucza.
401bad_keyKlucz jest nieprawidłowy lub został unieważniony.
403out_of_scopeKlucz nie ma zakresu uprawnień wymaganego przez ten punkt końcowy.
429rate_limitedZbyt wiele żądań dla tego klucza. Odczekaj czas podany w Retry-After.
403plan_lapsedPlan konta nie obejmuje już API.
413too_largeŻądanie jest zbyt duże.
400bad_bodyTreść żądania nie jest obiektem JSON.
413too_many_wordsWywołanie zawiera więcej słów, niż pozwala limit. Podziel tekst. Nic nie zostało naliczone.
402quota_exhaustedPula słów API w planie na ten okres rozliczeniowy została wyczerpana, a saldo doładowania jest puste. Nic nie naliczono.
402quota_shortWywołanie wymaga więcej słów niż łącznie pozostało w puli słów API w planie i w saldzie doładowania. Nic nie naliczono.
402monthly_ceilingKonto osiągnęło limit API na ten okres rozliczeniowy, który obowiązuje niezależnie od salda. Nic nie naliczono.
503store_unavailableNie udało się teraz odczytać klucza, liczby słów na koncie lub zapisanej próbki tekstu albo to wdrożenie nie ma magazynu danych kont. Nic nie uruchomiono ani nie naliczono.

Wywołanie rezerwuje słowa przed rozpoczęciem i zwraca je w razie niepowodzenia. Jeśli w tym momencie nie da się zapisać liczby słów, pozostają one naliczone: nieudane wywołanie informuje o tym i zawiera "recorded": false w danych użycia, odpowiedź wsadowa również zawiera "recorded": false w danych użycia. Liczba słów nie jest szacowana.

Treść błędu
{
  "error": {
    "code": "string",
    "message": "string",
    "docs": "string",
    "available": "integer"
  },
  "usage": {
    "recorded": "boolean",
    "words": "integer",
    "source": "plan | balance | plan_and_balance",
    "fromPlan": "integer",
    "fromBalance": "integer",
    "allowanceLeft": "integer | null",
    "balance": "integer"
  }
}

Limity

Każda podana tu wartość jest egzekwowana przez API.

  • Każdy klucz pozwala wysłać maksymalnie 60 żądań co 60 sekund.
  • Każdy klucz pozwala na maksymalnie 4 jednoczesnych wywołań wykrywania (pakiet liczy się jako jedno) oraz 2 wywołań humanizacji, parafrazowania lub streszczania; kolejne wywołanie otrzymuje odpowiedź 429 concurrency_limited z nagłówkiem Retry-After.
  • Gdy silniki są zajęte, analizy z kont Pro na stronie mają pierwszeństwo przed wywołaniami API, więc wywołanie API może czekać na swoją kolej.
  • Pakiet może zawierać maksymalnie 50 tekstów.
  • Jedno wywołanie może zawierać maksymalnie 20 000 słów, w jednym tekście lub w całej partii.
  • Detektor analizuje pojedynczy tekst o długości do 90 000 znaków, czyli około 10 000 słów, w każdym planie. Dłuższy tekst zwraca odpowiedź 413 text_too_long, nawet jeśli mieści się w limicie słów wywołania.
  • Konto może mieć do 5 aktywnych kluczy, co pozwala wymienić klucz bez przerwy w działaniu.

Obiekty odpowiedzi

Obiekty zwracane przez punkty końcowe, pole po polu.

Detection

PoleTypOpis
figurenumberWynik od 0 do 100: prawdopodobieństwo, że tekst został napisany maszynowo.
lownumberDolna granica przedziału wokół wyniku.
highnumberGórna granica przedziału wokół wyniku.
uncertaintynumberPołowa szerokości przedziału, w punktach.
verdictstringPrzedział, w którym mieści się wynik; to przedział, nigdy ustalenie autorstwa tekstu. Jedna z wartości: human, uncertain, ai.
confidencestringNa ile można polegać na wyniku. Jedna z wartości: low, medium, high.
sentencestablica elementów SentenceScoreWynik dla każdego zdania.
wordsintegerSprawdzone słowa.
languagestringJęzyk, w którym analizowano tekst.
modelstringModel, który wygenerował wynik.
calibratedbooleanCzy język ma dopasowaną krzywą. Gdy wartość to false, podanej wartości nie wolno używać jako wyniku.
bandHumanFlagRatenumber | nullJak często w naszych pomiarach tekst człowieka w tym przedziale uznawano za maszynowy lub null.

SentenceScore

PoleTypOpis
textstringZdanie.
scorenumberPrawdopodobieństwo od 0 do 1, że zdanie zostało napisane maszynowo.
verdictstringPrzedział, w którym mieści się zdanie. Jedna z wartości: human, uncertain, ai.

Usage

PoleTypOpis
recordedbooleanTrue, gdy zapisano naliczenie. False tylko wtedy, gdy nie udało się zwrócić słów niesprawdzonych tekstów z partii; wtedy obecne jest tylko pole "words".
wordsintegerSłowa naliczone w tym wywołaniu.
sourcestringSkąd pochodziły: z puli słów API w planie, z doładowania lub z obu źródeł. Jedna z wartości: plan, balance, plan_and_balance.
fromPlanintegerSłowa pobrane z puli słów API w planie. Obecne, gdy recorded ma wartość true.
fromBalanceintegerSłowa pobrane z doładowania. Obecne, gdy recorded ma wartość true.
allowanceLeftinteger | nullSłowa z planu pozostałe dla tego narzędzia po wywołaniu w bieżącym okresie rozliczeniowym. Null dla narzędzia bez puli w tym planie. Obecne, gdy recorded ma wartość true.
balanceintegerSaldo doładowania po wywołaniu. Obecne, gdy recorded ma wartość true.

RewriteResult

PoleTypOpis
textstringPrzeredagowany tekst.
beforeDetectionWynik detektora dla twojego tekstu lub null, gdy go nie ma.
afterDetectionWynik detektora dla przeredagowanego tekstu lub null.
passesintegerLiczba wersji tekstu utworzonych przed wybraniem tej wersji.
factsobjectCo wykazała weryfikacja faktów i dlaczego przeredagowany tekst nie przeszedł jej pomyślnie, jeśli tak się stało.
latebooleanTrue, gdy przeredagowany tekst zwrócono po osiągnięciu limitu czasu, bez ukończonej weryfikacji.

GrammarIssue

PoleTypOpis
offsetintegerPoczątek problemu w wysłanym tekście, w jednostkach kodowych UTF-16 (indeks ciągu w JavaScript).
lengthintegerLiczba jednostek kodowych UTF-16 wysłanego tekstu objętych problemem.
messagestringOpis błędu.
shortMessagestringTen sam opis w kilku słowach.
categorystringRodzaj problemu. Jedna z wartości: grammar, spelling, punctuation, style, typography.
replacementstablica elementów stringProponowane poprawki, od najlepszej.
contextstringTekst wokół problemu.

BatchResult

PoleTypOpis
idstringIdentyfikator elementu.
detectionDetectionWynik, jeśli uzyskano go dla elementu.
errorobjectPowód braku wyniku dla elementu.

Error

PoleTypOpis
errorobject
usageUsageCo zostało naliczone w tym wywołaniu.
Serwer MCP

Serwer MCP

Agent może korzystać z tych samych narzędzi przez Model Context Protocol. Serwer jest wyłącznie klientem tego API, więc agent otrzymuje dokładnie taki sam wynik jak na stronie.

  • detect_textAnalizuje jeden tekst.
  • detect_batchAnalizuje kilka tekstów.
  • humanize_textNadaje tekstowi naturalne brzmienie i weryfikuje fakty.
  • paraphrase_textParafrazuje tekst.
  • summarize_textStreszcza tekst.
  • check_grammarSprawdza gramatykę i pisownię.

Claude Code Łączy się online

  1. Przechowuj klucz API w zmiennej środowiskowej o nazwie BLURWRITE_API_KEY, tam gdzie działa klient:

    export BLURWRITE_API_KEY="YOUR_API_KEY"
  2. Uruchom to w terminalu:

    claude mcp add --transport http blurwrite https://blurwrite.com/api/mcp --header "Authorization: Bearer $BLURWRITE_API_KEY"
  3. Możesz też umieścić to w .mcp.json:

    .mcp.json
    {
      "mcpServers": {
        "blurwrite": {
          "type": "http",
          "url": "https://blurwrite.com/api/mcp",
          "headers": {
            "Authorization": "Bearer ${BLURWRITE_API_KEY}"
          }
        }
      }
    }
  4. Sprawdź, czy działa: poproś asystenta „Sprawdź ten akapit w Blurwrite i podaj mi zakres oraz ocenę pewności.”

Twój klucz API znajdziesz w panelu, w sekcji API. Nigdy nie umieszczaj klucza we współdzielonym pliku ani w repozytorium.

Każdy wynik otrzymany przez agenta zawiera wartość liczbową, zakres niepewności i stan kalibracji. Dzięki temu agent może wyjaśnić, co oznacza wynik i kiedy nie należy go używać.

Twój klucz

Zaloguj się, a następnie utwórz klucz w swoim panelu.

Uzyskaj klucz w panelu

Na tej stronie nie można tworzyć kluczy.

Co robią API i serwer MCP