Fur Affinity APIfuraffinity.net ↗
Retrieve Fur Affinity user profiles and submission details via API. Access bios, stats, tags, ratings, image URLs, and more with two structured endpoints.
What is the Fur Affinity API?
The Fur Affinity API provides 2 endpoints to retrieve structured data from furaffinity.net — a major furry art community. The get_profile endpoint returns account stats, bio text, avatar URL, and registration date for any user by username. The get_artwork endpoint returns full submission metadata including tags, rating, category, species, view/favorite counts, and direct image URLs for any numeric submission ID.
curl -X GET 'https://api.parse.bot/scraper/e4c5cc40-cf15-455b-8030-37b02d71eec1/get_profile?username=kenket' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace furaffinity-net-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Fur Affinity SDK — fetch artwork details and artist profile."""
from parse_apis.furaffinity_net_api import FurAffinity, InputNotFound
client = FurAffinity()
# Fetch a submission by its numeric ID.
artwork = client.artworks.get(submission_id="59588590")
print(artwork.title, "-", artwork.artist_name)
print(f" Rating: {artwork.rating} | Views: {artwork.views} | Favorites: {artwork.favorites}")
print(f" Tags: {', '.join(artwork.tags)}")
# Navigate to the artist's profile using the username from the artwork.
try:
profile = client.profiles.get(username=artwork.artist_username)
except InputNotFound:
print(f"Profile not found for '{artwork.artist_username}'")
else:
print(f"\nArtist profile: {profile.display_name} ({profile.user_role})")
print(f" Registered: {profile.registered_date}")
print(f" Stats: {profile.stats.submissions} submissions, {profile.stats.views} views")
if profile.featured_submission is not None:
print(f" Featured: {profile.featured_submission.title}")
print("\nexercised: artworks.get / profiles.get")
Retrieve full profile data for a Fur Affinity user by username. Returns display name, role, registration date, avatar URL, bio text, and account statistics (views, submissions, favorites, comments earned/made, journals). One HTTP round trip per call.
| Param | Type | Description |
|---|---|---|
| usernamerequired | string | Fur Affinity username (case-insensitive, e.g. 'kenket'). |
{
"type": "object",
"fields": {
"stats": "object with views, submissions, favorites, comments_earned, comments_made, journals counts",
"username": "canonical username string",
"user_role": "user type/role (e.g. 'Traditional Artist', 'Digital Artist')",
"avatar_url": "absolute URL to the user's avatar image",
"display_name": "user's display name",
"profile_text": "user bio/profile description text",
"registered_date": "account registration date string",
"featured_submission": "object with submission_id and title if a featured submission is set, otherwise null"
},
"sample": {
"data": {
"stats": {
"views": 747944,
"journals": 96,
"favorites": 900052,
"submissions": 858,
"comments_made": 2430,
"comments_earned": 31398
},
"username": "kenket",
"user_role": "Traditional Artist",
"avatar_url": "https://a.furaffinity.net/1541086757/kenket.gif",
"display_name": "Kenket",
"profile_text": "There is probably more art in my scraps folder then the main one.I stream often over onTWITCHand post high-res sketches to thisDROPBOX.",
"registered_date": "September 8, 2006 07:30:33 PM",
"featured_submission": null
},
"status": "success"
}
}About the Fur Affinity API
User Profiles via get_profile
The get_profile endpoint accepts a single username parameter (case-insensitive) and returns the canonical profile data for that Fur Affinity account. Response fields include display_name, user_role (e.g. 'Traditional Artist', 'Digital Artist'), registered_date, avatar_url, and profile_text (the user's bio). The stats object contains integer counts for views, submissions, favorites, comments_earned, comments_made, and journals. If the user has set a featured submission, a featured_submission object returns the submission_id and title; otherwise it is null.
Submission Details via get_artwork
The get_artwork endpoint accepts a numeric submission_id string and returns the full metadata record for that Fur Affinity submission. Fields include title, rating (General, Mature, or Adult), category, theme, species, file_size, views, favorites, and a tags array of keyword strings. The image_url field points to the full-size hosted image. This makes it straightforward to display or archive a submission without navigating the site directly.
Coverage and Limitations
Both endpoints operate on a per-resource basis — one username or one submission ID per call. There is no built-in endpoint for listing a user's gallery, browsing recent uploads site-wide, or fetching journal entry content. Adult-rated submissions on Fur Affinity are visibility-gated, so some submission IDs may return incomplete data depending on the content's access requirements. The API does not expose watcher/follower lists, note/message data, or commission status fields.
The Fur Affinity API is a managed, monitored endpoint for furaffinity.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when furaffinity.net changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official furaffinity.net API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an artist portfolio viewer using
get_profileto display bio, avatar, and submission counts for any FA user. - Index artwork metadata from
get_artworkfor a searchable archive that filters by rating, category, or species. - Aggregate view and favorite counts from
get_artworkto track engagement trends on specific submissions over time. - Pull tag arrays from
get_artworkto power content recommendation or similarity matching across submissions. - Display featured submission previews alongside artist profiles by combining
get_profilefeatured_submission data withget_artworkimage URLs. - Cross-reference
user_roleand account statistics fromget_profileto segment artists by type (e.g. Traditional vs. Digital). - Monitor registration dates and journal counts via
get_profilestats to analyze community growth patterns.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Fur Affinity have an official developer API?+
What does get_artwork return beyond the image URL?+
get_profile.Does the API support browsing a user's full submission gallery or paginated artwork lists?+
get_profile and single-submission detail via get_artwork. There is no gallery-listing or pagination endpoint. You can fork this API on Parse and revise it to add an endpoint that lists submission IDs for a given user.Are adult-rated submissions accessible through get_artwork?+
rating field in get_artwork will reflect the content rating assigned to the submission (General, Mature, or Adult), but access to Adult-rated content on Fur Affinity normally requires a logged-in account with the appropriate setting enabled. Submissions that are behind that access gate may not return full data. The API currently covers publicly accessible submissions.Can I retrieve journal entries or watch/follower lists via get_profile?+
get_profile endpoint returns a journal count as part of the stats object, but does not return the text or content of individual journal entries. Watch and follower lists are also not exposed. You can fork this API on Parse and revise it to add endpoints for journal content or follower data.