Skip to main content
ベータ

API ドキュメント

投稿前チェック API の認証、エンドポイント、レスポンス形式をまとめています。

概要

すべてのリクエストは HTTPS で送る JSON で、結果はレスポンスにそのまま含まれて返ります。ジョブ ID を受け取って再照会する非同期方式ではありません。

ベース URLhttps://api.nubint.ai/api/v1

レスポンスのフィールド名は camelCase です。例外として、書誌(csl)は CSL-JSON 標準のキー(container-title、DOI など)を、指摘の params は snake_case のキーをそのまま使います。

認証

毎回のリクエストで X-API-Key ヘッダーに API キーを入れます。Authorization ヘッダーではありません。

Header
X-API-Key: nbk_live_...

キーは Nubint アプリの 設定 → API/MCP で発行します。nbk_live_ で始まり、発行直後に一度だけ表示されます。サーバーにはハッシュだけを保存するため、紛失した場合は再発行が必要です。

有効なキーはアカウントあたり 10 個までです。漏えいが疑われる場合は同じ画面ですぐに無効化してください。無効化したキーは即座に拒否されます。

API は Pro・Max プランのアカウントから呼び出せます。無料プランのアカウントのキーで呼び出すと 403 が返ります。キーはそのまま残り、購読すると同じキーが再び使えます。

キーをブラウザのコードや公開リポジトリに含めないでください。サーバーまたはローカルの環境変数からのみ使用してください。

参考文献の実在確認

POST/citations/verify

参考文献リストの各項目が実在する文献を指しているか、学術インデックスと照合します。言語モデルを呼び出さないため、同じ入力には同じ結果が返ります。

リクエスト

referencesstring[]

参考文献文字列の配列。本文ではなく References セクションの項目を 1 つずつ入れます。最大 100 件。DOI があれば一緒に含めてください。照合が正確になります。

curl -X POST https://api.nubint.ai/api/v1/citations/verify \
  -H "X-API-Key: $NUBINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "references": [
      "Spiegel, K., Leproult, R., & Van Cauter, E. (1999). Impact of sleep debt on metabolic and endocrine function. The Lancet, 354(9188), 1435-1439.",
      "Anderson, R. T., & Liu, M. (2023). Chronotype misalignment and cognitive load in higher education. Educational Neuroscience Quarterly, 11(4), 501-519."
    ]
  }'

レスポンス

200 OK
{
  "results": [
    {
      "text": "Spiegel, K., Leproult, R., & Van Cauter, E. (1999). ...",
      "status": "verified",
      "basis": "title_exact",
      "paper": {
        "canonicalId": "https://doi.org/10.1016/s0140-6736(99)01376-8",
        "csl": {
          "type": "article-journal",
          "title": "Impact of sleep debt on metabolic and endocrine function",
          "container-title": "The Lancet",
          "DOI": "10.1016/s0140-6736(99)01376-8"
        }
      },
      "csl": null,
      "matchedTitle": "Impact of sleep debt on metabolic and endocrine function",
      "nearMissTitle": null
    },
    {
      "text": "Anderson, R. T., & Liu, M. (2023). ...",
      "status": "off_index",
      "basis": "parsed",
      "paper": null,
      "csl": {
        "type": "article-journal",
        "title": "Chronotype misalignment and cognitive load in higher education",
        "container-title": "Educational Neuroscience Quarterly"
      },
      "matchedTitle": null,
      "nearMissTitle": null
    }
  ],
  "summary": {
    "total": 2,
    "verified": 1,
    "uncertain": 0,
    "offIndex": 1,
    "unparseable": 0,
    "needsReview": 1
  }
}
status

判定。下の「判定値」を参照してください。

basis

判定の根拠 — identifier(DOI などの識別子が一致)、title_exact、title_strong、title_partial、parsed(インデックス外、書誌のみ解析)、none。

paper

インデックスで見つかった論文の書誌と識別子。verified と uncertain のときだけ入ります。

csl

インデックス外の文献を原文から解析した書誌(CSL-JSON)。off_index のときだけ入ります。

matchedTitle

採用されたインデックス候補のタイトル。uncertain のとき、利用者が自分の参考文献と照らし合わせるために使います。

nearMissTitle

タイトルの重なりが足りず不採用になった候補のタイトル(off_index のときのみ)。原稿側の表記が間違っている場合の手がかりです。採用された一致ではないため、引用として使ってはいけません。

summary

集計。needsReview は verified 以外のすべて、つまり利用者が確認すべき件数です。

AI 作成検出

POST/preflight/ai-detection

テキストが AI で書かれたように読めるかを、独立した検出モデルで判定します。段落単位で判定し、該当段落では判定の決め手になった文を順位付きで示します。

safe は人が書いたという意味ではありません。人の文章を AI と判定する誤検出を減らすよう基準を保守的に設定しているため、検出するより見逃す方が多くなります。検出されればシグナル、されなければ「不明」です。確率の数値は返しません。

リクエスト

textstring

チェックするテキスト。段落は空行で区切ります。最大 200,000 文字。

cURL
curl -X POST https://api.nubint.ai/api/v1/preflight/ai-detection \
  -H "X-API-Key: $NUBINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "text": "Full manuscript text, paragraphs separated by blank lines..." }'

レスポンス

200 OK
{
  "verdict": "caution",
  "checked": 9,
  "flagged": 2,
  "creditsCharged": 20,
  "issues": [
    {
      "code": "possibly",
      "category": "possibly",
      "anchor": "The sentence in your manuscript that drove the flag.",
      "reference": null,
      "params": {
        "lang": "en",
        "rank": 1,
        "rank_total": 2,
        "unit_tokens": 142,
        "reasons": [
          { "code": "sentence_contribution", "rank": 1, "total": 2 }
        ]
      },
      "message": null
    }
  ]
}
verdict

文書全体の判定 — safe・caution・risk・inconclusive。

checked

判定した段落数。

flagged

段階が付いた段落数。

creditsCharged

このリクエストで請求されたクレジット。inconclusive は 0。

issues

該当した文のリスト。code は段階(likely・possibly)、anchor は原文の文、params.rank はその段落内での順位です。

検出サービスが応答しない場合、このエンドポイントは 502 を返します。結果なしに safe を返すことはありません。

原稿全体チェック

POST/preflight/check

本文と参考文献を一度に送ると、参考文献の実在確認、AI 作成検出、出典品質の 3 セクションを返します。参考文献の照合は 1 回だけ行うため、2 つのセクションが同じ論文を見ます。

リクエスト

textstring

原稿の本文。空の場合、AI 作成検出と出典品質は skipped になります。最大 200,000 文字。

referencesstring[]

参考文献文字列の配列。空の場合、参考文献の確認と出典品質は skipped になります。最大 100 件。

cURL
curl -X POST https://api.nubint.ai/api/v1/preflight/check \
  -H "X-API-Key: $NUBINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Full manuscript text...",
    "references": [
      "Spiegel, K., Leproult, R., & Van Cauter, E. (1999). Impact of sleep debt on metabolic and endocrine function. The Lancet, 354(9188), 1435-1439.",
      "Anderson, R. T., & Liu, M. (2023). Chronotype misalignment and cognitive load in higher education. Educational Neuroscience Quarterly, 11(4), 501-519."
    ]
  }'

レスポンス

AI 作成検出が失敗した例です。ほかのセクションはそのまま結果を返します(一部フィールド省略)。

200 OK
{
  "citations": {
    "status": "ok",
    "reason": null,
    "summary": { "total": 2, "verified": 1, "offIndex": 1, "needsReview": 1, ... },
    "results": [ ... ]
  },
  "aiDetection": {
    "status": "failed",
    "reason": "TimeoutError: detection service did not respond",
    "verdict": null,
    "checked": 0,
    "flagged": 0,
    "issues": []
  },
  "sourceQuality": {
    "status": "ok",
    "reason": null,
    "checked": 1,
    "issues": []
  },
  "creditsCharged": 15
}
*.status

セクションごとにあります — ok(チェック済み)、failed(当社側の障害で実行できず、再試行で解決)、skipped(入力がなくスキップ)。failed と skipped には reason が付きます。

sourceQuality

確認済みの参考文献だけをチェックします — 撤回(retracted_source)、懸念表明(expression_of_concern)、プレプリント(preprint_source・preprint_has_published_version)、被引用の少ない出典(low_citation_source)など。

creditsCharged

このリクエストで請求されたクレジット。成功したセクションのみ課金し、failed・skipped と AI 検出の inconclusive は 0。

判定値

参考文献の判定 (status)

verified

インデックスで確認済み。DOI などの識別子またはタイトルが一致します。

uncertain

候補は見つかったものの、タイトルが部分的にしか一致しません。matchedTitle と照らし合わせてください。

off_index

このインデックスでは確認できませんでした。単行本・法令・非公開の学術誌など、もともとインデックスにない文献の可能性があります。存在しないという意味ではありません。

unparseable

書誌項目として読み取れない行です(タイトル・年・著者が見つからない)。

AI 作成検出の判定 (verdict)

safe

このチェックでは AI 作成の特徴が見つかりませんでした。人が書いた保証ではありません。

caution

一部の段落に AI 作成の特徴があります。該当する文を確認してください。

risk

複数の段落に明確な AI 作成の特徴があります。

inconclusive

判定できる文章が足りません(短すぎる、または表・リストが中心)。AI ではないという意味ではありません。

指摘オブジェクト

AI 作成検出と出典品質の指摘は同じ形式です。

code

安定した識別子。画面の文言はこの値で選んでください。

anchor

問題となった原文の文。著者-年方式(APA など)の原稿では、出典品質の指摘の anchor が空になることがあります。その場合は reference で論文を特定します。

reference

指摘対象の論文の識別子(canonicalId)。

params

文言の組み立てに使う値(参考文献番号、被引用数、順位など)。

message

利用者の言語による指摘文。チェックが文言を生成した場合のみ入ります。

料金

AI 作成検出は 1 万トークンあたり 44 クレジット、出典品質は 1 万トークンあたり 32 クレジットです。本文の分量は英文 A4 5 ページ単位で切り上げ、その 1 単位が最低料金です。エディターの AI レビューと同じ単価です。

参考文献の確認は無料です。当社側の障害で失敗したセクション(failed)、入力がなくスキップしたセクション(skipped)、判定できる文章が足りない AI 検出(inconclusive)は差し引きません。

実行前に予想コストを確認し、残高が足りなければ実行せずに 402 を返します。

エラー

エラーレスポンスの本文は detail フィールドを 1 つ持つ JSON です。

401 Unauthorized
{ "detail": "Invalid API key" }
400

上限超過 — 参考文献 100 件または本文 200,000 文字を超えました。切り詰めて処理することはありません。

401

X-API-Key ヘッダーがない、キーが誤っている、または無効化されたキーです。

402

クレジットが不足しています — 残高が 0 か、このリクエストの予想コストを賄えません。チェックは実行されていません。

403

Pro・Max プランが必要です。

422

リクエスト本文の形式が合っていません(フィールド名・型)。

429

リクエスト上限を超えました。1 分後に再試行してください。

502

AI 作成検出サービスが応答しませんでした(/preflight/ai-detection)。しばらくしてから再試行してください。

503

認証の確認が一時的にできません。キーの問題ではないので、無効化せずに再試行してください。

上限と応答時間

参考文献はリクエストあたり 100 件、本文は 200,000 文字(英文 A4 で約 80 ページ)までです。

レスポンスは同期式のため、参考文献が多いと数十秒かかることがあります。クライアントのタイムアウトは 120 秒以上に設定してください。

リクエスト上限はアカウントあたり、参考文献の確認が毎分 30 回、AI 作成検出と原稿全体チェックが毎分 10 回です。超えると 429 が返ります。

MCP

同じ 3 つのチェックを MCP ツール(preflight_check・verify_citations・detect_ai_writing)としても提供しています。ChatGPT・Claude はログイン(OAuth)で接続し、API キーは不要です — MCP の接続案内をご覧ください。

MCP の接続方法

開発ツールから API キーで接続

ヘッダーを設定できる開発ツールは X-API-Key で接続できます。サーバー URL は同じです。

ターミナルで 1 行で追加します。追加後、/mcp で接続状態を確認できます。

Claude Code
claude mcp add --transport http nubint https://api.nubint.ai/api/v1/mcp \
  --header "X-API-Key: nbk_live_..."