Skip to main content
Install the official SDK and call /v1/* with typed namespaces. Requires Node ≥ 20.
Create the query that does the catching:
Or watch one Source directly, if a query is more than you need:

Authentication

Pass apiKey or set NEPHIA_API_KEY. Every request sends the x-api-key header.

Namespaces

Params use camelCase in TypeScript. The SDK converts them to snake_case on the wire, and responses come back as-is (camelCase JSON). client.queries.create() and client.queries.update() are the exception: their bodies travel camelCase, unconverted. A query is the one object you round-trip — read it, change a field, send it back — and that only works if the body’s keys are spelled the way the response spells them.

Mentions

Page with the cursor until it stops coming back:

Queries

resetSearches is worth reading. Changing what a search looks for (its terms, filters or market) starts that search over on a new child watch: its first poll records what currently matches without emitting it, and new results arrive from then on. The mentions the previous watch caught stay on the query. A new interval or webhook applies to the running watch and resets nothing. The list names the searches that were started over; an empty list means none were.

Watches

Same lifecycle on client.reddit.watches, client.youtube.watches, client.bluesky.watches, client.hackernews.watches, client.rss.watches, client.aiAnswers.watches, and client.vinted.watches.

Webhook signatures

The X-Signature header is t=<unix>,v1=<hmac>; verify recomputes the HMAC over "<t>.<body>" with your account’s signing secret (dashboard → API Keys) and rejects timestamps older than 5 minutes (configurable via { toleranceSeconds }).

Errors & retries

Typed errors: AuthenticationError (401), InsufficientCreditsError (402), PermissionDeniedError (403), NotFoundError (404), ConflictError (409), RateLimitError (429, or 503 with code RATE_LIMITED), ServiceUnavailableError (other 503s), NephiaError (fallback). All expose status, code, body, and retryAfter. The client retries 429 / 502 / 503 / 504 and network failures (respects Retry-After, capped at 60s). It does not retry other 4xx or timeouts. Every POST carries an auto-generated Idempotency-Key reused across attempts, so retried creates can never duplicate a watch or double-charge credits — override it per request with { idempotencyKey }. Per-request options also accept signal, timeoutMs, and headers.

Next steps