We use cookies to ensure you get the best user experience on our website.Find Out More

Shakebug is a mobile application bug reporting and feedback platform. It allows mobile app developers to easily gather feedback and bug reports from their testers and users, Also includes a suite of tools for analyzing crash reports. The platform supports iOS, Android and React-Native platforms.

Some of the features offered by Shakebug:

Bug Reporting: Allows users reports bug and crash directly from within the app which include a screenshot, screen recording, and device information.

Crash reporting: Automatically captures and reports crashes as they happen, with detailed stack traces and device information using our AI.

User sessions: Records and replays user sessions to help developers understand how users are interacting with their app.

Analytics: Along with bugs and crash reporting, Shakebug analyzes the application usage in different ways like session, language, countries etc. It also allows users to check analytics in the form of graphical representation over the selection period of time.

Events: Developers can add custom events and values for each action of the application easily where they want. In addition to this, users can also check the session of each event and value in graphical form as well.

Integrations: Shakebug can be integrated with other tools such as Trello, Asana, Slack, Wrike, Monday and Jira to help streamline the workflow for any software company.

Collaboration: Allows team members to communicate and collaborate in real-time through comments and notifications via email.

SDK: Shakebug also provides a SDK that can be integrated with the app, which can be used to enable the above-mentioned features. Once Shakebug is integrated, it can be easily triggered by users by shaking their device, hence the name Shake to send bug report.

Shakebug’s goal is to provide developers with all the information they need to understand and fix bugs and crashes, it aims to make the debugging process faster and more efficient by providing detailed information and context on the events leading up to the crash.

API Version v1.0

Shakebug provides a RESTful API that allows developers to access and manipulate data on the platform, such as adding bug and crashes. The Shakebug API is a powerful tool that can be used to automate and integrate Shakebug with other applications and services, and to build custom tools and integrations.

First step is to generate Client ID and Client Secret using next section.

Managing your Client ID and Client Secret

Shakebug uses OAuth 2.0 for authentication. To access the Shakebug API, developers will need to obtain a Client ID and Client Secret. The process of generating these credentials requires several steps:

1. Login to your shakebug account.

2. Find the "Developer" menu by clicking on user icon on right-top icon.

3. Click "CREATE A NEW APP" and create your first app.

4. Give appropriate name and redirect URI

5. Click Generate

6. It will generate your Client ID and Client Secret.

Save your Client ID and Client Secret in a safe place.

Note

These "Client ID" and "Client Secret" will be used for OAuth 2.0 authentication flow. Keep your Client Secret secure and never expose it in client-side code.

OAuth 2.0 Flow

To access the Shakebug API, developers will need to use OAuth 2 .0 for authentication. OAuth 2.0 is an open standard for token-based authentication and authorization. This method allows your users to grant your application access to their Shakebug accounts, so you can perform actions on their behalf.

Here's an overview of the OAuth 2.0 flow:

  1. Redirect user to Shakebug authorization server
  2. User grants permission to your application
  3. Shakebug redirects back to your app with an authorization code
  4. Exchange the authorization code for an access token
  5. Use the access token to make API requests
Step 1: Authorization Request

Direct the user to the following URL to start the authorization process:

https://app.shakebug.com/v1.0/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&state=RANDOM_STATE&scope=read write

PARAMETER REQUIRED DESCRIPTION
client_id Required The Client ID you obtained from the Developer section in your Shakebug account.
redirect_uri Required URL where the response will be redirected. Must match the URI registered with your application.
response_type Required Must be set to "code" for authorization code flow.
state Recommended A random string to prevent CSRF attacks. You should verify this value matches when the user returns.
scope Optional Space-separated list of scopes. Default: "read write"
Step 2: Exchange Authorization Code for Access Token

After the user grants permission, they will be redirected to your redirect_uri with an authorization code. Exchange this code for an access token:


POST https://app.shakebug.com/v1.0/authorize/token
Content-Type application/x-www-form-urlencoded
PARAMETER REQUIRED DESCRIPTION
grant_type Required Must be "authorization_code"
code Required The authorization code received from the authorization server
redirect_uri Required Must match the redirect_uri used in the authorization request
client_id Required Your application's Client ID
client_secret Required Your application's Client Secret


<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://app.shakebug.com/v1.0/authorize/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => http_build_query([
        'grant_type' => 'authorization_code',
        'code' => 'YOUR_AUTHORIZATION_CODE',
        'redirect_uri' => 'YOUR_REDIRECT_URI',
        'client_id' => 'YOUR_CLIENT_ID',
        'client_secret' => 'YOUR_CLIENT_SECRET'
    ]),
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/x-www-form-urlencoded"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

?>
Token Response
{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "refresh_token": "def502004a8b7e42...",
    "scope": "read write"
}
Refreshing Access Tokens

When your access token expires, use the refresh token to get a new one:



<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://app.shakebug.com/v1.0/authorize/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => http_build_query([
        'grant_type' => 'refresh_token',
        'refresh_token' => 'YOUR_REFRESH_TOKEN',
        'client_id' => 'YOUR_CLIENT_ID',
        'client_secret' => 'YOUR_CLIENT_SECRET'
    ]),
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/x-www-form-urlencoded"
    ],
]);

$response = curl_exec($curl);
echo $response;

?>

Personal Access Tokens

For scripts, cron jobs, and automation tools (Zapier, n8n, MCP servers) the interactive OAuth 2.0 flow is often overkill. A Personal Access Token (PAT) is a long-lived key tied to your account that you send exactly like an OAuth access token:


Authorization Bearer skb_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Every endpoint in this reference (Projects, Bugs, Crashes, Analytics, Webhooks) accepts a PAT anywhere it accepts an OAuth Bearer token — no code changes needed.

Creating a token
  1. Log in to your Shakebug account.
  2. Open Developer → Personal Access Tokens (app.shakebug.com/shakebug_public_api/tokens).
  3. Click Generate New Token, give it a name (e.g. "Zapier production"), and copy the token.

Keep it secret

The token is shown once at creation — Shakebug stores only a hash and can never display it again. Treat it like a password; if leaked, revoke it from the same screen and generate a new one. Tokens do not expire but can be revoked at any time.

Example request with a PAT
<?php

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => "https://app.shakebug.com/v1.0/projects",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer skb_YOUR_PERSONAL_ACCESS_TOKEN"
    ],
]);
echo curl_exec($curl);

?>

GET Projects (v1.0)

Return list of projects using your access token.


GET https://app.shakebug.com/v1.0/projects
Authorization Bearer YOUR_ACCESS_TOKEN


<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://app.shakebug.com/v1.0/projects",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer YOUR_ACCESS_TOKEN"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

?>
Response
{
"status": 200,
"data": {
    "projects": [
        {
            "id": "ZOqPZJpasBxK5c8MRr5px9rtfg",
            "name": "test",
            "platform": "iOS"
        }
    ]
}
}

Add Bug (v1.0)

Add bug in specific project.


POST https://app.shakebug.com/v1.0/bug
Authorization Bearer YOUR_ACCESS_TOKEN
Content-Type application/json

Below are the input parameters to be sent in the request body:

PARAMETER TYPE PLATFORM REQUIRED DESCRIPTION
project String All Required The ID of the Projet.
description String All Required The Description of bug.
bugtypes String All Required Type of bug(either bug or crashed)
email String All Optional Email of user that you want attach with this bug.
batteryLevel String Ios, Android Optional Battery level of device from which bug is reported.
memory String Ios, Android Optional Memory of device from which bug is reported.
devicemodel String Ios, Android Optional Device model of device from which bug is reported.
osversion String Ios, Android Optional Os version of device from which bug is reported.
internettype String Ios, Android Optional Type of Mobile network.
browser_name String Web Optional Name of browser from which bug is reported.
browser_full_version String Web Optional Full version of browser.
browser_user_agent String Web Optional User agent of browser.
browser_language String Web Optional Name of browser from which bug is reported.
browser_platform String Web Optional Browser’s platform.
browser_height String Web Optional Height of browser.
browser_width String Web Optional Width of browser.
is_web Int ALL Required Possible value 1 or 0. If your project’s platform is web then value of is_web parameter will be 1 otherwise 0.

                        
                        
<?php

  $curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://app.shakebug.com/v1.0/bug", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\n \"project\" : \"YWjbqL7xzhFIVBMYvwMJzR-NaQ\",\n \"description\" : \"test bug\",\n \"bugtypes\" : \"bug\"\n}", CURLOPT_HTTPHEADER => [ "Authorization: Bearer <your access token>" "content-type: application/json" ], ]); $response = curl_exec($curl); $err = curl_error($curl);
curl_close($curl);
if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ?>
Response
 
{             
    "status": 200,
    "data": {
        "bug_id": "u9mfXevbBDwyYz9zZ0_dKNhmeC1B"
    }
}

Add Attachment

If you task need any image or video then after adding bug you need to call following /attachment API.

 
POST             https://app.shakebug.com/v1.0/bug/attachment
Authorization   Bearer <Your access token> 


This request uses multipart/form-data as the content type.

PARAMETER TYPE PLATFORM REQUIRED DESCRIPTION
bug_id String All Required The id of the bug where the file will be added.
attachment File All Required The file to upload..

                        
                        
<?php
  $curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL =>'https://app.shakebug.com/v1.0/bug/attachment', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => array('bug_id' => 'Hlmbb7hsmjfBopiS2t9_WWGK2LXu','attachment'=> new CURLFILE('<Your local image path>')), CURLOPT_HTTPHEADER => [ "Authorization: Bearer <your access token>" ], ]); $response = curl_exec($curl); $err = curl_error($curl);
curl_close($curl);
if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ?>
Response
 
{             
"status": 200,
"data": {
"bug_id": "fcp8ThCjkv3hTE011xvVi0xCAsTfYFLe7kgMEqO2iquyA-PFc_jrOaT0_R8"
}
}

Get Bugs (v1.0)

Return bugs and/or crashes reported for one of your projects, most recent first, with optional filters. Only records belonging to a project the authenticated user owns are returned. Omit type to get both bugs and crashes in a single list. This is the one list endpoint — getcrash below is simply a shortcut for type=crashed.

Data retention

Get Bugs (and its Get Crashes shortcut) return records only within your plan's data-retention window — older records are not returned by the API, just as they are hidden in the dashboard. For example: 90 days on Standard, 180 days on Premium, and unlimited on Enterprise. The pagination.total count reflects only the records inside that window.


GET https://app.shakebug.com/v1.0/bug/getbug?application_id=YOUR_PROJECT_ID&type=bug&status=0&page=1&limit=20
Authorization Bearer YOUR_ACCESS_TOKEN
PARAMETER REQUIRED DESCRIPTION
application_idRequiredThe project ID returned by GET /v1.0/projects (the id field).
typeOptionalbug or crashed. Omit to return both.
statusOptionalNumeric status: 0 To-Do, 1 Completed, 2 In Progress, 3 Testing, 4 Backlog.
appversionOptionalExact app version to filter by.
devicemodelOptionalExact device model to filter by.
fromOptionalStart date YYYY-MM-DD (inclusive).
toOptionalEnd date YYYY-MM-DD (inclusive).
pageOptionalPage number (1-based). Defaults to 1.
limitOptionalRecords per page. Defaults to 20, maximum 100.
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://app.shakebug.com/v1.0/bug/getbug?application_id=YOUR_PROJECT_ID&type=bug&page=1&limit=20",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer YOUR_ACCESS_TOKEN"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

?>
Response

The records array carries the summary fields below. For the full record of a single bug — reporter email, project context and browser environment — call Bug Detail.

{
    "status": true,
    "data": {
        "pagination": { "total": 42, "page": 1, "limit": 20, "total_pages": 3 },
        "filters": { "type": "bug", "status": 0, "appversion": null, "devicemodel": null, "from": null, "to": null },
        "count": 20,
        "records": [
            {
                "id": "u9mfXevbBDwyYz9zZ0_dKNhmeC1B",
                "description": "App crashed when submitting form",
                "bugtypes": "bug",
                "status": "To-Do",
                "platform": "Mobile",
                "devicemodel": "iPhone 14",
                "osversion": "17.2",
                "memory": "128MB",
                "batteryLevel": "82%",
                "internettype": "WiFi",
                "appversion": "1.4.0",
                "attachment": "https://app.shakebug.com/media/images/bugs/1699999999.png",
                "created": "2026-07-06 10:23:00"
            }
        ]
    }
}

Get Crashes (v1.0)

A convenience shortcut for Get Bugs with type=crashed — same response shape (including the filters and pagination blocks), same plan data-retention limits, but always scoped to crashes. The other Get Bugs filters (status, appversion, devicemodel, from, to, page, limit) apply here too.


GET https://app.shakebug.com/v1.0/bug/getcrash?application_id=YOUR_PROJECT_ID&page=1&limit=20
Authorization Bearer YOUR_ACCESS_TOKEN
PARAMETER REQUIRED DESCRIPTION
application_id Required The project ID returned by GET /v1.0/projects (the id field).
page Optional Page number to return (1-based). Defaults to 1.
limit Optional Records per page. Defaults to 20, maximum 100.
Response
{
    "status": true,
    "data": {
        "pagination": { "total": 1, "page": 1, "limit": 20, "total_pages": 1 },
        "filters": { "type": "crashed", "status": null, "appversion": null, "devicemodel": null, "from": null, "to": null },
        "count": 1,
        "records": [
            {
                "id": "Hlmbb7hsmjfBopiS2t9_WWGK2LXu",
                "description": "Fatal: NSInvalidArgumentException",
                "bugtypes": "crashed",
                "status": "To-Do",
                "platform": "Mobile",
                "devicemodel": "Pixel 7",
                "osversion": "14",
                "memory": "256MB",
                "batteryLevel": "45%",
                "internettype": "4G",
                "appversion": "1.4.0",
                "attachment": null,
                "created": "2026-07-06 09:10:00"
            }
        ]
    }
}

Bug Detail (v1.0)

Return full detail for a single bug or crash by its bug_id (the encrypted id returned by Get Bugs / Get Crashes / Add Bug). This response is richer than a Get Bugs list record — it adds the reporter email, project context (project, project_name) and, for web bugs, the full browser environment.


GET https://app.shakebug.com/v1.0/bug/detail?bug_id=BUG_ID
Authorization Bearer YOUR_ACCESS_TOKEN
PARAMETERREQUIREDDESCRIPTION
bug_idRequiredThe encrypted bug ID returned by the list/get endpoints.
Response
{
    "status": true,
    "data": {
        "id": "u9mfXevbBDwyYz9zZ0_dKNhmeC1B",
        "description": "App crashed when submitting form",
        "bugtypes": "bug",
        "status": "To-Do",
        "platform": "Mobile",
        "devicemodel": "iPhone 14",
        "osversion": "17.2",
        "memory": "128MB",
        "batteryLevel": "82%",
        "internettype": "WiFi",
        "appversion": "1.4.0",
        "attachment": "https://app.shakebug.com/media/images/bugs/1699999999.png",
        "created": "2026-07-06 10:23:00",
        "project": "YWjbqL7xzhFIVBMYvwMJzR-NaQ",
        "project_name": "My iOS App",
        "email": "reporter@example.com",
        "browser": null
    }
}

Crash Groups (v1.0)

Return crashes grouped by their signature (the crash description), most frequent first — useful for triaging which crash affects the most sessions. Scoped to projects you own and your plan's retention window, and paginated by group.


GET https://app.shakebug.com/v1.0/crashes/groups?application_id=YOUR_PROJECT_ID&page=1&limit=20
Authorization Bearer YOUR_ACCESS_TOKEN
PARAMETERREQUIREDDESCRIPTION
application_idRequiredThe project ID from GET /v1.0/projects.
fromOptionalStart date YYYY-MM-DD (inclusive).
toOptionalEnd date YYYY-MM-DD (inclusive).
pageOptionalPage number (1-based). Defaults to 1.
limitOptionalGroups per page. Defaults to 20, maximum 100.
Response
{
    "status": true,
    "data": {
        "pagination": { "total": 8, "page": 1, "limit": 20, "total_pages": 1 },
        "count": 8,
        "groups": [
            {
                "signature": "Fatal: NSInvalidArgumentException",
                "occurrences": 137,
                "affected_versions": 3,
                "first_seen": "2026-05-02 08:11:00",
                "last_seen": "2026-07-06 09:10:00",
                "sample_bug_id": "Hlmbb7hsmjfBopiS2t9_WWGK2LXu"
            }
        ]
    }
}

Analytics Summary (v1.0)

Return a KPI rollup for a project over your plan's retention window (optionally narrowed by from/to): bug and crash totals, open vs resolved, status breakdown, platform split, and top app versions and devices.


GET https://app.shakebug.com/v1.0/analytics/summary?application_id=YOUR_PROJECT_ID
Authorization Bearer YOUR_ACCESS_TOKEN
PARAMETERREQUIREDDESCRIPTION
application_idRequiredThe project ID from GET /v1.0/projects.
fromOptionalStart date YYYY-MM-DD (inclusive).
toOptionalEnd date YYYY-MM-DD (inclusive).
Response
{
    "status": true,
    "data": {
        "project": "YWjbqL7xzhFIVBMYvwMJzR-NaQ",
        "period": { "from": null, "to": null, "retention_from": "2026-04-08" },
        "totals": { "bugs": 320, "crashes": 96, "total": 416, "open": 291, "resolved": 125 },
        "by_status": { "To-Do": 210, "In Progress": 44, "Testing": 22, "Backlog": 15, "Completed": 125 },
        "by_platform": { "Web": 40, "Mobile": 376 },
        "top_versions": [ { "appversion": "1.4.0", "count": 180 }, { "appversion": "1.3.2", "count": 96 } ],
        "top_devices": [ { "devicemodel": "iPhone 14", "count": 88 }, { "devicemodel": "Pixel 7", "count": 61 } ]
    }
}

Webhook Integration (v1.0)

Webhooks deliver real-time notifications to your server when a bug or crash is reported. They follow the REST-hook pattern (subscribe → receive events → unsubscribe) and are used by the built-in Zapier and n8n integrations below. Both subscribe and unsubscribe are authenticated with your OAuth access token — the account is derived from the token, so no user_id is needed in the body.

Who am I (optional)

The /v1.0/authorize/me endpoint returns the identity behind an access token. It is not required to subscribe (the token already identifies you) but is handy for display in an integration.


GET https://app.shakebug.com/v1.0/authorize/me
Authorization Bearer <YOUR_ACCESS_TOKEN>
{
  "status": 200,
  "data": {
    "user_id": "zKPmYi1ZxOqR5e2nYX9FYKpqw",
    "name": "test user",
    "email": "test@example.com"
  }
}
Subscribe to Webhook

Register a URL to receive events. Returns a subscription id you can store and later pass to unsubscribe. Subscribing the same URL twice is safe — it returns the existing id.


POST https://app.shakebug.com/v1.0/webhook/subscribe
Authorization Bearer <YOUR_ACCESS_TOKEN>
Content-Type application/json
Request Parameters
PARAMETERTYPEREQUIREDDESCRIPTION
hookUrl String Yes The public URL to receive event POSTs. Aliases targetUrl / url are also accepted (for Zapier / n8n).
Example Request
{
  "hookUrl": "https://yourdomain.com/shakebug/webhook"
}
Response
{
  "status": 200,
  "id": 42,
  "message": "Webhook subscribed successfully"
}
Unsubscribe from Webhook

Remove a subscription by its id (from subscribe) or by hookUrl.


POST https://app.shakebug.com/v1.0/webhook/unsubscribe
Authorization Bearer <YOUR_ACCESS_TOKEN>
Content-Type application/json
Request Parameters
PARAMETERTYPEREQUIREDDESCRIPTION
idIntegerConditionalThe subscription id returned by subscribe. Provide this or hookUrl.
hookUrlStringConditionalThe subscribed URL to remove (alias targetUrl / url). Provide this or id.
Example Request
{
  "id": 42
}
Response
{
  "status": 200,
  "message": "Webhook unsubscribed successfully"
}
Webhook Payload

Once subscribed, Shakebug will send POST requests to your hookUrl whenever a bug or crash is reported. Example payload:

{
  "event": "bug_created",
  "data": {
    "bug_id": "u9mfXevbBDwyYz9zZ0_dKNhmeC1B",
    "project": "YWjbqL7xzhFIVBMYvwMJzR-NaQ",
    "bugtypes": "bug",
    "description": "App crashed when submitting form",
    "platform": "Mobile",
    "device": "iPhone 14",
    "timestamp": "2025-07-14T10:23:00Z"
  }
}

Note

Ensure your hookUrl endpoint is publicly accessible and returns a 200 OK response. Retry logic is not yet implemented, so missed events will not be retried.

Automation (Zapier & n8n)

The v1.0 API is designed to work with no-code automation tools. Both Zapier and n8n connect over OAuth 2.0 (see OAuth 2.0 Flow) using the Client ID and Client Secret from your Developer settings, then use the endpoints on this page.

Trigger — "New Bug or Crash"

Use the webhook (REST-hook) endpoints so automations fire the instant a bug or crash is reported:

  • Subscribe: POST /v1.0/webhook/subscribe with your automation's catch URL — the tool sends this automatically as hookUrl / targetUrl. Store the returned id.
  • Sample data: GET /v1.0/webhook/sample_bugs returns a sample event so the tool can map fields.
  • Unsubscribe: POST /v1.0/webhook/unsubscribe with that id when the automation is turned off.
  • Each event is delivered as the Webhook Payload (event + data).

Prefer polling? Point the tool at Get Bugs (newest first, stable ids for de-duplication) on a schedule instead.

Action — "Create Bug" / "Fetch Data"
  • Create a bug: POST /v1.0/bug (see Add Bug).
  • List / filter: GET /v1.0/bug/getbug, detail GET /v1.0/bug/detail, crash groups and analytics — all usable from an HTTP Request node in n8n or a Zapier action.

OpenAPI specification

A machine-readable OpenAPI 3.0 description of every v1.0 endpoint is available at https://app.shakebug.com/openapi.json. Import it into n8n (HTTP Request → Import cURL / OpenAPI), Postman, or any OpenAPI client to generate ready-made requests.