---
title: Profiles and connections
description: Read an account's profile and posts, import its whole history in bulk, and list followers and following.
sidebar:
  order: 3
  icon: user
---

## Read a profile

`GET /{handle}` — the permalink form. It returns the profile and its recent posts: original posts only by default, up to 100 per page with `limit`. Add `with_replies=true` and `with_reposts=true` to get the account's replies and reposts too. A page is assembled from as many upstream pages as it takes and cut exactly at `limit`, so `limit=100` really returns 100.

```bash
curl -sS 'https://x.pcstyle.dev/vercel?full=true'
```

`GET /api/v1/profiles/{handle}` — the same read on the [versioned surface](/versioning).

```bash
curl -sS 'https://x.pcstyle.dev/api/v1/profiles/vercel?full=true'
```

## Read connections

`GET /{handle}/followers` and `GET /{handle}/following` list who follows an account and who it follows, up to 100 per page, raw JSON with `format=json`, and no ceiling on how far a cursor goes.

```bash
curl -sS 'https://x.pcstyle.dev/vercel/followers'
```

The same two lists sit under `/api/v1/profiles/{handle}`:

```bash
curl -sS 'https://x.pcstyle.dev/api/v1/profiles/vercel/following?format=json'
```

| Permalink route | Versioned route | JSON fields |
| --- | --- | --- |
| `/{handle}` | `/api/v1/profiles/{handle}` | `profile` and `posts` |
| `/{handle}/followers` | `/api/v1/profiles/{handle}/followers` | `users` |
| `/{handle}/following` | `/api/v1/profiles/{handle}/following` | `users` |

Both forms take the same options and return the same body; the versioned ones are the [stable machine surface](/versioning). Use a handle without `@` in the URL. Connection data depends on upstream availability.

## Options

| Parameter | Default | Behavior |
| --- | --- | --- |
| `limit` | `20` | Items per response, maximum **100**. Every page is cut exactly at `limit`, assembled from as many upstream pages as it takes. |
| `with_replies` | `false` | Profile only. `true` includes the account's replies. |
| `with_reposts` | `false` | Profile only. `true` includes reposts. A repost is the original post with `reposted_by` set, so it carries the original's `id` and `created_at`. |
| `until` | — | Profile only. ISO date, ISO datetime, or unix timestamp: the page starts just below that instant, so you can jump to a date without walking cursors. Ignored when `cursor` is present. |
| `cursor` | — | Opaque `nextCursor` from the previous response. No page ceiling: keep following it. |
| `page` | `1` | Page 1–10; prefer cursors. Ignored when `cursor` is present. |
| `full` | `false` | `true` or `1` adds dates, metrics, and expanded profile details. |
| `format` | `markdown` | `markdown` or `json`. Browse routes do not accept `obsidian`. |
| `nocache` | `false` | `true` or `1` bypasses the application cache. |

Follow `nextCursor` to continue. [See pagination](/pagination).

## Import a post history

For hundreds or thousands of posts at once — replies included, raw JSON, streamed — use the bulk route instead of paging:

```bash
curl -sS 'https://x.pcstyle.dev/api/v1/profiles/paulg/posts?since=2025-09-01&max_posts=2000'
```

It walks the timeline in parallel, remembers what it collected, and answers repeat imports from that archive. [Import a post history](/bulk-import) covers it end to end.

:::note
Pinned posts are not identified, and X Lists are unsupported.
:::
