Ang pagsasaling ito ay ginawa ng makina at naghihintay ng pagsusuri.Lumipat sa Ingles
Sa pahinang ito

Observability query API

Query projects, traces, services and releases, manage environment policy, run exports and privacy-request lookups, and read recent signals from a coding agent.

Two separate read surfaces.

APM query API (/v1/apm/*, sk_ server API key, collector hosts). Availability: customer and general capture are not yet available, and an approved proof-of-concept is limited to synthetic, no-personal-data telemetry. At the time of writing a server API key created in the Backoffice cannot carry read:apm, write:apm or read:privacy_request, so those operations are not callable with a self-service key yet; read:export can be selected.

Coding-agent read API (/v1/coding-agent/*, cak_ coding-agent key, on https://ingest.noxtica.com). Create a key under Integrations & API, Coding agent keys.

EnvironmentBase URL
Productionhttps://collect.noxtica.com
Productionhttps://ingest.noxtica.com

Credential: ApiKeyAuth, CodingAgentKeyAuth. See Authentication.

List APM projects

GET /v1/apm/projects

Lists tenant-owned observability projects from PostgreSQL authority. Results are cursor-paginated and never cached.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
limitqueryintegerNoMinimum 1, maximum 200. Default 50.
cursorquerystringNoAt least 1 character, at most 512 characters.

Responses

StatusMeaningError codesContent
200Project page.application/json ApmProjectList
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
itemsarray of ApmProjectYes
items[]object (ApmProject)No
items[].project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
items[].display_namestringYes
items[].statestringYes
items[].region_idstringYes
items[].data_plane_idstringYes
items[].capture_enabledbooleanYes
items[].enabled_signalsarray of stringYesAt most 2 items, unique items.
items[].authority_epochintegerYesMinimum 0.
items[].erasure_epochintegerYesMinimum 0.
items[].created_atstring (date-time)Yes
items[].updated_atstring (date-time)Yes
countintegerYesMinimum 0, maximum 200.
truncatedbooleanYes
next_cursorstring, nullableYes
freshnessconstYesAlways postgres_authority.
completenessstringYesAllowed values: complete, truncated.

Response example (200)

{
  "ok": true,
  "items": [
    {
      "project_id": "checkout",
      "display_name": "Checkout",
      "state": "active",
      "region_id": "us-central1",
      "data_plane_id": "primary",
      "capture_enabled": false,
      "enabled_signals": [
        "traces"
      ],
      "authority_epoch": 7,
      "erasure_epoch": 2,
      "created_at": "2026-08-01T00:00:00.000Z",
      "updated_at": "2026-09-01T00:00:00.000Z"
    }
  ],
  "count": 1,
  "truncated": false,
  "next_cursor": null,
  "freshness": "postgres_authority",
  "completeness": "complete"
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/projects" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/projects', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/projects",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

List project environments

GET /v1/apm/projects/{projectId}/environments

Lists environments belonging to one tenant-owned APM project from PostgreSQL authority.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
projectIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
limitqueryintegerNoMinimum 1, maximum 200. Default 50.
cursorquerystringNoAt least 1 character, at most 512 characters.

Responses

StatusMeaningError codesContent
200Environment page.application/json ApmEnvironmentList
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
itemsarray of ApmEnvironmentPolicyYes
items[]object (ApmEnvironmentPolicy)No
items[].project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
items[].environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
items[].display_namestringYes
items[].environment_kindstringYes
items[].statestringYes
items[].region_idstringYes
items[].data_plane_idstringYes
items[].capture_enabledbooleanYes
items[].allowed_signalsarray of stringYesAt most 2 items, unique items.
items[].sampling_policy_idone of ApmScopedId or any, nullableYes
items[].retention_policy_versionintegerYesMinimum 1.
items[].privacy_policy_versionintegerYesMinimum 1.
items[].authority_epochintegerYesMinimum 0.
items[].erasure_epochintegerYesMinimum 0.
items[].quota_manifest_revisionintegerYesMinimum 0.
items[].parser_manifest_revisionintegerYesMinimum 0.
items[].created_atstring (date-time)Yes
items[].updated_atstring (date-time)Yes
countintegerYesMinimum 0, maximum 200.
truncatedbooleanYes
next_cursorstring, nullableYes
freshnessconstYesAlways postgres_authority.
completenessstringYesAllowed values: complete, truncated.

Response example (200)

{
  "ok": true,
  "project_id": "checkout",
  "items": [
    {
      "project_id": "checkout",
      "environment_id": "prod",
      "display_name": "Production",
      "environment_kind": "production",
      "state": "active",
      "region_id": "us-central1",
      "data_plane_id": "primary",
      "capture_enabled": false,
      "allowed_signals": [
        "traces"
      ],
      "sampling_policy_id": "baseline",
      "retention_policy_version": 3,
      "privacy_policy_version": 2,
      "authority_epoch": 7,
      "erasure_epoch": 2,
      "quota_manifest_revision": 4,
      "parser_manifest_revision": 5,
      "created_at": "2026-08-01T00:00:00.000Z",
      "updated_at": "2026-09-01T00:00:00.000Z"
    }
  ],
  "count": 1,
  "truncated": false,
  "next_cursor": null,
  "freshness": "postgres_authority",
  "completeness": "complete"
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/projects/example-projectId/environments" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/projects/example-projectId/environments', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/projects/example-projectId/environments",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read an environment policy

GET /v1/apm/projects/{projectId}/environments/{environmentId}/policy

Returns the authoritative environment policy plus bounded sampling and retention policy inventories.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
projectIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environmentIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Responses

StatusMeaningError codesContent
200Policy snapshot.application/json ApmPolicySnapshot
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
policyobject (ApmEnvironmentPolicy)Yes
policy.project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
policy.environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
policy.display_namestringYes
policy.environment_kindstringYes
policy.statestringYes
policy.region_idstringYes
policy.data_plane_idstringYes
policy.capture_enabledbooleanYes
policy.allowed_signalsarray of stringYesAt most 2 items, unique items.
policy.sampling_policy_idone of ApmScopedId or any, nullableYes
policy.retention_policy_versionintegerYesMinimum 1.
policy.privacy_policy_versionintegerYesMinimum 1.
policy.authority_epochintegerYesMinimum 0.
policy.erasure_epochintegerYesMinimum 0.
policy.quota_manifest_revisionintegerYesMinimum 0.
policy.parser_manifest_revisionintegerYesMinimum 0.
policy.created_atstring (date-time)Yes
policy.updated_atstring (date-time)Yes
sampling_policiesarray of ApmSamplingPolicyYesAt most 100 items.
sampling_policies[]object (ApmSamplingPolicy)No
sampling_policies[].policy_idstringYes
sampling_policies[].policy_versionintegerYes
sampling_policies[].signalstringYes
sampling_policies[].schema_versionintegerYes
sampling_policies[].sampling_classstringYes
sampling_policies[].modestringYes
sampling_policies[].enabledbooleanYes
sampling_policies[].rate_ppminteger, nullableYes
sampling_policies[].tail_window_secondsinteger, nullableYes
sampling_policies[].tail_budget_eventsinteger, nullableYes
sampling_policies[].effective_fromstring (date-time)Yes
sampling_policies[].effective_untilstring (date-time), nullableYes
sampling_policy_countintegerYesMinimum 0, maximum 100.
sampling_policies_truncatedbooleanYes
retention_policiesarray of ApmRetentionPolicyYesAt most 100 items.
retention_policies[]object (ApmRetentionPolicy)No
retention_policies[].signalstringYes
retention_policies[].retention_classstringYes
retention_policies[].policy_versionintegerYes
retention_policies[].duration_secondsinteger, nullableYes
retention_policies[].minimum_secondsintegerYes
retention_policies[].maximum_secondsintegerYes
retention_policies[].region_idstringYes
retention_policies[].deletion_modestringYes
retention_policies[].legal_hold_statestringYes
retention_policies[].enabledbooleanYes
retention_policies[].effective_fromstring (date-time)Yes
retention_policies[].effective_untilstring (date-time), nullableYes
retention_policy_countintegerYesMinimum 0, maximum 100.
retention_policies_truncatedbooleanYes
freshnessobject (ApmAuthorityFreshness)Yes
freshness.sourceconstYesAlways postgres_authority.
freshness.updated_atstring (date-time)Yes
completenessobjectYes
completeness.sampling_policiesstringYesAllowed values: complete, truncated.
completeness.retention_policiesstringYesAllowed values: complete, truncated.

Response example (200)

{
  "ok": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "policy": {
    "project_id": "checkout",
    "environment_id": "prod",
    "display_name": "Production",
    "environment_kind": "production",
    "state": "active",
    "region_id": "us-central1",
    "data_plane_id": "primary",
    "capture_enabled": false,
    "allowed_signals": [
      "traces"
    ],
    "sampling_policy_id": "baseline",
    "retention_policy_version": 3,
    "privacy_policy_version": 2,
    "authority_epoch": 7,
    "erasure_epoch": 2,
    "quota_manifest_revision": 4,
    "parser_manifest_revision": 5,
    "created_at": "2026-08-01T00:00:00.000Z",
    "updated_at": "2026-09-01T00:00:00.000Z"
  },
  "sampling_policies": [],
  "sampling_policy_count": 0,
  "sampling_policies_truncated": false,
  "retention_policies": [],
  "retention_policy_count": 0,
  "retention_policies_truncated": false,
  "freshness": {
    "source": "postgres_authority",
    "updated_at": "2026-09-01T00:00:00.000Z"
  },
  "completeness": {
    "sampling_policies": "complete",
    "retention_policies": "complete"
  }
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/projects/example-projectId/environments/example-environmentId/policy" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/projects/example-projectId/environments/example-environmentId/policy', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/projects/example-projectId/environments/example-environmentId/policy",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Update an environment policy

PUT /v1/apm/projects/{projectId}/environments/{environmentId}/policy

Updates a closed allowlist using optimistic authority-epoch concurrency. While capture rollout is OFF, capture_enabled: true is unavailable and returns 409 capture_unavailable; clients may only leave it absent or set it false.

Authentication: Bearer token (ApiKeyAuth), scope write:apm.

Parameters

NameInTypeRequiredDescription
projectIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environmentIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Request body

Content type application/json, required.

FieldTypeRequiredDescription
expected_authority_epochintegerYesMinimum 1.
capture_enabledconstNotrue is unavailable while capture rollout is OFF. Always false.
allowed_signalsarray of stringNoAt most 2 items, unique items.
sampling_policy_idone of ApmScopedId or any, nullableNo
retention_policy_versionintegerNoMinimum 1.
privacy_policy_versionintegerNoMinimum 1.
region_idstringNoAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
data_plane_idstringNoAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Responses

StatusMeaningError codesContent
200Updated authoritative policy.application/json ApmPolicyUpdateResult
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
409Capture is unavailable or the expected authority epoch is stale.capture_unavailableapplication/json ApmConflict
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
409Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
policyobject (ApmEnvironmentPolicy)Yes
policy.project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
policy.environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
policy.display_namestringYes
policy.environment_kindstringYes
policy.statestringYes
policy.region_idstringYes
policy.data_plane_idstringYes
policy.capture_enabledbooleanYes
policy.allowed_signalsarray of stringYesAt most 2 items, unique items.
policy.sampling_policy_idone of ApmScopedId or any, nullableYes
policy.retention_policy_versionintegerYesMinimum 1.
policy.privacy_policy_versionintegerYesMinimum 1.
policy.authority_epochintegerYesMinimum 0.
policy.erasure_epochintegerYesMinimum 0.
policy.quota_manifest_revisionintegerYesMinimum 0.
policy.parser_manifest_revisionintegerYesMinimum 0.
policy.created_atstring (date-time)Yes
policy.updated_atstring (date-time)Yes
countconstYesAlways 1.
truncatedconstYesAlways false.
freshnessobject (ApmAuthorityFreshness)Yes
freshness.sourceconstYesAlways postgres_authority.
freshness.updated_atstring (date-time)Yes
completenessconstYesAlways complete.

Response example (200)

{
  "ok": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "policy": {
    "project_id": "checkout",
    "environment_id": "prod",
    "display_name": "Production",
    "environment_kind": "production",
    "state": "active",
    "region_id": "us-central1",
    "data_plane_id": "primary",
    "capture_enabled": false,
    "allowed_signals": [
      "traces"
    ],
    "sampling_policy_id": "baseline",
    "retention_policy_version": 3,
    "privacy_policy_version": 2,
    "authority_epoch": 8,
    "erasure_epoch": 2,
    "quota_manifest_revision": 4,
    "parser_manifest_revision": 5,
    "created_at": "2026-08-01T00:00:00.000Z",
    "updated_at": "2026-09-21T00:00:00.000Z"
  },
  "count": 1,
  "truncated": false,
  "freshness": {
    "source": "postgres_authority",
    "updated_at": "2026-09-21T00:00:00.000Z"
  },
  "completeness": "complete"
}

Example request

curl

curl -X PUT "https://collect.noxtica.com/v1/apm/projects/example-projectId/environments/example-environmentId/policy" \
  -H "Authorization: Bearer $NOXTICA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "expected_authority_epoch": 7,
  "capture_enabled": false,
  "allowed_signals": [
    "traces"
  ],
  "sampling_policy_id": "baseline"
}'

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/projects/example-projectId/environments/example-environmentId/policy', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    expected_authority_epoch: 7,
    capture_enabled: false,
    allowed_signals: [
      'traces',
    ],
    sampling_policy_id: 'baseline',
  }),
});
console.log(response.status, await response.text());

Python (standard library)

import json
import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/projects/example-projectId/environments/example-environmentId/policy",
    data=json.dumps({
        "expected_authority_epoch": 7,
        "capture_enabled": False,
        "allowed_signals": [
            "traces",
        ],
        "sampling_policy_id": "baseline",
    }).encode(),
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
        "Content-Type": "application/json",
    },
    method="PUT",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Search traces

GET /v1/apm/traces

Searches the warehouse within one explicit project/environment and a range no longer than 31 days. Rows expose only the query allowlist; completeness and freshness are not inferred.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
project_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
fromquerystring (date-time)YesInclusive RFC 3339 range start. The interval to to must not exceed 31 days.
toquerystring (date-time)YesExclusive RFC 3339 range end, after from; the interval must not exceed 31 days.
limitqueryintegerNoMinimum 1, maximum 200. Default 50.
cursorquerystringNoAt least 1 character, at most 512 characters.
service_namequerystringNoAt least 1 character, at most 256 characters. Pattern ^[A-Za-z0-9._:/-]+$.
release_idquerystringNoAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
statusquerystringNoAllowed values: ok, error.

Responses

StatusMeaningError codesContent
200Trace summary page.application/json ApmTraceSearchResult
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
500Unexpected internal trace-query failure.internal_errorapplication/json ApmError
503Warehouse query or mandatory access audit is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
500Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
availableconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
itemsarray of ApmTraceSummaryYesAt most 200 items.
items[]object (ApmTraceSummary)No
items[].traceIdstringYesPattern ^(?!0{32}$)[0-9a-f]{32}$.
items[].rootSpanNamestring, nullableNo
items[].rootServiceNamestring, nullableNo
items[].startTimestring (date-time), nullableNo
items[].endTimestring (date-time), nullableNo
items[].durationMsnumber, nullableNo
items[].spanCountinteger, nullableNoMinimum 0.
items[].errorCountinteger, nullableNoMinimum 0.
items[].statusstring, nullableNoAllowed values: ok, error, null.
items[].releaseIdstring, nullableNo
items[].buildIdstring, nullableNo
items[].samplingClassstring, nullableNo
items[].headSamplingDecisionstring, nullableNo
items[].tailSamplingDecisionstring, nullableNo
items[].samplingReasonstring, nullableNo
items[].retentionDecisionstring, nullableNo
items[].headStatestring, nullableNo
items[].tailStatestring, nullableNo
items[].partialboolean, nullableNo
items[].lateboolean, nullableNo
items[].completenessstring, nullableYes
items[].samplingPolicyIdstring, nullableNo
items[].retentionPolicyVersioninteger, nullableNo
items[].freshnessWatermarkstring (date-time), nullableNo
items[].ingestedAtstring (date-time), nullableNo
items[].schemaVersioninteger, nullableNo
countintegerYesMinimum 0, maximum 200.
truncatedbooleanYes
next_cursorstring, nullableYes
partialbooleanYes
completenessstringYes
freshnessobject (ApmFreshness)Yes
freshness.watermarkstring (date-time), nullableYes
freshness.ingested_atstring (date-time), nullableYes

Response example (200)

{
  "ok": true,
  "available": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "items": [
    {
      "traceId": "0123456789abcdef0123456789abcdef",
      "startTime": "2026-09-20T12:00:00.000Z",
      "partial": false,
      "completeness": "complete",
      "freshnessWatermark": "2026-09-20T12:01:00.000Z",
      "ingestedAt": "2026-09-20T12:01:01.000Z"
    }
  ],
  "count": 1,
  "truncated": false,
  "next_cursor": null,
  "partial": false,
  "completeness": "complete",
  "freshness": {
    "watermark": "2026-09-20T12:01:00.000Z",
    "ingested_at": "2026-09-20T12:01:01.000Z"
  }
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/traces?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/traces?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/traces?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read trace detail

GET /v1/apm/traces/{traceId}

Returns a trace summary and a bounded timeline. Parent-edge completeness is explicitly false in this launch contract.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
traceIdpathstringYesPattern ^(?!0{32}$)[0-9a-f]{32}$.
project_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
fromquerystring (date-time)YesInclusive RFC 3339 range start. The interval to to must not exceed 31 days.
toquerystring (date-time)YesExclusive RFC 3339 range end, after from; the interval must not exceed 31 days.
limitqueryintegerNoMinimum 1, maximum 200. Default 50.

Responses

StatusMeaningError codesContent
200Trace detail and timeline.application/json ApmTraceDetailResult
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
500Unexpected internal trace-query failure.internal_errorapplication/json ApmError
503Warehouse query or mandatory access audit is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
500Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
availableconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
summaryobject (ApmTraceSummary)Yes
summary.traceIdstringYesPattern ^(?!0{32}$)[0-9a-f]{32}$.
summary.rootSpanNamestring, nullableNo
summary.rootServiceNamestring, nullableNo
summary.startTimestring (date-time), nullableNo
summary.endTimestring (date-time), nullableNo
summary.durationMsnumber, nullableNo
summary.spanCountinteger, nullableNoMinimum 0.
summary.errorCountinteger, nullableNoMinimum 0.
summary.statusstring, nullableNoAllowed values: ok, error, null.
summary.releaseIdstring, nullableNo
summary.buildIdstring, nullableNo
summary.samplingClassstring, nullableNo
summary.headSamplingDecisionstring, nullableNo
summary.tailSamplingDecisionstring, nullableNo
summary.samplingReasonstring, nullableNo
summary.retentionDecisionstring, nullableNo
summary.headStatestring, nullableNo
summary.tailStatestring, nullableNo
summary.partialboolean, nullableNo
summary.lateboolean, nullableNo
summary.completenessstring, nullableYes
summary.samplingPolicyIdstring, nullableNo
summary.retentionPolicyVersioninteger, nullableNo
summary.freshnessWatermarkstring (date-time), nullableNo
summary.ingestedAtstring (date-time), nullableNo
summary.schemaVersioninteger, nullableNo
timelinearray of ApmTraceSpanYesAt most 200 items.
timeline[]object (ApmTraceSpan)No
timeline[].traceIdstringYesPattern ^(?!0{32}$)[0-9a-f]{32}$.
timeline[].spanIdstringYesPattern ^(?!0{16}$)[0-9a-f]{16}$.
timeline[].parentSpanIdstring, nullableNo
timeline[].spanNamestring, nullableNo
timeline[].serviceNamestring, nullableNo
timeline[].spanKindstring, nullableNo
timeline[].startTimestring (date-time), nullableNo
timeline[].endTimestring (date-time), nullableNo
timeline[].durationMsnumber, nullableNo
timeline[].statusCodestring, nullableNo
timeline[].statusMessagestring, nullableNo
timeline[].releaseIdstring, nullableNo
timeline[].buildIdstring, nullableNo
timeline[].claimedRumLinkIdstring, nullableNo
timeline[].confirmedRumLinkIdstring, nullableNo
timeline[].correlationStatestringNoAllowed values: confirmed, claimed, unavailable.
timeline[].completenessstring, nullableYes
timeline[].eventTimestring (date-time), nullableNo
timeline[].ingestedAtstring (date-time), nullableNo
countintegerYesMinimum 0, maximum 200.
truncatedbooleanYes
partialbooleanYes
completenessobjectYes
completeness.summarystringYes
completeness.timelinestringYes
freshnessobject (ApmFreshness)Yes
freshness.watermarkstring (date-time), nullableYes
freshness.ingested_atstring (date-time), nullableYes
parent_edges_completeconstYesAlways false.

Response example (200)

{
  "ok": true,
  "available": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "summary": {
    "traceId": "0123456789abcdef0123456789abcdef",
    "startTime": "2026-09-20T12:00:00.000Z",
    "partial": false,
    "completeness": "complete",
    "freshnessWatermark": "2026-09-20T12:01:00.000Z",
    "ingestedAt": "2026-09-20T12:01:01.000Z"
  },
  "timeline": [
    {
      "traceId": "0123456789abcdef0123456789abcdef",
      "spanId": "aaaaaaaaaaaaaaaa",
      "parentSpanId": "bbbbbbbbbbbbbbbb",
      "completeness": "partial",
      "ingestedAt": "2026-09-20T12:01:01.000Z"
    }
  ],
  "count": 1,
  "truncated": false,
  "partial": true,
  "completeness": {
    "summary": "complete",
    "timeline": "partial"
  },
  "freshness": {
    "watermark": "2026-09-20T12:01:00.000Z",
    "ingested_at": "2026-09-20T12:01:01.000Z"
  },
  "parent_edges_complete": false
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/traces/example-traceId?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/traces/example-traceId?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/traces/example-traceId?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

List service health

GET /v1/apm/services

Returns bounded aggregate health rows for one project/environment and a range no longer than 31 days.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
project_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
fromquerystring (date-time)YesInclusive RFC 3339 range start. The interval to to must not exceed 31 days.
toquerystring (date-time)YesExclusive RFC 3339 range end, after from; the interval must not exceed 31 days.
limitqueryintegerNoMinimum 1, maximum 200. Default 50.

Responses

StatusMeaningError codesContent
200Service health page.application/json ApmServiceListResult
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Warehouse query or mandatory access audit is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
availableconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
itemsarray of ApmServiceHealthYesAt most 200 items.
items[]object (ApmServiceHealth)No
items[].service_namestring, nullableYes
items[].trace_countnumber, nullableYes
items[].error_trace_countnumber, nullableYes
items[].error_ratenumber, nullableYes
items[].p50_duration_msnumber, nullableYes
items[].p95_duration_msnumber, nullableYes
items[].completenessstringYesAllowed values: partial, unknown.
items[].freshness_watermarkstring (date-time), nullableYes
countintegerYesMinimum 0, maximum 200.
truncatedbooleanYes
partialbooleanYes
completenessstringYesAllowed values: partial, unknown.
freshness_watermarkstring (date-time), nullableYes

Response example (200)

{
  "ok": true,
  "available": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "items": [
    {
      "service_name": "checkout-api",
      "trace_count": 120,
      "error_trace_count": 3,
      "error_rate": 0.025,
      "p50_duration_ms": 42,
      "p95_duration_ms": 310,
      "completeness": "unknown",
      "freshness_watermark": "2026-09-20T12:01:00.000Z"
    }
  ],
  "count": 1,
  "truncated": false,
  "partial": false,
  "completeness": "unknown",
  "freshness_watermark": "2026-09-20T12:01:00.000Z"
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/services?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/services?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/services?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read service health and dependencies

GET /v1/apm/services/{serviceName}/health

Returns health plus dependency aggregates. Either warehouse subquery may be unavailable; partial, availability booleans, and reason report that honestly.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
serviceNamepathstringYesAt least 1 character, at most 256 characters. Pattern ^[A-Za-z0-9._:/-]+$.
project_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
fromquerystring (date-time)YesInclusive RFC 3339 range start. The interval to to must not exceed 31 days.
toquerystring (date-time)YesExclusive RFC 3339 range end, after from; the interval must not exceed 31 days.
limitqueryintegerNoMinimum 1, maximum 200. Default 50.

Responses

StatusMeaningError codesContent
200Service health and dependencies.application/json ApmServiceHealthResult
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Warehouse query or mandatory access audit is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
availableconstYesAlways true.
partialbooleanYes
reasonstring, nullableYesAllowed values: partial_warehouse_unavailable, source_incomplete, null.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
service_namestringYes
healthone of ApmServiceHealth or any, nullableYes
health{ApmServiceHealth}object (ApmServiceHealth)No
health{ApmServiceHealth}.service_namestring, nullableYes
health{ApmServiceHealth}.trace_countnumber, nullableYes
health{ApmServiceHealth}.error_trace_countnumber, nullableYes
health{ApmServiceHealth}.error_ratenumber, nullableYes
health{ApmServiceHealth}.p50_duration_msnumber, nullableYes
health{ApmServiceHealth}.p95_duration_msnumber, nullableYes
health{ApmServiceHealth}.completenessstringYesAllowed values: partial, unknown.
health{ApmServiceHealth}.freshness_watermarkstring (date-time), nullableYes
health_availablebooleanYes
itemsarray of ApmDependencyHealthYesAt most 200 items.
items[]object (ApmDependencyHealth)No
items[].source_servicestring, nullableYes
items[].target_servicestring, nullableYes
items[].protocolstring, nullableYes
items[].request_countnumber, nullableYes
items[].error_countnumber, nullableYes
items[].p50_duration_msnumber, nullableYes
items[].p95_duration_msnumber, nullableYes
items[].p99_duration_msnumber, nullableYes
items[].freshness_watermarkstring (date-time), nullableYes
countintegerYesMinimum 0, maximum 200.
dependencies_availablebooleanYes
truncatedbooleanYes
completenessstringYesAllowed values: partial, unknown.
freshness_watermarkstring (date-time), nullableYes

Response example (200)

{
  "ok": true,
  "available": true,
  "partial": false,
  "reason": null,
  "project_id": "checkout",
  "environment_id": "prod",
  "service_name": "checkout-api",
  "health": {
    "service_name": "checkout-api",
    "trace_count": 120,
    "error_trace_count": 3,
    "error_rate": 0.025,
    "p50_duration_ms": 42,
    "p95_duration_ms": 310,
    "completeness": "unknown",
    "freshness_watermark": "2026-09-20T12:01:00.000Z"
  },
  "health_available": true,
  "items": [
    {
      "source_service": "checkout-api",
      "target_service": "payments",
      "protocol": "http",
      "request_count": 50,
      "error_count": 1,
      "p50_duration_ms": 25,
      "p95_duration_ms": 80,
      "p99_duration_ms": 140,
      "freshness_watermark": "2026-09-20T12:01:00.000Z"
    }
  ],
  "count": 1,
  "dependencies_available": true,
  "truncated": false,
  "completeness": "unknown",
  "freshness_watermark": "2026-09-20T12:01:00.000Z"
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/services/example-serviceName/health?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/services/example-serviceName/health?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/services/example-serviceName/health?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read release health

GET /v1/apm/releases/{releaseId}/health

Returns bounded aggregate health rows for one release within the required project/environment and time range.

Authentication: Bearer token (ApiKeyAuth), scope read:apm.

Parameters

NameInTypeRequiredDescription
releaseIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
project_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idquerystringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
fromquerystring (date-time)YesInclusive RFC 3339 range start. The interval to to must not exceed 31 days.
toquerystring (date-time)YesExclusive RFC 3339 range end, after from; the interval must not exceed 31 days.
limitqueryintegerNoMinimum 1, maximum 200. Default 50.

Responses

StatusMeaningError codesContent
200Release health page.application/json ApmReleaseHealthResult
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Warehouse query or mandatory access audit is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
availableconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
release_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
itemsarray of ApmReleaseHealthYesAt most 200 items.
items[]object (ApmReleaseHealth)No
items[].release_idstring, nullableYes
items[].build_idstring, nullableYes
items[].trace_countnumber, nullableYes
items[].error_trace_countnumber, nullableYes
items[].error_ratenumber, nullableYes
items[].p50_duration_msnumber, nullableYes
items[].p95_duration_msnumber, nullableYes
items[].completenessstringYesAllowed values: partial, unknown.
items[].freshness_watermarkstring (date-time), nullableYes
countintegerYesMinimum 0, maximum 200.
truncatedbooleanYes
partialbooleanYes
completenessstringYesAllowed values: partial, unknown.
freshness_watermarkstring (date-time), nullableYes

Response example (200)

{
  "ok": true,
  "available": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "release_id": "2026.09.20",
  "items": [
    {
      "release_id": "2026.09.20",
      "build_id": "build-42",
      "trace_count": 100,
      "error_trace_count": 2,
      "error_rate": 0.02,
      "p50_duration_ms": 40,
      "p95_duration_ms": 300,
      "completeness": "unknown",
      "freshness_watermark": "2026-09-20T12:01:00.000Z"
    }
  ],
  "count": 1,
  "truncated": false,
  "partial": false,
  "completeness": "unknown",
  "freshness_watermark": "2026-09-20T12:01:00.000Z"
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/releases/example-releaseId/health?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/releases/example-releaseId/health?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/releases/example-releaseId/health?project_id=example-project_id&environment_id=example-environment_id&from=2026-01-01T00%3A00%3A00Z&to=2026-01-01T00%3A00%3A00Z",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Create an asynchronous APM export

POST /v1/apm/exports

Creates a tenant-scoped manifest for a range no longer than 31 days. This endpoint never returns storage references, credentials, or a download URL.

Authentication: Bearer token (ApiKeyAuth), scope write:apm.

Request body

Content type application/json, required.

FieldTypeRequiredDescription
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
fromstring (date-time)YesRange start; interval must not exceed 31 days.
tostring (date-time)YesRange end after from; interval must not exceed 31 days.
fact_namesarray of stringYesAt least 1 item, at most 10 items, unique items.
purposestringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9][A-Za-z0-9 ._:/-]{0,127}$.
expires_in_secondsintegerNoMinimum 60, maximum 604800. Default 3600.

Responses

StatusMeaningError codesContent
201Pending export manifest.application/json ApmExportStatus
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
201Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (201, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
export_manifest_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
purposestringYes
fact_namesarray of stringYes
statestringYesAsynchronous manifest state reported by the runtime; consumers must tolerate future states.
row_countinteger, nullableYesMinimum 0.
byte_countinteger, nullableYesMinimum 0.
created_atstring (date-time), nullableYes
expires_atstring (date-time), nullableYes
completed_atstring (date-time), nullableYes

Response example (201)

{
  "ok": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "export_manifest_id": "550e8400-e29b-41d4-a716-446655440000",
  "purpose": "incident_review",
  "fact_names": [
    "apm_spans",
    "apm_trace_summaries"
  ],
  "state": "pending",
  "row_count": null,
  "byte_count": null,
  "created_at": "2026-09-21T00:00:00.000Z",
  "expires_at": "2026-09-21T01:00:00.000Z",
  "completed_at": null
}

Example request

curl

curl -X POST "https://collect.noxtica.com/v1/apm/exports" \
  -H "Authorization: Bearer $NOXTICA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "project_id": "checkout",
  "environment_id": "prod",
  "from": "2026-09-20T00:00:00.000Z",
  "to": "2026-09-21T00:00:00.000Z",
  "fact_names": [
    "apm_spans",
    "apm_trace_summaries"
  ],
  "purpose": "incident_review",
  "expires_in_seconds": 3600
}'

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/exports', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    project_id: 'checkout',
    environment_id: 'prod',
    from: '2026-09-20T00:00:00.000Z',
    to: '2026-09-21T00:00:00.000Z',
    fact_names: [
      'apm_spans',
      'apm_trace_summaries',
    ],
    purpose: 'incident_review',
    expires_in_seconds: 3600,
  }),
});
console.log(response.status, await response.text());

Python (standard library)

import json
import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/exports",
    data=json.dumps({
        "project_id": "checkout",
        "environment_id": "prod",
        "from": "2026-09-20T00:00:00.000Z",
        "to": "2026-09-21T00:00:00.000Z",
        "fact_names": [
            "apm_spans",
            "apm_trace_summaries",
        ],
        "purpose": "incident_review",
        "expires_in_seconds": 3600,
    }).encode(),
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
        "Content-Type": "application/json",
    },
    method="POST",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read asynchronous export status

GET /v1/apm/exports/{exportId}

Returns the safe manifest projection and its real asynchronous state; no object reference or signing credential is exposed.

Authentication: Bearer token (ApiKeyAuth), scope read:export.

Parameters

NameInTypeRequiredDescription
exportIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Responses

StatusMeaningError codesContent
200Export status.application/json ApmExportStatus
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
export_manifest_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
purposestringYes
fact_namesarray of stringYes
statestringYesAsynchronous manifest state reported by the runtime; consumers must tolerate future states.
row_countinteger, nullableYesMinimum 0.
byte_countinteger, nullableYesMinimum 0.
created_atstring (date-time), nullableYes
expires_atstring (date-time), nullableYes
completed_atstring (date-time), nullableYes

Response example (200)

{
  "ok": true,
  "project_id": "checkout",
  "environment_id": "prod",
  "export_manifest_id": "550e8400-e29b-41d4-a716-446655440000",
  "purpose": "incident_review",
  "fact_names": [
    "apm_spans"
  ],
  "state": "running",
  "row_count": null,
  "byte_count": null,
  "created_at": "2026-09-21T00:00:00.000Z",
  "expires_at": "2026-09-21T01:00:00.000Z",
  "completed_at": null
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/exports/example-exportId" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/exports/example-exportId', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/exports/example-exportId",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Request an export download grant

POST /v1/apm/exports/{exportId}/download-grant

Reports readiness only. Collector signing authority is intentionally unavailable, so this launch contract never returns a URL, object reference, bearer token, or credential.

Authentication: Bearer token (ApiKeyAuth), scope read:export.

Parameters

NameInTypeRequiredDescription
exportIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Request body

Content type application/json, optional.

FieldTypeRequiredDescription
expires_in_secondsintegerNoMinimum 1, maximum 300. Default 60.

Responses

StatusMeaningError codesContent
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
409Export is not ready or failed.application/json ApmGrantUnavailable
410Export expired or was deleted.application/json ApmGrantUnavailable
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Signing authority or control-plane storage is unavailable.application/json

Response headers

StatusHeaderTypeDescription
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
409Cache-ControlconstAPM control/query responses are never cacheable.
410Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Example request

curl

curl -X POST "https://collect.noxtica.com/v1/apm/exports/example-exportId/download-grant" \
  -H "Authorization: Bearer $NOXTICA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "expires_in_seconds": 60
}'

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/exports/example-exportId/download-grant', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    expires_in_seconds: 60,
  }),
});
console.log(response.status, await response.text());

Python (standard library)

import json
import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/exports/example-exportId/download-grant",
    data=json.dumps({
        "expires_in_seconds": 60,
    }).encode(),
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
        "Content-Type": "application/json",
    },
    method="POST",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read subject export status

GET /v1/apm/privacy/subjects/{subjectHandle}/exports/{requestId}

Hashes the opaque subject handle before repository access and returns only the safe export projection. The cleartext handle and its hash are never returned.

Authentication: Bearer token (ApiKeyAuth), scope read:privacy_request.

Parameters

NameInTypeRequiredDescription
subjectHandlepathstringYesOpaque subject handle; hashed before authentication, logging, storage, or repository access. At least 16 characters, at most 512 characters. Pattern ^[A-Za-z0-9._~:/+-]+$.
requestIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Responses

StatusMeaningError codesContent
200Subject export status.application/json ApmPrivacyExportStatus
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
privacy_request_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
export_manifest_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
purposestringYes
fact_namesarray of stringYes
statestringYesAsynchronous manifest state reported by the runtime; consumers must tolerate future states.
row_countinteger, nullableYesMinimum 0.
byte_countinteger, nullableYesMinimum 0.
created_atstring (date-time), nullableYes
expires_atstring (date-time), nullableYes
completed_atstring (date-time), nullableYes

Response example (200)

{
  "ok": true,
  "privacy_request_id": "dsar-42",
  "project_id": "checkout",
  "environment_id": "prod",
  "export_manifest_id": "550e8400-e29b-41d4-a716-446655440000",
  "purpose": "privacy_subject_export",
  "fact_names": [
    "apm_spans"
  ],
  "state": "pending",
  "row_count": null,
  "byte_count": null,
  "created_at": "2026-09-21T00:00:00.000Z",
  "expires_at": "2026-09-21T01:00:00.000Z",
  "completed_at": null
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/privacy/subjects/example-subjectHandle/exports/example-requestId" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/privacy/subjects/example-subjectHandle/exports/example-requestId', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/privacy/subjects/example-subjectHandle/exports/example-requestId",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read subject erasure status

GET /v1/apm/privacy/subjects/{subjectHandle}/erasures/{requestId}

Returns aggregate deletion progress only. Subject identifiers, per-store object references, SQL, credentials, and PII are never exposed.

Authentication: Bearer token (ApiKeyAuth), scope read:privacy_request.

Parameters

NameInTypeRequiredDescription
subjectHandlepathstringYesOpaque subject handle; hashed before authentication, logging, storage, or repository access. At least 16 characters, at most 512 characters. Pattern ^[A-Za-z0-9._~:/+-]+$.
requestIdpathstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.

Responses

StatusMeaningError codesContent
200Subject erasure status.application/json ApmErasureStatus
400Closed-input validation failed.invalid_requestapplication/json ApmError
401Missing, invalid, or ingest-only credential. An sk_apm_ key is never accepted here.Unauthorizedapplication/json ApmError
403The server API key lacks the operation’s required scope.API key does not have read:apm scopeapplication/json ApmError
404The tenant-scoped resource was not found.resource_not_foundapplication/json ApmError
429V1 read rate limit exceeded.Rate limit exceededapplication/json ApmRateLimitError
503Authoritative control-plane data is unavailable.application/json ApmUnavailable

Response headers

StatusHeaderTypeDescription
200Cache-ControlconstAPM control/query responses are never cacheable.
400Cache-ControlconstAPM control/query responses are never cacheable.
401Cache-ControlconstAPM control/query responses are never cacheable.
403Cache-ControlconstAPM control/query responses are never cacheable.
404Cache-ControlconstAPM control/query responses are never cacheable.
429Cache-ControlconstAPM control/query responses are never cacheable.
503Cache-ControlconstAPM control/query responses are never cacheable.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
okconstYesAlways true.
privacy_request_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
project_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
environment_idstringYesAt least 1 character, at most 128 characters. Pattern ^[A-Za-z0-9._:-]+$.
statestringYes
attemptsintegerYesMinimum 0.
created_atstring (date-time), nullableYes
updated_atstring (date-time), nullableYes
completed_atstring (date-time), nullableYes
storesobjectYes
stores.countintegerYesMinimum 0.
stores.pendingintegerYesMinimum 0.
stores.runningintegerYesMinimum 0.
stores.succeededintegerYesMinimum 0.
stores.failedintegerYesMinimum 0.
deletedobjectYes
deleted.rowsintegerYesMinimum 0.
deleted.objectsintegerYesMinimum 0.
deleted.bytesintegerYesMinimum 0.

Response example (200)

{
  "ok": true,
  "privacy_request_id": "dsar-42",
  "project_id": "checkout",
  "environment_id": "prod",
  "state": "running",
  "attempts": 1,
  "created_at": "2026-09-21T00:00:00.000Z",
  "updated_at": "2026-09-21T00:05:00.000Z",
  "completed_at": null,
  "stores": {
    "count": 3,
    "pending": 1,
    "running": 1,
    "succeeded": 1,
    "failed": 0
  },
  "deleted": {
    "rows": 120,
    "objects": 2,
    "bytes": 4096
  }
}

Example request

curl

curl "https://collect.noxtica.com/v1/apm/privacy/subjects/example-subjectHandle/erasures/example-requestId" \
  -H "Authorization: Bearer $NOXTICA_API_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://collect.noxtica.com/v1/apm/privacy/subjects/example-subjectHandle/erasures/example-requestId', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_API_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://collect.noxtica.com/v1/apm/privacy/subjects/example-subjectHandle/erasures/example-requestId",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_API_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

List recent findings for a coding agent

GET /v1/coding-agent/findings

Reads recent raw signals for your organisation, narrowed to the scopes the coding-agent key holds. Results from every scope the key holds are merged: this route has no single required scope, and a scope narrows what is read instead of denying the call. At the time of writing the scopes rum_errors, apm_traces, apm_errors, apm_metrics and logs have a findings source; the other scopes a key can carry (profiles, fingerprint_bot_signals, kyc_risk_summaries) add nothing to this route. The signal field names the scope a row came from. An empty array is a normal answer; this route never answers 404.

since defaults to 24 hours ago and limit to 50 (maximum 200). Create a coding-agent key in the Backoffice under Integrations & API, Coding agent keys; keys start with cak_.

Authentication: Bearer token (CodingAgentKeyAuth).

Base URL: https://ingest.noxtica.com (Production).

Parameters

NameInTypeRequiredDescription
sincequerystring (date-time)NoOnly signals observed at or after this RFC 3339 instant. Defaults to 24 hours ago.
limitqueryintegerNoMaximum number of signals to return. Defaults to 50; values above 200 are clamped to 200. Minimum 1, maximum 200. Default 50.

Responses

StatusMeaningError codesContent
200A (possibly empty) array of signals.application/json
400schema_invalid — since or limit could not be parsed.schema_invalidapplication/json CodingAgentError
401coding_agent_auth_missing (no Authorization header) or coding_agent_auth_invalid (a malformed, unknown, revoked or inactive coding-agent key).coding_agent_auth_invalid, coding_agent_auth_missingapplication/json CodingAgentError
429coding_agent_rate_limited — the per-key request limit was exceeded. Wait Retry-After seconds before retrying.coding_agent_rate_limitedapplication/json CodingAgentError
502coding_agent_query_failed — the read query failed. Retry with backoff.coding_agent_query_failedapplication/json CodingAgentError
503coding_agent_authority_unavailable (the key could not be checked) or coding_agent_bq_unavailable (the read store is not available). Retry with backoff.coding_agent_authority_unavailable, coding_agent_bq_unavailableapplication/json CodingAgentError

Response headers

StatusHeaderTypeDescription
429Retry-AfterintegerSeconds until the key may call again.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
[]object (CodingAgentSignal)No
[].signalstringYesThe key scope the row came from
[].reference_idstringYesThe id of the source record (event
[].excerptstringYesA short human-readable summary of the record.
[].observed_atstring (date-time)Yes
[].metric_valuenumberNoPresent when the record carries a numeric value.

Response example (200)

[
  {
    "signal": "rum_errors",
    "reference_id": "evt_8f1c2a",
    "excerpt": "error /checkout",
    "observed_at": "2026-10-27T09:58:12Z"
  }
]

Example request

curl

curl "https://ingest.noxtica.com/v1/coding-agent/findings" \
  -H "Authorization: Bearer $NOXTICA_CODING_AGENT_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://ingest.noxtica.com/v1/coding-agent/findings', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_CODING_AGENT_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://ingest.noxtica.com/v1/coding-agent/findings",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_CODING_AGENT_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read one trace for a coding agent

GET /v1/coding-agent/traces/{trace_id}

Returns the spans of one trace (a narrow projection: attributes, events and links are never returned) from roughly the last 30 days. Requires the apm_traces scope on the key; without it the route answers 403 coding_agent_scope_denied. An unknown trace id, or one that belongs to another organisation, is a normal 200 with an empty spans array: this route never answers 404.

Authentication: Bearer token (CodingAgentKeyAuth).

Base URL: https://ingest.noxtica.com (Production).

Parameters

NameInTypeRequiredDescription
trace_idpathstringYesThe trace id.

Responses

StatusMeaningError codesContent
200The trace; spans is empty when the id is unknown.application/json CodingAgentTrace
401coding_agent_auth_missing (no Authorization header) or coding_agent_auth_invalid (a malformed, unknown, revoked or inactive coding-agent key).coding_agent_auth_invalid, coding_agent_auth_missingapplication/json CodingAgentError
403coding_agent_scope_denied — the key is valid but lacks the scope this route requires.coding_agent_scope_deniedapplication/json CodingAgentError
429coding_agent_rate_limited — the per-key request limit was exceeded. Wait Retry-After seconds before retrying.coding_agent_rate_limitedapplication/json CodingAgentError
502coding_agent_query_failed — the read query failed. Retry with backoff.coding_agent_query_failedapplication/json CodingAgentError
503coding_agent_authority_unavailable (the key could not be checked) or coding_agent_bq_unavailable (the read store is not available). Retry with backoff.coding_agent_authority_unavailable, coding_agent_bq_unavailableapplication/json CodingAgentError

Response headers

StatusHeaderTypeDescription
429Retry-AfterintegerSeconds until the key may call again.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
trace_idstringYes
spansarray of CodingAgentSpanYes
spans[]object (CodingAgentSpan)No
spans[].span_idstringYes
spans[].parent_span_idstringNo
spans[].service_namestringYes
spans[].operation_namestringYes
spans[].start_timestring (date-time)Yes
spans[].end_timestring (date-time)Yes
spans[].duration_nsinteger (int64)Yes
spans[].status_codestringYes
spans[].status_messagestringNo

Response example (200)

{
  "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
  "spans": [
    {
      "span_id": "00f067aa0ba902b7",
      "service_name": "checkout-api",
      "operation_name": "GET /health",
      "start_time": "2026-10-27T09:58:00Z",
      "end_time": "2026-10-27T09:58:00.010Z",
      "duration_ns": 10000000,
      "status_code": "STATUS_CODE_OK"
    }
  ]
}

Example request

curl

curl "https://ingest.noxtica.com/v1/coding-agent/traces/example-trace_id" \
  -H "Authorization: Bearer $NOXTICA_CODING_AGENT_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://ingest.noxtica.com/v1/coding-agent/traces/example-trace_id', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_CODING_AGENT_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://ingest.noxtica.com/v1/coding-agent/traces/example-trace_id",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_CODING_AGENT_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

Read one error group for a coding agent

GET /v1/coding-agent/errors/{error_group_id}

Returns one error group with its aggregate counts and a bounded list of recent occurrences (a narrow projection: stack frames are never returned) from roughly the last 30 days. Requires the apm_errors scope on the key; without it the route answers 403 coding_agent_scope_denied. 404 coding_agent_error_group_not_found means the group is unknown or belongs to another organisation; the two cases are indistinguishable by design.

Authentication: Bearer token (CodingAgentKeyAuth).

Base URL: https://ingest.noxtica.com (Production).

Parameters

NameInTypeRequiredDescription
error_group_idpathstringYesThe error group id.

Responses

StatusMeaningError codesContent
200The error group.application/json CodingAgentErrorGroup
401coding_agent_auth_missing (no Authorization header) or coding_agent_auth_invalid (a malformed, unknown, revoked or inactive coding-agent key).coding_agent_auth_invalid, coding_agent_auth_missingapplication/json CodingAgentError
403coding_agent_scope_denied — the key is valid but lacks the scope this route requires.coding_agent_scope_deniedapplication/json CodingAgentError
404coding_agent_error_group_not_found — the group is unknown or belongs to another organisation.coding_agent_error_group_not_foundapplication/json CodingAgentError
429coding_agent_rate_limited — the per-key request limit was exceeded. Wait Retry-After seconds before retrying.coding_agent_rate_limitedapplication/json CodingAgentError
502coding_agent_query_failed — the read query failed. Retry with backoff.coding_agent_query_failedapplication/json CodingAgentError
503coding_agent_authority_unavailable (the key could not be checked) or coding_agent_bq_unavailable (the read store is not available). Retry with backoff.coding_agent_authority_unavailable, coding_agent_bq_unavailableapplication/json CodingAgentError

Response headers

StatusHeaderTypeDescription
429Retry-AfterintegerSeconds until the key may call again.

Response fields (200, application/json)

FieldTypeAlways returnedDescription
error_group_idstringYes
first_seenstring (date-time)Yes
last_seenstring (date-time)Yes
occurrence_countinteger (int64)Yes
affected_release_idsarray of stringYes
occurrencesarray of CodingAgentErrorOccurrenceYes
occurrences[]object (CodingAgentErrorOccurrence)No
occurrences[].occurrence_idstringYes
occurrences[].exception_typestringYes
occurrences[].exception_messagestringNo
occurrences[].observed_atstring (date-time)Yes
occurrences[].release_idstringNo

Response example (200)

{
  "error_group_id": "eg_5d41402abc4b2a76",
  "first_seen": "2026-10-26T08:00:00Z",
  "last_seen": "2026-10-27T09:58:12Z",
  "occurrence_count": 42,
  "affected_release_ids": [
    "2026.10.26"
  ],
  "occurrences": [
    {
      "occurrence_id": "occ_91",
      "exception_type": "TypeError",
      "exception_message": "Cannot read properties of undefined",
      "observed_at": "2026-10-27T09:58:12Z",
      "release_id": "2026.10.26"
    }
  ]
}

Example request

curl

curl "https://ingest.noxtica.com/v1/coding-agent/errors/example-error_group_id" \
  -H "Authorization: Bearer $NOXTICA_CODING_AGENT_KEY"

Node.js (global fetch, Node 18 or later)

const response = await fetch('https://ingest.noxtica.com/v1/coding-agent/errors/example-error_group_id', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.NOXTICA_CODING_AGENT_KEY}`,
  },
});
console.log(response.status, await response.text());

Python (standard library)

import os
import urllib.request

request = urllib.request.Request(
    "https://ingest.noxtica.com/v1/coding-agent/errors/example-error_group_id",
    headers={
        "Authorization": f"Bearer {os.environ['NOXTICA_CODING_AGENT_KEY']}",
    },
    method="GET",
)
with urllib.request.urlopen(request) as response:
    print(response.status, response.read().decode())

This page is generated from the Noxtica OpenAPI specification release v0.4.0: v1.yaml version 1.3.0-2026-10-27 (SHA-256 3fd15257a022). Do not edit it by hand.