imgpile API
画像や動画をプログラムでアップロード、共有、管理できます。
https://imgpile.com/api/v1 — すべてのエンドポイント
https://cdn.imgpile.com/api/v1/media — ファイルのアップロードのみ(参照 下記)
コンセプト
imgpileには2つの主要なオブジェクトがあります。違いを理解すると時間を節約できます。
メディア
1つのファイル(画像または動画)。直接のCDN URLがあり、ホットリンク、埋め込み、共有に最適です。
投稿
1つ以上のメディアアイテムを含む、共有可能なページ。タイトル、説明、投票、コメント、タグがあります。
/media. 使用 urls.original レスポンスから取得します。完了。
/posts メディアIDを指定します。
クイックスタート
ファイルを1つアップロードして、直接のCDN URLを取得。ShareX、Discordボット、または画像をホストするだけのスクリプトに最適です。
注: アップロード先: cdn.imgpile.com, ではありません imgpile.com.
curl -X POST https://cdn.imgpile.com/api/v1/media \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"レスポンス:
{
"message": "Media created successfully",
"media": {
"slug": "abc1234",
"type": "image/jpeg",
"urls": {
"original": "https://cdn.imgpile.com/f/abc1234.jpg",
...
}
}
}複数のファイルをアップロードし、メタデータ、投票、コメント付きの投稿にまとめます。
1. 各ファイルを cdn.imgpile.com にアップロードし、返ってきたメディアIDを控えてください:
curl -X POST https://cdn.imgpile.com/api/v1/media \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"
# Returns: { "media": { "id": 12345, ... } }2. そのIDで投稿を作成します:
curl -X POST https://imgpile.com/api/v1/posts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"media_ids": [12345, 12346]}'
# Returns: { "post": { "slug": "xyz789", ... } }3. (任意) タイトルと説明を追加:
curl -X PATCH https://imgpile.com/api/v1/posts/xyz789 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "My post", "description": "Summer 2026"}'投稿は公開されました: https://imgpile.com/p/xyz789
ブラウザまたはNode.jsから画像をアップロード:
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const response = await fetch('https://cdn.imgpile.com/api/v1/media', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
},
body: formData,
});
const { media } = await response.json();
console.log(media.urls.original); // https://cdn.imgpile.com/f/abc1234.jpg認証
読み取りエンドポイント(GET)は 公開 認証は不要です。他のすべてのエンドポイントではベアラートークンが必要です。
curl https://imgpile.com/api/v1/posts認証済みリクエストでは、トークンを Authorization ヘッダーに渡します:
curl -H "Authorization: Bearer YOUR_TOKEN" https://cdn.imgpile.com/api/v1/media -F "[email protected]"ファイルアップロード先 cdn.imgpile.com; 参照 メディア → アップロード 詳細は
上の はじめに セクションでトークンを生成します。
エラー
APIは標準のHTTPステータスコードを返します。エラー応答には、何が問題だったかを説明する message (または error) フィールドを含むJSONボディが返されます。
ステータスコード
| コード | 意味 |
|---|---|
200 | OK - リクエスト成功 |
201 | Created - リソースが作成されました |
400 | Bad Request - 不正なリクエスト |
401 | Unauthenticated - トークンがない、または無効です |
403 | Forbidden - この操作を行う権限がありません |
404 | Not Found - リソースが存在しません |
422 | Validation failed - リクエストボディに無効なフィールドがあります |
429 | Rate Limited - リクエストが多すぎます。落ち着いてください |
451 | Unavailable for Legal Reasons - ファイルが禁止されたハッシュと一致しました |
500 | Server Error - サーバー側で問題が発生しました |
エラー応答の例
401 Unauthenticated
{ "message": "Unauthenticated." }403 Forbidden
{ "message": "This action is unauthorized." }422 Validation failed
{
"message": "The file field is required.",
"errors": {
"file": ["The file field is required."]
}
}429 Rate limited
{ "message": "Too Many Attempts." }次を確認してください Retry-After 制限がリセットされるまでの秒数(レスポンスヘッダー)
451 禁止コンテンツ
{ "error": "This file is not allowed." }API ページネーション
エンドポイント一覧 (GET /posts, GET /media) ページネーションされた結果を返します。デフォルトのページサイズは10です。次で最大250まで指定できます: ?limit=N.
使用 ?page=N ページ移動に使用します。レスポンスにはページネーションのメタデータが含まれます:
{
"data": [ ... ],
"links": {
"first": "https://imgpile.com/api/v1/posts?page=1",
"last": "https://imgpile.com/api/v1/posts?page=42",
"prev": null,
"next": "https://imgpile.com/api/v1/posts?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"to": 10,
"per_page": 10,
"total": 421,
"last_page": 42
}
}繰り返し処理では次に従ってください: links.next それが null, または確認 meta.current_page に対して meta.last_page.
コンテンツフィルタリング
デフォルトでは、一覧エンドポイントは (GET /posts, GET /media) 安全なコンテンツのみを返します(モデレーションステータス approved). さらに成人向けコンテンツも含めるには (nsfw), pass ?nsfw=1:
curl https://imgpile.com/api/v1/posts?nsfw=1禁止コンテンツ (rejected, (例:スパムや不正行為)は、どの ?nsfw フラグであっても公開フィードのエンドポイントには決して返されません。
すべての投稿およびメディアのレスポンスには moderation_status フィールドが含まれるため、クライアント側でフラグ付きアイテムを警告・ぼかし・非表示にできます:
{
"moderation_status": "approved" | "pending" | "nsfw" | "rejected",
...
}approved— すべてのユーザーに安全です。pending— 自動モデレーション待ちです。nsfw— 成人向けコンテンツ。公開エンドポイントから返されるのは、次の場合のみです:?nsfw=1.rejected— スパム/不正行為。公開エンドポイントには決して返されません。
非表示の投稿 スラッグでアクセスできますが、フィードには決して表示されません。 非公開の投稿 次が必要です: ?key=xxx クエリパラメータ(オーナーは投稿の共有リンクから確認できます)。
レート制限
- 公開リクエスト (トークンなし):IPあたり30リクエスト/分
- 認証済みリクエスト: ユーザーあたり120リクエスト/分
- ファイルアップロード: ユーザー/IPあたり1,000ファイル/日
- 最大ファイルサイズ: 100 MB
- 対応タイプ: image/* および video/*
レート制限ヘッダーはすべてのレスポンスに含まれます (X-RateLimit-Limit, X-RateLimit-Remaining).
Mediaオブジェクト
メディアエンドポイントから返され、投稿レスポンス内に埋め込まれます。
| フィールド | タイプ | 説明 |
|---|---|---|
| slug | string | 一意の7文字の識別子。URLで使用されます。 |
| filename | string | 保存用ファイル名(スラッグと同じ)。 |
| title | string|null | ユーザーが指定したタイトル。 |
| description | string|null | ユーザーが指定した説明。 |
| type | string | MIMEタイプ - 例 image/jpeg, video/mp4. |
| width | integer | ピクセル幅。 |
| height | integer | ピクセル高さ。 |
| moderation_status | enum | 次のいずれか approved, pending, nsfw, または rejected. 参照 コンテンツフィルタリング. |
| processed | boolean | false サイズ違いのバリエーションを生成しています; true 準備できたら。 |
| created_at | timestamp | ISO 8601 のタイムスタンプ。 |
| urls | object | 利用可能なすべてのサイズの CDN URL — 参照: 直リンク用の画像URL. |
| user | object|null | アップローダー(ユーザー名、アバター)。ゲスト投稿の場合は null。 |
Postオブジェクト
1つ以上のメディアアイテムを共有できるコンテナ。
| フィールド | タイプ | 説明 |
|---|---|---|
| id | integer | 数値ID。使用: slug URL 用。 |
| slug | string | 一意の7文字の識別子。URLで使用されます。 |
| title | string|null | 投稿タイトル。 |
| description | string|null | 投稿の説明。 |
| score | integer | ネット投票スコア(賛成票 - 反対票)。 |
| view_count | integer | 総ページビュー数。 |
| media_count | integer | この投稿に含まれるメディアアイテム数。 |
| moderation_status | enum | 次のいずれか approved, pending, nsfw, または rejected. 参照 コンテンツフィルタリング. |
| isUpvotedByUser | boolean | 認証済みユーザーがこの投稿に賛成投票したかどうか。 |
| isDownvotedByUser | boolean | 認証済みユーザーがこの投稿に反対投票したかどうか。 |
| created_at | timestamp | ISO 8601 のタイムスタンプ。 |
| user | object|null | 著者(ユーザー名、アバター)。ゲスト投稿の場合は null。 |
| media | array | 配列: メディアオブジェクト. 単一投稿のリクエストでのみ含まれます。 |
| first_media | object|null | 最初のメディア(プレビュー)。フィードのレスポンスでのみ含まれます。 |
| オーナーのみの項目(投稿のオーナーにだけ返されます): | ||
| visibility | enum | public, hidden, または private. |
| access_key | string|null | 非公開投稿を閲覧するために必要です。次の形式で追加: ?key=xxx. |
Mediaエンドポイント
個別のファイル(画像または動画)。各メディアには、どこでもホットリンクまたは埋め込みできる直接の CDN URL があります。
アップロードを送信先: https://cdn.imgpile.com/api/v1/media — ではありません imgpile.com. ファイルは専用のオリジンに保存されます。メインホストへの POST は失敗します。
それ以外のエンドポイントは imgpile.com/api/v1 いつも通りです。
画像または動画をアップロードします。次の形式で送信: multipart/form-data.
| パラメータ | 説明 |
|---|---|
| file必須 | アップロードするファイル。最大 100 MB。image/* と video/* を受け付けます。 |
| post_id任意 | 既存の投稿に添付します。 |
curl -X POST https://cdn.imgpile.com/api/v1/media \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"{
"message": "Media created successfully",
"media": {
"slug": "abc1234",
"filename": "abc1234",
"type": "image/jpeg",
"width": 1920,
"height": 1080,
"moderation_status": "approved",
"urls": {
"original": "https://cdn.imgpile.com/f/abc1234.jpg",
...
}
}
}フィルタリングとページネーション付きでメディアアイテムを一覧表示します。
| パラメータ | 説明 |
|---|---|
| tag | タグ名で絞り込み |
| sort | latest (デフォルト)または random |
| period | day, week, month, year, all |
| limit | 1ページあたりの件数(最大 250、デフォルト 10) |
| username | ユーザー名で絞り込み |
| nsfw | 次に設定: 1 NSFW コンテンツを含めます。デフォルト:SFW のみ。 |
curl https://imgpile.com/api/v1/media?limit=20{
"data": [
{
"slug": "abc1234",
"type": "image/jpeg",
"width": 1920,
"height": 1080,
"moderation_status": "approved",
"urls": { ... }
},
...
],
"links": { ... },
"meta": { "current_page": 1, "total": 421 }
}スラッグで単一のメディアアイテムを取得します。
curl https://imgpile.com/api/v1/media/abc1234{
"data": {
"slug": "abc1234",
"type": "image/jpeg",
"width": 1920,
"height": 1080,
"moderation_status": "approved",
"urls": { ... }
}
}自分が所有するメディアを更新します。
| パラメータ | 説明 |
|---|---|
| title | メディアタイトル |
| description | メディアの説明 |
curl -X PATCH https://imgpile.com/api/v1/media/abc1234 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "New title"}'{
"message": "Media updated successfully"
}自分が所有するメディアを削除します。
curl -X DELETE https://imgpile.com/api/v1/media/abc1234 \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Media deleted successfully."
}Postエンドポイント
1つ以上のメディアアイテムを含む共有可能なページ。タイトル、説明、投票、コメント、タグがあります。
フィルタリングとページネーション付きで公開投稿を一覧表示します。
| パラメータ | 説明 |
|---|---|
| tag | タグ名で絞り込み |
| sort | latest (デフォルト)または random |
| period | day, week, month, year, all |
| limit | 1ページあたりの件数(最大 250、デフォルト 10) |
| username | ユーザー名で絞り込み |
| nsfw | 次に設定: 1 NSFW コンテンツを含めます。デフォルト:SFW のみ。 |
curl https://imgpile.com/api/v1/posts?sort=latest{
"data": [
{
"id": 30713,
"slug": "MSGhYqy",
"title": "Sunset photos",
"score": 12,
"view_count": 245,
"media_count": 3,
"moderation_status": "approved",
"user": { "username": "alice", ... },
"first_media": { ... }
},
...
]
}ページ分割されたメディア付きの投稿を1件取得します。
| パラメータ | 説明 |
|---|---|
| mediaPage | メディアのページ番号(デフォルト 1) |
| perPage | 1ページあたりのメディア件数(デフォルト 10) |
| key | 非公開投稿に必要です。オーナーは共有リンクから確認できます。 |
curl https://imgpile.com/api/v1/posts/MSGhYqy
# Private post with key:
curl "https://imgpile.com/api/v1/posts/xyz789?key=ab12cd34ef"{
"data": {
"id": 30713,
"slug": "MSGhYqy",
"title": "Sunset photos",
"description": "...",
"score": 12,
"view_count": 245,
"moderation_status": "approved",
"user": { "username": "alice", ... },
"media": [ ... ]
}
}アップロードしたメディアから新しい投稿を作成します。
| パラメータ | 説明 |
|---|---|
| media_ids必須 | 投稿に含めるメディアIDの配列 |
curl -X POST https://imgpile.com/api/v1/posts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"media_ids": [12345, 12346]}'{
"message": "Post created successfully",
"post": {
"id": 30720,
"slug": "rtWJdHr"
}
}自分が所有する投稿を更新します。
| パラメータ | 説明 |
|---|---|
| title | 投稿タイトル(最大255) |
| description | 投稿の説明 |
| visibility | public, hidden, または private. 設定先 private 自動生成する access_key. |
| is_nsfw | ブール値。投稿をアダルトコンテンツとしてマークし、閲覧者のNSFWトグルの裏に表示制限します。設定すると、投稿は以下では自動的に解決されません nsfw. |
| media_order | 希望する順番のメディアスラッグ配列 |
curl -X PATCH https://imgpile.com/api/v1/posts/rtWJdHr \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "Updated title", "visibility": "private"}'{
"message": "Post updated successfully",
"visibility": "private",
"access_key": "ab12cd34ef"
}自分が所有する投稿を削除します。
curl -X DELETE https://imgpile.com/api/v1/posts/rtWJdHr \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Post deleted successfully"
}ユーザー
ユーザーの投稿を取得します。
curl https://imgpile.com/api/v1/users/alice/posts{
"data": [
{
"id": 30713,
"slug": "MSGhYqy",
"title": "Sunset photos",
"score": 12,
"moderation_status": "approved",
"first_media": { ... }
},
...
]
}ユーザーのメディアを取得します。
curl https://imgpile.com/api/v1/users/alice/media{
"data": [
{
"slug": "abc1234",
"type": "image/jpeg",
"moderation_status": "approved",
"urls": { ... }
},
...
]
}ユーザーのコメントを取得します(ページ分割)。
curl https://imgpile.com/api/v1/users/alice/commentsユーザーのフォロワーを取得します(ページ分割)。
curl https://imgpile.com/api/v1/users/alice/followersこのユーザーがフォローしているユーザーを取得します(ページ分割)。
curl https://imgpile.com/api/v1/users/alice/followingユーザーをフォローします。
curl -X POST https://imgpile.com/api/v1/users/alice/follow \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "User followed."
}ユーザーのフォローを解除します。
curl -X DELETE https://imgpile.com/api/v1/users/alice/follow \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "User unfollowed."
}投票
投稿にアップボートします。もう一度呼ぶとアップボートが解除されます。
curl -X POST https://imgpile.com/api/v1/posts/123/upvote \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Post upvoted successfully",
"score": 13
}投稿にダウンボートします。もう一度呼ぶとダウンボートが解除されます。
curl -X POST https://imgpile.com/api/v1/posts/123/downvote \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Post downvoted successfully",
"score": 11
}コメントにアップボートします。もう一度呼ぶとアップボートが解除されます。
curl -X POST https://imgpile.com/api/v1/comments/456/upvote \
-H "Authorization: Bearer YOUR_TOKEN"コメントにダウンボートします。もう一度呼ぶとダウンボートが解除されます。
curl -X POST https://imgpile.com/api/v1/comments/456/downvote \
-H "Authorization: Bearer YOUR_TOKEN"直リンク用の画像URL
アップロードされたすべてのファイルはCDN経由で配信されます。メディアのレスポンスには urls 利用可能なすべてのサイズを含むオブジェクトが含まれます:
https://cdn.imgpile.com/f/{filename}.{ext} — Original
https://cdn.imgpile.com/f/{filename}_xs.{ext} — Extra small
https://cdn.imgpile.com/f/{filename}_sm.{ext} — Small
https://cdn.imgpile.com/f/{filename}_md.{ext} — Medium
https://cdn.imgpile.com/f/{filename}_lg.{ext} — Large
https://cdn.imgpile.com/f/{filename}_xl.{ext} — Extra large
https://cdn.imgpile.com/f/{filename}_thumb.jpg — Thumbnail (videos)
コメント
投稿にコメントを追加します。
curl -X POST https://imgpile.com/api/v1/posts/MSGhYqy/comments \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content": "Nice shot!"}'{ "success": true, "comment": { "id": 456, "content": "Nice shot!", "user_id": 1, "post_id": 12345 } }自分が所有するコメントを削除します。
curl -X DELETE https://imgpile.com/api/v1/comments/123 \ -H "Authorization: Bearer YOUR_TOKEN"{ "success": true, "message": "Comment deleted successfully" }