# Linkbio Link-in-Bio API Documentation

Scrappa's `GET /api/link-in-bio/linkbio` endpoint reads a public Linkbio profile and returns its profile details and button links as structured JSON. Pass either `handle` or a full `url`; a `www.` prefix is stripped automatically because that subdomain does not serve profiles.

Link fields are carried as `text` rather than `title`, matching Linkbio's own naming. Linkbio exposes **no social icons at all** — its social components carry empty icon data — so social slots are returned as `null` rather than omitted. An existing profile with nothing configured answers with HTTP 200 and an empty result. That response is not billable, and its `meta.reason` explains which case applied.

- **Documentation:** [https://scrappa.co/docs/link-in-bio-api/link_in_bio_linkbio](https://scrappa.co/docs/link-in-bio-api/link_in_bio_linkbio)
- **API group:** Link-in-Bio API
- **Endpoint:** `GET https://scrappa.co/api/link-in-bio/linkbio`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `handle` | string | No | Linkbio username, for example linktree. |
| `url` | string | No | Full Linkbio profile URL. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/link-in-bio/linkbio?handle=linktree"
```

## Example response

```json
{
    "provider": "linkbio",
    "handle": "example",
    "profile": {
        "username": "example",
        "title": "Example Creator",
        "description": "Links and more.",
        "avatar": "https://cdn.example.com/avatar.jpg",
        "logo": null,
        "is_verified": false
    },
    "links": [
        {
            "id": "-1234567890",
            "url": "https://www.instagram.com/example",
            "title": "Instagram",
            "text": "Follow me",
            "description": null,
            "image": null,
            "icon": "",
            "kind": "button",
            "is_featured": false,
            "order": 1,
            "status": "active"
        }
    ],
    "socials": {
        "instagram": null,
        "tiktok": null,
        "youtube": null
    },
    "meta": {
        "duration_ms": 540,
        "attempts": 1,
        "billable": true
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 404 | Profile Not Found | No public profile exists for this handle. |
| 503 | Upstream Unavailable | The profile could not be read from its source right now. Please retry. |
| 422 | Request Rejected Upstream | The source rejected this request, for example because the handle was not acceptable to it. |
| 503 | Profile Host Blocked the Request | The provider's bot protection refused this request after every available exit was tried. This is not a billing event; retry later. |
| 422 | Invalid Handle or URL | The handle was not in a supported format, or the URL did not belong to this endpoint's provider. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
