Developers

Your first image.
A few simple steps.

Start with an App and an API key. Add img.pro sign-in when you need a separate image space for every connected user.

Start for free

01 / Set up

Create your App.

Sign in to img.pro, create an App, and issue an App storage only key from its API Keys page. Give the key the permissions your backend needs.

Keep the API key on your server. Your users don’t need img.pro accounts for you to use App storage.

What is an App?

Your project’s container in img.pro: its own storage, API keys, members, users, and Free, Pro, or Unlimited plan. You still build and host your application.

02 / Store

Upload your first image.

Send a supported image as multipart form data. An accepted upload returns an image URL and optimized Small, Medium, and Large URLs in the sizes object. Use sizes.small.url, sizes.medium.url, and sizes.large.url directly.

cURL / server-side
curl https://api.img.pro/v1/images \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@cobalt-ceramic.jpg"

Replace YOUR_API_KEY with your key and cobalt-ceramic.jpg with a local image. Run this from your server or terminal.

03 / Deliver

Put the URL to work.

Use the complete image URL returned by the API, including its storage path. Add parameters to create the size and crop you need; the address below is illustrative.

Image URL
https://src.img.pro/PREFIX/FILENAME.jpg?w=800&h=600&fit=cover
Explore the transformation showcase

04 / Optional sign-in

A place for each user.

Turn on sign-in in the Sign-in tab of your App’s Connect page: add your App URL and exact callback URLs, then create an App-wide key. After that, each connection follows the hosted flow.

  1. Send the user to img.pro’s hosted sign-in with your App ID, callback, and state.
  2. Let them sign in. Typing the email code connects them, and someone already signed in to img.pro confirms the connection instead.
  3. Validate state on your backend and exchange the one-time code for the user ID.
  4. Use the App-wide key and X-Img-User to select that user’s storage.
cURL / server-side
curl https://api.img.pro/v1/images \
  -H "Authorization: Bearer YOUR_APP_WIDE_KEY" \
  -H "X-Img-User: CONNECTED_USER_ID" \
  -F "file=@cobalt-ceramic.jpg"
Authenticate your caller first.

Only select the img.pro user ID associated with your signed-in user. Keep the App-wide key on your backend.

Useful boundaries

Explicit by design.

Public image URLs
Anyone with the URL can load an image. API metadata reads still require a read key for its App.
One storage per request
With an App-wide key, no selector means App storage. A valid connected-user selector means that user’s storage. An invalid selector never falls back to App storage.
Accepted input
JPEG, PNG, GIF, WebP, AVIF, and supported HEIC / HEIF. Maximum 20 MB (20,000,000 bytes) per file.
Free limits
5,000 images and 50 users per App. Existing images and connections keep working at the limit.

Ready for your next idea

Start with an image.
Build something of your own.