> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/behance>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/behance.mdx>

---

# Behance API. Profiles, projects and briefs as JSON.

Public profiles, a profile's latest projects, project records, tag assets and services, and freelance briefs. Nine typed routes with real field names, cursor paging and one credit per lookup.

- Nine routes
- Person and team profiles
- 1 credit per request

`GET /v1/behance/profiles/{username}` takes a handle such as `chrisd3b8` and returns a person or team profile: identity, `location` (with `countryCode`), `stats` (`views`, `appreciations`, `followers`), `occupation`, `company`, `website`, `socialLinks`, `workExperience`, `tools`, `teams`, `features`, `fields`, `milestones`, `availability`, `freelance`, `creatorPro`, `sections`, and `projects`. Team profiles add `members` and `inviteOnly`, and expose their About sections, social and web links, fields and gallery features when present. A missing handle is `lookupStatus: not_found` with `profile: null`; a reserved site path is refused as bad input.

`GET /v1/behance/profiles/{username}/projects` returns a profile's latest projects as a compact list: `id`, `name`, `url`, `slug`, `summary`, `coverUrl`, `publishedAt` and `nameLossy`. The list stops at 12 items and exposes no next page, so `hasMore` is `false` below the cap and `null` at it. A name that loses characters in this list is restored from the profile when it has the same project; otherwise `nameLossy` is `true`. A team handle returns its latest projects as `found` rows. Missing handles are `not_found`. For full project detail use `GET /v1/behance/projects/{projectId}`: `owners`, `covers`, `color`, `sourceFiles` with licence and size, `embedAllowed`, `isPrivate` and `isPublished`; views, appreciations, comments, creative fields, features, a linked-asset count and dates are not part of that record. When an owner turns embedding off, only `id` and `name` are readable.

`GET /v1/behance/tags/{tag}` returns the tag record, `relatedTags`, freelance `services` and up to 24 projects that carry downloadable source files. An unknown tag is `lookupStatus: not_found` with `tag: null`, `projects: []`, `relatedTags: []` and `services: []`; a tag with a record but no projects is `found` with `isEmpty: true`. `GET /v1/behance/freelance-briefs/{briefId}` returns one brief with its budget range, categories, company, expiry, applicant count and AI-assistance disclosure.

The three paged lists (`/tags`, `/freelance-briefs`, `/projects/recent`) take `limit` (1 to 500, default 100) and an opaque `cursor`; each response carries `page.hasMore` and `page.nextCursor`. The cursor records the last row returned and continues after it, so a list that changes between requests does not repeat or skip rows. If that row is gone, the cursor is refused and you start again. `/projects/featured` returns the current featured projects as `id`, `name`, `url`, `slug`, `summary`, `coverUrl`, `publishedAt` and `nameLossy`. These routes cover public profile, project, tag, brief and project-list data. Other Behance pages, such as search and hiring listings, are not part of this API.

## What you can get

- Person and team profiles with stats, location, availability, links, work history, tools, features and projects.
- A profile's latest projects with summaries and cover images, capped at 12 items with no next page.
- Project records with owners, covers, colour, downloadable source files and the embedding-off case.
- Tag records with related tags, freelance services and their sellers, and up to 24 projects carrying source files.
- Freelance briefs with budget range, categories, company, expiry, applicants and AI disclosure.
- Recent projects, tags and freelance briefs as cursor-paged lists, plus the current featured projects.

## Behance endpoints

| Endpoint | Request | Credits | Docs |
| --- | --- | --- | --- |
| Profile | GET /v1/behance/profiles/{username} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/profiles/username/get) |
| Projects | GET /v1/behance/profiles/{username}/projects | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/profiles/username/projects/get) |
| Project | GET /v1/behance/projects/{projectId} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/projects/projectid/get) |
| Recent projects | GET /v1/behance/projects/recent | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/projects/recent/get) |
| Featured | GET /v1/behance/projects/featured | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/projects/featured/get) |
| Tag assets | GET /v1/behance/tags/{tag} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/tags/tag/get) |
| Tags | GET /v1/behance/tags | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/tags/get) |
| Freelance brief | GET /v1/behance/freelance-briefs/{briefId} | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/freelance-briefs/briefid/get) |
| Freelance briefs | GET /v1/behance/freelance-briefs | 1 credit Failed requests are free | [docs](https://www.socialfetch.dev/docs/api/v1/behance/freelance-briefs/get) |

## How to start

1. **Create an API key.** Sign up at Social Fetch and copy a key (`sfk_...`). New accounts get 100 free credits, enough to try every Behance route on a few handles, projects, tags and briefs.
2. **Call the route that matches the record.** Use `/profiles/{username}` for a person or team, `/profiles/{username}/projects` for their latest projects, `/projects/{projectId}` for one project, `/tags/{tag}` for a tag, `/freelance-briefs/{briefId}` for one brief, and the list routes for recent projects, tags, briefs and featured work. Send `x-api-key` on every request.
3. **Branch on lookupStatus, then page.** Read `data.lookupStatus` before you store a row. For the paged lists, keep sending `page.nextCursor` as `cursor` while `page.hasMore` is true, and bill from `meta.creditsCharged`.

## Pricing

Each Behance route charges 1 credit per completed request, and each page of a paged list is its own request. `meta.creditsCharged` on every response is the billing source of truth. A typed `not_found` is a completed request; a request that fails is not billed.

## Compared with the official API

These routes return public profile, project, tag and brief records as one JSON shape: typed `lookupStatus`, stable field names, ISO 8601 dates and cursor paging. You call one host with one Social Fetch key, and images stay as links rather than being downloaded.

## FAQ

### Is there a Behance API for profiles and projects?

Yes. Social Fetch has nine Behance routes under `/v1/behance`: profile, a profile's latest projects, project, tag, freelance brief, recent projects, freelance briefs, tags, and featured projects. Authenticate with your Social Fetch API key in `x-api-key`.

### How do I pass a profile handle?

Use the handle from the profile URL, for example `chrisd3b8` in `GET /v1/behance/profiles/chrisd3b8`. Handles are case-insensitive. A full URL, a numeric user id or a reserved site path such as `about` is not a handle; reserved paths are refused as bad input.

### Does the projects route work for a team?

Yes. A team handle returns its latest projects as `found` rows, still capped at 12 with no next page. A missing handle is `lookupStatus: not_found` with `projects: []`.

### What does a project response include?

On `found`, `data.project` carries `id`, `name`, `url`, `slug`, `hasMatureContent`, `color`, `covers`, `owners`, `sourceFiles` (with `title`, `licenseType`, `sizeBytes` and `extension`), `linkedAssets`, `embedAllowed`, `isPrivate` and `isPublished`. Views, appreciations, comments, creative fields, features, a linked-asset count and dates are not available on this route; those keys are absent from the record. If the owner disabled embedding, `embedAllowed` is `false` and only `id` and `name` are readable.

### What is in a tag response, and what does an unknown tag return?

`data` carries the `tag` record, `relatedTags`, freelance `services`, `isEmpty` and up to 24 `projects` that have downloadable source files. An unknown tag returns `lookupStatus: not_found`, `tag: null`, `projects: []`, `relatedTags: []` and `services: []`. A tag that exists but has no projects returns `found` with `isEmpty: true`. A tag slug can contain a slash, hash, percent or question mark; percent-encode those characters in the path, e.g. `ui%2Fux`, `c%23` or `100%25`. A title with spaces uses its hyphenated slug, e.g. `graphic-design`, not `graphic%20design`.

### How do the recent projects, tags and freelance briefs lists page?

Each list takes `limit` from 1 to 500 (default 100) and an opaque `cursor`. The response carries `page.hasMore` and `page.nextCursor`; send the next cursor back on the same route. The cursor continues after the last row returned, so a list that changes between requests does not repeat or skip rows. If that row is gone, the cursor is refused and you start again. A cursor from another list is refused before any request is made.

### What does a freelance brief include?

A found brief carries `title`, `description`, `budgetMin`, `budgetMax`, `currency`, `budgetText`, `categories`, `company`, `expiresAt`, `applicantCount`, `aiAssisted`, `aiDisclosure`, `isClosed`, `type` and `url`. The list route returns brief ids, URLs and slugs; call the brief route for budget and status. A missing brief is `lookupStatus: not_found`.

### How much does the Behance API cost?

Every Behance route charges 1 credit per completed request, and each page of a paged list is a separate request. Check `meta.creditsCharged` on every response. New accounts start with 100 free credits. Typed misses are billed; requests that end blocked or unavailable are not.

### Does HTTP 200 mean the profile or project exists?

No. HTTP 200 means the request finished. Check `data.lookupStatus`: `not_found` means the profile, project, tag or brief does not exist. Persist `meta.requestId` when you need to debug a miss.

### Can I use the Behance routes from agents or MCP?

Yes. Every Behance route is a typed MCP tool and is reachable through Ask (`POST /v1/ask`) in plain English. Use the typed routes for production jobs.

## Related

- [Behance Profile API](https://www.socialfetch.dev/platforms/behance/profiles-username): Person or team profile with stats, links, availability, location and projects (`GET /v1/behance/profiles/{username}`).
- [Behance Project API](https://www.socialfetch.dev/platforms/behance/projects-projectid): Project owners, covers, colour and downloadable source files (`GET /v1/behance/projects/{projectId}`).
- [Behance Tag API](https://www.socialfetch.dev/platforms/behance/tags-tag): A tag with related tags, services and up to 24 projects with source files (`GET /v1/behance/tags/{tag}`).
- [Behance Freelance Brief API](https://www.socialfetch.dev/platforms/behance/freelance-briefs-briefid): One brief with budget, categories, company and applicants (`GET /v1/behance/freelance-briefs/{briefId}`).
- [Behance Featured API](https://www.socialfetch.dev/platforms/behance/projects-featured): The current featured projects as rows (`GET /v1/behance/projects/featured`).
- [Ask in plain English](https://www.socialfetch.dev/ask): Route a natural-language question to the matching Behance operation.
- [Hosted MCP](https://www.socialfetch.dev/mcp): Call Behance tools from Cursor or Claude with the same credit metering as REST.
