Webhook Event Catalog

Review TeamGrid webhook event action names, source collections, trigger conditions, payload shape, and receiver recommendations.

Webhook registrations use event action names in the actions array. For example, a webhook that should receive newly created and completed tasks uses ["task_created", "task_completed"].

Use POST /webhooks to create registrations, GET /webhooks to inspect them, and Delete webhook to remove a registration with DELETE /webhooks/{_id}. The actions field in the API Reference uses the same event list as an OpenAPI enum, so API tools can validate webhook registrations before sending them.

Delivery Payload

Every delivery has the same outer envelope:

{
  "webhookId": "WEBHOOK_ID",
  "event": "task_completed",
  "collection": "cards",
  "userId": "USER_ID",
  "fieldNames": ["completed", "completedDate"],
  "doc": {
    "_id": "TASK_ID",
    "teamId": "TEAM_ID",
    "name": "Prepare launch checklist",
    "completed": true
  }
}

doc contains the changed TeamGrid document or an event-specific projection. Update events may omit internal, calculated, or noisy fields. Use event, collection, and doc._id as the stable routing keys in your receiver.

Team And User Events

Event actionSource collectionTrigger
user_onlineusersA team user changes status to online.
user_offlineusersA team user changes status to offline.
user_addedteamsA user is added to the team.
user_removedteamsA user is removed from the team.

user_added and user_removed send a compact doc with the affected userIds.

Task Events

Event actionSource collectionTrigger
task_createdcardsA task is created.
task_updatedcardsA non-archived task is updated without changing completion or archive state.
task_completedcardsA task changes from incomplete to completed.
task_reopenedcardsA task changes from completed to incomplete.
task_removedcardsA task is archived or removed.
task_restoredcardsAn archived task is restored.

Tasks are stored internally as cards. Webhook payloads therefore use collection: "cards" for task events.

Time Tracking Events

Event actionSource collectionTrigger
timetracking_startedtimesAn active time entry is created without an end time.
timetracking_stoppedtimesAn active time entry receives an end time.
timeentry_created_manuallytimesA completed time entry is created with both start and end time.
timeentry_updatedtimesA non-archived time entry is updated without changing archive state or start/end/duration semantics.
timeentry_removedtimesA time entry is archived or removed.

Use Dates and Time Zones when interpreting start, end, and duration values.

Project Events

Event actionSource collectionTrigger
project_createdprojectsA project is created.
project_updatedprojectsA non-archived project is updated without changing completion or archive state.
project_completedprojectsA project changes from incomplete to completed.
project_reopenedprojectsA project changes from completed to incomplete.
project_archivedprojectsA project is archived.
project_restoredprojectsAn archived project is restored.

Contact Events

Event actionSource collectionTrigger
contact_createdcontactsA contact is created.
contact_updatedcontactsA non-archived contact is updated.
contact_removedcontactsA contact is archived or removed.
contact_restoredcontactsAn archived contact is restored.

Call And Call Note Events

Call and call note events require the TeamGrid telephony features used by the team.

Event actionSource collectionTrigger
call_incomingcardsAn incoming call record is created.
call_outgoingcardsAn outgoing call record is created.
call_answeredcardsA call state changes to active.
call_missedcardsAn incoming call state changes to missed.
call_hangupcardsA call state changes to cancelled.
callnote_createdcallnotesA call note is created.
callnote_removedcallnotesA call note is archived or removed.

Call notes are delivered with their rich text content converted to plain text.

Receiver Recommendations

  • Treat webhook delivery as at-least-once and make handlers idempotent.
  • Acknowledge successful receipt with a 2xx response quickly.
  • Keep the webhook URL private and protect public receivers with a receiver-level secret or gateway rule.
  • Enqueue slow work in your own system instead of blocking the webhook response.
  • Log webhookId, event, collection, doc._id, and fieldNames.
  • Do not assume every event has the same doc shape.
  • Ignore unknown fields and tolerate newly added fields.