GraphQL API Examples

AppSignal provides a GraphQL API that allows you to programmatically query your application data.

On this page, you'll find some examples to help you get started.

Read our GraphQL API page for more information about the GraphQL endpoint and authentication.

Fetch deployments

Query

GraphQL
query MarkersIndexQuery( $appId: String! $limit: Int $offset: Int $start: DateTime $end: DateTime ) { app(id: $appId) { id deployMarkers(limit: $limit, offset: $offset, start: $start, end: $end) { id createdAt shortRevision revision gitCompareUrl user liveForInWords liveFor exceptionCount exceptionRate __typename } __typename } }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "limit": 25 }

Fetch incidents by deployments

Query

GraphQL
query ExceptionIncidentsQuery( $appId: String! $namespaces: [String] $markerId: String $limit: Int $offset: Int $state: IncidentStateEnum $order: IncidentOrderEnum ) { app(id: $appId) { id exceptionIncidents( namespaces: $namespaces marker: $markerId limit: $limit state: $state offset: $offset order: $order ) { ...ExceptionIncidentRow __typename } __typename } } fragment ExceptionIncidentRow on ExceptionIncident { id number count perMarkerCount(marker: $markerId) lastOccurredAt actionNames exceptionName state namespace firstBacktraceLine errorGroupingStrategy severity }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "markerId": "YOUR-DEPLOY-MARKER-ID", "limit": 200 }

Search incidents by tag

Query

GraphQL
uery Search( $organizationSlug: String! $query: String $namespace: String $sampleType: SampleTypeEnum ) { organization(slug: $organizationSlug) { search( query: $query namespace: $namespace sampleType: $sampleType ) { ... on ExceptionSample { id time action namespace overview { key value } exception { name message } incident { ... on ExceptionIncident { number } } app { name environment id } } ... on PerformanceSample { id appId time action namespace duration overview { key value } incident { ... on PerformanceIncident { number } } app { name environment id } } } } }

Query variables

GraphQL
{ "organizationSlug":"APPLICATION-SLUG" // taken from the URL of the application, "sampleType":"EXCEPTION", "query": "tag:value" // replace the word value with the values you are searching for }

Fetch error count

Query

GraphQL
query MetricsListQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricAggregation!]! ) { app(id: $appId) { id metrics { list(start: $start, end: $end, query: $query, timeframe: $timeframe) { start end rows { name tags { key value } fields { key value } } } } } }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "start": "2021-06-04T13:00:00.000Z", // change this to the date of your preference "end": "2021-12-21T14:00:00.000Z", // change this to the date of your preference "query": [ { "name": "transaction_exception_count", "tags": [{ "key": "namespace", "value": "*" }], "fields": [{ "field": "COUNTER", "aggregate": "SUM" }] } ] }

Fetch Mean (timeseries)

Query

GraphQL
query MetricTimeseriesQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricTimeseries] ) { app(id: $appId) { id metrics { timeseries( start: $start end: $end timeframe: $timeframe query: $query ) { start end resolution keys { name fields tags { key value } } points { timestamp values { value } } } } } }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "start": "2022-01-10T11:00:00Z", // Start data and time you want to fetch the Mean for "end": "2022-01-10T11:05:00Z", // End data and time you want to fetch the Mean for "query": [ { "name": "transaction_duration", "tags": [ // You can add more namespaces here, this example just fetches the Mean for web namespace. { "key": "namespace", "value": "web" } ], "fields": [ { "field": "MEAN" } ] } ] }

Fetch Mean (aggregated)

Query

GraphQL
query MetricAggregationQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricAggregation!]! ) { app(id: $appId) { id metrics { list(start: $start, end: $end, timeframe: $timeframe, query: $query) { start end rows { name tags { key value } fields { key value } } } } } }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "start": "2022-01-10T11:00:00Z", // Start data and time you want to fetch the Mean for "end": "2022-01-10T11:05:00Z", // End data and time you want to fetch the Mean for "query": [ { "name": "transaction_duration", "tags": [ // You can add more namespaces here, this example just fetches the Mean for web namespace. { "key": "namespace", "value": "web" } ], "fields": [ {"field":"mean","aggregate":"AVG"} ] } ] }

Fetch incident with sample

Query

GraphQL
query IncidentQuery( $appId: String! $incidentNumber: Int! $sampleId: String $timestamp: String $timerange: [DateTime] ) { app(id: $appId) { id incident(incidentNumber: $incidentNumber) { ... on ExceptionIncident { ...ExceptionIncident } ... on PerformanceIncident { ...PerformanceIncident } } } } fragment ExceptionIncident on ExceptionIncident { id number lastOccurredAt actionNames exceptionName notificationFrequency state namespace firstBacktraceLine errorGroupingStrategy sample(id: $sampleId, timestamp: $timestamp, timerange: $timerange) { ...ExceptionSample } } fragment ExceptionSample on ExceptionSample { id appId time revision action namespace queueDuration originallyRequested overview { key value } params sessionData customData environment { key value } exception { name message backtrace { original line column path method url type code { line source } error { class message } } } } fragment PerformanceIncident on PerformanceIncident { id number lastOccurredAt actionNames state notificationFrequency notificationThreshold namespace description severity sample(id: $sampleId, timestamp: $timestamp, timerange: $timerange) { ...PerformanceSample __typename } __typename } fragment PerformanceSample on PerformanceSample { id appId time revision action namespace originallyRequested hasNPlusOne timelineTruncatedEvents overview { key value __typename } params sessionData customData environment { key value __typename } duration queueDuration timeline { ...TimelineEvent __typename } version __typename } fragment TimelineEvent on TimelineEvent { action duration childDuration group name payload { name body __typename } time end digest count level allocationCount childAllocationCount __typename }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "incidentNumber": ID-OF-INCIDENT, "sampleId": "SAMPLE-ID-STRING", // this is optional "timestamp": "SAMPLE-TIME-STAMP", // this is optional "timerange": "SAMPLE-TIME-RANGE", // this is optional }

Fetch uptime monitors and their alerts

Query

GraphQL
query uptimeMonitorsQuery($appId: String!) { app(id: $appId) { id uptimeMonitors { ...UptimeMonitor } } } fragment UptimeMonitor on UptimeMonitor { id name url description notifierIds warmupDuration checkBodyContent regions headers { key value } alerts { ...Alert } statusPages { ...StatusPage } } fragment Alert on Alert { id state message metricDigest createdAt openedAt resolvedAt closedAt timeframeStartAt timeframeEndAt lastValue peakValue mean tags { key value } } fragment StatusPage on StatusPage { id title subdomain hostname description threshold uptimeMonitorIds }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID" }

Fetch uptime monitors status

Query

GraphQL
query MetricTimeseriesQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricTimeseries] ) { app(id: $appId) { id metrics { timeseries( start: $start end: $end timeframe: $timeframe query: $query ) { start end resolution keys { digest name fields tags { key value } } points { timestamp values { key value } } } } } }

Query variables

GraphQL
{ "appId": "YOUR-APP-ID", "timeframe": "R1H", // Available option (R1H,R4H,R8H,R12H,,R24H,R48H, R7D,R30D) "query": [ { "name": "uptime_monitor_error_count", "tags": [ { "key": "name", "value": "NAME-OF-UPTIME-MONITOR" }, { "key": "region", "value": "*" // You can filter this to specific region as well. } ], "fields": [ { "field": "COUNTER" } ] } ] }