Hopp til innholdet
English Logg inn

For eksterne systemer og agenter

Send status, trafikk og hendelser til Manager

Manager tar imot telemetri fra nettsteder, apper, API-er, planlagte jobber og AI-agenter, og gjør den om til status, ferskhetsovervåking, terskler og hendelser. Hele integrasjonskontrakten står på denne siden. Du trenger én hemmelighet fra et menneske — resten finner du ut selv.

Du sender
POST https://monitor.skjldlabs.com/api/v1/ingest/{SOURCE_ID}
Authorization: Bearer {SOURCE_TOKEN}
Content-Type: application/json

{
    "idempotency_key": "checkout-health-2026-08-08T13:00",
    "type": "heartbeat",
    "status": "healthy",
    "severity": "info",
    "title": "Checkout health",
    "message": "p95 over the last five minutes",
    "latency_ms": 184,
    "metric": {
        "name": "http.latency.p95",
        "value": 184,
        "unit": "ms"
    },
    "tags": {
        "environment": "production",
        "region": "eu-north-1"
    },
    "data": {
        "requests": 1294,
        "version": "4.12.0"
    },
    "occurred_at": "2026-08-08T13:00:00Z"
}
Manager svarer 202
{
    "accepted": true,
    "event_id": "01KZ9F3M2V7X0T4B8Q6R1Y5C3D",
    "duplicate": false,
    "source_status": "healthy",
    "received_at": "2026-08-08T13:00:01+00:00"
}
Les tilstanden tilbake

GET /api/v1/ingest/{SOURCE_ID}/status

{
    "source": {
        "id": "01KZ8SET41J71MQ261V8N8J2Z1",
        "name": "Checkout health",
        "type": "health",
        "status": "healthy",
        "last_received_at": "2026-08-08T13:00:01+00:00",
        "next_expected_at": "2026-08-08T13:06:01+00:00",
        "expected_interval_seconds": 300
    }
}

Samme token. Her ser du når neste rapport forventes — bommer du på det vinduet flere kontroller på rad, åpnes en hendelse.

Modellen

Du sender alltid til en datakilde, aldri til en tjeneste.

Tenant

Kunden eller organisasjonen. Eier alt under seg, og all data er isolert per tenant.

Tjeneste

Ett nettsted, én app, ett API eller ett annet digitalt produkt.

Datakilde

Én autentisert strøm med eget token, egen deklarert kontrakt og egen forventet frekvens. Dette er adressen du sender til.

Dette trenger du før du starter

Én registreringsnøkkel, opprettet av en eier eller administrator i dashboardet under «API & MCP». Den er bundet til én tenant og én fast tjenestenøkkel, og er det eneste du ikke kan skaffe selv.

Tre steg

  1. 01

    Deklarer deg selv

    POST et versjonert manifest med registreringsnøkkelen. Manifestet beskriver tjenesten og hver eneste datakilde: rapporteringsfrekvens, metrikker, hendelsestyper, tagger og datafelter.

  2. 02

    Ta imot nøklene

    Svaret inneholder ett engangs-token per ny datakilde, sammen med REST- og MCP-adressen. Lagre dem med én gang — de vises aldri igjen.

  3. 03

    Send data

    Bruk kildens token mot REST eller MCP. Begge lagrer de samme hendelsene og utløser de samme reglene.

Manifestet

Idempotent. Send det på nytt hver gang tjenesten endrer seg: nye kilder opprettes, kilder du slutter å deklarere settes på pause med historikken i behold, og eksisterende tokens røres ikke.

POST /api/v1/register
{
    "manifest_version": "1.0",
    "service": {
        "key": "customer-portal-production",
        "name": "Customer portal",
        "environment": "production",
        "url": "https://portal.example.com",
        "version": "4.12.0",
        "accent": "emerald",
        "tags": [
            "laravel",
            "eu-north-1"
        ]
    },
    "sources": [
        {
            "key": "web-analytics",
            "name": "Web analytics",
            "type": "analytics",
            "description": "Traffic aggregated over five-minute windows.",
            "expected_interval_seconds": 300,
            "grace_seconds": 300,
            "metrics": [
                {
                    "name": "analytics.pageviews",
                    "unit": "count",
                    "aggregation": "sum",
                    "description": "Pageviews in the window."
                },
                {
                    "name": "analytics.users",
                    "unit": "count",
                    "aggregation": "max",
                    "description": "Unique visitors in the window."
                }
            ],
            "events": [
                {
                    "type": "analytics.top_pages",
                    "severity": "info",
                    "description": "Most visited pages in the window."
                }
            ],
            "tags": [
                "site",
                "channel"
            ],
            "data_fields": [
                {
                    "name": "top_path",
                    "type": "string",
                    "required": false,
                    "description": "Most visited path in the window."
                }
            ]
        }
    ]
}

Regler

manifest_version
MAJOR.MINOR
service.key
Små bokstaver med bindestrek. Må matche nøkkelen registreringstokenet er bundet til.
service.environment
production · staging · development
sources[].key
Fast identitet for strømmen. Unik i manifestet.
sources[].type
health · analytics · contacts · security · laravel-log · performance · custom
sources[].expected_interval_seconds
60 – 2 592 000
sources[].grace_seconds
0 – 86 400
metrics[].aggregation
last · sum · avg · min · max · p50 · p95 · p99
events[].severity
info · warning · error · critical

Vær ærlig om expected_interval_seconds. Manager åpner en «ingen nye data»-hendelse når en kilde bommer på sitt eget vindu flere kontroller på rad. Å deklarere en frekvens du ikke holder gir støy, ikke trygghet.

Svaret — tokens vises én gang
{
    "registered": true,
    "manifest_version": "1.0",
    "service": {
        "id": "01K…",
        "key": "customer-portal-production"
    },
    "sources": [
        {
            "key": "web-analytics",
            "id": "01KZ8SET41J71MQ261V8N8J2Z1",
            "token": "mgr_live_…shown_once",
            "ingest_url": "https://monitor.skjldlabs.com/api/v1/ingest/01KZ8SET41J71MQ261V8N8J2Z1",
            "mcp_url": "https://monitor.skjldlabs.com/mcp/01KZ8SET41J71MQ261V8N8J2Z1"
        }
    ]
}

REST

HTTP

Alle felter er valgfrie. Send det du har.

Felt Type Merknader
type string Free-form kind of report, for example heartbeat, metric, event or log. Max 40 characters.
status string Service state. down, failed, critical and error open an incident; up, ok, healthy and operational resolve one. Max 40 characters.
severity enum One of info, warning, error, critical. Defaults to info.
title string Short headline shown in the event list. Max 255 characters.
message string Longer context. Max 10 000 characters.
latency_ms integer Measured latency, 0 to 3 600 000.
metric.name string Required when metric is present. Stable dot-separated name, max 120 characters.
metric.value number Required when metric is present.
metric.unit string For example ms, percent, count or bytes. Max 32 characters.
tags object Up to 30 string values. Use for dimensions you want to filter on, such as environment or region.
data object Up to 100 structured values kept with the event.
occurred_at string ISO 8601. Defaults to now and may not be more than five minutes in the future.
idempotency_key string Repeating a key for the same source returns the original event instead of storing a duplicate. Max 190 characters.

Legg til /batch på URL-en og send en events-array for opptil 100 hendelser i én forespørsel.

MCP

Streamable HTTP

Hver datakilde er også en Streamable HTTP MCP-server, med samme token. Verktøyene oppdages automatisk av klienten.

Verktøy Argumenter
report_heartbeat Report that the service is alive, with its current status and optional latency. status, message, latency_ms, idempotency_key
report_event Report an operational event such as a deploy, a failure or a signup. type, title, message, severity, status, tags, data, idempotency_key, occurred_at
report_metric Report a numeric metric such as latency, users, errors, conversions or queue depth. name, value, unit, severity, message, idempotency_key, occurred_at
get_source_status Read back the current status of the authenticated source. ingen
Ressurs manager://source/recent-events — The most recent events already stored for the authenticated source.
Klientoppsett
{
    "mcpServers": {
        "manager-production-health": {
            "type": "http",
            "url": "https://monitor.skjldlabs.com/mcp/{SOURCE_ID}",
            "headers": {
                "Authorization": "Bearer {SOURCE_TOKEN}"
            }
        }
    }
}

Hvor ofte bør du sende

Kildetype Foreslått intervall Merknad
health 60s A heartbeat every minute gives the fastest possible outage detection.
performance 300s Aggregate latency and error rates over the window before sending.
analytics 300s Aggregate first. Never send one event per pageview.
security on event Send when something happens, and a heartbeat in between so silence is distinguishable from calm.
contacts on event Send each submission as it arrives.
laravel-log on event Send warnings and above. Batch to stay inside the rate limit.

Status og alvorlighet

status styrer hendelser: down, failed, critical og error åpner én, mens up, ok, healthy og operational lukker den tilsvarende. severity styrer bare hvor tydelig en lagret hendelse vises, og åpner ikke noe alene.

healthy up ok degraded warning down critical

Grenser

Forespørsler per minutt, per kilde
120
Registreringsforespørsler per minutt
30
Hendelser per batch
100
Størrelse på forespørsel
1.0 MB
Kilder per manifest
20
Metrikker per kilde
100
Deklarerte hendelsestyper per kilde
50
Lagringstid for rådata
90 dager

Svarkoder

202
Accepted and stored.
200
Accepted, but the idempotency key matched an event already stored. Nothing was duplicated.
401
Missing or wrong bearer token, or an invalid or expired signature.
404
Unknown data source id.
413
Request body larger than 1.0 MB.
422
The payload failed validation. The body names the offending fields.
423
The data source is paused in the dashboard.
429
Rate limit exceeded for this source.

Gjenforsøk og duplikater

Sett idempotency_key til noe stabilt og unikt per logiske rapport. Gjentar du nøkkelen for samme kilde, får du den opprinnelige hendelsen tilbake med HTTP 200 og ingenting lagres på nytt — så et gjenforsøk etter timeout er trygt.

Valgfri signering

En kilde kan settes til å kreve signatur. Da må hver forespørsel også ha:

X-Manager-Timestamp: {unix seconds}
X-Manager-Signature: hex(HMAC-SHA256(
    timestamp + "." + raw_body, source_token))

Tidsstempelet må være innenfor 300 sekunder av servertid.

Ikke send dette

Hold hemmeligheter, innlogginger, sesjonstokens og persondata utenfor title, message, tags og data. Telemetri lagres i 90 dager og er synlig for alle med tilgang til tenanten. Aggreger før du sender: antall og persentiler, ikke rader.