EG Stars Monitor

API reference

Plain HTTP. Send errors and logs with a project key. Manage projects, issues, and alert webhooks with an admin or organization user.

Quick start

  1. Create a project in the console, or via the admin API.
  2. Mint a project key for dev, staging, or prod.
  3. POST events to /v1/ingest with Authorization: Bearer <key>.
curl -s -X POST https://monitor.egstars.com/v1/ingest \
  -H "Authorization: Bearer egm_dev_…" \
  -H "Content-Type: application/json" \
  -d '{"events":[{"type":"error","level":"error","message":"Payment failed"}]}'

Authentication

Pick one style per request. Do not mix them.

Who How Used for
Your app Authorization: Bearer <project_key> Ingest only
Platform admin X-Admin-Username + X-Admin-Password All organization APIs. Optional X-Org-Slug.
Organization user X-User-Email + X-User-Password The same JSON APIs. Optional X-Org-Slug.

Owners and admins can write. Members are read-only.

Ingest

POST /v1/ingest

Accepts a batch of 1–100 events. Auth: project Bearer key. The key’s environment (dev, staging, or prod) is stored on every event.

Request body

{
  "events": [
    {
      "type": "error",
      "level": "error",
      "message": "Render failed in ChannelScreen",
      "platform": "react-native",
      "release": "1.0.0",
      "fingerprint": "optional-stable-id",
      "tags": { "feature": "chat" },
      "context": { "route": "/channels/123" }
    }
  ]
}

Response

{ "accepted": 1 }

Event envelope

Field Required Notes
type Yes log, error, or issue
message Yes Human-readable text, up to 16,384 characters
level No debug through fatal. Default is info.
fingerprint No Groups events into an issue. Derived automatically for error and issue when omitted.
timestamp No ISO-8601 time when the event occurred
release, platform, sdk No Release and client metadata
tags, context, user, request, breadcrumbs No Arbitrary JSON. Sensitive keys are redacted before storage.

Log events without a fingerprint are stored only as events, not as an issue. A new event on a resolved issue reopens it. Ignored stays ignored.

Projects and keys

GET /v1/projects

List projects in the active organization.

POST /v1/projects

Create a project. Admin or owner.

{ "slug": "chatmode", "name": "Chatmode" }
POST /v1/projects/{slug}/keys

Mint an ingest key. The plaintext key is returned once. Admin or owner.

{ "env": "dev" }
GET /v1/projects/{slug}/keys

List key prefixes and status. The full secret is never returned again.

POST /v1/projects/{slug}/keys/{key_id}/revoke

Revoke a key. Admin or owner.

Events and issues

GET /v1/projects/{slug}/events

Cursor-paginated events. Query: env, type, level, q, cursor, limit.

GET /v1/projects/{slug}/issues

List grouped issues. Query: status (open, resolved, ignored), cursor, limit.

GET /v1/projects/{slug}/issues/{id}

Issue detail plus recent linked events.

PATCH /v1/projects/{slug}/issues/{id}

Set status. Admin or owner.

{ "status": "resolved" }

Alert webhooks

Per-project HTTPS callbacks when an issue is created or reopened. Network errors, HTTP 429, and 5xx are retried. When a secret is set, requests include X-Monitor-Signature: sha256=<hmac> over the raw body.

GET /v1/projects/{slug}/alert-webhooks

List webhooks. Any member.

POST /v1/projects/{slug}/alert-webhooks

Create a webhook. Admin or owner. Returns secret once when with_secret is true.

{ "url": "https://example.com/hooks/monitor", "with_secret": true }
PATCH /v1/projects/{slug}/alert-webhooks/{id}

Update the URL, enabled, events, or rotate_secret. Admin or owner.

DELETE /v1/projects/{slug}/alert-webhooks/{id}

Delete a webhook. Admin or owner.

GET /v1/projects/{slug}/alert-webhooks/{id}/deliveries

The latest 50 delivery attempts.

POST /v1/projects/{slug}/alert-webhooks/{id}/test

Send a sample issue.created payload. Admin or owner. Test alerts are not retried.

Webhook payload shape

{
  "event": "issue.created",
  "sent_at": "2026-09-22T12:00:00+00:00",
  "project": { "id": "…", "slug": "chatmode", "name": "Chatmode" },
  "issue": {
    "id": "…",
    "fingerprint": "…",
    "title": "…",
    "status": "open",
    "count": 1,
    "last_level": "error",
    "last_env": "dev",
    "url": "https://monitor.egstars.com/projects/chatmode/issues/…"
  }
}

Orgs and members

POST /v1/auth/signup

Create a user and an organization. The user is the owner. No auth header.

{
  "email": "you@example.com",
  "name": "You",
  "password": "at-least-8-chars",
  "org_name": "Acme",
  "org_slug": "acme"
}
GET /v1/orgs

Organizations you can access.

GET /v1/orgs/current/members

Members of the active organization.

POST /v1/orgs/current/members

Invite or create a member. Owner or admin. May return temporary_password.

Errors and limits

Code Meaning
401 Missing or invalid credentials, or an invalid project key
403 Signed in, but this role cannot do that
404 Unknown project, issue, or webhook
422 Invalid JSON body or query
429 Ingest rate limit. Check the Retry-After header.

Default ingest limits: 120 requests per minute and 2,000 events per minute per project key.

Health check, no auth: GET /health returns {"status":"ok"}.