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's plan page shows, because the website and the API share them. A null limit means the plan has no daily cap there.
The Account object
-
namestring - The account's name.
-
emailstring - Its email address.
-
planstring - The plan the account is on.
-
plan_ends_attimestamp or null -
When a Pro plan ends, or
nullwhile it renews or on the free plan. -
limitsobject - What the plan allows.
-
limits.images_per_dayinteger or null -
Images a rolling 24 hours, or
nullfor no daily cap. -
limits.scans_per_dayinteger or null -
Page scans a rolling 24 hours, or
nullfor no daily cap. -
limits.images_per_scaninteger - The most images one page scan compresses.
-
limits.max_file_sizestring - 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
nullon a plan without a daily cap. -
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
nullon a plan without a daily cap. -
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.
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. A limit of null means no daily cap. 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" \
-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,
)
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/',
'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', {
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,
"images_per_scan": 20,
"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"
}
}
}
}