Account API
Read your Iminify plan, its limits and how much of the day's images and page scans are used, from the account endpoint.
The account endpoint tells a script what it's working with: the plan behind the key, what that plan allows, and how much of today's allowance is gone. It's cheap to call and a good first request for any integration, because it proves the key works without compressing anything.
The limits and the usage are the same numbers the website shows on its plan page, and for site crawls under the scan page's address bar, because the website and the API share them. On max, which is unlimited, images_per_day, scans_per_day and files_per_day are null, and so is the remaining of each; its AI alt texts have a number, as on every plan. files_per_day and usage.files are your upload groups' files, every output in every format, which only the API makes.
The plan is free, pro or max, the two paid plans, or trial for the days of Pro an account gets once, as its email is verified or with the trial button on the website: Pro's features, with the daily counts limits shows. plan_ends_at says when the trial ends. After that the same key answers free, and nothing in your integration has to change.
The Account object
-
namestring - The account's name.
-
emailstring - Its email address.
-
planstring -
The plan the account is on:
proandmaxare the paid plans, andtrialis the days of Pro an account gets once, as its email is verified or with the trial button on the website, after which it answersfree. -
plan_ends_attimestamp or null -
When a paid plan or a trial ends, or
nullwhile a paid plan renews or on the free plan. -
limitsobject - What the plan allows.
-
limits.images_per_dayinteger or null -
Images a rolling 24 hours, or
nullonmax, which is unlimited. -
limits.scans_per_dayinteger or null -
Page scans a rolling 24 hours, or
nullonmax, which is unlimited. -
limits.alt_texts_per_dayinteger -
AI alt texts a rolling 24 hours. Every plan has a number here,
maxincluded. -
limits.files_per_dayinteger or null -
Files a rolling 24 hours that your upload groups make: every output in every format is one.
nullonmax, which is unlimited. -
limits.images_per_scaninteger - The most images one page scan compresses.
-
limits.crawls_per_dayinteger or null - Site crawls a rolling 24 hours: 0 on a plan without site crawls.
-
limits.pages_per_crawlinteger - The most pages one site crawl scans, from a sitemap or a list: 0 on a plan without site crawls.
-
limits.monitorsinteger - How many sites can have a weekly site check at once: 0 on a plan without weekly checks.
-
limits.max_file_sizeinteger - The largest file you can upload or have fetched, in bytes.
-
limits.max_megapixelsinteger - The most pixels an image, or the image a resize would produce, may have, in millions.
-
limits.compressions_per_minuteinteger - Compressions you can queue in a minute: uploads, recompresses and retries together, from the API and the website combined.
-
limits.scans_per_minuteinteger - Page scans you can start in a minute, new and retried together, from the API and the website combined.
-
limits.requests_per_minuteinteger - Calls to the API in a minute, of every kind.
-
limits.max_batchinteger - The most ids one batch call takes.
-
usageobject - How much of the day's allowance is used. The website and the API spend the same counts.
-
usage.imagesobject - Images compressed.
-
usage.images.usedinteger - How many the current window has used.
-
usage.images.remaininginteger or null -
How many are left, or
nullwhere the plan's daily limit isnull. -
usage.images.resets_attimestamp or null -
When the window opens again, or
nullwhile nothing has been used. The window is a rolling 24 hours from the first use, not midnight. -
usage.scansobject - Page scans run.
-
usage.scans.usedinteger - How many the current window has used.
-
usage.scans.remaininginteger or null -
How many are left, or
nullwhere the plan's daily limit isnull. -
usage.scans.resets_attimestamp or null -
When the window opens again, or
nullwhile nothing has been used. The window is a rolling 24 hours from the first use, not midnight. -
usage.crawlsobject - Site crawls started.
-
usage.crawls.usedinteger - How many the current window has used.
-
usage.crawls.remaininginteger or null -
How many are left, or
nullwhere the plan's daily limit isnull. -
usage.crawls.resets_attimestamp or null -
When the window opens again, or
nullwhile nothing has been used. The window is a rolling 24 hours from the first use, not midnight. -
usage.alt_textsobject - AI alt texts written.
-
usage.alt_texts.usedinteger - How many the current window has used.
-
usage.alt_texts.remaininginteger -
How many are left, or
nullwhere the plan's daily limit isnull. -
usage.alt_texts.resets_attimestamp or null -
When the window opens again, or
nullwhile nothing has been used. The window is a rolling 24 hours from the first use, not midnight. -
usage.filesobject - Files your upload groups made, counted when each group opened.
-
usage.files.usedinteger - How many the current window has used.
-
usage.files.remaininginteger or null -
How many are left, or
nullwhere the plan's daily limit isnull. -
usage.files.resets_attimestamp or null -
When the window opens again, or
nullwhile nothing has been used. The window is a rolling 24 hours from the first use, not midnight.
Get your account
/api/v1/account
Your plan, what it allows and how much of today's allowance is gone. The website and the API spend the same daily counts, so an image compressed on the site shows up in usage here too. On max, which is unlimited, the images and page scans a day and what is left of them are null. The window is a rolling 24 hours that starts with your first image or scan, not midnight, so resets_at is null until something has been used. This is also the cheapest way to check that a key works.
Request
curl "https://www.iminify.com/api/v1/account" \
--connect-timeout 10 --max-time 30 \
-H "Authorization: Bearer $IMINIFY_API_KEY" \
-H "Accept: application/json"
import os
import requests
API = "https://www.iminify.com/api/v1"
HEADERS = {
"Authorization": f"Bearer {os.environ['IMINIFY_API_KEY']}",
"Accept": "application/json",
}
response = requests.get(
f"{API}/account",
headers=HEADERS,
timeout=(10, 30),
)
response.raise_for_status()
print(response.json())
<?php
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://www.iminify.com/api/v1/',
'connect_timeout' => 10,
'timeout' => 30,
'headers' => [
'Authorization' => 'Bearer ' . getenv('IMINIFY_API_KEY'),
'Accept' => 'application/json',
],
]);
$response = $client->get('account');
print_r(json_decode((string) $response->getBody(), true));
const response = await fetch('https://www.iminify.com/api/v1/account', {
signal: AbortSignal.timeout(30_000),
headers: {
Authorization: `Bearer ${process.env.IMINIFY_API_KEY}`,
Accept: 'application/json',
},
});
if (!response.ok) {
throw new Error(`${response.status}: ${(await response.json()).message}`);
}
console.log(await response.json());
Response 200
{
"data": {
"name": "Ada Lovelace",
"email": "[email protected]",
"plan": "free",
"plan_ends_at": null,
"limits": {
"images_per_day": 40,
"scans_per_day": 3,
"alt_texts_per_day": 40,
"files_per_day": 1500,
"images_per_scan": 20,
"crawls_per_day": 0,
"pages_per_crawl": 0,
"monitors": 0,
"max_file_size": 33554432,
"max_megapixels": 64,
"compressions_per_minute": 20,
"scans_per_minute": 1,
"requests_per_minute": 60,
"max_batch": 150
},
"usage": {
"images": {
"used": 12,
"remaining": 28,
"resets_at": "2026-10-02T09:30:00+00:00"
},
"scans": {
"used": 1,
"remaining": 2,
"resets_at": "2026-10-02T11:05:00+00:00"
},
"crawls": {
"used": 0,
"remaining": 0,
"resets_at": null
},
"alt_texts": {
"used": 12,
"remaining": 28,
"resets_at": "2026-10-02T09:30:00+00:00"
},
"files": {
"used": 6,
"remaining": 1494,
"resets_at": "2026-10-02T09:40:00+00:00"
}
}
}
}