Browsable Browsable Docs

OnlyFans API

Scrape OnlyFans profile metadata using a managed signed-in, age-confirmed session.

POST /v1/onlyfans/profile

Authentication

Requires a managed onlyfans.com login on kernel. Browsable automatically uses a saved login when one is available.

If your team does not already have a usable login, the API returns 428 Authentication required with a hosted_url. Open that URL, finish sign-in, then retry the same request.

Request Parameters

Name In Type Required Description
username body string Yes OnlyFans creator username.
limit body integer No Maximum number of results to return.

Response Structure

Async kickoff response

Polled run result response

Sync response

Authentication required response

Declared output schema

Code Examples

Async + polling

RUN=$(curl -s -X POST "https://api.browsable.app/v1/onlyfans/profile" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username":"Stylish Shoreditch Loft with Balcony","limit":25}')
RUN_ID=$(echo "$RUN" | jq -r '.run_id')
POLL_DELAY=3
while true; do
RESULT=$(curl -s -H "Authorization: Bearer YOUR_API_KEY" "https://api.browsable.app/v1/runs/$RUN_ID")
STATUS=$(echo "$RESULT" | jq -r '.run_status')
if [[ "$STATUS" =~ ^(succeeded|failed|errored|cancelled|canceled|expired)$ ]]; then
echo "$RESULT"
break
fi
sleep "$(awk "BEGIN { print $POLL_DELAY * (0.9 + ($RANDOM % 21) / 100) }")"
POLL_DELAY=$((POLL_DELAY < 30 ? POLL_DELAY * 2 : 30))
[ "$POLL_DELAY" -gt 30 ] && POLL_DELAY=30
done

Sync

curl -X POST "https://api.browsable.app/v1/onlyfans/profile" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username":"Stylish Shoreditch Loft with Balcony","limit":25,"_run":{"async":false}}'