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:
- Redirect user to Shakebug authorization server
- User grants permission to your application
- Shakebug redirects back to your app with an authorization code
- Exchange the authorization code for an access token
- 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
- Log in to your Shakebug account.
- Open Developer → Personal Access Tokens (
app.shakebug.com/shakebug_public_api/tokens). - 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) |
| 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_id | Required | The project ID returned by GET /v1.0/projects (the id field). |
| type | Optional | bug or crashed. Omit to return both. |
| status | Optional | Numeric status: 0 To-Do, 1 Completed, 2 In Progress, 3 Testing, 4 Backlog. |
| appversion | Optional | Exact app version to filter by. |
| devicemodel | Optional | Exact device model to filter by. |
| from | Optional | Start date YYYY-MM-DD (inclusive). |
| to | Optional | End date YYYY-MM-DD (inclusive). |
| page | Optional | Page number (1-based). Defaults to 1. |
| limit | Optional | Records 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
| PARAMETER | REQUIRED | DESCRIPTION |
|---|---|---|
| bug_id | Required | The 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
| PARAMETER | REQUIRED | DESCRIPTION |
|---|---|---|
| application_id | Required | The project ID from GET /v1.0/projects. |
| from | Optional | Start date YYYY-MM-DD (inclusive). |
| to | Optional | End date YYYY-MM-DD (inclusive). |
| page | Optional | Page number (1-based). Defaults to 1. |
| limit | Optional | Groups 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
| PARAMETER | REQUIRED | DESCRIPTION |
|---|---|---|
| application_id | Required | The project ID from GET /v1.0/projects. |
| from | Optional | Start date YYYY-MM-DD (inclusive). |
| to | Optional | End 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
| PARAMETER | TYPE | REQUIRED | DESCRIPTION |
|---|---|---|---|
| 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
| PARAMETER | TYPE | REQUIRED | DESCRIPTION |
|---|---|---|---|
| id | Integer | Conditional | The subscription id returned by subscribe. Provide this or hookUrl. |
| hookUrl | String | Conditional | The 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/subscribewith your automation's catch URL — the tool sends this automatically ashookUrl/targetUrl. Store the returnedid. - Sample data:
GET /v1.0/webhook/sample_bugsreturns a sample event so the tool can map fields. - Unsubscribe:
POST /v1.0/webhook/unsubscribewith thatidwhen 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, detailGET /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.
