REST API

数百〜数千ページのドキュメントを、ご自身のスクリプトから保存・削除します。AI は 関与しません。

PDF、表計算、レポートを 1 件ずつ手で入れる代わりに、一連の作業をスクリプトに任せます。 テキストの抽出と分割はご自身で行い、その結果だけを送ってください。

ここで保存したものは、接続した AI から保存したものとまったく同じです。同じ保存先に入り、AI の 呼び出し方も変わりません。

読み取りは検索ではなく id 単位です。 意味による取得は MCPダッシュボードが担当します。

はじめに

  1. REST API のカードでキーを作成します — アカウントページに あります。キーの名前は、そのキーで保存したものすべての出所として記録されます。 Import scriptpdf-importer のように、後から見てわかる名前にしてください。
  2. キーは作成直後に一度だけ表示されます。その場でコピーしてください。再表示は できません。
  3. キーはいくつでも作成でき、いつでも個別に削除できます。

認証

Base URLhttps://contextick.ai
Authorization: Bearer api_xxxxxxxx

ここで使えるのは api_ で始まるキーだけです。MCP キーや OAuth トークンはこの API で 401 になり、REST API キーは MCP エンドポイントで 401 になります。表面が 分かれているので、片方だけを失効させられます。

エンドポイント

POST /api/v1/notes

1 件を保存します。

Body

FieldTypeRequiredLimit
titlestring120 文字 — 超えた分は切り詰められます
summarystring300 文字 — 超えた分は切り詰められます
contentstring16,000 文字 — 超えると拒否されます

3 つとも空にはできません。空の値は推測で埋めず、拒否します。

Request

curl -X POST https://contextick.ai/api/v1/notes \
  -H "Authorization: Bearer api_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"title":"Q3 report","summary":"Revenue and headcount for Q3.","content":"…"}'

Response 201

{ "id": 42, "saved_items": 118, "stored_bytes": 1048576 }

saved_itemsstored_bytes は保存後の合計です。読み取れなかった場合は 0 ではなくフィールドごと省かれます。

ドキュメントに記録される出所はキーの名前です。リクエストからは指定できません。

GET /api/v1/notes/{id}

1 件を全文で読み取ります。

Request

curl https://contextick.ai/api/v1/notes/42 \
  -H "Authorization: Bearer api_xxxxxxxx"

Response 200

{ "id": 42, "title": "Q3 report", "summary": "…", "content": "…",
  "author": "you@example.com", "origin": "Import script", "created_at": "…",
  "status": "ready", "group_id": null, "times_opened": 3 }

ここで読んでも times_opened は変わりません。あの数はスクリプトの同期ではなく、ご自身が開いた回数を数えます。

statusreadypendingfailed のいずれかです。ready の項目だけが検索で見つかります。

group_id はアップロードしたファイル由来の項目にだけ入り、それ以外は null です。存在しない id には 404 を返します。

GET /api/v1/notes/group/{group_id}

アップロードした 1 ファイルが分かれた各パートを一覧します。

Request

curl https://contextick.ai/api/v1/notes/group/6f1c2a94 \
  -H "Authorization: Bearer api_xxxxxxxx"

Response 200

{ "group_id": "6f1c2a94", "title": "Q3 report",
  "part_count": 13, "ready": 11, "pending": 2, "failed": 0,
  "items": [
    { "id": 42, "title": "Q3 report (1/13)", "status": "ready" },
    { "id": 43, "title": "Q3 report (2/13)", "status": "pending" } ] }

title はファイル自体のタイトルで、最初のパートからパート番号を除いたものです。4 つの件数は items を走査しなくても分かるようにあります。

各パートは id 順で返り、本文は含まれません。パートの content が要る場合は上の 1 件読み取りを呼びます。

group_id は上の 1 件読み取りの応答から得ます。該当する項目がないラベルには 404 を返します。

DELETE /api/v1/notes/group/{group_id}

アップロードした 1 ファイルのすべてのパートを削除します。

Request

curl -X DELETE https://contextick.ai/api/v1/notes/group/6f1c2a94 \
  -H "Authorization: Bearer api_xxxxxxxx"

Response 200

{ "group_id": "6f1c2a94", "deleted": [42, 43, 44],
  "saved_items": 117, "stored_bytes": 1040000 }

全部か何もかのどちらかです。そのラベルを持つパートは 1 つのトランザクションでまとめて消えるので、途中で中断されてもファイルが半分だけ消えた状態にはなりません。

上の 2 つの削除と違い not_found 配列はありません。ここが受け取るのは id の一覧ではなくラベル 1 つなので、該当する項目がないラベルには上の読み取りと同じく 404 を返します。

GET /api/v1/notes/changes

前回の確認以降に追加された項目を、古い順に取得します。

Query

パラメータ必須説明
cursor整数再開する位置 — 直前のレスポンスのカーソルです。
sinceRFC 3339開始時点です。例: 2026-09-01T13:00:00+09:00。オフセットは必須です。最初の呼び出しのみ。
limit整数1–100。既定値は 50。

since か、何も付けずに開始し、以降はカーソルをたどります。両方を同時に指定するとエラーです。

リクエスト

curl "https://contextick.ai/api/v1/notes/changes?since=2026-09-01T04:00:00Z&limit=50" \
  -H "Authorization: Bearer api_xxxxxxxx"

レスポンス 200

{ "data": [
    { "id": 41, "title": "Q3 report", "summary": "…", "created_at": "2026-09-01T04:00:12Z",
      "origin": "Import script", "status": "ready", "group_id": null } ],
  "pagination": { "limit": 50, "poll_cursor": "41" } }

next_cursor は続きがある合図で、すぐ次を要求します。poll_cursor は追いついた合図で、保存して次回に確認します。どちらか一方だけが入ります。

古い順に届くのでカーソルは前へ進むだけで、長く空けても飛ばされる項目はありません。本文は含みません — 必要なときに単体で読みます。

since はフィルタではなく開始点なので、少し古い項目が数件混ざることがあります。statuspending のことがあります — 保存され読めますが、まだ検索対象ではありません。削除とその後の状態変化はここには出ません。

DELETE /api/v1/notes/{id}

1 件を削除します。

Request

curl -X DELETE https://contextick.ai/api/v1/notes/42 \
  -H "Authorization: Bearer api_xxxxxxxx"

POST /api/v1/notes/delete

まとめて削除します。

Body

FieldTypeRequiredLimit
idsnumber[]1 回につき 50 件 — 超えると拒否されます

一括取り込みを取り消せるのはこの経路だけです。

Request

curl -X POST https://contextick.ai/api/v1/notes/delete \
  -H "Authorization: Bearer api_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"ids":[42,43]}'

Delete response 200

{ "deleted": [42], "not_found": [43], "saved_items": 117, "stored_bytes": 1040000 }

どちらの削除も同じ形を返します。存在しない id はエラーではなく not_found として 報告されます。削除は永久で、取り消せません。

エラー

失敗はすべて同じ形です:

{ "error": { "code": "quota_exceeded", "message": "…" } }

分岐は code で行ってください。message は人が読むための文章で、予告なく 変わることがあります。

400 リクエストを直して再送します empty_titleempty_summaryempty_contentcontent_too_longtoo_many_idsinvalid_bodyinvalid_idinvalid_query
401 api_ キーを確認します unauthorized
402 支払い状態を解消します — その間も呼び出しは使えます payment_past_duesubscription_pausedsubscription_canceledrefund_pending
404 その id・グループ・パスがありません not_foundendpoint_not_found
405 Allow ヘッダーのメソッドを使います method_not_allowed
415 Content-Type: application/json を付けます unsupported_media_type
429 少し待って同じリクエストを再送します rate_limitedembedding_rate_limited
507 空き容量を作るか大きいプランへ — そのままの再送は避けてください quota_exceeded
503 500 一時的またはサーバー側 — 少し待って再送します

Webhook を受け取る

保存・削除と、項目が検索可能になったことをあなたのエンドポイントへ送る経路は、独立したページに なりました — ヘッダー、4 つのイベント種別、署名の検証、再試行は Webhook のドキュメントにあります。

知っておくこと