Search and download Getty Images and iStock photos, illustrations, and videos.
Bring your own key. This API needs your own Getty Images key - get one from the provider, add it once below, and the proxy injects it on every call. Your OmniStream plan covers the unified SDK, key storage, and proxy - the provider's own rate limits still apply to your key.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("gettyimages/getv3_affiliates_search_images");One install, one key - the same client calls every API on the marketplace.
Provide a header to specify the language of result values. Supported values: cs (iStock only), de, en-GB, en-US, es, fi (iStock only), fr, hu (iStock only), id (iStock only), it, ja, ko (creative assets only), nl, pl (creative assets only), pt-BR, pt-PT, ro (iStock only), ru (creative assets only), sv, th (iStock only), tr, uk (iStock only), vi (iStock only), zh-HK (creative assets only).
Search images using a search phrase.
Filter based on graphical style of the image.
Search for images by a photographer
Search for videos by a photographer
Get asset change notifications.
/**
* GettyImages - generated by OmniStream from Getty Images's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/gettyimages";
export class GettyImagesError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `GettyImages error ${status}`);
this.name = "GettyImagesError";
this.status = status;
this.code = code;
}
}
export interface GettyImagesOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class GettyImages {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: GettyImagesOptions = {}) {
if (!token) throw new Error("GettyImages: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new GettyImagesError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
getv3AffiliatesSearchImages(params: { "Accept-Language"?: string; "phrase"?: string; "style"?: string }): Promise<any> {
return this._request("GET", "/v3/affiliates/search/images", { params });
}
getv3AffiliatesSearchVideos(params: { "Accept-Language"?: string; "phrase"?: string }): Promise<any> {
return this._request("GET", "/v3/affiliates/search/videos", { params });
}
/** Search for images by a photographer */
getv3ArtistsImages(params: { "Accept-Language"?: string; "artist_name"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number }): Promise<any> {
return this._request("GET", "/v3/artists/images", { params });
}
/** Search for videos by a photographer */
getv3ArtistsVideos(params: { "Accept-Language"?: string; "artist_name"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number }): Promise<any> {
return this._request("GET", "/v3/artists/videos", { params });
}
/** Get asset change notifications. */
putv3AssetChangesChangeSets(params: { "channel_id"?: number; "batch_size"?: number }): Promise<any> {
return this._request("PUT", "/v3/asset-changes/change-sets", { params });
}
/** Confirm asset change notifications. */
deletev3AssetChangesChangeSetsChangeSetId(params: { "change-set-id": number }): Promise<any> {
return this._request("DELETE", "/v3/asset-changes/change-sets/{change-set-id}", { params });
}
/** Get a list of asset change notification channels. */
getv3AssetChangesChannels(): Promise<any> {
return this._request("GET", "/v3/asset-changes/channels", {});
}
/** Endpoint for acquiring extended licenses with iStock credits for an asset. */
postv3AssetLicensingAssetid(body: unknown, params: { "assetId": string; "Accept-Language"?: string }): Promise<any> {
return this._request("POST", "/v3/asset-licensing/{assetId}", { body, params });
}
getv3AssetManagementAssetsSendEvents(params: { "Accept-Language"?: string; "last_offset"?: string; "event_count"?: number }): Promise<any> {
return this._request("GET", "/v3/asset-management/assets/send-events", { params });
}
/** Get all boards that the user participates in */
getv3Boards(params: { "Accept-Language"?: string; "page"?: number; "board_relationship"?: string; "sort_order"?: string; "pageSize"?: number }): Promise<any> {
return this._request("GET", "/v3/boards", { params });
}
/** Create a new board */
postv3Boards(body: unknown, params: { "Accept-Language"?: string }): Promise<any> {
return this._request("POST", "/v3/boards", { body, params });
}
/** Get assets and metadata for a specific board */
getv3BoardsBoardId(params: { "board_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("GET", "/v3/boards/{board_id}", { params });
}
/** Update a board */
putv3BoardsBoardId(body: unknown, params: { "board_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("PUT", "/v3/boards/{board_id}", { body, params });
}
/** Delete a board */
deletev3BoardsBoardId(params: { "board_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("DELETE", "/v3/boards/{board_id}", { params });
}
/** Add assets to a board */
putv3BoardsBoardIdAssets(body: unknown, params: { "board_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("PUT", "/v3/boards/{board_id}/assets", { body, params });
}
/** Remove assets from a board */
deletev3BoardsBoardIdAssets(params: { "board_id": string; "Accept-Language"?: string; "asset_ids"?: unknown[] }): Promise<any> {
return this._request("DELETE", "/v3/boards/{board_id}/assets", { params });
}
/** Add an asset to a board */
putv3BoardsBoardIdAssetsAssetId(params: { "board_id": string; "asset_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("PUT", "/v3/boards/{board_id}/assets/{asset_id}", { params });
}
/** Remove an asset from a board */
deletev3BoardsBoardIdAssetsAssetId(params: { "board_id": string; "asset_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("DELETE", "/v3/boards/{board_id}/assets/{asset_id}", { params });
}
/** Get comments from a board */
getv3BoardsBoardIdComments(params: { "board_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("GET", "/v3/boards/{board_id}/comments", { params });
}
/** Add a comment to a board */
postv3BoardsBoardIdComments(body: unknown, params: { "board_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("POST", "/v3/boards/{board_id}/comments", { body, params });
}
/** Delete a comment from a board */
deletev3BoardsBoardIdCommentsCommentId(params: { "board_id": string; "comment_id": string; "Accept-Language"?: string }): Promise<any> {
return this._request("DELETE", "/v3/boards/{board_id}/comments/{comment_id}", { params });
}
/** Gets collections applicable for the customer. */
getv3Collections(params: { "Accept-Language"?: string }): Promise<any> {
return this._request("GET", "/v3/collections", { params });
}
/** Gets countries codes and names. */
getv3Countries(params: { "Accept-Language"?: string }): Promise<any> {
return this._request("GET", "/v3/countries", { params });
}
/** Returns information about the current user. */
getv3CustomersCurrent(params: { "Accept-Language"?: string }): Promise<any> {
return this._request("GET", "/v3/customers/current", { params });
}
/** Returns information about a customer's downloaded assets. */
getv3Downloads(params: { "Accept-Language"?: string; "date_from"?: string; "date_to"?: string; "use_time"?: boolean; "page"?: number; "page_size"?: number; "product_type"?: string; "company_downloads"?: boolean }): Promise<any> {
return this._request("GET", "/v3/downloads", { params });
}
/** Download an image */
postv3DownloadsImagesId(body: unknown, params: { "id": string; "Accept-Language"?: string; "auto_download"?: boolean; "file_type"?: string; "height"?: string; "product_id"?: number; "product_type"?: string; "use_team_credits"?: boolean }): Promise<any> {
return this._request("POST", "/v3/downloads/images/{id}", { body, params });
}
/** Download a video */
postv3DownloadsVideosId(body: unknown, params: { "id": string; "Accept-Language"?: string; "auto_download"?: boolean; "size"?: string; "product_id"?: number; "product_type"?: string; "use_team_credits"?: boolean }): Promise<any> {
return this._request("POST", "/v3/downloads/videos/{id}", { body, params });
}
/** Get metadata for multiple events */
getv3Events(params: { "Accept-Language"?: string; "ids"?: unknown[]; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/events", { params });
}
/** Get metadata for a single event */
getv3EventsId(params: { "id": number; "Accept-Language"?: string; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/events/{id}", { params });
}
/** Get metadata for multiple images by supplying multiple image ids */
getv3Images(params: { "Accept-Language"?: string; "ids"?: unknown[]; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/images", { params });
}
/** Get metadata for a single image by supplying one image id */
getv3ImagesId(params: { "id": string; "Accept-Language"?: string; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/images/{id}", { params });
}
/** Returns information about a customer's download history for a specific asset */
getv3ImagesIdDownloadhistory(params: { "id": string; "Accept-Language"?: string; "company_downloads"?: boolean }): Promise<any> {
return this._request("GET", "/v3/images/{id}/downloadhistory", { params });
}
/** Retrieve creative images from the same series */
getv3ImagesIdSameSeries(params: { "id": string; "Accept-Language"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number }): Promise<any> {
return this._request("GET", "/v3/images/{id}/same-series", { params });
}
/** Retrieve similar images */
getv3ImagesIdSimilar(params: { "id": string; "Accept-Language"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number }): Promise<any> {
return this._request("GET", "/v3/images/{id}/similar", { params });
}
/** Get order metadata */
getv3OrdersId(params: { "id": number; "Accept-Language"?: string }): Promise<any> {
return this._request("GET", "/v3/orders/{id}", { params });
}
/** Get Products */
getv3Products(params: { "Accept-Language"?: string; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/products", { params });
}
/** Get Previously Purchased Images and Video */
getv3PurchasedAssets(params: { "Accept-Language"?: string; "date_to"?: string; "page"?: number; "page_size"?: number; "date_from"?: string; "company_purchases"?: boolean }): Promise<any> {
return this._request("GET", "/v3/purchased-assets", { params });
}
/** Upload image for use by the search creative images/videos operations */
putv3SearchByImageUploadsFileName(params: { "file-name": string }): Promise<any> {
return this._request("PUT", "/v3/search/by-image/uploads/{file-name}", { params });
}
/** Search for events */
getv3SearchEvents(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "editorial_segment"?: string; "date_from"?: string; "date_to"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number; "phrase"?: string; "sort_order"?: string }): Promise<any> {
return this._request("GET", "/v3/search/events", { params });
}
/** Search for both creative and editorial images - *** DEPRECATED *** */
getv3SearchImages(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "age_of_people"?: unknown[]; "artists"?: string; "collection_codes"?: unknown[]; "collections_filter_type"?: string; "color"?: string; "compositions"?: unknown[]; "download_product"?: string; "embed_content_only"?: boolean; "event_ids"?: unknown[]; "ethnicity"?: unknown[]; "exclude_nudity"?: boolean; "fields"?: unknown[]; "file_types"?: unknown[]; "graphical_styles"?: unknown[]; "graphical_styles_filter_type"?: string; "include_related_searches"?: boolean; "keyword_ids"?: unknown[]; "minimum_size"?: string; "number_of_people"?: unknown[]; "orientations"?: unknown[]; "page"?: number; "page_size"?: number; "phrase"?: string; "sort_order"?: string; "specific_people"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/search/images", { params });
}
/** Search for creative images only */
getv3SearchImagesCreative(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "age_of_people"?: unknown[]; "artists"?: string; "collection_codes"?: unknown[]; "collections_filter_type"?: string; "color"?: string; "compositions"?: unknown[]; "download_product"?: string; "embed_content_only"?: boolean; "ethnicity"?: unknown[]; "exclude_keyword_ids"?: unknown[]; "exclude_nudity"?: boolean; "exclude_editorial_use_only"?: boolean; "fields"?: unknown[]; "file_types"?: unknown[]; "graphical_styles"?: unknown[]; "graphical_styles_filter_type"?: string; "include_related_searches"?: boolean; "keyword_ids"?: unknown[]; "minimum_size"?: string; "number_of_people"?: unknown[]; "orientations"?: unknown[]; "page"?: number; "page_size"?: number; "phrase"?: string; "safe_search"?: boolean; "sort_order"?: string; "facet_fields"?: unknown[]; "include_facets"?: boolean; "facet_max_count"?: number }): Promise<any> {
return this._request("GET", "/v3/search/images/creative", { params });
}
/** Search for creative images based on url */
getv3SearchImagesCreativeByImage(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "asset_id"?: string; "exclude_editorial_use_only"?: boolean; "facet_fields"?: unknown[]; "facet_max_count"?: number; "fields"?: unknown[]; "image_url"?: string; "include_facets"?: boolean; "page"?: number; "page_size"?: number; "product_types"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/search/images/creative/by-image", { params });
}
/** Search for editorial images only */
getv3SearchImagesEditorial(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "age_of_people"?: unknown[]; "artists"?: string; "collection_codes"?: unknown[]; "collections_filter_type"?: string; "compositions"?: unknown[]; "date_from"?: string; "date_to"?: string; "download_product"?: string; "editorial_segments"?: unknown[]; "embed_content_only"?: boolean; "ethnicity"?: unknown[]; "event_ids"?: unknown[]; "exclude_keyword_ids"?: unknown[]; "fields"?: unknown[]; "file_types"?: unknown[]; "graphical_styles"?: unknown[]; "graphical_styles_filter_type"?: string; "include_related_searches"?: boolean; "keyword_ids"?: unknown[]; "minimum_size"?: string; "number_of_people"?: unknown[]; "orientations"?: unknown[]; "page"?: number; "page_size"?: number; "phrase"?: string; "sort_order"?: string; "specific_people"?: unknown[]; "minimum_quality_rank"?: number; "facet_fields"?: unknown[]; "include_facets"?: boolean; "facet_max_count"?: number }): Promise<any> {
return this._request("GET", "/v3/search/images/editorial", { params });
}
/** Search for creative videos */
getv3SearchVideosCreative(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "age_of_people"?: unknown[]; "artists"?: string; "aspect_ratios"?: unknown[]; "collection_codes"?: unknown[]; "collections_filter_type"?: string; "compositions"?: unknown[]; "download_product"?: string; "exclude_nudity"?: boolean; "exclude_editorial_use_only"?: boolean; "exclude_keyword_ids"?: unknown[]; "fields"?: unknown[]; "format_available"?: string; "frame_rates"?: unknown[]; "image_techniques"?: unknown[]; "include_related_searches"?: boolean; "keyword_ids"?: unknown[]; "license_models"?: unknown[]; "orientations"?: unknown[]; "min_clip_length"?: number; "max_clip_length"?: number; "page"?: number; "page_size"?: number; "phrase"?: string; "safe_search"?: boolean; "sort_order"?: string; "release_status"?: string; "facet_fields"?: unknown[]; "facet_max_count"?: number; "include_facets"?: boolean; "viewpoints"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/search/videos/creative", { params });
}
/** Search for creative videos based on url */
getv3SearchVideosCreativeByImage(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "asset_id"?: string; "exclude_editorial_use_only"?: boolean; "facet_fields"?: unknown[]; "facet_max_count"?: number; "fields"?: unknown[]; "image_url"?: string; "include_facets"?: boolean; "page"?: number; "page_size"?: number; "product_types"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/search/videos/creative/by-image", { params });
}
/** Search for editorial videos */
getv3SearchVideosEditorial(params: { "Accept-Language"?: string; "GI-Country-Code"?: string; "age_of_people"?: unknown[]; "artists"?: string; "aspect_ratios"?: unknown[]; "collection_codes"?: unknown[]; "collections_filter_type"?: string; "compositions"?: unknown[]; "download_product"?: string; "editorial_video_types"?: unknown[]; "fields"?: unknown[]; "format_available"?: string; "frame_rates"?: unknown[]; "image_techniques"?: unknown[]; "include_related_searches"?: boolean; "keyword_ids"?: unknown[]; "min_clip_length"?: number; "max_clip_length"?: number; "orientations"?: unknown[]; "page"?: number; "page_size"?: number; "phrase"?: string; "sort_order"?: string; "specific_people"?: unknown[]; "release_status"?: string; "facet_fields"?: unknown[]; "include_facets"?: boolean; "facet_max_count"?: number; "viewpoints"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/search/videos/editorial", { params });
}
/** Report usage of assets via a batch format. */
putv3UsageBatchesId(body: unknown, params: { "id": string }): Promise<any> {
return this._request("PUT", "/v3/usage-batches/{id}", { body, params });
}
/** Get metadata for multiple videos by supplying multiple video ids */
getv3Videos(params: { "Accept-Language"?: string; "ids"?: unknown[]; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/videos", { params });
}
/** Get metadata for a single video by supplying one video id */
getv3VideosId(params: { "id": string; "Accept-Language"?: string; "fields"?: unknown[] }): Promise<any> {
return this._request("GET", "/v3/videos/{id}", { params });
}
/** Returns information about a customer's download history for a specific asset */
getv3VideosIdDownloadhistory(params: { "id": string; "Accept-Language"?: string; "company_downloads"?: boolean }): Promise<any> {
return this._request("GET", "/v3/videos/{id}/downloadhistory", { params });
}
/** Retrieve creative videos from the same series */
getv3VideosIdSameSeries(params: { "id": string; "Accept-Language"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number }): Promise<any> {
return this._request("GET", "/v3/videos/{id}/same-series", { params });
}
/** Retrieve similar videos */
getv3VideosIdSimilar(params: { "id": string; "Accept-Language"?: string; "fields"?: unknown[]; "page"?: number; "page_size"?: number }): Promise<any> {
return this._request("GET", "/v3/videos/{id}/similar", { params });
}
}
export default GettyImages;
No reviews yet. Be the first to rate this API.
Yes. Getty Images uses apiKey authentication, so you bring your own key from the provider. You store it once on OmniStream and the proxy injects it into every call, so your code only ever sends your Omni key.
Search and download Getty Images and iStock photos, illustrations, and videos. It exposes 52 endpoints over GET, PUT, DELETE, POST, including GET /v3/affiliates/search/images, GET /v3/affiliates/search/videos, GET /v3/artists/images.
Install the OmniStream SDK for your language and call Getty Images through it. The client is generated from this API's OpenAPI spec, so parameters and responses are fully typed, and the same client also calls every other API in the marketplace.
You can start on the free plan. OmniStream charges for the unified SDK, key storage and proxy rather than for Getty Images itself, and Getty Images's own rate limits still apply to your provider key.
Giphy: Search, translate, trending, and random GIFs and stickers from the GIPHY library.
Confirm asset change notifications.
Get a list of asset change notification channels.
Endpoint for acquiring extended licenses with iStock credits for an asset.
Get all boards that the user participates in
Create a new board
Get assets and metadata for a specific board
Update a board
Delete a board
Add assets to a board
Remove assets from a board
Add an asset to a board
Remove an asset from a board
Get comments from a board
Add a comment to a board
Delete a comment from a board
Gets collections applicable for the customer.
Gets countries codes and names.
Returns information about the current user.
Returns information about a customer's downloaded assets.
Download an image
Download a video
Get metadata for multiple events
Get metadata for a single event
Get metadata for multiple images by supplying multiple image ids
Get metadata for a single image by supplying one image id
Returns information about a customer's download history for a specific asset
Retrieve creative images from the same series
Retrieve similar images
Get order metadata
Get Products
Get Previously Purchased Images and Video
Upload image for use by the search creative images/videos operations
Search for events
Search for both creative and editorial images - *** DEPRECATED ***
Search for creative images only
Search for creative images based on url
Search for editorial images only
Search for creative videos
Search for creative videos based on url
Search for editorial videos
Report usage of assets via a batch format.
Get metadata for multiple videos by supplying multiple video ids
Get metadata for a single video by supplying one video id
Returns information about a customer's download history for a specific asset
Retrieve creative videos from the same series
Retrieve similar videos