When Did They Join Bluesky?
Discover when anyone joined the network
Build With Our API Free · No key
One endpoint, one number: how many days ago did this account join Bluesky? A brand-new account returns 0. If you run a bot, a client, a feed generator or a community tool, this is the cheapest way to tell a day-old newcomer apart from a 2023 veteran — without writing your own PLC directory crawler.
https://www.inquizitriv.com/when-did-they-join/api/days/?handle=alice.bsky.social
Generating a client? The
OpenAPI 3.0 schema
describes every field, error code and header, so
openapi-typescript, openapi-generator and similar
tools will build a fully typed client for you. Every API response also
advertises it in a Link: <…>; rel="service-desc" header.
Why you’d want this
Check a new follower once. If days_since_joined is 7 or less,
they are still finding their feet — that is the window where a welcome
DM, a starter pack or a “here’s how this works” reply actually helps
instead of annoying someone who has been here two years.
Run it across your followers, your feed’s contributors or your community roster and you have a real signup-cohort breakdown: how much of your audience arrived this week, this month, or during the last migration wave.
Account age is a useful input for rate limits, moderation queues, giveaway eligibility and “new here” badges. A day-old account posting a hundred links reads very differently from a three-year-old one doing the same.
Example response
$ curl "https://www.inquizitriv.com/when-did-they-join/api/days/?handle=alice.bsky.social" { "error": false, "handle": "alice.bsky.social", "did": "did:plc:z72i7hdynmk6r22z27h6tvur", "days_since_joined": 3, "joined_at": "2026-08-26T14:02:11.000Z", "join_date": "August 26, 2026", "join_date_source": "plc", "is_new_account": true, "new_account_window_days": 7, "checked_at": "2026-08-29T09:15:00+00:00" }
Parameters
| Name | What it does |
|---|---|
| handle |
Required. The Bluesky handle to look up, with or without the leading
@. Example: alice.bsky.social.
|
| window |
Optional, 1–365, defaults to 7. Sets the threshold used for the
is_new_account flag, so you can ask “joined in the last
30 days?” without doing the arithmetic yourself.
|
Errors
# Every failure carries error: true and a stable error_code. 400 missing_handle, invalid_handle, invalid_window 404 not_found — handle does not resolve 422 join_date_unavailable — did:web account, no PLC record 429 rate_limited — see Retry-After header
No API key, no signup, CORS open to every origin, so you can call it straight from a browser extension or a client-side dashboard. The join date comes from the PLC directory audit log — the account’s real creation record, not the profile timestamp that shifts whenever someone edits their bio. Responses are cached and the day count is recomputed on every request, so an account never gets stuck one day behind. Please stay under 60 requests per minute and cache what you fetch: a join date only changes once, ever. Questions or a project to show off? @whendidtheyjoin.bsky.social.