# Pillar Link-in-Bio API Documentation

Scrappa's `GET /api/link-in-bio/pillar` endpoint reads a public Pillar creator page and returns its profile, links with per-link click counts, products, videos, and a fixed 17-slot typed social map as structured JSON. Pass either `handle` or a full `url`.

Pillar is the only provider in this group that exposes per-link click counts. Unfilled social slots are returned as `null` rather than omitted, so the response shape stays stable. 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_pillar](https://scrappa.co/docs/link-in-bio-api/link_in_bio_pillar)
- **API group:** Link-in-Bio API
- **Endpoint:** `GET https://scrappa.co/api/link-in-bio/pillar`

## 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 | Pillar creator handle, for example ninja. |
| `url` | string | No | Full Pillar profile URL. Used when you do not have the bare handle. |

## Example request

```bash
#!/bin/bash

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

## Example response

```json
{
    "provider": "pillar",
    "handle": "ninja",
    "profile": {
        "handle": "ninja",
        "alias": "ninja",
        "name": "Ninja",
        "tagline": "Creator",
        "location": "Los Angeles",
        "avatar": "https://cdn.example.com/avatar.jpg"
    },
    "links": [
        {
            "id": "5a93079c-1111-4444-8888-abcdefabcdef",
            "url": "https://www.instagram.com/ninja/",
            "title": "Instagram",
            "icon": "fab fa-instagram",
            "image": null,
            "clicks": 12823,
            "order": 6
        }
    ],
    "socials": {
        "email": null,
        "amazon": null,
        "tiktok": "https://www.tiktok.com/@ninja",
        "instagram": "https://www.instagram.com/ninja/"
    },
    "products": [],
    "videos": [],
    "meta": {
        "duration_ms": 812,
        "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)
