API Endpoints

Full reference for every ArtistGuard API endpoint.

Base URL: https://v2-prod-api.artistguard.app

All endpoints use JSON. Authentication required on all routes except public auth endpoints. See Authentication.


Artists

GET    /api/v1/artists                                      List all monitored artists
GET    /api/v1/artists/summary                              Artists with stats and 7-day change counts
GET    /api/v1/artists/{id}                                 Get one artist
GET    /api/v1/artists/{id}/snapshot                        Latest snapshot (stats, bio, top tracks, socials)
GET    /api/v1/artists/{id}/snapshot-history                Follower/listener history (query: ?days=30)
GET    /api/v1/artists/{id}/changes                         Change history for this artist
GET    /api/v1/artists/{id}/releases                        Full discography
GET    /api/v1/artists/{id}/releases/{release_id}           Single release
GET    /api/v1/artists/{id}/releases/{release_id}/tracks    Track list for a release
DELETE /api/v1/artists/{id}                                 Stop monitoring this artist
GET    /api/v1/artists/search?q={query}                     Search Spotify catalog
GET    /api/v1/artists/lookup?url={spotifyUrl}              Resolve a Spotify artist URL to an ID

Example response (list artists)

[
  {
    "id": "ma_abc123",
    "spotify_id": "6eUKZXaKkcviH0Ku9w2n3V",
    "name": "Artist Name",
    "active": true,
    "last_checked_at": "2026-03-07T10:00:00Z"
  }
]

Artist Verification

Before monitoring an artist, ownership must be verified. Business plan customers can use instant verification.

POST /api/v1/verify/start              Start a standard verification session
GET  /api/v1/verify/{session_id}       Poll session status
GET  /api/v1/verify/pending            Get your current pending session
POST /api/v1/verify/instant            Instant verify (Business only)

Instant verify body

{ "spotify_id": "6eUKZXaKkcviH0Ku9w2n3V" }

Instant verification bypasses the standard ownership challenge. Only available on the Business plan. Returns the verified artist immediately.


Changes

GET /api/v1/changes                  All changes across your organization, newest first
GET /api/v1/changes/stats/daily      Daily change counts (query: ?days=30)
Param Type Description
limit int Max results (default 50, max 100)
offset int Pagination offset

Destinations

Destinations are named delivery targets (Discord webhook, Slack webhook, email address, etc.). Alert rules reference a destination by ID.

GET    /api/v1/org/destinations              List all destinations
POST   /api/v1/org/destinations              Create a destination
PATCH  /api/v1/org/destinations/{id}         Update a destination
DELETE /api/v1/org/destinations/{id}         Delete a destination
POST   /api/v1/org/destinations/{id}/test    Send a test message

Create/update body

{
  "name": "Team Discord",
  "type": "discord",
  "config": {
    "url": "https://discord.com/api/webhooks/..."
  }
}

type: discord, slack, email, or webhook

Config keys by type:

Type Config fields
discord url (webhook URL)
slack url (webhook URL)
email address
webhook url

Alert Rules

GET    /api/v1/org/alerts           List all rules
POST   /api/v1/org/alerts           Create a rule
PATCH  /api/v1/org/alerts/{id}      Update a rule
DELETE /api/v1/org/alerts/{id}      Delete a rule

Create/update body

{
  "name": "Critical alerts",
  "destination_id": "dest_abc123",
  "min_severity": "critical",
  "event_types": [],
  "artist_filter": null,
  "active": true
}

destination_id: ID of an existing destination

min_severity: critical, warning, or info

event_types: array of change type strings, empty array means all types

artist_filter: monitored artist ID or null for all artists


Outgoing Webhooks

Outgoing webhooks deliver a signed HTTP POST to your endpoint for every change event.

GET    /api/v1/org/webhooks                      List webhooks
POST   /api/v1/org/webhooks                      Create a webhook
PATCH  /api/v1/org/webhooks/{id}                 Update a webhook
DELETE /api/v1/org/webhooks/{id}                 Delete a webhook
POST   /api/v1/org/webhooks/{id}/rotate-secret   Rotate signing secret
POST   /api/v1/org/webhooks/{id}/test            Send a test event

Organization

GET    /api/v1/org                               Get org details and plan info
PATCH  /api/v1/org                               Update org name
GET    /api/v1/org/members                       List members with roles
PATCH  /api/v1/org/members/{user_id}             Update a member's role
DELETE /api/v1/org/members/{user_id}             Remove a member
GET    /api/v1/org/invitations                   List pending invitations
POST   /api/v1/org/invitations                   Send email invite
DELETE /api/v1/org/invitations/{id}              Revoke invite
POST   /api/v1/org/leave                         Leave the organization

Account

GET    /api/v1/auth/me                   Current user profile
PATCH  /api/v1/auth/me                   Update name or email
POST   /api/v1/auth/logout               Clear session cookie
GET    /api/v1/auth/sessions             Active sessions list
DELETE /api/v1/auth/sessions/{id}        Revoke one session

API Keys

GET    /api/v1/org/api-keys          List all keys (prefix and metadata only)
POST   /api/v1/org/api-keys          Create a key (full key returned once)
DELETE /api/v1/org/api-keys/{id}     Revoke a key (immediate)
POST   /api/v1/org/api-terms/accept  Accept API terms of use

Create body

{ "name": "CI pipeline" }

Create response (full key shown only here, never again)

{
  "id": "key_abc123",
  "name": "CI pipeline",
  "key": "ag_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "prefix": "ag_live_xxxx",
  "created_at": "2026-03-07T10:00:00Z"
}

API access requires Pro or Business plan.


Health (public, no auth)

GET /health
{
  "data": {
    "status": "healthy",
    "timestamp": "2026-03-24T08:28:30Z",
    "version": "[email protected]",
    "uptime": "44h38m15s"
  }
}