← Blog

Update,

Apps Can Now Report Problems Directly

Łukasz Ostrowski

Apps can now self-report operational problems — like broken credentials, failing integrations, or degraded services — directly visible in the Saleor Dashboard.

Your app knows something is wrong.

Now it can tell your operators.

When an app loses connection to a payment gateway or a tax provider starts returning errors, store operators shouldn't have to dig through logs to find out. Starting with Saleor 3.22.36, apps can report problems directly — and they show up right in the Dashboard.

The new Problems API gives apps a simple way to surface operational issues to the people who need to see them. Problems support aggregation (so repeated failures don't flood the UI), critical thresholds (so the right issues get attention), and dismissal (so resolved problems don't linger).

Use Cases

01

Payment gateway failures

Your payment app detects connection timeouts. It reports the problem with a critical threshold, so after a few failures the issue is flagged as critical in the Dashboard.

02

Missing credentials

An app can't find the API key it needs. It reports this immediately as critical, prompting the operator to configure it.

03

Degraded third-party services

A tax or shipping provider starts returning 503s intermittently. The app reports each failure, but only escalates to critical after repeated occurrences within a time window.

Build it into your app

Any app can use this pattern. If your integration depends on external services, surface issues where operators already look.

See the documentation

API Examples

Reporting a Problem

When your app detects an issue, call appProblemCreate. The key groups related occurrences, and criticalThreshold controls when the problem becomes critical:

GRAPHQL
1mutation {
2 appProblemCreate(
3 input: {
4 message: "Payment gateway unreachable: connection timeout after 5s"
5 key: "payment-gateway-connectivity"
6 aggregationPeriod: 30
7 criticalThreshold: 5
8 }
9 ) {
10 appProblem {
11 key
12 count
13 isCritical
14 }
15 errors {
16 field
17 message
18 code
19 }
20 }
21}

If the same problem is reported again within the aggregation window (30 minutes here), Saleor increments the counter instead of creating a duplicate. Once the count hits 5, isCritical flips to true.

Dismissing a Problem

When the issue resolves — say, the gateway is back online — dismiss it by key:

GRAPHQL
1mutation {
2 appProblemDismiss(input: { byApp: { keys: ["payment-gateway-connectivity"] } }) {
3 errors {
4 field
5 message
6 code
7 }
8 }
9}

Querying Problems

Operators (or apps themselves) can query the current list of problems for any app:

GRAPHQL
1query {
2 app(id: "QXBwOjE=") {
3 id
4 name
5 problems(limit: 10) {
6 id
7 message
8 key
9 count
10 isCritical
11 createdAt
12 updatedAt
13 }
14 }
15}

Documentation

For the full API reference — including aggregation details, permissions, and staff dismissal — check out the Problems API documentation.

Read the full documentation

    Get more useful guides, tech insights, and free learning materials by subscribing to our list.
    All human-written!

    By registering you agree to our Privacy Policy.
    The form is protected by reCAPTCHA - Privacy Policy and Terms of Service.