API キー&ドキュメント
プログラマティックアクセスのための API キー管理と、REST API を使った外部サービスとの連携方法を解説します。
デベロッパーハブへようこそ。このガイドでは、API キーの管理とコンテンツへのプログラマティックなアクセスに必要なすべてを解説します。REST API を使って、カスタム連携の構築、ワークフローの自動化、プラットフォーム機能の拡張が可能です。
API キー管理
API キーは、API を通じてアカウントデータへのセキュアな認証済みアクセスを提供します。異なるアプリケーション向けに、異なる権限を持つ複数のキーを作成できます。
新しい API キーの作成

API を使い始めるには、まず API キーを作成する必要があります。
-
ダッシュボードの API キー ページに移動。
-
「API キーを作成」 ボタンをクリック。
-
ダイアログが表示され、以下の情報を入力します:
- 名前:後で識別しやすいように、説明的な名前を付けます(例:「Zapier 連携」、「マイカスタムアプリ」)。
- 有効期限(オプション):セキュリティ強化のために、キーが自動的に期限切れになる日時を設定できます。空欄にすると無期限のキーになります。
- 権限(スコープ):最も重要な部分です。このキーが持つ特定の権限(スコープ)を選択します。最小権限の原則に従い、アプリケーションに必要な権限のみを付与してください。
-
「API キーを作成」 をクリック。
重要: 新しい API キーは、作成直後に 一度だけ 表示されます。必ずコピーして安全な場所に保管してください。再表示はできません。
API キーの管理
作成後、API キーはテーブルに一覧表示されます。ここで管理とモニタリングが可能です:
- キープレフィックスの表示:セキュリティのため、キーの先頭部分(
keyPrefix)のみが保存・表示されます。完全なシークレットを公開せずにキーの識別に役立ちます。 - 表示の切り替え:目のアイコン(
<Eye />)をクリックしてキープレフィックスを一時的に表示。 - ステータス(有効/無効):キーはいつでも有効化/無効化できます。無効化されたキーは API リクエストに使用できません。連携を削除せず一時的に無効にする場合に便利です。
- 最終使用日時:キーが最後に API リクエストに使用された日時を表示。未使用のキーの特定に役立ちます。
- 有効期限&作成日:キーの有効期限と作成日を表示。
- アクション:ドロップダウンメニューで 有効化/無効化 や完全な 削除 が可能。
API ドキュメント
API は予測可能で使いやすいように設計されています。
API 概要
- ベース URL:すべての API エンドポイントはこの URL を基準とします。
https://postion.app/api/v1- フォーマット:すべてのリクエストとレスポンスは
JSON形式。 - レート制限:安定性確保のため、API は 1 分あたり 100 リクエスト に制限されています。レート制限ヘッダーはすべてのレスポンスに含まれます。
認証
すべての API リクエストは、Authorization ヘッダーの Bearer Token で認証する必要があります。
Authorization: Bearer pk_your_api_key_herepk_your_api_key_here を作成したシークレット API キーに置き換えてください。
cURL リクエスト例
cURL を使って投稿一覧を取得する例:
curl -X GET "https://postion.app/api/v1/posts" \
-H "Authorization: Bearer pk_your_api_key_here" \
-H "Content-Type: application/json"セキュリティのベストプラクティス:
- クライアントサイドコード(公開サイトの JavaScript など)に API キーを公開しない。
- サーバー上の環境変数でキーを安全に保管。
- API キーは定期的にローテーション。
- 各キーに必要最小限のスコープのみを付与。
エンドポイント
コンテンツを管理するためのさまざまなエンドポイントを提供しています。以下が主なリソースです。
Posts
Posts エンドポイントでブログ投稿を管理できます。
GET /api/v1/posts:すべての投稿を一覧表示。POST /api/v1/posts:新しい投稿を作成。GET /api/v1/posts/{id}:ID で特定の投稿を取得。PUT /api/v1/posts/{id}:特定の投稿を更新。DELETE /api/v1/posts/{id}:投稿を削除。
Sites
Sites エンドポイントでサイトを管理できます。
GET /api/v1/sites::すべてのサイトを一覧表示。
Webhooks
Webhook でアカウントのイベントのリアルタイム通知を受信できます。
GET /api/v1/webhooks::すべての Webhook を一覧表示。POST /api/v1/webhooks::新しい Webhook を作成。
コード例
異なるプログラミング言語での API 使用例を紹介します。
JavaScript (Node.js) - 投稿の作成
const response = await fetch('https://postion.app/api/v1/posts', {
method: 'POST',
headers: {
'Authorization': 'Bearer pk_your_api_key_here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'My New Post',
content: { /* JSON 形式の投稿コンテンツ */ },
description: 'A brief description of my post',
published: true,
tags: ['javascript', 'api']
})
});
const data = await response.json();
console.log('Created post:', data);Python - 投稿の取得
import requests
headers = {
'Authorization': 'Bearer pk_your_api_key_here',
'Content-Type': 'application/json'
}
response = requests.get(
'https://postion.app/api/v1/posts',
headers=headers,
params={'published': True}
)
if response.status_code == 200:
data = response.json()
posts = data['data']
print(f"Found {len(posts)} posts")
else:
print(f"Error: {response.status_code}")Webhook の処理 (Node.js/Express)
Webhook 署名を検証して、リクエストが正当なものであることを確認することが重要です。
// Express.js の Webhook ハンドラ
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = req.body;
// 署名の検証
const expectedSignature = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(payload)
.digest('hex');
if (signature !== expectedSignature) {
return res.status(401).send('Invalid signature');
}
const event = JSON.parse(payload);
// イベントの処理
switch (event.event.type) {
case 'post.published':
// 投稿公開の処理...
break;
default:
console.log('Unknown event type:', event.event.type);
}
res.status(200).send('OK');
});追加 API エンドポイント
包括的な連携を構築するための追加エンドポイントです。
Subscribers
購読者ベースをプログラマティックに管理。
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/v1/subscribers | 全購読者を一覧表示 |
GET | /api/v1/subscribers/{id} | 購読者の詳細を取得 |
POST | /api/v1/subscribers | 新しい購読者を追加 |
PUT | /api/v1/subscribers/{id} | 購読者情報を更新 |
DELETE | /api/v1/subscribers/{id} | 購読者を削除 |
例:購読者の取得
const response = await fetch('https://postion.app/api/v1/subscribers', {
headers: {
'Authorization': 'Bearer pk_your_api_key_here',
}
});
const { data: subscribers, pagination } = await response.json();
console.log(`Found ${subscribers.length} subscribers`);Plans
サイトのサブスクリプションプランを管理。
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/v1/plans | 全プランを一覧表示 |
GET | /api/v1/plans/{id} | プランの詳細を取得 |
POST | /api/v1/plans | 新しいプランを作成 |
PUT | /api/v1/plans/{id} | プランを更新 |
Subscriptions
購読者のサブスクリプションデータにアクセス。
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/v1/subscriptions | アクティブなサブスクリプションを一覧表示 |
GET | /api/v1/subscriptions/{id} | サブスクリプションの詳細を取得 |
Transactions
収益と取引履歴を確認。
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/v1/transactions | 全取引を一覧表示 |
GET | /api/v1/transactions/{id} | 取引の詳細を取得 |
Tags
コンテンツタグを管理。
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/v1/tags | 全タグを一覧表示 |
POST | /api/v1/tags | 新しいタグを作成 |
PUT | /api/v1/tags/{id} | タグを更新 |
DELETE | /api/v1/tags/{id} | タグを削除 |
レート制限の詳細
プラットフォームの安定性確保のため、API リクエストはレート制限されています。
レート制限ヘッダー
すべての API レスポンスに以下のヘッダーが含まれます:
| ヘッダー | 説明 |
|---|---|
X-RateLimit-Limit | ウィンドウあたりの最大リクエスト数 |
X-RateLimit-Remaining | 現在のウィンドウの残りリクエスト数 |
X-RateLimit-Reset | ウィンドウがリセットされる Unix タイムスタンプ |
プランごとのレート制限
| プラン | 1 分あたりのリクエスト | 1 日あたりのリクエスト |
|---|---|---|
| Free | 30 | 1,000 |
| Launch | 60 | 5,000 |
| Pro | 100 | 20,000 |
| Enterprise | カスタム | カスタム |
レート制限の処理
レート制限を超えた場合、429 Too Many Requests レスポンスを受け取ります:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please slow down.",
"retry_after": 30
}
}ベストプラクティス:
- 429 を受け取った場合は指数バックオフを実装
- 可能な場合はレスポンスをキャッシュ
- リアルタイム更新にはポーリングの代わりに Webhook を使用
エラーハンドリング
すべての API エラーは一貫したフォーマットに従います。
エラーレスポンス形式
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": {}
}
}一般的なエラーコード
| コード | HTTP ステータス | 説明 |
|---|---|---|
UNAUTHORIZED | 401 | 無効または欠落した API キー |
FORBIDDEN | 403 | キーに必要な権限がない |
NOT_FOUND | 404 | リソースが存在しない |
VALIDATION_ERROR | 400 | 無効なリクエストパラメータ |
RATE_LIMIT_EXCEEDED | 429 | リクエストが多すぎます |
INTERNAL_ERROR | 500 | サーバー側のエラー |
ページネーション
一覧エンドポイントは大規模データセットのページネーションに対応しています。
クエリパラメータ
| パラメータ | 型 | 説明 | デフォルト |
|---|---|---|---|
page | number | ページ番号 | 1 |
limit | number | 1 ページあたりの件数 | 20 |
sort | string | ソートフィールド | created_at |
order | string | asc または desc | desc |
ページネーションレスポンス
{
"data": [...],
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"total_pages": 8,
"has_next": true,
"has_prev": false
}
}API 変更履歴
API の更新情報をお知らせします。
バージョン履歴
| バージョン | 日付 | 変更内容 |
|---|---|---|
| v1.2 | 2025-08 | subscribers と transactions エンドポイントを追加 |
| v1.1 | 2025-06 | plans と subscriptions エンドポイントを追加 |
| v1.0 | 2025-01 | API 初回リリース |
バージョニング: API は URL パス(/api/v1/)でバージョン管理されています。破壊的変更は新しいバージョンとしてリリースされます。