DeviantArt Search API
API health
- 24h health
- Normal
- 24h average time
- —
- Healthy / normal
- Available
- Limited
- Mostly down
Last 24 hours
Last 30 days
Discover DeviantArt artworks on a subject, with title, description, category, full image and thumbnail, post date, and the artist's profile and any listed emails. Narrow by category, such as digital_art or photography; image links identify the work and grant no reuse rights.
DeviantArt Search finds public artworks by subject, given a keyword such as landscape, and returns each work's title, description, category, full image and thumbnail, publish time, and the artist's username, display name, avatar and profile link. It answers what artists publish on a subject and how they treat it: art directors gather references and find illustrators with it, and rights holders use it to watch fan art of their characters.
Narrow results to one kind of work with the category parameter, or use any_category for all kinds. The category value on each row follows DeviantArt's own taxonomy and is not mapped to other platforms. keyword matches works, not artist names; to read one artist, pass the row's author_username to the DeviantArt Details or DeviantArt Gallery capability. Use thumbnail_url for previews and image_url for full resolution.
Price $1.39 per 1,000 requests ($0.001389 per call). Failed calls and empty results are not charged. Synchronous. For slow jobs add "mode": "async" to the body, take the job_id and poll.
AI prompt
Paste this into your AI assistant. It already holds this endpoint's parameters, response fields and an example request, so the assistant can ask what you need and then write the scraper.
Please help me write a data collection script with the EveryInfra DeviantArt Search endpoint (deviantart/search).
Endpoint contract:
- Request: POST https://api.everyinfra.com/api/v1/social with the header Authorization: Bearer <API key>. Read the key from the EVERYINFRA_API_KEY environment variable and never hard-code it.
- In the request body, set platform to deviantart and action to search, and put the parameters inside params.
- Required parameters:
- keyword: Specifies the subject search query for DeviantArt artwork discovery, such as landscape. Queries artwork titles and metadata rather than performing exact username searches.
- Optional parameters:
- category: Filters artwork discovery across actions using any_category, digital_art, traditional_art, photography, fan_art, literature, film_animation, or designs. (allowed: any_category / designs / digital_art / fan_art / film_animation / literature / photography / traditional_art)
- limit: The most rows to return in this call, an integer from 1 to 100. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. (default: 30)
- Returns a list of records. Main fields of each record: id, url, title, text, category, image_url, thumbnail_url, author_username, author_name, author_url, author_avatar_url, posted_at; 14 fields in total, full list at https://api.everyinfra.com/api/v1/social/catalog?platform=deviantart.
- Example request body:
{
"platform": "deviantart",
"action": "search",
"params": {
"keyword": "landscape illustration"
}
}
- Price: $1.39 per 1,000 requests; failed and empty results are not charged.
- For dozens or hundreds of targets, add "mode": "async" to the body: you get a job_id at once and poll GET https://api.everyinfra.com/api/v1/jobs/{job_id} for the result.
- On 422, fix the request using the suggested parameter names and allowed values in the error; on 429 or 503, wait for Retry-After and try again.
Before writing code, ask me which targets I need, how many, which fields, and what output format I want; then confirm the plan and the rough cost with me.Request parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
Authorization | header | string | Yes | - | Bearer followed by your API key. Create it in the console; never put it in a URL or a code repository. |
platform | body | string | Yes | deviantart | Platform identifier, fixed value. |
action | body | string | Yes | search | Capability identifier, fixed value. |
keyword | body.params | Not declared | Yes | - | Specifies the subject search query for DeviantArt artwork discovery, such as landscape. Queries artwork titles and metadata rather than performing exact username searches; use gallery with username to fetch work by a specific creator. |
category | body.params | enum | No | - | Filters artwork discovery across actions using any_category, digital_art, traditional_art, photography, fan_art, literature, film_animation, or designs. Applies strictly to individual deviation items and does not guarantee complete portfolio representation for a creator.Allowed valuesany_categorydesignsdigital_artfan_artfilm_animationliteraturephotographytraditional_art |
limit | body.params | integer (1–100) | No | 30 | The most rows to return in this call, an integer from 1 to 100. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. |
Code samples
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
-H "Authorization: Bearer $EVERYINFRA_API_KEY" \
-H 'Content-Type: application/json' \
--data-raw '{
"platform": "deviantart",
"action": "search",
"params": {
"keyword": "landscape illustration"
}
}'[OpenAPI definition (JSON)]Samples read the key from the EVERYINFRA_API_KEY environment variable; copied code never contains your key.
Response example
Captured September 26, 2026 at 08:56 (UTC) by calling this API with the parameters in the code sample above. results and count are that call's real response with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2. id, billing and quota differ on every call, so only their shape is shown.
{
"id": "req_…",
"platform": "deviantart",
"action": "search",
"results": [
{
"id": "(已隐去)",
"url": "https://www.deviantart.com/nicknamejeffreyjiang/art/Radio-Telescope-On-Mountain-Peak-1383309800",
"title": "Radio Telescope On Mountain Peak",
"text": "Want more AI art and wallpapers? Watch for new inspiration every day: https://www.deviantart.com/nicknamejeffreyjiang This artwork is available as a wide-screen digital file, suitable for wallpaper use, personal collection, and visual inspiration. Full resolution: 2016 × 864 px. …",
"image_url": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/5237e797-4a93-4bff-a339-3bd118dc3794/dmvl4o8-e13abb79-e506-4726-becb-a95f1fcbe4bb.jpg/v1/fill/w_1366,h_585,q_70,strp/radio_telescope_on_mountain_peak_by_nicknamejeffreyjiang_dmvl4o8-pre.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOi…",
"thumbnail_url": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/5237e797-4a93-4bff-a339-3bd118dc3794/dmvl4o8-e13abb79-e506-4726-becb-a95f1fcbe4bb.jpg/v1/fit/w_300,h_823,q_70,strp/radio_telescope_on_mountain_peak_by_nicknamejeffreyjiang_dmvl4o8-300w.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJ…",
"author_username": "(已隐去)",
"author_name": "(已隐去)",
"author_url": "https://www.deviantart.com/(已隐去)",
"author_avatar_url": "https://a.deviantart.net/(已隐去)",
"posted_at": "2026-09-22T04:14:33.000Z",
"platform": "deviantart"
},
{
"id": "(已隐去)",
"url": "https://www.deviantart.com/titzerfirm/art/Vibrant-Desert-Mountain-Valley-Landscape-Illustration-1382946370",
"title": "Vibrant Desert Mountain Valley Landscape Illustration",
"image_url": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/c8405067-6894-4abc-bee9-654f0b46e062/dmvdc8y-b995d9e4-f449-42a4-adeb-e64ce269ac78.png/v1/fill/w_1182,h_676,q_70,strp/vibrant_desert_mountain_valley_landscape_illustration_by_titzerfirm_dmvdc8y-pre.jpg?token=eyJ0eXAiOiJKV1Q…",
"thumbnail_url": "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/c8405067-6894-4abc-bee9-654f0b46e062/dmvdc8y-b995d9e4-f449-42a4-adeb-e64ce269ac78.png/v1/fit/w_300,h_732,q_70,strp/vibrant_desert_mountain_valley_landscape_illustration_by_titzerfirm_dmvdc8y-300w.jpg?token=eyJ0eXAiOiJKV1Qi…",
"author_username": "(已隐去)",
"author_name": "(已隐去)",
"author_url": "https://www.deviantart.com/(已隐去)",
"author_avatar_url": "https://a.deviantart.net/(已隐去)",
"posted_at": "2026-09-21T03:28:22.000Z",
"platform": "deviantart"
}
],
"count": 30,
"billing": {
"charged": …,
"charged_usd": …,
"balance_after_usd": …,
…
},
"quota": { … }
}Response fields
Business data is in results. The table lists the fields a record can contain; values the platform does not show are never made up.
| Field | Meaning |
|---|---|
id | The record's unique ID on the platform. Unique only within one platform; IDs can repeat across platforms. |
url | Link to the record on the platform. |
title | Title. null when the platform has no titles (for example text-only posts). |
text | Body text with HTML removed, returned in full and never cut short (on a few platforms the list results themselves carry only an excerpt; the platform's field notes say so). |
category | Category name in the platform's own taxonomy, not normalized across platforms. |
image_url | Image link. Capabilities with several images may return an image_urls array. |
thumbnail_url | Thumbnail link, lower resolution than image_url. |
author_username | Author's username (@handle), usually usable in URLs. |
author_name | Author's display name. |
author_url | Link to the author's profile on the platform. |
author_avatar_url | Keeps the platform's own meaning |
posted_at | Publish time in ISO 8601, UTC (for example 2026-08-07T12:34:56+00:00). Non-standard strings from the platform are passed through as is, so parse defensively. null means the platform does not disclose it. |
author_emails | Keeps the platform's own meaning |
author_email_domains | Keeps the platform's own meaning |
platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |
FAQ
Can I search for an artist instead of artworks?
Not with DeviantArt Search: keyword is matched against works and is not an exact username lookup. If you know the artist, pass their username to DeviantArt Details for the profile or to DeviantArt Gallery for their works. From a search row, the artist's handle is in author_username and the profile link in author_url.
Which category values does Search accept?
digital_art, traditional_art, photography, fan_art, literature, film_animation and designs each limit DeviantArt Search to one kind of work, and any_category applies no limit. Use fan_art when you track fan works based on a game, film or brand character.
Should I store image_url or thumbnail_url?
Both, if storage allows. thumbnail_url is a lower-resolution copy that suits previews, grids and quick visual review, while image_url points to the full image for close inspection or similarity checks. Keep each work's url and id too, so you can return to the page and recognize works you have already stored.
Errors and billing
- 401
- Missing or invalid key. Authentication runs before parameter checks, so unauthenticated requests never see the parameter schema.
- 422
- Wrong parameter name or value. The error lists the parameters and allowed values this capability accepts and the closest match; it happens before any charge.
- 402
- Insufficient balance. Top up first.
- 429
- The account's per-minute request limit was reached (all of its API keys count together; a key's own lower limit applies first). Wait for Retry-After and try again; a rate package in the console raises the limit.
- 503
- Could not complete right now. Any charge for the call goes back to your balance automatically, and the billing receipt in the response states the actual outcome, including when it is not yet known. Do not resend blindly.
- 200 empty
- The request completed without data and is not charged (billing.reason = empty_result_refunded).