DocsDevelopers
API documentation
Last updated 26 October 2026
Drobber’s automation API is what the Drobber apps for Zapier and Make use to read and write comments, replies and statuses, and to send events the moment they happen. Everything is JSON over HTTPS.
Base URL
https://app.drobber.com/api/automationAuthentication
Every request carries a personal Drobber key in the Authorization header (or, if a tool can’t set that, in X-API-Key):
Authorization: Bearer drk_...To make one, sign in to Drobber, open Integrations, find Zapier & Make and choose Create a key. It starts with drk_ and is shown once. The key acts as the person who made it and sees only the projects they can see in Drobber. Removing it on the Integrations page stops it, and every subscription made with it, straight away.
Keys are for members of an agency team on a workspace with an active plan.
Endpoints
GET /me
Checks the key and says whose it is. Zapier uses it to test a connection and label it.
Example request
curl "https://app.drobber.com/api/automation/me" \
-H "Authorization: Bearer drk_..."Response: 200 OK
{
"id": "usr_2c4e6a8b0d1f3a5c7e9b",
"name": "Alex Agency",
"email": "[email protected]",
"workspace": "Agency Studio"
}GET /projects
The projects the key’s person can see (archived ones left out).
Example request
curl "https://app.drobber.com/api/automation/projects" \
-H "Authorization: Bearer drk_..."Response: 200 OK
[
{
"id": "proj_5f2a9c7e1b3d4a6c8e0f",
"name": "Acme website",
"type": "website",
"site_url": "https://acme.example"
}
]GET /comments
Comments, newest first. Used for the New Comment trigger’s sample data and for the Comment dropdowns.
Query parameters
project_id: Optional. Only this project.status: Optional. in_progress, feedback or resolved.limit: How many, newest first: 1 to 100 (default 25).
Example request
curl "https://app.drobber.com/api/automation/comments?limit=10" \
-H "Authorization: Bearer drk_..."Response: 200 OK
[
{
"id": "thr_8d1c0e2a4b6f4c1a9e3d",
"number": 12,
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"status": "in_progress",
"status_label": "In Progress",
"body": "Can the heading be a little bigger on mobile?",
"author_name": "Sam Client",
"author_type": "client",
"page_url": "https://acme.example/about",
"page_path": "/about",
"browser": "Chrome 129",
"os": "iOS 18",
"device": "mobile",
"viewport": "390x844",
"reply_count": 0,
"screenshot_url": "https://app.drobber.com/api/public/shot/att_1?s=abc",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T09:30:00.000Z",
"updated_at": "2026-10-14T09:30:00.000Z"
}
]POST /comments
Creates a comment as the key’s person (the Create Comment action).
JSON body
project_id: Required. The project.body: Required. The comment, up to 5,000 characters.page_url: Optional. A full address or a path like /pricing. Defaults to the site’s home page (or the newest file, for a file project).status: Optional. in_progress (default), feedback or resolved.via: Optional. Where it came from, shown on the comment, such as Zapier.
Example request
curl -X POST "https://app.drobber.com/api/automation/comments" \
-H "Authorization: Bearer drk_..." \
-H "Content-Type: application/json" \
-d '{"project_id":"proj_5f2a9c7e1b3d4a6c8e0f","body":"Can the heading be a little bigger on mobile?","page_url":"/about","status":"in_progress","via":"Zapier"}'Response: 201 Created
{
"id": "thr_8d1c0e2a4b6f4c1a9e3d",
"number": 12,
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"status": "in_progress",
"status_label": "In Progress",
"body": "Can the heading be a little bigger on mobile?",
"author_name": "Sam Client",
"author_type": "client",
"page_url": "https://acme.example/about",
"page_path": "/about",
"browser": "Chrome 129",
"os": "iOS 18",
"device": "mobile",
"viewport": "390x844",
"reply_count": 0,
"screenshot_url": "https://app.drobber.com/api/public/shot/att_1?s=abc",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T09:30:00.000Z",
"updated_at": "2026-10-14T09:30:00.000Z"
}Errors: 400 when the project is missing or not visible to the key, or the body is empty.
GET /comments/{id}
One comment.
Example request
curl "https://app.drobber.com/api/automation/comments/thr_8d1c0e2a4b6f4c1a9e3d" \
-H "Authorization: Bearer drk_..."Response: 200 OK
{
"id": "thr_8d1c0e2a4b6f4c1a9e3d",
"number": 12,
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"status": "in_progress",
"status_label": "In Progress",
"body": "Can the heading be a little bigger on mobile?",
"author_name": "Sam Client",
"author_type": "client",
"page_url": "https://acme.example/about",
"page_path": "/about",
"browser": "Chrome 129",
"os": "iOS 18",
"device": "mobile",
"viewport": "390x844",
"reply_count": 0,
"screenshot_url": "https://app.drobber.com/api/public/shot/att_1?s=abc",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T09:30:00.000Z",
"updated_at": "2026-10-14T09:30:00.000Z"
}Errors: 404 when there is no comment with that id the key can see.
PATCH /comments/{id}
Changes a comment’s status (the Change Comment Status action).
JSON body
status: Required. in_progress, feedback or resolved.
Example request
curl -X PATCH "https://app.drobber.com/api/automation/comments/thr_8d1c0e2a4b6f4c1a9e3d" \
-H "Authorization: Bearer drk_..." \
-H "Content-Type: application/json" \
-d '{"status":"resolved"}'Response: 200 OK
{
"id": "thr_8d1c0e2a4b6f4c1a9e3d",
"number": 12,
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"status": "resolved",
"status_label": "Resolved",
"body": "Can the heading be a little bigger on mobile?",
"author_name": "Sam Client",
"author_type": "client",
"page_url": "https://acme.example/about",
"page_path": "/about",
"browser": "Chrome 129",
"os": "iOS 18",
"device": "mobile",
"viewport": "390x844",
"reply_count": 0,
"screenshot_url": "https://app.drobber.com/api/public/shot/att_1?s=abc",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T09:30:00.000Z",
"updated_at": "2026-10-14T09:30:00.000Z"
}Errors: 400 for an unknown status; 404 when the comment isn’t visible to the key.
GET /comments/find
Finds a comment by id, or by its number in a project (the Find Comment search). Always a list: one comment, or empty.
Query parameters
id: A comment id. Or:project_id: With number: the project.number: With project_id: the comment number, like 12 or #12.
Example request
curl "https://app.drobber.com/api/automation/comments/find?project_id=proj_5f2a9c7e1b3d4a6c8e0f&number=12" \
-H "Authorization: Bearer drk_..."Response: 200 OK
[
{
"id": "thr_8d1c0e2a4b6f4c1a9e3d",
"number": 12,
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"status": "in_progress",
"status_label": "In Progress",
"body": "Can the heading be a little bigger on mobile?",
"author_name": "Sam Client",
"author_type": "client",
"page_url": "https://acme.example/about",
"page_path": "/about",
"browser": "Chrome 129",
"os": "iOS 18",
"device": "mobile",
"viewport": "390x844",
"reply_count": 0,
"screenshot_url": "https://app.drobber.com/api/public/shot/att_1?s=abc",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T09:30:00.000Z",
"updated_at": "2026-10-14T09:30:00.000Z"
}
]POST /comments/{id}/replies
Replies to a comment as the key’s person (the Reply to Comment action).
JSON body
body: Required. The reply.
Example request
curl -X POST "https://app.drobber.com/api/automation/comments/thr_8d1c0e2a4b6f4c1a9e3d/replies" \
-H "Authorization: Bearer drk_..." \
-H "Content-Type: application/json" \
-d '{"body":"Done, it is 10% bigger now. Can you check?"}'Response: 201 Created
{
"id": "msg_3b7e9a1c5d2f4e6a8c0b",
"comment_id": "thr_8d1c0e2a4b6f4c1a9e3d",
"comment_number": 12,
"comment_status": "feedback",
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"body": "Done, it is 10% bigger now. Can you check?",
"author_name": "Alex Agency",
"author_type": "agency",
"page_url": "https://acme.example/about",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T10:05:00.000Z"
}Errors: 400 when the body is empty; 404 when the comment isn’t visible to the key.
GET /replies
Replies, newest first. Sample data for the New Reply trigger.
Query parameters
project_id: Optional. Only this project.limit: How many, newest first: 1 to 100 (default 25).
Example request
curl "https://app.drobber.com/api/automation/replies?limit=10" \
-H "Authorization: Bearer drk_..."Response: 200 OK
[
{
"id": "msg_3b7e9a1c5d2f4e6a8c0b",
"comment_id": "thr_8d1c0e2a4b6f4c1a9e3d",
"comment_number": 12,
"comment_status": "feedback",
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"body": "Done, it is 10% bigger now. Can you check?",
"author_name": "Alex Agency",
"author_type": "agency",
"page_url": "https://acme.example/about",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"created_at": "2026-10-14T10:05:00.000Z"
}
]GET /status-changes
Status changes, newest first. Sample data for the Comment Status Changed and Comment Resolved triggers.
Query parameters
project_id: Optional. Only this project.resolved: Optional. 1 for resolutions only.limit: How many, newest first: 1 to 100 (default 25).
Example request
curl "https://app.drobber.com/api/automation/status-changes?limit=10" \
-H "Authorization: Bearer drk_..."Response: 200 OK
[
{
"id": "thr_8d1c0e2a4b6f4c1a9e3d:1791970806547",
"comment_id": "thr_8d1c0e2a4b6f4c1a9e3d",
"comment_number": 12,
"project_id": "proj_5f2a9c7e1b3d4a6c8e0f",
"project_name": "Acme website",
"status": "feedback",
"status_label": "Feedback",
"previous_status": "in_progress",
"changed_by": "Alex Agency",
"body": "Can the heading be a little bigger on mobile?",
"page_url": "https://acme.example/about",
"dashboard_url": "https://app.drobber.com/dashboard/projects/proj_5f2a9c7e1b3d4a6c8e0f?thread=thr_8d1c0e2a4b6f4c1a9e3d",
"changed_at": "2026-10-14T10:05:00.000Z"
}
]POST /hooks
Subscribes a URL to an event (a REST hook). Zapier calls this when a Zap with a Drobber trigger is turned on.
JSON body
event: Required. One of the events below.url: Required. A public https address to post each event to.project_id: Optional. Only events on this project; empty for every project.
Example request
curl -X POST "https://app.drobber.com/api/automation/hooks" \
-H "Authorization: Bearer drk_..." \
-H "Content-Type: application/json" \
-d '{"event":"comment.created","url":"https://hooks.zapier.com/hooks/standard/123/abc/","project_id":""}'Response: 201 Created
{
"id": "hook_7a9c1e3b5d7f9a1c3e5b"
}Errors: 400 for an unknown event, a URL that isn’t public, or a project the key can’t see.
DELETE /hooks/{id}
Removes a subscription. Zapier calls this when the Zap is turned off.
Example request
curl -X DELETE "https://app.drobber.com/api/automation/hooks/hook_7a9c1e3b5d7f9a1c3e5b" \
-H "Authorization: Bearer drk_..."Response: 204 No Content
No body.
Webhook events
After POST /hooks, Drobber posts each event to the subscribed URL as JSON the moment it happens, with the same shape as the matching list endpoint above. Only events on projects the key’s person can still see are sent.
| Event | Zapier trigger | Payload |
|---|---|---|
comment.created | New Comment | A comment |
reply.created | New Reply | A reply |
comment.status_changed | Comment Status Changed | A status change |
comment.resolved | Comment Resolved | A status change |
Each delivery is a single POST with a 10 second timeout. If the URL answers 410 Gone, the subscription is removed.
Errors
Errors come back as JSON with a plain-English message:
{
"error": "That key is not recognised. Make a new one on Drobber’s Integrations page."
}400: Something in the request is missing or not valid. error says what.401: No key, or the key isn’t recognised (it was removed, or isn’t a Zapier & Make key).402: The workspace has no active plan.403: The key belongs to a client rather than an agency team member, or Zapier & Make aren’t available on the workspace.404: No comment with that id that the key can see.413: The request body is over 1 MB.
Limits
There’s no per-key request quota. List endpoints return at most 100 items, request bodies can be up to 1 MB, and a comment can be up to 5,000 characters.
Help
Questions about the API: [email protected].