CloudrawAPI v0
Menu

API reference

Support

Your support cases: summary and status.

List support cases

GET/v0/tenants/{tenant_id}/support-cases

read-only token

Lists your workspace's support cases: diagnostics that Cloudraw Connect or a connector sent, with their status and the conversation with Cloudraw support. Only summaries are returned, never the raw logs.

Two modes. Display (default): newest activity first, at most limit cases (default and maximum 500), next_cursor is always null and has_more says whether cases were cut off. Polling (send cursor, updated_since or order=updated): cases in ascending updated_at order, limit per page (maximum 500); keep calling with next_cursor until has_more is false. Polling never skips a case, so use it to mirror cases into another system. When the last page is empty, next_cursor stays the cursor you sent, so you can store it and poll again later.

Token: read-only or full access · Created by: owner or security admin

Path parameters

  • tenant_idstringrequired

    Your workspace id (Settings → Workspace in the console; it is also in every console URL).

    Example: tq7x2m9k4ab

Query parameters

  • statusstring

    Only cases in this status.

    Example: waiting_customer

  • updated_sincestring (date-time)

    Only cases updated strictly after this time (ISO 8601). Starts polling mode.

    Example: 2026-10-01T00:00:00Z

  • orderstring

    updated switches to polling mode (ascending by last update).

  • limitinteger

    Page size, 1-500 (default 500).

    Example: 100

  • cursorstring

    Polling mode: pass back next_cursor from the previous page, unchanged.

Responses

200 Cases.

application/json

  • itemsarray of SupportCaserequired
    items fields
    • case_idstringrequired

      Case number, SC- followed by 6 characters.

    • codestring | null

      The support code shown on the device or connector when the diagnostics were sent.

    • productstring

      What sent the diagnostics.

      One of: connect, connector-app, connector-setup, android.

    • client_versionstring | null

      Version of the app that sent the first report.

    • osstring | null

      Operating system reported by the app.

    • diagnosisobject
      diagnosis fields
      • codestring | null

        Machine-readable diagnosis code from the app.

      • causestring | null

        Plain-English cause, when the app found one.

    • statusstringrequired

      One of: open, in_progress, waiting_customer, waiting_cloudraw, resolved, closed.

    • status_labelstring

      status as shown in the console (e.g. "Waiting for you").

    • attributionstringrequired

      How the case was tied to your workspace: cert = sent by an enrolled device or connector; claim_ref = sent during setup with a one-time setup code of your workspace; hint / anonymous = sent without a sign-in and attached by an admin.

      One of: cert, claim_ref, hint, anonymous.

    • attached_viastring | null

      For a report attached by an admin: by entering its support code (code_claim) or by confirming "is this yours?" (hint_confirm); otherwise null.

      One of: code_claim, hint_confirm, .

    • deviceone of

      The device or connector that sent the diagnostics, when known.

    • countersobject
      counters fields
      • reportsinteger

        Diagnostics reports received for this case (including ones no longer listed in reports).

    • reportsarray of object

      Reports on this case (the most recent 100). Only summaries: the full log is never available through the API.

      reports fields
      • codestring | null

        Support code of this report.

      • received_atstring (date-time)
      • client_versionstring | null
    • created_atstring (date-time)required
    • last_seenstring (date-time)

      When the latest report arrived.

    • updated_atstring (date-time)required

      Last change of any kind (new report, status change, reply).

    • status_changed_atstring | null (date-time)
    • staff_accessarray of object

      Every time Cloudraw staff opened the full log of this case.

      staff_access fields
      • atstring (date-time)
      • reasonstring

        Why Cloudraw staff opened the full log.

      • textstring

        Ready-made sentence for display.

    • messagesarray of object

      The conversation both sides see, oldest first (the most recent 200).

      messages fields
      • idstring
      • atstring (date-time)
      • bystring

        One of: support, customer.

      • authorstring | null

        Display name: "Cloudraw support" or the admin who replied.

      • kindstring

        known_issue = an automatic note when the case matches a known problem.

        One of: reply, known_issue.

      • textstring
    • known_issueone of

      Set when the case matches a known problem.

    • can_replyboolean

      False once the case is closed. Replies are sent from the Cloudraw console.

    • response_timeone of

      The response time Cloudraw support commits to, or null when none is published.

  • has_morebooleanrequired

    More cases exist beyond this page.

  • next_cursorstring | nullrequired

    In polling mode: pass it back as cursor for the next page. Always null in the default (display) mode.

  • totalintegerrequired

    Cases matching status / updated_since, before paging.

  • generated_atstring (date-time)required
  • response_timeone of

    The response time Cloudraw support commits to, or null when none is published.

400 invalid-cursor

invalid-cursor: cursor is not a next_cursor value returned by this endpoint.

401 unauthorized invalid-token token-expired

unauthorized: No Authorization: Bearer crw_… header was sent.

invalid-token: The token is unknown or was revoked.

token-expired: The token is past its expiry date. Create a new one.

403 insufficient-role tenant-assertion-mismatch

insufficient-role: The token's role ceiling does not allow this call.

tenant-assertion-mismatch: The token belongs to another workspace than {tenant_id}.

404 tenant-not-found

tenant-not-found: No workspace with this id.

curl
curl -sS -X GET "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases" \
  -H "Authorization: Bearer $CLOUDRAW_TOKEN"
PowerShell
$headers = @{ Authorization = "Bearer $env:CLOUDRAW_TOKEN" }
Invoke-RestMethod -Method Get -Uri "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases" -Headers $headers
Python
import os, uuid, requests

r = requests.get(
    "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases",
    headers={"Authorization": f"Bearer {os.environ['CLOUDRAW_TOKEN']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())
Node.js
const res = await fetch("https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.CLOUDRAW_TOKEN}`,
  },
});
if (!res.ok) throw new Error((await res.json()).code);
console.log(await res.json());
Response 200 · application/json
{
  "items": [
    {
      "case_id": "SC-4K7M2Q",
      "code": "7KQ2M9X4D8R1T",
      "product": "connect",
      "client_version": "0.4.8",
      "os": "Windows 11 23H2",
      "diagnosis": {
        "code": "tunnel.dns.unreachable",
        "cause": "The internal DNS server 10.20.0.10 did not answer."
      },
      "status": "waiting_customer",
      "status_label": "Waiting for you",
      "attribution": "cert",
      "attached_via": null,
      "device": {
        "id": "dvc_5mxq2b7r8k",
        "name": "LT-DANA-02",
        "kind": "device"
      },
      "counters": {
        "reports": 2
      },
      "reports": [
        {
          "code": "7KQ2M9X4D8R1T",
          "received_at": "2026-10-12T07:41:02.000Z",
          "client_version": "0.4.8"
        },
        {
          "code": "M3D8K1Q7X2R9V",
          "received_at": "2026-10-13T08:02:44.000Z",
          "client_version": "0.4.8"
        }
      ],
      "created_at": "2026-10-12T07:41:02.000Z",
      "last_seen": "2026-10-13T08:02:44.000Z",
      "updated_at": "2026-10-13T09:24:11.000Z",
      "status_changed_at": "2026-10-13T09:24:11.000Z",
      "staff_access": [
        {
          "at": "2026-10-12T09:15:00.000Z",
          "reason": "Checking the DNS errors in the log",
          "text": "Cloudraw staff opened the full log of case SC-4K7M2Q on 2026-10-12"
        }
      ],
      "messages": [
        {
          "id": "m_2k9x0d8s",
          "at": "2026-10-13T09:24:11.000Z",
          "by": "support",
          "author": "Cloudraw support",
          "kind": "reply",
          "text": "Is 10.20.0.10 reachable from the connector host? Please check and reply here."
        }
      ],
      "known_issue": null,
      "can_reply": true,
      "response_time": {
        "text": "We reply within 1 business day."
      }
    }
  ],
  "has_more": false,
  "next_cursor": "WyIyMDI2LTEwLTEzVDA5OjI0OjExLjAwMFoiLCJTQy00SzdNMlEiXQ",
  "total": 1,
  "generated_at": "2026-10-13T09:24:11.000Z",
  "response_time": {
    "text": "We reply within 1 business day."
  }
}

Get a support case

GET/v0/tenants/{tenant_id}/support-cases/{case_id}

read-only token

Returns one support case: summary, status, report list, staff log access and the conversation with Cloudraw support. The raw diagnostics log is never returned. Replying to a case is done in the Cloudraw console.

Token: read-only or full access · Created by: owner or security admin

Path parameters

  • tenant_idstringrequired

    Your workspace id (Settings → Workspace in the console; it is also in every console URL).

    Example: tq7x2m9k4ab

  • case_idstringrequired

    Case number (SC-…).

    Example: SC-4K7M2Q

Responses

200 The case.

application/json

  • case_idstringrequired

    Case number, SC- followed by 6 characters.

  • codestring | null

    The support code shown on the device or connector when the diagnostics were sent.

  • productstring

    What sent the diagnostics.

    One of: connect, connector-app, connector-setup, android.

  • client_versionstring | null

    Version of the app that sent the first report.

  • osstring | null

    Operating system reported by the app.

  • diagnosisobject
    diagnosis fields
    • codestring | null

      Machine-readable diagnosis code from the app.

    • causestring | null

      Plain-English cause, when the app found one.

  • statusstringrequired

    One of: open, in_progress, waiting_customer, waiting_cloudraw, resolved, closed.

  • status_labelstring

    status as shown in the console (e.g. "Waiting for you").

  • attributionstringrequired

    How the case was tied to your workspace: cert = sent by an enrolled device or connector; claim_ref = sent during setup with a one-time setup code of your workspace; hint / anonymous = sent without a sign-in and attached by an admin.

    One of: cert, claim_ref, hint, anonymous.

  • attached_viastring | null

    For a report attached by an admin: by entering its support code (code_claim) or by confirming "is this yours?" (hint_confirm); otherwise null.

    One of: code_claim, hint_confirm, .

  • deviceone of

    The device or connector that sent the diagnostics, when known.

  • countersobject
    counters fields
    • reportsinteger

      Diagnostics reports received for this case (including ones no longer listed in reports).

  • reportsarray of object

    Reports on this case (the most recent 100). Only summaries: the full log is never available through the API.

    reports fields
    • codestring | null

      Support code of this report.

    • received_atstring (date-time)
    • client_versionstring | null
  • created_atstring (date-time)required
  • last_seenstring (date-time)

    When the latest report arrived.

  • updated_atstring (date-time)required

    Last change of any kind (new report, status change, reply).

  • status_changed_atstring | null (date-time)
  • staff_accessarray of object

    Every time Cloudraw staff opened the full log of this case.

    staff_access fields
    • atstring (date-time)
    • reasonstring

      Why Cloudraw staff opened the full log.

    • textstring

      Ready-made sentence for display.

  • messagesarray of object

    The conversation both sides see, oldest first (the most recent 200).

    messages fields
    • idstring
    • atstring (date-time)
    • bystring

      One of: support, customer.

    • authorstring | null

      Display name: "Cloudraw support" or the admin who replied.

    • kindstring

      known_issue = an automatic note when the case matches a known problem.

      One of: reply, known_issue.

    • textstring
  • known_issueone of

    Set when the case matches a known problem.

  • can_replyboolean

    False once the case is closed. Replies are sent from the Cloudraw console.

  • response_timeone of

    The response time Cloudraw support commits to, or null when none is published.

401 unauthorized invalid-token token-expired

unauthorized: No Authorization: Bearer crw_… header was sent.

invalid-token: The token is unknown or was revoked.

token-expired: The token is past its expiry date. Create a new one.

403 insufficient-role tenant-assertion-mismatch

insufficient-role: The token's role ceiling does not allow this call.

tenant-assertion-mismatch: The token belongs to another workspace than {tenant_id}.

404 case-not-found tenant-not-found

case-not-found: No case with this number in your workspace (it may have been deleted on request).

tenant-not-found: No workspace with this id.

curl
curl -sS -X GET "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases/SC-4K7M2Q" \
  -H "Authorization: Bearer $CLOUDRAW_TOKEN"
PowerShell
$headers = @{ Authorization = "Bearer $env:CLOUDRAW_TOKEN" }
Invoke-RestMethod -Method Get -Uri "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases/SC-4K7M2Q" -Headers $headers
Python
import os, uuid, requests

r = requests.get(
    "https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases/SC-4K7M2Q",
    headers={"Authorization": f"Bearer {os.environ['CLOUDRAW_TOKEN']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())
Node.js
const res = await fetch("https://cdapi.cloudraw.com/v0/tenants/tq7x2m9k4ab/support-cases/SC-4K7M2Q", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.CLOUDRAW_TOKEN}`,
  },
});
if (!res.ok) throw new Error((await res.json()).code);
console.log(await res.json());
Response 200 · application/json
{
  "case_id": "SC-4K7M2Q",
  "code": "7KQ2M9X4D8R1T",
  "product": "connect",
  "client_version": "0.4.8",
  "os": "Windows 11 23H2",
  "diagnosis": {
    "code": "tunnel.dns.unreachable",
    "cause": "The internal DNS server 10.20.0.10 did not answer."
  },
  "status": "waiting_customer",
  "status_label": "Waiting for you",
  "attribution": "cert",
  "attached_via": null,
  "device": {
    "id": "dvc_5mxq2b7r8k",
    "name": "LT-DANA-02",
    "kind": "device"
  },
  "counters": {
    "reports": 2
  },
  "reports": [
    {
      "code": "7KQ2M9X4D8R1T",
      "received_at": "2026-10-12T07:41:02.000Z",
      "client_version": "0.4.8"
    },
    {
      "code": "M3D8K1Q7X2R9V",
      "received_at": "2026-10-13T08:02:44.000Z",
      "client_version": "0.4.8"
    }
  ],
  "created_at": "2026-10-12T07:41:02.000Z",
  "last_seen": "2026-10-13T08:02:44.000Z",
  "updated_at": "2026-10-13T09:24:11.000Z",
  "status_changed_at": "2026-10-13T09:24:11.000Z",
  "staff_access": [
    {
      "at": "2026-10-12T09:15:00.000Z",
      "reason": "Checking the DNS errors in the log",
      "text": "Cloudraw staff opened the full log of case SC-4K7M2Q on 2026-10-12"
    }
  ],
  "messages": [
    {
      "id": "m_2k9x0d8s",
      "at": "2026-10-13T09:24:11.000Z",
      "by": "support",
      "author": "Cloudraw support",
      "kind": "reply",
      "text": "Is 10.20.0.10 reachable from the connector host? Please check and reply here."
    }
  ],
  "known_issue": null,
  "can_reply": true,
  "response_time": {
    "text": "We reply within 1 business day."
  }
}