What you usually see
Is it us? Is it them? Which call?
Third-party API monitoring for backend teams
Know in minutes when a third-party API you depend on starts failing, down to the endpoint, from your own traffic.
// one line at the top of your app
import { init } from '@theirside/sdk';
init({ apiKey, endpoint });
The alert you get
Sample incident · demo data
POST /v2/cards/:id/activate
38%
errors for 6 min, normally 0.2%
Other Acme Cards endpoints: OK
Ready to send to their support
req_8f2c41, req_8f2c97, req_8f2d03 and 41 more
When a provider degrades, the first hour goes into working out whose fault it is.
Is it us? Is it them? Which call?
Providers often answer 401 or 404 during their own incidents. So teams start by debugging their own auth and routing code.
Hours later: "a partial outage on our side, now resolved."
Vendor status pages update late, or not at all for the one endpoint you call.
Acme Cards POST /v2/cards/:id/activate is failing 38% for 6 minutes, normally 0.2%. Other Acme Cards endpoints are fine.
Plus request IDs to paste straight into an email to their support.
Three parts, all in your infrastructure. Nothing to configure per vendor.
One line, zero config. Every outgoing call to a third-party API is recorded and grouped into providers: fetch, http/https, Axios, @nestjs/axios. Bounded memory, never slows or breaks the app.
init({ apiKey, endpoint })
One Docker image and your Postgres. Learns what normal looks like for each endpoint and scores it every minute. Dashboard and health API included.
docker compose up -d
Slack, email or a signed webhook, one incident per provider. Each comes with a paste-ready summary for the provider's support: endpoint, rates, timing, request IDs.
Slack · email · webhook
Not only 5xx. An endpoint that starts answering 401, 404 or 422 where it used to answer 200 opens an incident, judged against its own normal mix of statuses.
Seven days of history per endpoint, past incidents excluded. An endpoint that normally fails 3% stays quiet at 3%; a significant jump in errors or latency doesn't.
A quiet endpoint is judged over a longer window until it has enough calls, so a real failure still alerts and one or two failed calls never do.
A mock incident from the Theirside demo stack: fake providers, fake traffic, the real format.
POST /v2/cards/:id/activate
Opened 14:05 UTC · first bad minute 14:02 UTC · alerted to Slack #payments-alerts and email
Share of 401 responses, last 30 min
401 shareincident threshold
Other Acme Cards endpoints
| Endpoint | Unsuccessful | Status |
|---|---|---|
| GET /v2/cards/:id | 0.1% | OK |
| POST /v2/cards | 0.3% | OK |
| GET /v2/transactions | 0% | OK |
Summary for their support
Acme Cards — POST /v2/cards/:id/activate answering 401 since 14:02 UTC (6 min)
Returns 401 for 62% of calls (normally 0%); credentials may have expired or the provider changed access rules; 412 calls in window.
p95 latency 180 ms (normal 420 ms).
Responses are fast (median 95 ms, normally 310 ms): calls fail before doing work. Other Acme Cards endpoints: OK.
Sample provider request IDs: req_8f2c41, req_8f2c97, req_8f2d03
Support: support@acmecards.test
Paths are turned into endpoint templates inside your process before anything is sent. IDs and names become :id, so a customer's name in a URL never leaves your app.
The collector is self-hosted: one Docker image and your Postgres. Data stays in your infrastructure, with the retention you choose.
Everything a single team needs to catch provider problems is free. Paid features for larger companies come later.
Adding @theirside/sdk to your app comes with no restrictions. Zero dependencies.
Fair Core License (FCL-1.0-ALv2): use, self-host and modify it for your own company. Each release becomes Apache 2.0 after two years.
Alerts, dashboard, health API and a status page are free when self-hosted. Things like SSO, audit log and SLA reports will be paid.
From zero to the first alert in about five minutes. Design partners get the compose file and a hand with setup.
THEIRSIDE_VERSION=0.3.0 \
THEIRSIDE_BOOTSTRAP_API_KEY=tsd_live_$(openssl rand -hex 16) \
THEIRSIDE_ADMIN_TOKEN=$(openssl rand -hex 24) \
docker compose -f docker/docker-compose.yml up -d
npm i @theirside/sdk
import { init } from '@theirside/sdk';
init({ apiKey: process.env.THEIRSIDE_API_KEY, endpoint: 'http://localhost:4318' });
Open http://localhost:4318, add Slack, email or a webhook under Settings → Alert channels and send a test alert. Providers appear within a minute of the first calls.
Free setup help, a direct line to the people building it, and a say in what comes next.