Langsung ke konten
Dokumentasi pengembang

API v1 dan server MCP

Semua yang Anda perlukan untuk memanggil API: cara autentikasi, setiap endpoint beserta permintaan dan responsnya, kesalahan dan batas, serta contoh dalam curl, JavaScript, dan Python.

Di halaman ini

Memulai

Ikhtisar

Versi API ada di jalurnya, /api/v1. Setiap endpoint menerima POST dengan body JSON dan menjawab dalam JSON, termasuk saat terjadi kesalahan.

URL dasar https://blurwrite.com

Hanya di situs, tidak di API: penghitung kata, penghitung karakter, pemeriksa plagiarisme, dan opsi "Beri waktu lebih lama" pada humanizer.

Ditampilkan dari dokumen OpenAPI, sehingga mencantumkan persis rute dan kolom yang diterima API. Dokumen OpenAPI

Panggilan pertama Anda

Teks memerlukan setidaknya 50 kata.

Periksa "calibrated" terlebih dahulu: jika nilainya false, bahasa tersebut belum memiliki kurva yang disesuaikan, sehingga angkanya tidak boleh digunakan sebagai hasil.

Setiap nilai ditampilkan sebagai tipenya. Respons sebenarnya berisi hasil untuk teks Anda.

Contoh permintaan
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}'
Contoh respons
{
  "figure": "number, 0 hingga 100",
  "low": "number, 0 hingga 100",
  "high": "number, 0 hingga 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, 0 hingga 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"
  }
}

Autentikasi

Kirim kunci Anda melalui header Authorization sebagai token bearer. Kunci dalam URL akan ditolak.

Kunci memiliki cakupan: detect, rewrite, summarize, dan grammar. Rute mengembalikan 403 out_of_scope jika kunci tidak memiliki cakupan yang diperlukan.

Autentikasi
Authorization: Bearer YOUR_API_KEY

Endpoint

POST /api/v1/detect

Analisis satu teks. Hasil deteksi untuk satu teks: angka dari 0 hingga 100, rentang di sekitarnya, hasil per kalimat, dan status kalibrasi bahasa.

Cakupan kunci: detect

Isi permintaan

KolomTipeWajibDeskripsi
textstringyaTeks untuk dianalisis atau ditulis ulang.
languagestringtidakKode bahasa, seperti "en" atau "de". Jika tidak disertakan, bahasa dideteksi dari teks.
contentTypestringtidakJenis teks, seperti "essay" atau "email", saat analisis perlu menggunakan kurva untuk jenis teks tersebut.

Respons

KolomTipeDeskripsi
figurenumberHasil dari 0 hingga 100: seberapa besar kemungkinan teks ditulis oleh mesin.
lownumberBatas bawah rentang di sekitar angka.
highnumberBatas atas rentang di sekitar angka.
uncertaintynumberSetengah lebar rentang, dalam poin.
verdictstringKategori rentang tempat angka berada; hanya kategori, bukan kesimpulan tentang siapa yang menulis teks. Salah satu dari: human, uncertain, ai.
confidencestringSeberapa dapat diandalkan hasilnya. Salah satu dari: low, medium, high.
sentencesarray berisi SentenceScoreHasil per kalimat.
wordsintegerKata-kata yang dianalisis.
languagestringBahasa yang digunakan untuk menganalisis teks.
modelstringModel yang menghasilkan analisis.
calibratedbooleanApakah bahasa memiliki kurva yang disesuaikan. Jika false, angka tidak boleh digunakan sebagai hasil.
bandHumanFlagRatenumber | nullSeberapa sering teks manusia dalam kategori ini terdeteksi sebagai tulisan mesin dalam pengukuran kami, atau null.
usageUsagePenggunaan yang dihitung oleh panggilan ini.

Kesalahan tambahan dari rute ini

StatusKodeArti
400no_textIsi permintaan tidak memiliki "text".
422too_shortTeks lebih pendek dari panjang minimum.
413text_too_longTeks lebih panjang daripada yang dapat dianalisis mesin dalam satu panggilan. Bagi teks menjadi beberapa bagian. Tidak ada penggunaan yang dihitung.
422not_calibratedBahasa ini belum dapat dianalisis.
503engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
502engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
503engine_startingMesin sedang memulai dan belum siap hingga batas waktu. Tidak ada penggunaan yang dihitung. Coba lagi dalam satu menit.
503engine_busyMesin sedang sibuk dan analisis tidak dapat dimulai hingga batas waktu; pengguna Pro di situs dilayani sebelum panggilan API. Tidak ada penggunaan yang dihitung. Coba lagi sebentar lagi.
504engine_timeoutMesin tidak menyelesaikan teks hingga batas waktu. Tidak ada penggunaan yang dihitung. Coba lagi, atau kirim teks yang lebih pendek.
429concurrency_limitedJumlah panggilan jenis ini yang sedang berjalan untuk kunci ini sudah mencapai batas. Tunggu salah satunya selesai, atau sesuai waktu dalam Retry-After.
Contoh permintaan
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}'
Contoh respons
{
  "figure": "number, 0 hingga 100",
  "low": "number, 0 hingga 100",
  "high": "number, 0 hingga 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, 0 hingga 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

Analisis beberapa teks. Satu panggilan dapat memuat teks hingga batas batch. Panggilan memerlukan kuota di awal untuk kata-kata dari setiap teks yang dapat dianalisis (50 kata atau lebih); kata-kata dari teks yang tidak menghasilkan hasil akan dikembalikan setelahnya. Kegagalan satu teks tidak menggagalkan seluruh batch.

Cakupan kunci: detect

Isi permintaan

KolomTipeWajibDeskripsi
itemsarray berisi objectyaTeks-teks, masing-masing dengan "text" sendiri serta "id", "language", dan "contentType" opsional.
items[].idstringtidakID Anda sendiri untuk item, yang dikembalikan bersama hasilnya. Jika tidak disertakan, posisi item digunakan.
items[].textstringyaTeks untuk dianalisis atau ditulis ulang.
items[].languagestringtidakKode bahasa, seperti "en" atau "de". Jika tidak disertakan, bahasa dideteksi dari teks.
items[].contentTypestringtidakJenis teks, seperti "essay" atau "email", saat analisis perlu menggunakan kurva untuk jenis teks tersebut.

Respons

KolomTipeDeskripsi
resultsarray berisi BatchResultSatu hasil per item, sesuai urutan pengiriman.
usageUsagePenggunaan yang dihitung oleh panggilan ini.

Kesalahan tambahan dari rute ini

StatusKodeArti
400batch_emptyIsi permintaan tidak memiliki "items", atau daftarnya kosong.
413batch_too_largeJumlah item dalam batch melebihi batas.
429concurrency_limitedJumlah panggilan jenis ini yang sedang berjalan untuk kunci ini sudah mencapai batas. Tunggu salah satunya selesai, atau sesuai waktu dalam Retry-After.
Contoh permintaan
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":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."},{"id":"2","text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}]}'
Contoh respons
{
  "results": [
    {
      "id": "string",
      "detection": {
        "figure": "number, 0 hingga 100",
        "low": "number, 0 hingga 100",
        "high": "number, 0 hingga 100",
        "uncertainty": "number",
        "verdict": "human | uncertain | ai",
        "confidence": "low | medium | high",
        "sentences": [
          {
            "text": "string",
            "score": "number, 0 hingga 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

Buat teks lebih alami. Humanizer dengan pemeriksaan fakta: angka, nama, dan kutipan dipertahankan, sementara hasil penulisan ulang yang mengubah fakta diperbaiki atau dilaporkan. Mode "custom" (Pro) menulis dengan gaya Anda sendiri, yang dipelajari dari sampel tulisan Anda.

Melalui API, humanizer menjalankan penulisan ulang standar. "Beri waktu lebih lama" hanya ada di situs.

Cakupan kunci: rewrite

Isi permintaan

KolomTipeWajibDeskripsi
textstringyaTeks untuk dianalisis atau ditulis ulang.
modestringtidakMode penulisan ulang. Salah satu dari: natural, formal, simple, academic, creative, shorten, expand, custom. Default: natural.
style_samplestringtidakDengan mode "custom": sampel tulisan Anda sendiri, 150 hingga 2.000 kata, yang dianalisis di server. Jika tidak disertakan, sampel yang tersimpan di akun Anda digunakan.
tabstringtidakTab humanizer: ragam bahasa yang digunakan untuk menulis ulang teks. Standar mempertahankan ragam bahasa teks asli. Salah satu dari: standard, academic, professional, casual. Default: standard.
strengthstringtidakReguler mempertahankan isi dan ragam bahasa. Agresif dapat mengubah urutan teks dan menghilangkan uraian tambahan, tetapi tetap mempertahankan semua poin utama. Beberapa bagian mungkin terasa kurang lazim. Salah satu dari: regular, aggressive. Default: regular.
ownTouchstringtidakDetail, contoh, atau pendapat dengan kata-kata Anda sendiri, hingga 400 karakter, yang disisipkan ke dalam hasil penulisan ulang.
languagestringtidakKode bahasa, seperti "en" atau "de". Jika tidak disertakan, bahasa dideteksi dari teks.

Respons

KolomTipeDeskripsi
textstringTeks hasil penulisan ulang.
beforeDetectionHasil deteksi teks Anda, atau null jika tidak ada.
afterDetectionHasil deteksi teks yang ditulis ulang, atau null.
passesintegerJumlah penulisan ulang yang dihasilkan sebelum hasil ini dipilih.
factsobjectTemuan pemeriksaan fakta, dan alasan hasil penulisan ulang tidak lolos jika memang tidak lolos.
latebooleanTrue jika hasil penulisan ulang dikembalikan saat batas waktu tercapai dengan pemeriksaan yang belum selesai.
usageUsagePenggunaan yang dihitung oleh panggilan ini.

Kesalahan tambahan dari rute ini

StatusKodeArti
400no_textIsi permintaan tidak memiliki "text".
422too_shortTeks lebih pendek dari panjang minimum.
400unknown_modeMode ini tidak tersedia pada rute ini.
400unknown_optionTab atau tingkat perubahan tersebut tidak tersedia di rute ini.
402plan_requiredMode, tab, tingkat perubahan, atau sentuhan pribadi memerlukan paket yang tidak dimiliki akun; mode "custom" memerlukan Pro. Tidak ada penggunaan yang dihitung.
400no_sampleMode "custom" memerlukan sampel tulisan, yang dikirim atau disimpan di akun.
400sample_too_shortSampel tulisan lebih pendek dari panjang minimum.
400sample_too_longSampel tulisan melebihi panjang maksimum.
429concurrency_limitedJumlah panggilan jenis ini yang sedang berjalan untuk kunci ini sudah mencapai batas. Tunggu salah satunya selesai, atau sesuai waktu dalam Retry-After.
422no_rewriteMesin merespons, tetapi tidak ada draf yang lolos pemeriksaan (kosong, penolakan, atau salinan teks). Tidak ada penggunaan yang dihitung.
503timeoutPenulisan ulang terlalu lama dan dihentikan. Tidak ada penggunaan yang dihitung.
503engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
502engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
Contoh permintaan
curl -X POST https://blurwrite.com/api/v1/humanize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}'
Contoh respons
{
  "text": "string",
  "before": {
    "figure": "number, 0 hingga 100",
    "low": "number, 0 hingga 100",
    "high": "number, 0 hingga 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 hingga 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, 0 hingga 100",
    "low": "number, 0 hingga 100",
    "high": "number, 0 hingga 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 hingga 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

Parafrase teks. Alat parafrase, dengan daftar mode yang sama seperti alat parafrase di situs.

Cakupan kunci: rewrite

Isi permintaan

KolomTipeWajibDeskripsi
textstringyaTeks untuk dianalisis atau ditulis ulang.
modestringtidakMode penulisan ulang. Salah satu dari: standard, fluency, formal, academic, simple, creative, expand, shorten. Default: standard.
strengthstringtidakSeberapa jauh hasil penulisan ulang boleh berbeda dari teks asli. Salah satu dari: readable, balanced, strong. Default: balanced.
readabilitystringtidakRagam bahasa yang digunakan untuk menulis. Salah satu dari: casual, professional, academic, creative. Default: professional.
purposestringtidakTujuan penggunaan teks. Salah satu dari: general, essay, article, email, marketing, report, story. Default: general.
synonymsstringtidakSeberapa bebas kata boleh diganti. Salah satu dari: few, some, many. Default: some.
freezeWordsarray berisi stringtidakKata dan frasa yang harus dikembalikan persis seperti aslinya: maksimal 25, masing-masing hingga 60 karakter. Kata-katanya dihitung dalam penggunaan kata panggilan.
customInstructionstringtidakInstruksi singkat Anda sendiri untuk penulisan ulang, hingga 500 karakter. Kata-katanya dihitung dalam penggunaan kata panggilan.
languagestringtidakKode bahasa, seperti "en" atau "de". Jika tidak disertakan, bahasa dideteksi dari teks.
closedLoopbooleantidakAtur ke false untuk melewati proses loop tertutup. Default: true.

Respons

KolomTipeDeskripsi
textstringTeks hasil penulisan ulang.
beforeDetectionHasil deteksi teks Anda, atau null jika tidak ada.
afterDetectionHasil deteksi teks yang ditulis ulang, atau null.
passesintegerJumlah penulisan ulang yang dihasilkan sebelum hasil ini dipilih.
factsobjectTemuan pemeriksaan fakta, dan alasan hasil penulisan ulang tidak lolos jika memang tidak lolos.
latebooleanTrue jika hasil penulisan ulang dikembalikan saat batas waktu tercapai dengan pemeriksaan yang belum selesai.
usageUsagePenggunaan yang dihitung oleh panggilan ini.

Kesalahan tambahan dari rute ini

StatusKodeArti
400no_textIsi permintaan tidak memiliki "text".
422too_shortTeks lebih pendek dari panjang minimum.
400unknown_modeMode ini tidak tersedia pada rute ini.
400option_invalidfreezeWords bukan daftar kata atau frasa. Tidak ada yang dihitung.
400option_too_longfreezeWords atau customInstruction melebihi batas. Tidak ada yang dihitung.
429concurrency_limitedJumlah panggilan jenis ini yang sedang berjalan untuk kunci ini sudah mencapai batas. Tunggu salah satunya selesai, atau sesuai waktu dalam Retry-After.
422no_rewriteMesin merespons, tetapi tidak ada draf yang lolos pemeriksaan (kosong, penolakan, atau salinan teks). Tidak ada penggunaan yang dihitung.
503timeoutPenulisan ulang terlalu lama dan dihentikan. Tidak ada penggunaan yang dihitung.
503engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
502engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
Contoh permintaan
curl -X POST https://blurwrite.com/api/v1/paraphrase \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}'
Contoh respons
{
  "text": "string",
  "before": {
    "figure": "number, 0 hingga 100",
    "low": "number, 0 hingga 100",
    "high": "number, 0 hingga 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 hingga 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, 0 hingga 100",
    "low": "number, 0 hingga 100",
    "high": "number, 0 hingga 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 hingga 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

Ringkas teks. Peringkas, dalam bentuk kalimat utama, paragraf, atau poin-poin.

Cakupan kunci: summarize

Isi permintaan

KolomTipeWajibDeskripsi
textstringyaTeks untuk dianalisis atau ditulis ulang.
modestringtidakBentuk ringkasan. Salah satu dari: key-sentences, paragraph, bullets. Default: key-sentences.
lengthstringtidakPanjang ringkasan. Salah satu dari: short, medium, long. Default: medium.

Respons

KolomTipeDeskripsi
textstringRingkasan.
usageUsagePenggunaan yang dihitung oleh panggilan ini.

Kesalahan tambahan dari rute ini

StatusKodeArti
400no_textIsi permintaan tidak memiliki "text".
422too_shortTeks lebih pendek dari panjang minimum.
429concurrency_limitedJumlah panggilan jenis ini yang sedang berjalan untuk kunci ini sudah mencapai batas. Tunggu salah satunya selesai, atau sesuai waktu dalam Retry-After.
503timeoutPenulisan ulang terlalu lama dan dihentikan. Tidak ada penggunaan yang dihitung.
503engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
502engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
Contoh permintaan
curl -X POST https://blurwrite.com/api/v1/summarize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}'
Contoh respons
{
  "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

Periksa tata bahasa. Masalah tata bahasa, ejaan, tanda baca, dan gaya, masing-masing beserta posisi dalam teks dan saran penggantinya.

Cakupan kunci: grammar

Isi permintaan

KolomTipeWajibDeskripsi
textstringyaTeks untuk dianalisis atau ditulis ulang.
languagestringtidakKode bahasa untuk pemeriksaan, seperti "en-US" atau "de-DE". Default: en-US.

Respons

KolomTipeDeskripsi
issuesarray berisi GrammarIssueMasalah yang ditemukan, sesuai urutan kemunculannya.
usageUsagePenggunaan yang dihitung oleh panggilan ini.

Kesalahan tambahan dari rute ini

StatusKodeArti
400no_textIsi permintaan tidak memiliki "text".
503engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
502engine_unavailableMesin tidak merespons. Tidak ada penggunaan yang dihitung.
503engine_startingMesin sedang memulai dan belum siap hingga batas waktu. Tidak ada penggunaan yang dihitung. Coba lagi dalam satu menit.
504engine_timeoutMesin tidak menyelesaikan teks hingga batas waktu. Tidak ada penggunaan yang dihitung. Coba lagi, atau kirim teks yang lebih pendek.
Contoh permintaan
curl -X POST https://blurwrite.com/api/v1/grammar \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Komite bertemu pada hari Selasa untuk meninjau rencana perpustakaan baru. Para anggota sepakat bahwa ruang baca harus tetap buka lebih lama pada hari kerja, dan mereka meminta staf menyiapkan anggaran untuk jam tambahan. Pertemuan berikutnya akan membahas biaya, perkiraan jumlah pengunjung, dan dampaknya terhadap bagian gedung lainnya."}'
Contoh respons
{
  "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"
  }
}

Referensi

Kesalahan

Kesalahan menjawab dengan status HTTP-nya dan body dalam bentuk ini. Bertindaklah berdasarkan kodenya; pesannya menjelaskan apa yang salah dan apa yang perlu dilakukan.

Kesalahan yang dapat dikembalikan setiap rute

StatusKodeArti
401key_in_urlKunci dikirim dalam URL. Kirim melalui header Authorization.
401no_keyTidak ada kunci yang dikirim.
401bad_keyKunci tidak valid atau telah dicabut.
403out_of_scopeKunci tidak memiliki cakupan yang diperlukan rute ini.
429rate_limitedTerlalu banyak permintaan untuk kunci ini. Tunggu sesuai waktu dalam Retry-After.
403plan_lapsedPaket akun tidak lagi menyertakan API.
413too_largePermintaan terlalu besar.
400bad_bodyIsi permintaan bukan objek JSON.
413too_many_wordsJumlah kata dalam permintaan melebihi batas per permintaan. Bagi teksnya. Tidak ada yang dihitung.
402quota_exhaustedKuota kata API paket untuk periode tagihan ini telah habis dan saldo isi ulang kosong. Tidak ada penggunaan yang dihitung.
402quota_shortPanggilan memerlukan lebih banyak kata daripada gabungan sisa kuota kata API paket dan saldo. Tidak ada penggunaan yang dihitung.
402monthly_ceilingAkun telah mencapai batas API untuk periode tagihan ini, yang berlaku berapa pun saldonya. Tidak ada penggunaan yang dihitung.
503store_unavailableKunci, jumlah kata akun, atau sampel tulisan yang tersimpan tidak dapat dibaca saat ini, atau deployment ini tidak memiliki penyimpanan akun. Tidak ada proses yang dijalankan atau penggunaan yang dihitung.

Panggilan mencadangkan kuota kata sebelum dijalankan dan mengembalikannya jika gagal. Jika jumlah kata tidak dapat dicatat saat itu, kuota kata tetap terpakai: panggilan yang gagal akan menyatakan hal tersebut dan menyertakan "recorded": false dalam data penggunaannya, batch akan mengembalikan "recorded": false dalam data penggunaannya, dan jumlah kata tidak akan diperkirakan.

Isi kesalahan
{
  "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"
  }
}

Batas

Setiap angka di sini adalah batas yang diterapkan oleh API.

  • Setiap kunci dapat mengirim maksimal 60 permintaan setiap 60 detik.
  • Setiap kunci dapat menjalankan maksimal 4 panggilan deteksi (satu batch dihitung sebagai satu panggilan) dan 2 panggilan untuk membuat teks lebih alami, memparafrasekan, atau meringkas secara bersamaan; panggilan tambahan akan menerima respons 429 concurrency_limited dengan Retry-After.
  • Saat mesin sedang sibuk, analisis dari akun Pro di situs diproses lebih dahulu daripada panggilan API, sehingga panggilan API mungkin perlu menunggu giliran.
  • Satu batch memuat maksimal 50 teks.
  • Satu permintaan menerima maksimal 20.000 kata, baik dalam satu teks maupun satu batch.
  • Detektor membaca satu teks hingga 90.000 karakter, sekitar 10.000 kata, di semua paket. Teks yang lebih panjang akan mendapat respons 413 text_too_long, meskipun masih dalam batas kata per permintaan.
  • Satu akun dapat memiliki hingga 5 kunci aktif, sehingga kunci dapat dirotasi tanpa gangguan layanan.

Objek respons

Objek yang dikembalikan endpoint, kolom demi kolom.

Detection

KolomTipeDeskripsi
figurenumberHasil dari 0 hingga 100: seberapa besar kemungkinan teks ditulis oleh mesin.
lownumberBatas bawah rentang di sekitar angka.
highnumberBatas atas rentang di sekitar angka.
uncertaintynumberSetengah lebar rentang, dalam poin.
verdictstringKategori rentang tempat angka berada; hanya kategori, bukan kesimpulan tentang siapa yang menulis teks. Salah satu dari: human, uncertain, ai.
confidencestringSeberapa dapat diandalkan hasilnya. Salah satu dari: low, medium, high.
sentencesarray berisi SentenceScoreHasil per kalimat.
wordsintegerKata-kata yang dianalisis.
languagestringBahasa yang digunakan untuk menganalisis teks.
modelstringModel yang menghasilkan analisis.
calibratedbooleanApakah bahasa memiliki kurva yang disesuaikan. Jika false, angka tidak boleh digunakan sebagai hasil.
bandHumanFlagRatenumber | nullSeberapa sering teks manusia dalam kategori ini terdeteksi sebagai tulisan mesin dalam pengukuran kami, atau null.

SentenceScore

KolomTipeDeskripsi
textstringKalimat.
scorenumberDari 0 hingga 1, seberapa besar kemungkinan kalimat ditulis oleh mesin.
verdictstringKategori rentang tempat kalimat berada. Salah satu dari: human, uncertain, ai.

Usage

KolomTipeDeskripsi
recordedbooleanTrue jika jumlah penggunaan tercatat. False hanya jika batch tidak dapat mengembalikan kata yang belum dianalisis; saat itu hanya "words" yang tersedia.
wordsintegerKata-kata yang dihitung oleh panggilan ini.
sourcestringSumbernya: kuota kata API paket, saldo isi ulang, atau keduanya. Salah satu dari: plan, balance, plan_and_balance.
fromPlanintegerKata-kata yang diambil dari kuota kata API paket. Tersedia jika recorded bernilai true.
fromBalanceintegerKata-kata yang diambil dari saldo isi ulang. Tersedia jika recorded bernilai true.
allowanceLeftinteger | nullSisa kuota kata paket untuk alat ini setelah panggilan ini, dalam periode penagihan saat ini. Null untuk alat tanpa kuota pada paket ini. Tersedia jika recorded bernilai true.
balanceintegerSisa saldo isi ulang setelah panggilan ini. Tersedia jika recorded bernilai true.

RewriteResult

KolomTipeDeskripsi
textstringTeks hasil penulisan ulang.
beforeDetectionHasil deteksi teks Anda, atau null jika tidak ada.
afterDetectionHasil deteksi teks yang ditulis ulang, atau null.
passesintegerJumlah penulisan ulang yang dihasilkan sebelum hasil ini dipilih.
factsobjectTemuan pemeriksaan fakta, dan alasan hasil penulisan ulang tidak lolos jika memang tidak lolos.
latebooleanTrue jika hasil penulisan ulang dikembalikan saat batas waktu tercapai dengan pemeriksaan yang belum selesai.

GrammarIssue

KolomTipeDeskripsi
offsetintegerPosisi awal masalah dalam teks yang Anda kirim, dalam unit kode UTF-16 (indeks string JavaScript).
lengthintegerJumlah unit kode UTF-16 dalam teks yang Anda kirim yang tercakup oleh masalah.
messagestringPenjelasan kesalahan.
shortMessagestringPenjelasan yang sama, dalam beberapa kata.
categorystringJenis masalah. Salah satu dari: grammar, spelling, punctuation, style, typography.
replacementsarray berisi stringSaran pengganti, yang terbaik di urutan pertama.
contextstringTeks di sekitar masalah.

BatchResult

KolomTipeDeskripsi
idstringID item.
detectionDetectionHasil analisis, jika item mengembalikannya.
errorobjectAlasan item tidak mengembalikan hasil analisis.

Error

KolomTipeDeskripsi
errorobject
usageUsagePenggunaan yang dihitung oleh panggilan ini.
Server MCP

Server MCP

Agen dapat mengakses alat yang sama melalui Model Context Protocol. Server ini hanya bertindak sebagai klien API ini, sehingga agen mendapatkan hasil analisis yang persis sama dengan yang ditampilkan situs.

  • detect_textMenganalisis satu teks.
  • detect_batchMenganalisis beberapa teks.
  • humanize_textMembuat teks lebih alami disertai pemeriksaan fakta.
  • paraphrase_textMemparafrasekan teks.
  • summarize_textMeringkas teks.
  • check_grammarMemeriksa tata bahasa dan ejaan.

Claude Code Terhubung online

  1. Simpan kunci API Anda di variabel lingkungan bernama BLURWRITE_API_KEY, di tempat klien berjalan:

    export BLURWRITE_API_KEY="YOUR_API_KEY"
  2. Jalankan ini di terminal:

    claude mcp add --transport http blurwrite https://blurwrite.com/api/mcp --header "Authorization: Bearer $BLURWRITE_API_KEY"
  3. Atau masukkan ini ke .mcp.json sebagai gantinya:

    .mcp.json
    {
      "mcpServers": {
        "blurwrite": {
          "type": "http",
          "url": "https://blurwrite.com/api/mcp",
          "headers": {
            "Authorization": "Bearer ${BLURWRITE_API_KEY}"
          }
        }
      }
    }
  4. Periksa apakah sudah berfungsi: minta asisten Anda "Periksa paragraf ini dengan Blurwrite dan beri tahu saya rentang serta tingkat keyakinannya."

Kunci API Anda ada di dasbor, di bagian API. Jangan pernah menaruh kunci di file bersama atau di repositori.

Setiap hasil analisis yang diterima agen mencakup nilai, tingkat ketidakpastiannya, dan status kalibrasi, sehingga agen dapat menjelaskan arti hasil tersebut dan kapan hasil itu tidak boleh digunakan.

Kunci Anda

Masuk, lalu buat kunci di dasbor Anda.

Dapatkan kunci Anda di dasbor

Kunci tidak pernah dibuat di halaman ini.

Fungsi API dan server MCP