DAM Wiki

ImageKit API

ImageKit Private Limited (India), with US subsidiary ImageKit Inc · India (New Delhi); US entity in Newark, Delaware · Founded 2016 · independent, privately heldVerified 2026-11-10 · 97 sources
  • SaaS
  • SMB to mid-market (self-serve plans); Enterprise plans for SSO, governance and custom limits
  • REST API
  • OpenAPI spec
  • Webhooks
  • SAML SSO
  • MCP: 3 hosted remote servers - DAM
Complete · 7 of 7 pages
97sources
2API specs
11-10verified 2026
Official website ↗ImageKit alternatives →

In brief

From this page’s summary fields, verified 2026-11-10. Sources in each section.
Authentication (details in section Authentication)
Basic auth, API key, JWT, OAuth 2.0 (PKCE)
Rate limit (details in section Limits & quirks)
Burst + sustained per endpoint, HTTP 429; ~40 reads/s, 5-20 writes/s advised; Upload API unlimited
Webhooks (details in section Events & webhooks)
Dashboard or API, 15 event types, Standard Webhooks HMAC-SHA256, max 3 endpoints
Pagination (details in section At a glance)
offset (skip/limit, max 1,000) on file listing; cursor on tag listing
API spec (details in section Stored API specs)
OpenAPI 3.1.0 (1 file, 60 operations), Apache-2.0

Scope: the REST APIs behind ImageKit's Media Library (DAM) and account: Upload, file and folder management, custom metadata fields, saved extensions, cache purge, metadata extraction, account management (usage, origins, URL endpoints, named transformations, webhooks). Also covered: webhooks, SDKs and the hosted MCP servers. The URL-based delivery and transformation API (https://ik.imagekit.io/{imagekit_id}/…) is summarised only where it touches DAM integration. All facts come from public documentation and the public OpenAPI file. No authenticated call was made; marks unauthenticated probes.

At a glance

API styles
REST/JSON over HTTPS; the Upload API takes multipart/form-data S22. A URL API for delivery: transformations are expressed in the delivery URL S1. A JavaScript Media Library widget for embedding the DAM in other apps S59. No GraphQL or SOAP
Base URL(s)
Management: https://api.imagekit.io/v1/… S26. Upload: https://upload.imagekit.io/api/v1/files/upload (V1) and https://upload.imagekit.io/api/v2/files/upload (V2, beta) S26. Delivery: https://ik.imagekit.io/{imagekit_id}/{path}, or a custom domain on Pro and above S1 S3. Hosted MCP: https://imagekit.io/mcp/dam, https://imagekit.io/mcp/admin, https://devtools-mcp.imagekit.io/mcp S25. The API host is the same for every processing region; the region is a per-account setting S26 S64
Current version(s) & deprecations
Paths are versioned per endpoint (/v1/…; upload v1 and v2). The spec's own version is 1.0.0; it changes through dated commits rather than version numbers S26. Upload V2 (JWT) is labelled beta S26. Deprecated: the local npm MCP package @imagekit/api-mcp and its hosted endpoint https://api-mcp.imagekit.io/mcp, replaced by the DAM and Admin servers S25 S32. Webhooks: the legacy x-ik-signature header is still sent alongside the Standard Webhooks headers S24. Legacy npm package imagekit deprecated in favour of @imagekit/nodejs S31
Auth methods
HTTP Basic: private API key as the username, empty password S22. Client-side upload V1: one-time token, expire and an HMAC-SHA1 signature computed server-side with the private key, plus the public key S26. Client-side upload V2: a server-generated JWT (HS256, kid = public key) that signs all upload parameters S90. MCP (DAM, Admin): OAuth 2.0 authorization code with PKCE (S256), dynamic client registration, refresh tokens S35 S25. OAuth is used only by the MCP servers; the REST API documents API keys only S22 S26
Token lifetime / refresh
API keys have no fixed lifetime. When a key pair is rolled, the old key can expire immediately, in 1 h, 24 h, 3 days or 7 days S23. Upload V1 expire must be less than 1 hour in the future S26. Upload V2 JWT: exp at most 3,600 s after iat S90. MCP OAuth access and refresh token lifetimes: Not public
Scopes / permission model
API keys: standard keys (max 5) have read/write on everything except account-management APIs. Restricted keys (max 5) carry None / Read only / Read and write per resource group (media management, account management) S23. MCP OAuth scopes follow the pattern mcp_{resource}:{read|write|update|delete}. Resources: media_library, custom_metadata_fields, cache (DAM server); origins, url_endpoints, webhooks, usage:read, billing:read (Admin server). Plus openid and offline_access S35 S36. MCP actions are further limited by the user's role and DAM sharing permissions S25
Official spec
Yes: OpenAPI 3.1.0 "ImageKit API" 1.0.0 in the public GitHub repository imagekit-developer/openapi (Apache-2.0), generated with Stainless; 40 public paths / 60 operations, plus one internal SDK-test endpoint S26. Archived on DAM Wiki: API spec downloads. Unverified The API overview page still links an older copy in imagekit-developer/sdk-generation (openapi/v1.0.0.yaml, last changed 2026-07-14, no licence). It lacks later additions such as webhook CRUD and tag listing S22 S28. A Postman collection is linked from the API overview S22
Rate limits
All APIs except Upload are rate-limited per account and per endpoint, with a burst (per-second) and a sustained (per-minute) threshold. Exceeding either returns HTTP 429. Headers: X-RateLimit-Limit, X-RateLimit-Reset (ms to wait), X-RateLimit-Interval S22. Published guidance: about 40 req/s average for reads (bursts up to 100/s), 5-20 req/s for writes. Bulk tag add/remove and custom-metadata-field CRUD are capped at 5 req/s S22. Exact per-endpoint figures: Not public. Higher limits via support S22. Cache purge requests are also metered per month by plan (500 Free, 1,000 Lite/Pro) S3
Pagination
Offset on GET/v1/files: skip (default 0) and limit (default and max 1,000) S26. Cursor on GET/v1/tags (cursor = nextCursor from the previous page; bound to the original filters) S26. Deep-pagination limits beyond skip: Not public
Webhooks / events
Yes. Configured in the dashboard or through the Webhooks API (/v1/accounts/webhooks, up to 3 endpoints per account) S24 S26. 15 event types: video transformation (accepted/ready/error), upload pre-/post-transform (success/error), file.created/updated/deleted, file-version.created/deleted, folder.created/updated/deleted S26 S39. Signed per Standard Webhooks (HMAC-SHA256, webhook-id / webhook-timestamp / webhook-signature, secret prefixed whsec_) S24. Per-upload webhookUrl for extension results S26. Retry policy: Not public
Official SDKs
Back-end, generated from the spec (Stainless): Node.js/TypeScript (@imagekit/nodejs 7.14.0), Python (imagekitio 5.12.0), Go (v2), Java, Ruby, .NET, all Apache-2.0 S26 S30 S31 S33 S88. PHP (MIT; Packagist release 4.0.2 dated 2024-09-05) S88. Front-end: JavaScript core plus React, Vue.js, Angular, Next.js, Astro, React Native. Mobile: iOS, Android S29
Sandbox / trial access
Forever free plan (no time limit; 2 users, 3 GB DAM storage, 20 GB bandwidth) S3. The DevTools MCP server is public and needs no account S25. No separate sandbox environment is documented; Enterprise sub-accounts can be used for dev/staging/production separation S48

Authentication

  1. Get keys: an account administrator opens Developer options → API keys in the dashboard. Each account has a public key (public_…, safe for client code, used only for client-side uploads) and a private key (private_…, server-only) S23. Revealing a private key requires the user's password; SSO and magic-link users must first set a password S23.
  2. Server-side calls: send Authorization: Basic base64("{private_key}:") (note the trailing colon) over HTTPS. A request without a key returns 401; an expired key, a disabled account or an exhausted storage quota returns 403 S22. An unauthenticated GEThttps://api.imagekit.io/v1/files returned 401 with the message that the request "does not contain private API key" S38.
  3. Restricted keys: create a key with per-resource access (None, Read only, Read and write) for media management and account management. Account-management APIs (origins, URL endpoints, usage analytics, named transformations, webhooks) require a restricted key with that access; standard keys cannot call them S23.
  4. Client-side uploads: the browser or app asks your backend for credentials S26 S90:
    • V1: the backend returns token (unique, never reused), expire (Unix time less than 1 h ahead) and signature = HMAC-SHA1(token + expire, private key).
    • V2 (beta): the backend returns a JWT signed with HS256 using the private key, with kid = public key; its payload includes every upload parameter, so tampering is detected; exp - iat ≤ 3600.
  5. MCP OAuth (DAM and Admin servers): the MCP client discovers https://imagekit.io/.well-known/oauth-protected-resource/mcp/{dam|admin}, registers dynamically (/oauth/register), and runs authorization code + PKCE against https://imagekit.io/oauth/authorize and /oauth/token. The user signs in and picks permissions on a consent screen. Grants can be revoked from the user profile S35 S36 S25. A token granted for DAM cannot call Admin tools, and vice versa S13.

Core resources

Derived from the archived OpenAPI file (commit d9244ba, 2026-11-02). Methods and paths are relative to https://api.imagekit.io unless noted S26.

ResourceEndpointsNotes
UploadPOSThttps://upload.imagekit.io/api/v1/files/upload · POSThttps://upload.imagekit.io/api/v2/files/uploadBinary, public URL or Base64. Parameters: fileName, folder, tags, customMetadata, isPrivateFile, isPublished, extensions, transformation (pre/post), checks, webhookUrl, overwrite flags, description. Not rate-limited
Assets (files)GET/v1/files (list & search) · GET/PATCH/v1/files/{fileId}/details · DELETE/v1/files/{fileId} · POST/v1/files/batch/deleteByFileIds · POST/v1/files/copy · POST/v1/files/move · PUT/v1/files/renamePATCHdetails updates tags, AI-tag removal, custom metadata, description, custom coordinates, extensions (with webhookUrl) and publish status
VersionsGET/v1/files/{fileId}/versions · GET/DELETE/v1/files/{fileId}/versions/{versionId} · PUT/v1/files/{fileId}/versions/{versionId}/restoreMax 100 versions per file
TagsPOST/v1/files/addTags · POST/v1/files/removeTags · POST/v1/files/removeAITags · GET/v1/tagsBulk tag operations (5 req/s). GET/v1/tags (added 2026-11-02) lists distinct tags with asset counts, cursor-paginated
Metadata schemaGET/POST/v1/customMetadataFields · PATCH/DELETE/v1/customMetadataFields/{id}Field types: Text, Textarea, Number, Date, Boolean, SingleSelect, MultiSelect S42
Embedded metadataGET/v1/files/{fileId}/metadata · GET/v1/metadata?url=…EXIF and image properties of an uploaded file or a remote URL
FoldersPOST/v1/folder · DELETE/v1/folder · POST/v1/bulkJobs/copyFolder · POST/v1/bulkJobs/moveFolder · POST/v1/bulkJobs/renameFolder · GET/v1/bulkJobs/{jobId}Copy/move/rename of folders run as asynchronous bulk jobs
Saved extensionsGET/POST/v1/saved-extensions · GET/PATCH/DELETE/v1/saved-extensions/{id}Reusable AI/processing presets (auto-tagging, background removal, AI tasks…) applied at upload or later
CachePOST/v1/files/purge · GET/v1/files/purge/{requestId}Purges the CDN cache and ImageKit's internal cache for a URL; asynchronous
Renditions / transformationsGET/POST/v1/named-transformations · GET/PATCH/DELETE/v1/named-transformations/{id}Named transformations (API added 2026-08-15). Renditions themselves are generated on the fly through delivery URLs, not stored as separate API objects
Account: usage & contractGET/v1/accounts/usage · GET/v1/accounts/usage-analytics (beta) · GET/v1/accounts/contractUsage between two dates (max 90-day window for analytics); contract consumption (added 2026-10-30)
Account: delivery setupGET/POST/v1/accounts/origins · GET/PUT/DELETE/v1/accounts/origins/{id} · GET/POST/v1/accounts/url-endpoints · GET/PUT/DELETE/v1/accounts/url-endpoints/{id}External storage origins and URL endpoints
WebhooksGET/POST/v1/accounts/webhooks · GET/PATCH/DELETE/v1/accounts/webhooks/{id}Added 2026-10-19; returns the signing secret
Collections, public links, path policies, access control, commentsNot in the public REST APIAvailable in the dashboard and, for collections, public links, access control and path policies, through DAM MCP tools S25
Users, groups, rolesNot in the public REST APIManaged in the dashboard or by SSO JIT provisioning S46 S47
Workflows / rightsN/ANo approval-workflow or rights-management objects in the API. Drafts (isPublished) and path policies are the governance levers

Data model

  • File: identified by fileId. Main attributes: name, filePath, url, thumbnail, type, fileType, mime, width/height, size, hasAlpha, video/audio properties (duration, bitRate, codecs), tags, AITags, description, customMetadata (object keyed by field name), embeddedMetadata, customCoordinates, isPrivateFile, isPublished, versionInfo, createdAt, updatedAt S26.
  • Version: each re-upload to the same path creates a version with its own versionId. All versions count toward storage S26 S52.
  • Folder: path-based (/campaigns/summer/). Folders appear in listings with type=folder S26.
  • Custom metadata field: id, name (immutable API key), label, schema (type, default, required, min/max, select options). The reserved field _internal_original_created_datetime preserves original creation dates of migrated assets S26 S42.
  • Renditions: not stored objects. Any variant is a delivery URL with transformation parameters (tr: path segment or query). Named transformations are aliases, and post-transformations at upload pre-generate variants S1 S40.
  • Taxonomy: flat tags (user tags and AI tags kept separately) plus typed custom metadata. Controlled vocabularies are SingleSelect/MultiSelect options (CSV import over 100 options) S42 S44.

Search & querying

  • Endpoint: GET/v1/files with searchQuery in a Lucene-like syntax; when present, searchQuery overrides the simple tags, type and name filters S26 S89.
  • Operators: =, : (begins with), IN, NOT =, NOT IN, <, >, <=, >=, EXISTS, NOT EXISTS, HAS (case-insensitive word-token full-text), AND, OR and parentheses S89.
  • Fields: id, name, path, type, format, size, width, height, videoDuration, tags, private, published, transparency, createdAt, updatedAt, createdBy, embeddedMetadata.DateTimeOriginal, embeddedMetadata.Keywords, embeddedMetadata.LocationTaken, and customMetadata.{field} for every custom field type S89. Dates accept ISO 8601 or relative units (7d, 2w, 2m, 1y) S89.
  • Sorting: name, created, updated, height, width, size, relevance, duration and original creation date, each ascending or descending S26.
  • Filters: type (file, file-version, folder, all), fileType (all, image, non-image), path (single folder; subfolders through path in searchQuery) S26.
  • Facets / aggregations: none in the API. GET/v1/tags gives tag counts S26.
  • Visual / natural-language search: dashboard-only and Enterprise-only; no public REST endpoint S41.
  • Page size: max 1,000 per request S26.

Uploads & binaries

  • Single request: one multipart POST per file. The file field accepts binary data, a public URL (ImageKit must receive the response headers within 8 s) or Base64 S26. No chunked or resumable upload is documented (Unknown).
  • Size limits (per file): images, audio and raw files 25 MB (Free), 40 MB (Lite), 50 MB (Pro); video 100 MB / 300 MB / 2 GB; higher on Enterprise S26 S3.
  • Upload-time processing: extensions (remove-bg, google-auto-tagging, aws-auto-tagging, ai-tasks, ai-auto-description), pre-transformation (one, applied before storage) and up to five post-transformations (pre-generated variants), with optional checks (server-side validation) S26 S40.
  • Bulk migration: Rclone integration, migration guides and the Upload API from-URL mode S77 S40.
  • Downloads / renditions: every file has a delivery url. Private files need signed URLs (signature from the private key, optional expiry). Named transformations can be applied to private assets without signing S68 S40. ZIP downloads (up to 2,000 files and folders) are available in the dashboard and through DAM MCP tools S55 S25.

Events & webhooks

AspectDetail
ConfigurationDashboard (Developer options → Webhooks) or Webhooks API; each endpoint subscribes to a list of events and can be enabled or disabled; max 3 per account S24 S26
Eventsvideo.transformation.accepted/ready/error, upload.pre-transform.success/error, upload.post-transform.success/error, file.created, file.updated, file.deleted, file-version.created, file-version.deleted, folder.created, folder.updated, folder.deleted S26
PayloadJSON with type, id (unique, usable as a nonce), created_at (ISO 8601) and data S24
SignatureStandard Webhooks: webhook-id, webhook-timestamp, webhook-signature (HMAC-SHA256, secret whsec_…). Legacy x-ik-signature (timestamp in ms prefixed t=, HMAC prefixed v1=) is still sent. SDKs expose webhooks.unwrap() for verification S24
Replay protectionCheck the timestamp against a tolerance window and/or use the event id as a nonce S24
Retries / timeoutNot public

Limits & quirks

  • Account-management APIs need a restricted key: a standard key gets no access to origins, URL endpoints, usage analytics, named transformations or webhooks S23.
  • Name search is case-sensitive with = and :; use HAS for case-insensitive matching S89.
  • Tag counts are eventually consistent: GET/v1/tags usually reflects changes within about a minute S26.
  • Usage analytics responses are cached for 5 minutes per account and date range S26.
  • Draft uploads: the API reference says uploading in draft state requires a custom Enterprise plan. Unverified The pricing table instead lists draft assets for Pro S3 S26.
  • Upload tokens are single-use: reusing a token or JWT, even after a failed request, returns a validation error S26.
  • Free-plan downgrade: the "empty media library" helper does not work above 50,000 files or folders; use bulk delete in batches S85.
  • Two spec locations: the docs link the older sdk-generation file while the SDKs are generated from the openapi repository Unverified S22 S26 S28.
  • Legacy MCP endpoint still answers: on 2026-11-10 https://api-mcp.imagekit.io/mcp still returned a 401 Bearer challenge, although the vendor asks users to move to the DAM and Admin servers S38 S25.

SDKs, tools & code samples

KindItemNotes
Back-end SDKsimagekit-nodejs (@imagekit/nodejs), imagekit-python (imagekitio), imagekit-go, imagekit-java (io.imagekit:image-kit-java), imagekit-ruby (imagekitio gem), imagekit-dotnet (Imagekit on NuGet)Generated from the OpenAPI file; Apache-2.0; all pushed 2026-11-02/03 S26 S30 S88
Back-end SDK (hand-written)imagekit-php (imagekit/imagekit)MIT; last Packagist release 2024-09-05 S88
Front-end@imagekit/javascript (core), imagekit-react, imagekit-vuejs, imagekit-angular, imagekit-next, imagekit-astro, React Native guideAll front-end SDKs build on the JavaScript SDK S29 S30
Mobileimagekit-android, imagekit-iosThe vendor notes the iOS SDK lags behind Android S29
WidgetsEmbeddable Media Library widget; Uppy upload plugin; Video Player (Video.js-based, beta) S59 S40 S66
AI toolingHosted MCP servers (DAM, Admin, DevTools); agent skills and Claude Code plugin (imagekit-developer/skills, MIT); llms.txt and llms-full.txt S25 S83
Low-coden8n community node @imagekit/n8n-nodes-imagekit S75
TestingPostman collection (Run in Postman button) S22

Changelog of the API

Dated from commits to the public OpenAPI repository (latest first) and vendor announcements S26.

DateChange
2026-11-02GET/v1/tags added (distinct tags with counts, cursor pagination)
2026-10-30GET/v1/accounts/contract (contract consumption) added
2026-10-19Webhooks CRUD API (/v1/accounts/webhooks) added
2026-10-07Hosted MCP servers (DAM, Admin, DevTools) announced; api-mcp.imagekit.io/mcp and the npm @imagekit/api-mcp package superseded S13 S25
2026-10-05SDK fix: empty 204 responses of copy, move and delete no longer parsed
2026-10-01Reserved original-creation-date custom metadata field documented
2026-09-16Search API: density parameter and new sort options
2026-09-15ImageKit DAM, Admin and DevTools servers published in the official MCP Registry S34
2026-08-15Named Transformations API added
2026-08-13description field in the custom metadata field API
2026-08-05Public imagekit-developer/openapi repository created
2025-10-06First release of the local MCP package @imagekit/api-mcp S32

Stored API specs

2 files · 429 KB · verbatim copies of public vendor filesSpecs README & provenance
FileFormatSizeDownload
imagekit_openapi_LICENSEOpenAPI11 KBDownload
imagekit_openapi.ymlOpenAPI418 KBDownload
Search the wiki