imgpile API

画像や動画をプログラムでアップロード、共有、管理できます。

https://imgpile.com/api/v1 — すべてのエンドポイント

https://cdn.imgpile.com/api/v1/media — ファイルのアップロードのみ(参照 下記)

APIトークンを取得する

ログイン または 登録 APIトークンを生成するには。

コンセプト

imgpileには2つの主要なオブジェクトがあります。違いを理解すると時間を節約できます。

メディア

1つのファイル(画像または動画)。直接のCDN URLがあり、ホットリンク、埋め込み、共有に最適です。

投稿

1つ以上のメディアアイテムを含む、共有可能なページ。タイトル、説明、投票、コメント、タグがあります。

直リンクの画像URLだけ必要ですか? アップロード先 /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

ShareXの設定

カスタムアップローダーの設定をダウンロードしてShareXに取り込むだけです。手動でJSONを編集する必要はありません。

imgpile.sxcuをダウンロード

  1. 上のボタンをクリックしてダウンロード imgpile.sxcu.
  2. ファイルをダブルクリック - ShareXが取り込み、 imgpile 利用可能なアップローダーを作成します。
  3. 開く 宛先 → カスタムアップローダー設定 → ヘッダー そして置き換え YOUR_TOKEN_HERE をAPIトークンに(上の はじめに).
  4. 設定 宛先 → 画像アップローダー → imgpile. スクリーンショットをキャプチャ - URLがクリップボードに https://cdn.imgpile.com/f/….

認証

読み取りエンドポイント(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ボディが返されます。

ステータスコード

コード意味
200OK - リクエスト成功
201Created - リソースが作成されました
400Bad Request - 不正なリクエスト
401Unauthenticated - トークンがない、または無効です
403Forbidden - この操作を行う権限がありません
404Not Found - リソースが存在しません
422Validation failed - リクエストボディに無効なフィールドがあります
429Rate Limited - リクエストが多すぎます。落ち着いてください
451Unavailable for Legal Reasons - ファイルが禁止されたハッシュと一致しました
500Server 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オブジェクト

メディアエンドポイントから返され、投稿レスポンス内に埋め込まれます。

フィールドタイプ説明
slugstring一意の7文字の識別子。URLで使用されます。
filenamestring保存用ファイル名(スラッグと同じ)。
titlestring|nullユーザーが指定したタイトル。
descriptionstring|nullユーザーが指定した説明。
typestringMIMEタイプ - 例 image/jpeg, video/mp4.
widthintegerピクセル幅。
heightintegerピクセル高さ。
moderation_statusenum次のいずれか approved, pending, nsfw, または rejected. 参照 コンテンツフィルタリング.
processedbooleanfalse サイズ違いのバリエーションを生成しています; true 準備できたら。
created_attimestampISO 8601 のタイムスタンプ。
urlsobject利用可能なすべてのサイズの CDN URL — 参照: 直リンク用の画像URL.
userobject|nullアップローダー(ユーザー名、アバター)。ゲスト投稿の場合は null。

Postオブジェクト

1つ以上のメディアアイテムを共有できるコンテナ。

フィールドタイプ説明
idinteger数値ID。使用: slug URL 用。
slugstring一意の7文字の識別子。URLで使用されます。
titlestring|null投稿タイトル。
descriptionstring|null投稿の説明。
scoreintegerネット投票スコア(賛成票 - 反対票)。
view_countinteger総ページビュー数。
media_countintegerこの投稿に含まれるメディアアイテム数。
moderation_statusenum次のいずれか approved, pending, nsfw, または rejected. 参照 コンテンツフィルタリング.
isUpvotedByUserboolean認証済みユーザーがこの投稿に賛成投票したかどうか。
isDownvotedByUserboolean認証済みユーザーがこの投稿に反対投票したかどうか。
created_attimestampISO 8601 のタイムスタンプ。
userobject|null著者(ユーザー名、アバター)。ゲスト投稿の場合は null。
mediaarray配列: メディアオブジェクト. 単一投稿のリクエストでのみ含まれます。
first_mediaobject|null最初のメディア(プレビュー)。フィードのレスポンスでのみ含まれます。
オーナーのみの項目(投稿のオーナーにだけ返されます):
visibilityenumpublic, hidden, または private.
access_keystring|null非公開投稿を閲覧するために必要です。次の形式で追加: ?key=xxx.

Mediaエンドポイント

個別のファイル(画像または動画)。各メディアには、どこでもホットリンクまたは埋め込みできる直接の CDN URL があります。

POST /media 認証が必要です
アップロードホスト

アップロードを送信先: 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]"
レスポンス 201
{ "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", ... } } }
GET /media 公開

フィルタリングとページネーション付きでメディアアイテムを一覧表示します。

パラメータ説明
tagタグ名で絞り込み
sortlatest (デフォルト)または random
periodday, week, month, year, all
limit1ページあたりの件数(最大 250、デフォルト 10)
usernameユーザー名で絞り込み
nsfw次に設定: 1 NSFW コンテンツを含めます。デフォルト:SFW のみ。
リクエスト
curl https://imgpile.com/api/v1/media?limit=20
レスポンス 200
{ "data": [ { "slug": "abc1234", "type": "image/jpeg", "width": 1920, "height": 1080, "moderation_status": "approved", "urls": { ... } }, ... ], "links": { ... }, "meta": { "current_page": 1, "total": 421 } }
GET /media/{slug} 公開

スラッグで単一のメディアアイテムを取得します。

リクエスト
curl https://imgpile.com/api/v1/media/abc1234
レスポンス 200
{ "data": { "slug": "abc1234", "type": "image/jpeg", "width": 1920, "height": 1080, "moderation_status": "approved", "urls": { ... } } }
PATCH /media/{slug} 認証が必要です

自分が所有するメディアを更新します。

パラメータ説明
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"}'
レスポンス 200
{ "message": "Media updated successfully" }
DELETE /media/{slug} 認証が必要です

自分が所有するメディアを削除します。

リクエスト
curl -X DELETE https://imgpile.com/api/v1/media/abc1234 \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "message": "Media deleted successfully." }

Postエンドポイント

1つ以上のメディアアイテムを含む共有可能なページ。タイトル、説明、投票、コメント、タグがあります。

GET /posts 公開

フィルタリングとページネーション付きで公開投稿を一覧表示します。

パラメータ説明
tagタグ名で絞り込み
sortlatest (デフォルト)または random
periodday, week, month, year, all
limit1ページあたりの件数(最大 250、デフォルト 10)
usernameユーザー名で絞り込み
nsfw次に設定: 1 NSFW コンテンツを含めます。デフォルト:SFW のみ。
リクエスト
curl https://imgpile.com/api/v1/posts?sort=latest
レスポンス 200
{ "data": [ { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "score": 12, "view_count": 245, "media_count": 3, "moderation_status": "approved", "user": { "username": "alice", ... }, "first_media": { ... } }, ... ] }
GET /posts/{slug} 公開

ページ分割されたメディア付きの投稿を1件取得します。

パラメータ説明
mediaPageメディアのページ番号(デフォルト 1)
perPage1ページあたりのメディア件数(デフォルト 10)
key非公開投稿に必要です。オーナーは共有リンクから確認できます。
リクエスト
curl https://imgpile.com/api/v1/posts/MSGhYqy # Private post with key: curl "https://imgpile.com/api/v1/posts/xyz789?key=ab12cd34ef"
レスポンス 200
{ "data": { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "description": "...", "score": 12, "view_count": 245, "moderation_status": "approved", "user": { "username": "alice", ... }, "media": [ ... ] } }
POST /posts 認証が必要です

アップロードしたメディアから新しい投稿を作成します。

パラメータ説明
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]}'
レスポンス 201
{ "message": "Post created successfully", "post": { "id": 30720, "slug": "rtWJdHr" } }
PATCH /posts/{slug} 認証が必要です

自分が所有する投稿を更新します。

パラメータ説明
title投稿タイトル(最大255)
description投稿の説明
visibilitypublic, 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"}'
レスポンス 200
{ "message": "Post updated successfully", "visibility": "private", "access_key": "ab12cd34ef" }
DELETE /posts/{slug} 認証が必要です

自分が所有する投稿を削除します。

リクエスト
curl -X DELETE https://imgpile.com/api/v1/posts/rtWJdHr \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "message": "Post deleted successfully" }

コメント

POST /posts/{post}/comments 認証が必要です

投稿にコメントを追加します。

パラメータ説明
content必須 コメント本文(最大500文字)
parent_id任意 返信先のコメントID(スレッド返信用)
リクエスト
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!"}'
レスポンス 201
{ "success": true, "comment": { "id": 456, "content": "Nice shot!", "user_id": 1, "post_id": 12345 } }
DELETE /comments/{comment} 認証が必要です

自分が所有するコメントを削除します。

リクエスト
curl -X DELETE https://imgpile.com/api/v1/comments/123 \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "success": true, "message": "Comment deleted successfully" }

ユーザー

GET /users/{username}/posts 公開

ユーザーの投稿を取得します。

リクエスト
curl https://imgpile.com/api/v1/users/alice/posts
レスポンス 200
{ "data": [ { "id": 30713, "slug": "MSGhYqy", "title": "Sunset photos", "score": 12, "moderation_status": "approved", "first_media": { ... } }, ... ] }
GET /users/{username}/media 公開

ユーザーのメディアを取得します。

リクエスト
curl https://imgpile.com/api/v1/users/alice/media
レスポンス 200
{ "data": [ { "slug": "abc1234", "type": "image/jpeg", "moderation_status": "approved", "urls": { ... } }, ... ] }
GET /users/{username}/comments 公開

ユーザーのコメントを取得します(ページ分割)。

リクエスト
curl https://imgpile.com/api/v1/users/alice/comments
GET /users/{username}/followers 公開

ユーザーのフォロワーを取得します(ページ分割)。

リクエスト
curl https://imgpile.com/api/v1/users/alice/followers
GET /users/{username}/following 公開

このユーザーがフォローしているユーザーを取得します(ページ分割)。

リクエスト
curl https://imgpile.com/api/v1/users/alice/following
POST /users/{username}/follow 認証が必要です

ユーザーをフォローします。

リクエスト
curl -X POST https://imgpile.com/api/v1/users/alice/follow \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "message": "User followed." }
DELETE /users/{username}/follow 認証が必要です

ユーザーのフォローを解除します。

リクエスト
curl -X DELETE https://imgpile.com/api/v1/users/alice/follow \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "message": "User unfollowed." }

投票

POST /posts/{post}/upvote 認証が必要です

投稿にアップボートします。もう一度呼ぶとアップボートが解除されます。

リクエスト
curl -X POST https://imgpile.com/api/v1/posts/123/upvote \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "message": "Post upvoted successfully", "score": 13 }
POST /posts/{post}/downvote 認証が必要です

投稿にダウンボートします。もう一度呼ぶとダウンボートが解除されます。

リクエスト
curl -X POST https://imgpile.com/api/v1/posts/123/downvote \ -H "Authorization: Bearer YOUR_TOKEN"
レスポンス 200
{ "message": "Post downvoted successfully", "score": 11 }
POST /comments/{comment}/upvote 認証が必要です

コメントにアップボートします。もう一度呼ぶとアップボートが解除されます。

リクエスト
curl -X POST https://imgpile.com/api/v1/comments/456/upvote \ -H "Authorization: Bearer YOUR_TOKEN"
POST /comments/{comment}/downvote 認証が必要です

コメントにダウンボートします。もう一度呼ぶとダウンボートが解除されます。

リクエスト
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)
storage.to 無料のファイル共有
25GBのファイル 登録不要 無制限スピード
無料で試す