Endpoints
Update Pod
PATCH
/v1/pods/{id}Updates a Pod. Today it supports changing the Pod's status via a custom status ID — ideal for keeping trumpet in sync with your CRM. Requires the UpdatePod scope.
Authentication
This endpoint requires a valid API key with the UpdatePod scope. Pass it via the Authorization header:
Authorization: Bearer trpt_a1b2c3_your_key_hereParameters
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Required | The ID of the Pod to update. You can find it in the Pod's edit URL, e.g. 69f0bafc4cc54b506b0355d8. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Required | A custom status ID to move the Pod to. Get valid IDs from the List Custom Statuses endpoint. trumpet resolves the correct internal status and transition timestamps automatically. |
💡
Setting a status
Pass a custom status
id from the List Custom Statuses endpoint. trumpet resolves the underlying internal status (draft/active/completed/lost) and updates the Pod, its statistics, and transition timestamps correctly. Moving between two custom statuses that share an internal status won't reset time-in-stage metrics.💡
Built to grow
statusis the first supported field. The endpoint rejects any field it doesn't recognise, so future additions won't silently change behaviour for existing integrations.Webhooks & loop avoidance
⚠️
This endpoint does not emit a status webhook
Status changes made through this API do not trigger the
event.pod_status_changed webhook. This is deliberate: it lets you push CRM stage changes into trumpet without a webhook firing straight back to your CRM and creating a loop. Manual changes in the trumpet UI still emit the event. See the Event Reference.Example Request
cURL
curl -X PATCH https://trumpet.app/api/v1/pods/69f0bafc4cc54b506b0355d8 \
-H "Authorization: Bearer trpt_a1b2c3_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"status": "69f0bafc4cc54b506b0355e2"
}'JavaScript
const podId = "69f0bafc4cc54b506b0355d8";
const response = await fetch(`https://trumpet.app/api/v1/pods/${podId}`, {
method: "PATCH",
headers: {
"Authorization": `Bearer ${process.env.TRUMPET_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "69f0bafc4cc54b506b0355e2",
}),
});
const { success, data } = await response.json();Python
import os, requests
pod_id = "69f0bafc4cc54b506b0355d8"
response = requests.patch(
f"https://trumpet.app/api/v1/pods/{pod_id}",
headers={
"Authorization": f"Bearer {os.environ['TRUMPET_API_KEY']}",
"Content-Type": "application/json",
},
json={"status": "69f0bafc4cc54b506b0355e2"},
)
data = response.json()Success Response
Returns 200 OKwith the Pod's new status:
200 OK
{
"success": true,
"data": {
"id": "69f0bafc4cc54b506b0355d8",
"status": "completed",
"custom_status": "69f0bafc4cc54b506b0355e2"
}
}| Field | Type | Description |
|---|---|---|
id | string | The ID of the updated Pod. |
status | string | The Pod's internal status after the update — one of "draft", "active", "completed", "lost". |
custom_status | string | null | The custom status ID the Pod now displays, or null if the brand has no custom status for that internal status. |
Error Responses
| Status | Error | Cause |
|---|---|---|
400 | Invalid pod ID | The id in the path is not a valid Pod ID. |
400 | Unsupported field(s) | The body contains a field this endpoint does not (yet) support. Only status is accepted today. |
400 | status must be a valid custom status ID | The status value is missing or is not a valid custom status ID. |
400 | Invalid status for this pod | The custom status doesn't exist for your brand, or isn't assignable to this Pod's type. |
400 | Not supported for enablement pods | Enablement Pods use an internal publish/unpublish model, not custom statuses. |
401 | Invalid or revoked API key | The API key is missing, malformed, revoked, or deleted. |
403 | Insufficient permissions | The API key lacks the UpdatePod scope. |
404 | Pod not found | No Pod with that id exists in the brand associated with the API key. |
429 | Rate limit exceeded | More than 30 requests per minute for this key. Retry after a short delay. |
💡
Need a status ID?
Call the List Custom Statuses endpoint to fetch the custom status IDs configured for your brand.