Webhooks
Events
A webhook subscribes to events by pattern. A pattern names one event, every event about one kind of resource, or every event at once. This page explains how matching works and lists every event Atlas publishes.
How event matching works
A webhook lists one or more event patterns. Atlas sends an event to the webhook when any one of its patterns matches, under three rules.
- Exact. A pattern such as
task.completedmatches only that event. - Resource wildcard. A pattern ending in
.*matches every event about that resource.task.*matchestask.createdandtask.completed, but notproject.created. The boundary is the dot, sotask.*does not match a name that merely begins with the same letters. - Every event. The pattern
*matches every published event except the ones that carry personal or pay data: employees, candidates, job applications, job offers, payroll runs, HR tickets, leave requests, reimbursement claims, performance reviews, changes of role, meeting transcripts, files attached to incidents, onboardings and engagements, chat messages, chat channels, huddles, client engagements, deliverables, billing milestones and connected accounts. A webhook receives those only when it names them, or their resource, as inemployee.*.
| Pattern | Matches | Does not match |
|---|---|---|
task.completed | task.completed | task.created |
task.* | task.created, task.completed | tasks.created, project.created |
* | every event but the people events | employee.hired, payroll_run.paid |
A webhook's events list holds 1 to 50 patterns through /v1/webhooks, each 1 to 64 characters. A pattern that is not a published event, a resource wildcard, or * is refused with a validation error, so a misspelt event name is caught when you save the webhook rather than failing silently.
Published events
Every event Atlas publishes, grouped by what it concerns. The same list is offered in Settings and accepted by the API.
| Event | Group | Meaning |
|---|---|---|
task.created | Tasks | A task was created. |
task.updated | Tasks | A field on a task was changed. The payload lists the fields that changed. |
task.completed | Tasks | A task moved into a done status, whether by an edit, a workflow transition, or its last open subtask being finished. |
task.assigned | Tasks | A task was assigned to a person, including a person assigning it to themselves. |
task.deleted | Tasks | A task was moved to the trash. |
task.archived | Tasks | A task was archived. |
task.restored | Tasks | A task was restored from the archive or the trash. |
task_attachment.added | Tasks | A file was attached to a task. |
task_attachment.deleted | Tasks | A file was removed from a task. |
task.moved | Tasks | A task moved to another status column on its board, by an edit or a workflow transition. |
project.created | Projects | A project was created. |
project.updated | Projects | A field on a project was changed. The payload lists the fields that changed. |
project.completed | Projects | A project was marked done. |
project.archived | Projects | A project was archived. |
project.deleted | Projects | A project was deleted. |
project_milestone.created | Projects | A project milestone was created. |
project_milestone.updated | Projects | A project milestone was edited. |
project_milestone.status_changed | Projects | A project milestone moved to a new status. |
project_milestone.deleted | Projects | A project milestone was deleted. |
project_status_update.created | Projects | A status update was posted on a project. |
project_status_update.updated | Projects | A project status update was edited. |
project_status_update.deleted | Projects | A project status update was deleted. |
project.restored | Projects | A project was restored from the archive or the trash. |
project_risk.created | Projects | An item was added to a project risk register, whether a risk, an issue, a decision, or an assumption. |
project_risk.updated | Projects | An item in a project risk register was changed. The payload lists the fields that changed. |
goal.created | Goals | An objective or key result was created. |
goal.updated | Goals | A field on an objective or key result was changed, including its linked project. |
goal.completed | Goals | An objective or key result was marked completed. |
goal.deleted | Goals | An objective or key result was permanently deleted. Key results removed along with their objective do not send events of their own. |
habit.created | Habits | A habit was created. |
habit.completed | Habits | A habit was checked in for a day. Checking in again for the same day sends nothing. |
habit.streak_milestone | Habits | A check-in brought the current streak of a habit to exactly 7, 30, 100 or 365. |
comment.created | Comments | A comment was posted. |
comment.updated | Comments | A comment was edited. |
comment.deleted | Comments | A comment was deleted. |
team.created | Teams | A team was created. |
team.updated | Teams | A team was renamed or its details changed. |
team.deleted | Teams | A team was deleted. |
workspace_invite.created | Workspace | Someone was invited to join the workspace, or their invite was sent again. |
workspace_invite.revoked | Workspace | An invite to join the workspace was revoked. |
workspace_member.joined | Workspace | A person accepted an invite and joined the workspace. |
workspace_member.role_changed | Workspace | The role of a workspace member changed. |
workspace_member.removed | Workspace | A member was removed from the workspace. |
data_export.completed | Workspace | A workspace data export finished, and its archive is ready to download. |
announcement.created | Announcements | A workspace announcement was created as a draft. |
announcement.updated | Announcements | A workspace announcement was edited. |
announcement.published | Announcements | A workspace announcement was published to its members. |
announcement.unpublished | Announcements | A workspace announcement was taken down. |
announcement.deleted | Announcements | A workspace announcement was deleted. |
automation_run.completed | Automations | An automation finished a run. The run states whether every step succeeded. |
automation_run.failed | Automations | An automation run failed, or some of its steps did. |
time_approval.requested | Time | Time entries were submitted for approval. |
time_approval.approved | Time | Submitted time entries were approved. |
time_approval.rejected | Time | Submitted time entries were rejected. |
time_entry.created | Time | A time entry was logged, or a timer was started. |
time_entry.updated | Time | A time entry was changed, including a running timer being stopped. The payload lists the fields that changed. |
time_entry.deleted | Time | A time entry was deleted. |
meeting.created | Meetings | A meeting was created. |
meeting.updated | Meetings | A meeting was changed. |
meeting.deleted | Meetings | A meeting was deleted. |
meeting_transcript.ready | Meetings | A meeting transcript is complete and ready to read. |
meeting_notes.generated | Meetings | Notes, decisions, and action items were generated for a meeting from its transcript. |
wiki_page.created | Wiki | A knowledge base page was created. |
wiki_page.updated | Wiki | A knowledge base page was edited. |
wiki_page.deleted | Wiki | A knowledge base page was deleted. |
wiki_page.published | Wiki | A draft knowledge base page was published. |
wiki_page.revision_restored | Wiki | A knowledge base page was restored to an earlier revision. |
diagram.created | Diagrams | A diagram was created. |
diagram.updated | Diagrams | A diagram was changed. |
diagram.published | Diagrams | A diagram was published. |
diagram.archived | Diagrams | A diagram was archived. |
diagram.restored | Diagrams | A diagram was restored. |
diagram.deleted | Diagrams | A diagram was moved to the trash. |
pdf_job.succeeded | PDF Studio | A PDF conversion finished and its result is ready. |
pdf_job.failed | PDF Studio | A PDF conversion failed. |
pdf_document.created | PDF Studio | A PDF document was created. |
pdf_document.finalized | PDF Studio | The file uploaded for a PDF document was verified, and the document is ready to open. |
crm_account.created | CRM | A CRM account was created. |
crm_account.updated | CRM | A CRM account was changed. |
crm_account.archived | CRM | A CRM account was archived. |
crm_account.restored | CRM | A CRM account was restored. |
crm_contact.created | CRM | A CRM contact was created. |
crm_contact.updated | CRM | A CRM contact was changed. |
crm_contact.archived | CRM | A CRM contact was archived. |
crm_deal.created | CRM | A deal was created. |
crm_deal.updated | CRM | A deal was changed. |
crm_deal.stage_changed | CRM | A deal moved to another pipeline stage. |
crm_deal.won | CRM | A deal was marked won. |
crm_deal.archived | CRM | A deal was archived. |
crm_activity.created | CRM | An activity such as a call, an email, a meeting, or a note was logged on a CRM record. |
crm_account.merged | CRM | A duplicate CRM account was merged into another account, and the event carries the account that remains. |
crm_deal.lost | CRM | A deal was marked lost. |
client_onboarding.started | Client onboarding | A client onboarding was started. |
client_onboarding.cancelled | Client onboarding | A client onboarding was cancelled. |
client_onboarding.archived | Client onboarding | A client onboarding was archived. |
client_onboarding.completed | Client onboarding | A client onboarding was completed. |
contract.created | Contracts | A contract was created. |
contract.updated | Contracts | A contract was edited. |
contract.approved | Contracts | A contract was approved in internal review. |
contract.declined | Contracts | A contract was declined in internal review. |
contract.sent | Contracts | A contract was sent for signature. |
contract.signed | Contracts | Every party signed a contract. |
contract.activated | Contracts | A contract became active. |
contract.terminated | Contracts | A contract was terminated. |
contract.renewed | Contracts | A contract was renewed as a new contract. |
esign_agreement.sent | eSign | An eSign agreement was sent to its signers. |
esign_agreement.viewed | eSign | A signer opened an eSign agreement. |
esign_agreement.signed | eSign | A signer signed an eSign agreement. |
esign_agreement.declined | eSign | A signer declined an eSign agreement. |
esign_agreement.voided | eSign | An eSign agreement was voided. |
esign_agreement.completed | eSign | Every signer signed an eSign agreement, and it is complete. |
esign_agreement.expired | eSign | An eSign agreement expired before every signer signed. |
booking.created | Bookings | A guest booked a time on a booking page. |
booking.cancelled | Bookings | A booking was cancelled, by its host or by the guest. |
booking.rescheduled | Bookings | A booking moved to a new time, by its host or by the guest. |
booking_page.created | Bookings | A booking page was created. |
booking_page.updated | Bookings | A booking page was changed. The payload lists the fields that changed. |
booking.no_show_marked | Bookings | The host marked a booking as a no-show because the guest did not attend. |
employee.hired | People | An employee record was created. |
employee.updated | People | An employee record was changed. |
employee.terminated | People | An employee was terminated. |
hr_ticket.created | People | An employee raised an HR helpdesk ticket. |
hr_ticket.resolved | People | An HR helpdesk ticket was resolved. |
leave_request.requested | People | A leave request was filed. When its policy approves it automatically, it arrives already approved. |
leave_request.approved | People | A leave request was approved. |
leave_request.rejected | People | A leave request was rejected. |
reimbursement_claim.created | People | A reimbursement claim was created as a draft. |
reimbursement_claim.submitted | People | A reimbursement claim was submitted for approval. |
reimbursement_claim.approved | People | A reimbursement claim was approved. |
reimbursement_claim.rejected | People | A reimbursement claim was rejected. |
reimbursement_claim.paid | People | A reimbursement claim was paid. |
performance_review.created | People | A performance review was created. |
performance_review.updated | People | A performance review was edited. |
performance_review.finalized | People | A performance review was finalized with its final rating. |
role_change.requested | People | A change of role was requested for an employee. |
role_change.manager_approved | People | A manager approved a requested change of role. |
role_change.applied | People | HR approved a change of role, and it was applied to the employee. |
role_change.rejected | People | A requested change of role was rejected. |
candidate.created | Hiring | A candidate was added. |
job_application.created | Hiring | A candidate applied, or was added, to a job opening. |
job_application.advanced | Hiring | A job application moved to the next stage. |
job_application.rejected | Hiring | A job application was rejected. |
job_offer.sent | Hiring | A job offer was sent to the candidate. |
job_offer.accepted | Hiring | A candidate accepted a job offer. |
job_offer.declined | Hiring | A candidate declined a job offer. |
payroll_run.approved | Payroll | A payroll run was approved. |
payroll_run.paid | Payroll | A payroll run was marked paid. |
incident.declared | Incidents | An incident was declared. |
incident.acknowledged | Incidents | A responder acknowledged an incident. |
incident.severity_changed | Incidents | The severity of an incident was raised or lowered. |
incident.status_changed | Incidents | An incident moved to a new status. |
incident.mitigated | Incidents | The impact of an incident was mitigated. |
incident.resolved | Incidents | An incident was resolved. |
incident.postmortem_published | Incidents | The postmortem for an incident was published. |
chat_message.created | Chat | A chat message was posted. Only a message in a public workspace channel is sent with its text. |
chat_message.updated | Chat | The text of a chat message was edited. Only a message in a public workspace channel is sent with its text. |
chat_message.deleted | Chat | A chat message was deleted. |
chat_channel.created | Chat | A chat channel was created. Opening a direct message does not send this event. |
chat_channel.archived | Chat | A chat channel was archived. |
huddle.started | Chat | A huddle was started. |
huddle.ended | Chat | A huddle ended, because its host or an administrator ended it or its last participant left. |
engagement.created | Engagements | A client engagement was created. |
engagement.updated | Engagements | The details of a client engagement were edited. |
engagement.transitioned | Engagements | A client engagement moved to another lifecycle status. |
engagement.closed | Engagements | A client engagement was closed. |
deliverable.submitted | Engagements | A deliverable was submitted to the client for review. |
deliverable.approved | Engagements | A deliverable was approved and accepted. |
deliverable.rejected | Engagements | A deliverable was rejected. |
billing_milestone.reached | Engagements | A billing milestone was reached and its fee earned. |
connector.connected | Integrations | A connector was connected to the workspace, or a revoked connection was connected again. |
connector.disconnected | Integrations | A connector connection was disconnected and its stored credentials were cleared. |
connector.sync_failed | Integrations | A scheduled sync for a connector connection failed. |
form_submission.created | Forms | Someone submitted a form, and a task was created from the answers. |
attachment.created | Attachments | A file was attached to an incident, a client onboarding or an engagement, and passed verification. |
attachment.deleted | Attachments | A file was removed from an incident, a client onboarding or an engagement. |
report.delivered | Reports | A scheduled report was generated and sent to its recipients. |
subscription_plan.changed | Billing | The workspace moved to a different plan. The payload carries the plan it was on before. |
invoice.paid | Billing | A charge was paid, and a tax invoice was issued for it. |
* | All events | Every event in this list, including any added later, except the People, Hiring and Payroll events, which you choose by name. |
How events are produced
Where events come from, and what an event carries.
Events come from the audit log
data.object has the same shape as a GET on that resource. The one exception is a resource that has been permanently deleted, which is described by its id and deletedAt alone. Subscribe narrowly in production, to only the events you handle.