Webhook data model

Updated:

A webhook is used to POST new, updated, or deleted records to your server.

FieldTypeRequiredDescription
idstringNo (read-only)
created_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) (read-only)
updated_atstring (date-time)No(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) (read-only)
workspace_idstringNo(reference to KmsSpace) (read-only)
connection_idstringYes
hook_urlstringNoThe URL of the webhook
object_typeenumYesThe object to return (eg. CRM "contact") Values: accounting_account, accounting_transaction, accounting_journal, accounting_contact, accounting_invoice, accounting_bill, accounting_vendorcredit, accounting_creditmemo, accounting_taxrate, accounting_paymentterm, accounting_organization, accounting_order, accounting_salesorder, accounting_salesreceipt, accounting_purchaseorder, accounting_balancesheet, accounting_profitloss, accounting_trialbalance, accounting_category, accounting_expense, accounting_expensereport, accounting_purchasereceipt, accounting_cashflow, accounting_quote, accounting_agedreceivable, accounting_agedpayable, accounting_project, accounting_bankfeedaccount, accounting_bankfeedtransaction, payment_payment, payment_link, payment_payout, payment_refund, payment_subscription, commerce_item, commerce_collection, commerce_inventory, commerce_location, commerce_review, commerce_saleschannel, commerce_itemvariant, commerce_reservation, commerce_table, commerce_return, commerce_availability, verification_package, verification_request, assessment_package, assessment_order, ats_activity, ats_application, ats_applicationstatus, ats_candidate, ats_document, ats_interview, ats_job, ats_scorecard, ats_company, crm_company, crm_contact, crm_deal, crm_event, crm_lead, crm_pipeline, crm_taxonomy, hris_employee, hris_group, hris_payslip, hris_timeoff, hris_company, hris_location, hris_device, hris_timeshift, hris_attendance, hris_deduction, hris_benefit, hris_bankaccount, hris_document, hris_taxonomy, hris_job, hris_payroll, hris_paycode, hris_earning, martech_list, martech_member, martech_campaign, martech_report, passthrough, ticketing_note, ticketing_ticket, ticketing_customer, ticketing_category, uc_contact, uc_fax, uc_call, uc_comment, uc_recording, uc_scorecard, uc_scorecardtemplate, enrich_person, enrich_company, storage_file, genai_model, genai_prompt, genai_embedding, genai_task, genai_agent, genai_organization, genai_skill, genai_memory, messaging_message, messaging_channel, messaging_event, kms_space, kms_page, kms_comment, task_project, task_task, task_comment, task_change, scim_users, scim_groups, lms_course, lms_class, lms_student, lms_instructor, lms_content, lms_collection, lms_activity, repo_organization, repo_repository, repo_branch, repo_commit, repo_pullrequest, metadata_metadata, calendar_calendar, calendar_event, calendar_busy, calendar_link, calendar_recording, calendar_webinar, calendar_bot, calendar_botevent, calendar_room, calendar_location, ads_organization, ads_ad, ads_campaign, ads_report, ads_group, ads_creative, ads_asset, ads_insertionorder, ads_target, ads_promoted, ads_inventory, analytics_property, analytics_event, analytics_session, analytics_visitor, analytics_report, forms_form, forms_submission, shipping_carrier, shipping_rate, shipping_shipment, shipping_label, shipping_tracking, signing_document, signing_signatory, signing_template, clubs_group, clubs_member, clubs_activity, clubs_location, clubs_event, datastore_database, datastore_table, datastore_record, datastore_query, cdp_profile, cdp_segment, cdp_event, cdp_source, cdp_destination, cdp_activation, performance_cycle, performance_review, performance_goal, performance_feedback, social_post, social_profile, social_review, social_insight, social_comment, legal_matter, legal_practicearea, legal_timeentry, legal_expense, compute_instance, compute_template, compute_gputype, compute_region, compute_volume, compute_snapshot, compute_usage, compute_key, compute_service, compute_deployment, compute_domain, compute_envvar, healthcare_patient, healthcare_practitioner, healthcare_location, healthcare_appointment, healthcare_slot, healthcare_encounter, healthcare_condition, healthcare_allergy, healthcare_medication, healthcare_observation, healthcare_immunization, healthcare_document, healthcare_coverage, healthcare_procedure, healthcare_report, healthcare_careplan, healthcare_goal, property_listing, property_unittype, property_guest, property_reservation, property_availability, property_quote, property_review, property_conversation, plm_part, plm_bomline, plm_document, plm_change, plm_category
intervalnumberNoVirtual webhooks only. How often (in minutes) Unified.to checks for new or updated records. Minimum 1 on paid plans, 60 on free. Ignored for native webhooks.
checked_atstring (date-time)NoRead-only. The time Unified.to last recorded a check on this webhook. Behaviour varies by webhook implementation, so don't use this field to tell whether a webhook is still running. Use is_healthy, and subscribe to WEBHOOK_UNHEALTHY on the notifications webhook, to monitor health. (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) (read-only)
integration_typestringNo (read-only)
environmentstringNo (read-only)
eventenumYesThe event to subscribe to. "deleted" is supported on native webhooks, and on virtual webhooks where the integration supports it. Check the integration's Feature Support tab. Values: updated, created, deleted
runsstring[]NoAn array of the most recent virtual webhook runs (read-only)
fieldsstringNo
webhook_typeenumNo"native" registers with the integration, which sends events as they happen. "virtual" checks for changes on "interval". Optional on create; if omitted, Unified.to picks a supported type for the object. Requesting a type the integration doesn't support returns 400. Set on create only: changes sent on update are ignored without an error. Delete and recreate the webhook to change type. Values: virtual, native
is_healthybooleanNoRead-only. True while the webhook can operate or recover; a transient failure may still be retrying. False after retries are exhausted or a non-retryable failure such as broken connection auth. Cannot be reset; recreate the webhook. (read-only)
page_max_limitnumberNo
filtersmap (string dictionary)NoSupported on virtual webhooks, and on native webhooks for many integrations. Check the integration's Feature Support tab for which filters apply. Filters the integration doesn't support are accepted but have no effect. Some integrations require a filter; if it's missing, create returns an error naming the integration and the filter.
db_typeenumNoValues: mongodb, mysql, postgres, mssql, mariadb, supabase, snowflake
db_urlstringNo
db_schemastringNo
db_name_prefixstringNo
is_pausedbooleanNo

TypeScript

TypeScript
export type Webhook = {
	id?: string;
	created_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	updated_at?: string-time; // (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	workspace_id?: string; // (reference to KmsSpace)
	connection_id: string;
	hook_url?: string; // The URL of the webhook
	object_type: 'accounting_account' | 'accounting_transaction' | 'accounting_journal' | 'accounting_contact' | 'accounting_invoice' | 'accounting_bill' | 'accounting_vendorcredit' | 'accounting_creditmemo' | 'accounting_taxrate' | 'accounting_paymentterm' | 'accounting_organization' | 'accounting_order' | 'accounting_salesorder' | 'accounting_salesreceipt' | 'accounting_purchaseorder' | 'accounting_balancesheet' | 'accounting_profitloss' | 'accounting_trialbalance' | 'accounting_category' | 'accounting_expense' | 'accounting_expensereport' | 'accounting_purchasereceipt' | 'accounting_cashflow' | 'accounting_quote' | 'accounting_agedreceivable' | 'accounting_agedpayable' | 'accounting_project' | 'accounting_bankfeedaccount' | 'accounting_bankfeedtransaction' | 'payment_payment' | 'payment_link' | 'payment_payout' | 'payment_refund' | 'payment_subscription' | 'commerce_item' | 'commerce_collection' | 'commerce_inventory' | 'commerce_location' | 'commerce_review' | 'commerce_saleschannel' | 'commerce_itemvariant' | 'commerce_reservation' | 'commerce_table' | 'commerce_return' | 'commerce_availability' | 'verification_package' | 'verification_request' | 'assessment_package' | 'assessment_order' | 'ats_activity' | 'ats_application' | 'ats_applicationstatus' | 'ats_candidate' | 'ats_document' | 'ats_interview' | 'ats_job' | 'ats_scorecard' | 'ats_company' | 'crm_company' | 'crm_contact' | 'crm_deal' | 'crm_event' | 'crm_lead' | 'crm_pipeline' | 'crm_taxonomy' | 'hris_employee' | 'hris_group' | 'hris_payslip' | 'hris_timeoff' | 'hris_company' | 'hris_location' | 'hris_device' | 'hris_timeshift' | 'hris_attendance' | 'hris_deduction' | 'hris_benefit' | 'hris_bankaccount' | 'hris_document' | 'hris_taxonomy' | 'hris_job' | 'hris_payroll' | 'hris_paycode' | 'hris_earning' | 'martech_list' | 'martech_member' | 'martech_campaign' | 'martech_report' | 'passthrough' | 'ticketing_note' | 'ticketing_ticket' | 'ticketing_customer' | 'ticketing_category' | 'uc_contact' | 'uc_fax' | 'uc_call' | 'uc_comment' | 'uc_recording' | 'uc_scorecard' | 'uc_scorecardtemplate' | 'enrich_person' | 'enrich_company' | 'storage_file' | 'genai_model' | 'genai_prompt' | 'genai_embedding' | 'genai_task' | 'genai_agent' | 'genai_organization' | 'genai_skill' | 'genai_memory' | 'messaging_message' | 'messaging_channel' | 'messaging_event' | 'kms_space' | 'kms_page' | 'kms_comment' | 'task_project' | 'task_task' | 'task_comment' | 'task_change' | 'scim_users' | 'scim_groups' | 'lms_course' | 'lms_class' | 'lms_student' | 'lms_instructor' | 'lms_content' | 'lms_collection' | 'lms_activity' | 'repo_organization' | 'repo_repository' | 'repo_branch' | 'repo_commit' | 'repo_pullrequest' | 'metadata_metadata' | 'calendar_calendar' | 'calendar_event' | 'calendar_busy' | 'calendar_link' | 'calendar_recording' | 'calendar_webinar' | 'calendar_bot' | 'calendar_botevent' | 'calendar_room' | 'calendar_location' | 'ads_organization' | 'ads_ad' | 'ads_campaign' | 'ads_report' | 'ads_group' | 'ads_creative' | 'ads_asset' | 'ads_insertionorder' | 'ads_target' | 'ads_promoted' | 'ads_inventory' | 'analytics_property' | 'analytics_event' | 'analytics_session' | 'analytics_visitor' | 'analytics_report' | 'forms_form' | 'forms_submission' | 'shipping_carrier' | 'shipping_rate' | 'shipping_shipment' | 'shipping_label' | 'shipping_tracking' | 'signing_document' | 'signing_signatory' | 'signing_template' | 'clubs_group' | 'clubs_member' | 'clubs_activity' | 'clubs_location' | 'clubs_event' | 'datastore_database' | 'datastore_table' | 'datastore_record' | 'datastore_query' | 'cdp_profile' | 'cdp_segment' | 'cdp_event' | 'cdp_source' | 'cdp_destination' | 'cdp_activation' | 'performance_cycle' | 'performance_review' | 'performance_goal' | 'performance_feedback' | 'social_post' | 'social_profile' | 'social_review' | 'social_insight' | 'social_comment' | 'legal_matter' | 'legal_practicearea' | 'legal_timeentry' | 'legal_expense' | 'compute_instance' | 'compute_template' | 'compute_gputype' | 'compute_region' | 'compute_volume' | 'compute_snapshot' | 'compute_usage' | 'compute_key' | 'compute_service' | 'compute_deployment' | 'compute_domain' | 'compute_envvar' | 'healthcare_patient' | 'healthcare_practitioner' | 'healthcare_location' | 'healthcare_appointment' | 'healthcare_slot' | 'healthcare_encounter' | 'healthcare_condition' | 'healthcare_allergy' | 'healthcare_medication' | 'healthcare_observation' | 'healthcare_immunization' | 'healthcare_document' | 'healthcare_coverage' | 'healthcare_procedure' | 'healthcare_report' | 'healthcare_careplan' | 'healthcare_goal' | 'property_listing' | 'property_unittype' | 'property_guest' | 'property_reservation' | 'property_availability' | 'property_quote' | 'property_review' | 'property_conversation' | 'plm_part' | 'plm_bomline' | 'plm_document' | 'plm_change' | 'plm_category'; // The object to return (eg. CRM "contact")
	interval?: number; // Virtual webhooks only. How often (in minutes) Unified.to checks for new or updated records. Minimum 1 on paid plans, 60 on free. Ignored for native webhooks.
	checked_at?: string-time; // Read-only. The time Unified.to last recorded a check on this webhook. Behaviour varies by webhook implementation, so don't use this field to tell whether a webhook is still running. Use is_healthy, and subscribe to WEBHOOK_UNHEALTHY on the notifications webhook, to monitor health. (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)
	integration_type?: string;
	environment?: string;
	event: 'updated' | 'created' | 'deleted'; // The event to subscribe to. "deleted" is supported on native webhooks, and on virtual webhooks where the integration supports it. Check the integration's Feature Support tab.
	runs?: string[]; // An array of the most recent virtual webhook runs
	fields?: string;
	webhook_type?: 'virtual' | 'native'; // "native" registers with the integration, which sends events as they happen. "virtual" checks for changes on "interval". Optional on create; if omitted, Unified.to picks a supported type for the object. Requesting a type the integration doesn't support returns 400. Set on create only: changes sent on update are ignored without an error. Delete and recreate the webhook to change type.
	meta?: any;
	is_healthy?: boolean; // Read-only. True while the webhook can operate or recover; a transient failure may still be retrying. False after retries are exhausted or a non-retryable failure such as broken connection auth. Cannot be reset; recreate the webhook.
	page_max_limit?: number;
	filters?: Record<string, string dictionary>; // Supported on virtual webhooks, and on native webhooks for many integrations. Check the integration's Feature Support tab for which filters apply. Filters the integration doesn't support are accepted but have no effect. Some integrations require a filter; if it's missing, create returns an error naming the integration and the filter.
	db_type?: 'mongodb' | 'mysql' | 'postgres' | 'mssql' | 'mariadb' | 'supabase' | 'snowflake';
	db_url?: string;
	db_schema?: string;
	db_name_prefix?: string;
	is_paused?: boolean;
	is_beta?: boolean;
} 

Zod

Zod
import { z } from 'zod';

export const ZodWebhook = z.object({
	id: z.string().optional(),
	created_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	updated_at: z.string-time().optional().describe("(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	workspace_id: z.string().optional().describe("(reference to KmsSpace)"),
	connection_id: z.string(),
	hook_url: z.string().optional().describe("The URL of the webhook"),
	object_type: z.enum("accounting_account", "accounting_transaction", "accounting_journal", "accounting_contact", "accounting_invoice", "accounting_bill", "accounting_vendorcredit", "accounting_creditmemo", "accounting_taxrate", "accounting_paymentterm", "accounting_organization", "accounting_order", "accounting_salesorder", "accounting_salesreceipt", "accounting_purchaseorder", "accounting_balancesheet", "accounting_profitloss", "accounting_trialbalance", "accounting_category", "accounting_expense", "accounting_expensereport", "accounting_purchasereceipt", "accounting_cashflow", "accounting_quote", "accounting_agedreceivable", "accounting_agedpayable", "accounting_project", "accounting_bankfeedaccount", "accounting_bankfeedtransaction", "payment_payment", "payment_link", "payment_payout", "payment_refund", "payment_subscription", "commerce_item", "commerce_collection", "commerce_inventory", "commerce_location", "commerce_review", "commerce_saleschannel", "commerce_itemvariant", "commerce_reservation", "commerce_table", "commerce_return", "commerce_availability", "verification_package", "verification_request", "assessment_package", "assessment_order", "ats_activity", "ats_application", "ats_applicationstatus", "ats_candidate", "ats_document", "ats_interview", "ats_job", "ats_scorecard", "ats_company", "crm_company", "crm_contact", "crm_deal", "crm_event", "crm_lead", "crm_pipeline", "crm_taxonomy", "hris_employee", "hris_group", "hris_payslip", "hris_timeoff", "hris_company", "hris_location", "hris_device", "hris_timeshift", "hris_attendance", "hris_deduction", "hris_benefit", "hris_bankaccount", "hris_document", "hris_taxonomy", "hris_job", "hris_payroll", "hris_paycode", "hris_earning", "martech_list", "martech_member", "martech_campaign", "martech_report", "passthrough", "ticketing_note", "ticketing_ticket", "ticketing_customer", "ticketing_category", "uc_contact", "uc_fax", "uc_call", "uc_comment", "uc_recording", "uc_scorecard", "uc_scorecardtemplate", "enrich_person", "enrich_company", "storage_file", "genai_model", "genai_prompt", "genai_embedding", "genai_task", "genai_agent", "genai_organization", "genai_skill", "genai_memory", "messaging_message", "messaging_channel", "messaging_event", "kms_space", "kms_page", "kms_comment", "task_project", "task_task", "task_comment", "task_change", "scim_users", "scim_groups", "lms_course", "lms_class", "lms_student", "lms_instructor", "lms_content", "lms_collection", "lms_activity", "repo_organization", "repo_repository", "repo_branch", "repo_commit", "repo_pullrequest", "metadata_metadata", "calendar_calendar", "calendar_event", "calendar_busy", "calendar_link", "calendar_recording", "calendar_webinar", "calendar_bot", "calendar_botevent", "calendar_room", "calendar_location", "ads_organization", "ads_ad", "ads_campaign", "ads_report", "ads_group", "ads_creative", "ads_asset", "ads_insertionorder", "ads_target", "ads_promoted", "ads_inventory", "analytics_property", "analytics_event", "analytics_session", "analytics_visitor", "analytics_report", "forms_form", "forms_submission", "shipping_carrier", "shipping_rate", "shipping_shipment", "shipping_label", "shipping_tracking", "signing_document", "signing_signatory", "signing_template", "clubs_group", "clubs_member", "clubs_activity", "clubs_location", "clubs_event", "datastore_database", "datastore_table", "datastore_record", "datastore_query", "cdp_profile", "cdp_segment", "cdp_event", "cdp_source", "cdp_destination", "cdp_activation", "performance_cycle", "performance_review", "performance_goal", "performance_feedback", "social_post", "social_profile", "social_review", "social_insight", "social_comment", "legal_matter", "legal_practicearea", "legal_timeentry", "legal_expense", "compute_instance", "compute_template", "compute_gputype", "compute_region", "compute_volume", "compute_snapshot", "compute_usage", "compute_key", "compute_service", "compute_deployment", "compute_domain", "compute_envvar", "healthcare_patient", "healthcare_practitioner", "healthcare_location", "healthcare_appointment", "healthcare_slot", "healthcare_encounter", "healthcare_condition", "healthcare_allergy", "healthcare_medication", "healthcare_observation", "healthcare_immunization", "healthcare_document", "healthcare_coverage", "healthcare_procedure", "healthcare_report", "healthcare_careplan", "healthcare_goal", "property_listing", "property_unittype", "property_guest", "property_reservation", "property_availability", "property_quote", "property_review", "property_conversation", "plm_part", "plm_bomline", "plm_document", "plm_change", "plm_category").describe("The object to return (eg. CRM "contact")"),
	interval: z.number().optional().describe("Virtual webhooks only. How often (in minutes) Unified.to checks for new or updated records. Minimum 1 on paid plans, 60 on free. Ignored for native webhooks."),
	checked_at: z.string-time().optional().describe("Read-only. The time Unified.to last recorded a check on this webhook. Behaviour varies by webhook implementation, so don't use this field to tell whether a webhook is still running. Use is_healthy, and subscribe to WEBHOOK_UNHEALTHY on the notifications webhook, to monitor health. (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"),
	integration_type: z.string().optional(),
	environment: z.string().optional(),
	event: z.enum("updated", "created", "deleted").describe("The event to subscribe to. "deleted" is supported on native webhooks, and on virtual webhooks where the integration supports it. Check the integration's Feature Support tab."),
	runs: z.array().optional().describe("An array of the most recent virtual webhook runs"),
	fields: z.string().optional(),
	webhook_type: z.enum("virtual", "native").optional().describe(""native" registers with the integration, which sends events as they happen. "virtual" checks for changes on "interval". Optional on create; if omitted, Unified.to picks a supported type for the object. Requesting a type the integration doesn't support returns 400. Set on create only: changes sent on update are ignored without an error. Delete and recreate the webhook to change type."),
	meta: z.unknown().optional(),
	is_healthy: z.boolean().optional().describe("Read-only. True while the webhook can operate or recover; a transient failure may still be retrying. False after retries are exhausted or a non-retryable failure such as broken connection auth. Cannot be reset; recreate the webhook."),
	page_max_limit: z.number().optional(),
	filters: z.record(z.string(), z.string dictionary()).optional().describe("Supported on virtual webhooks, and on native webhooks for many integrations. Check the integration's Feature Support tab for which filters apply. Filters the integration doesn't support are accepted but have no effect. Some integrations require a filter; if it's missing, create returns an error naming the integration and the filter."),
	db_type: z.enum("mongodb", "mysql", "postgres", "mssql", "mariadb", "supabase", "snowflake").optional(),
	db_url: z.string().optional(),
	db_schema: z.string().optional(),
	db_name_prefix: z.string().optional(),
	is_paused: z.boolean().optional(),
	is_beta: z.boolean().optional()
});

Python

Python
import dataclasses

@dataclasses.dataclass
class WebhookObject_type(str, Enum):
	accounting_account = 'accounting_account'
	accounting_transaction = 'accounting_transaction'
	accounting_journal = 'accounting_journal'
	accounting_contact = 'accounting_contact'
	accounting_invoice = 'accounting_invoice'
	accounting_bill = 'accounting_bill'
	accounting_vendorcredit = 'accounting_vendorcredit'
	accounting_creditmemo = 'accounting_creditmemo'
	accounting_taxrate = 'accounting_taxrate'
	accounting_paymentterm = 'accounting_paymentterm'
	accounting_organization = 'accounting_organization'
	accounting_order = 'accounting_order'
	accounting_salesorder = 'accounting_salesorder'
	accounting_salesreceipt = 'accounting_salesreceipt'
	accounting_purchaseorder = 'accounting_purchaseorder'
	accounting_balancesheet = 'accounting_balancesheet'
	accounting_profitloss = 'accounting_profitloss'
	accounting_trialbalance = 'accounting_trialbalance'
	accounting_category = 'accounting_category'
	accounting_expense = 'accounting_expense'
	accounting_expensereport = 'accounting_expensereport'
	accounting_purchasereceipt = 'accounting_purchasereceipt'
	accounting_cashflow = 'accounting_cashflow'
	accounting_quote = 'accounting_quote'
	accounting_agedreceivable = 'accounting_agedreceivable'
	accounting_agedpayable = 'accounting_agedpayable'
	accounting_project = 'accounting_project'
	accounting_bankfeedaccount = 'accounting_bankfeedaccount'
	accounting_bankfeedtransaction = 'accounting_bankfeedtransaction'
	payment_payment = 'payment_payment'
	payment_link = 'payment_link'
	payment_payout = 'payment_payout'
	payment_refund = 'payment_refund'
	payment_subscription = 'payment_subscription'
	commerce_item = 'commerce_item'
	commerce_collection = 'commerce_collection'
	commerce_inventory = 'commerce_inventory'
	commerce_location = 'commerce_location'
	commerce_review = 'commerce_review'
	commerce_saleschannel = 'commerce_saleschannel'
	commerce_itemvariant = 'commerce_itemvariant'
	commerce_reservation = 'commerce_reservation'
	commerce_table = 'commerce_table'
	commerce_return = 'commerce_return'
	commerce_availability = 'commerce_availability'
	verification_package = 'verification_package'
	verification_request = 'verification_request'
	assessment_package = 'assessment_package'
	assessment_order = 'assessment_order'
	ats_activity = 'ats_activity'
	ats_application = 'ats_application'
	ats_applicationstatus = 'ats_applicationstatus'
	ats_candidate = 'ats_candidate'
	ats_document = 'ats_document'
	ats_interview = 'ats_interview'
	ats_job = 'ats_job'
	ats_scorecard = 'ats_scorecard'
	ats_company = 'ats_company'
	crm_company = 'crm_company'
	crm_contact = 'crm_contact'
	crm_deal = 'crm_deal'
	crm_event = 'crm_event'
	crm_lead = 'crm_lead'
	crm_pipeline = 'crm_pipeline'
	crm_taxonomy = 'crm_taxonomy'
	hris_employee = 'hris_employee'
	hris_group = 'hris_group'
	hris_payslip = 'hris_payslip'
	hris_timeoff = 'hris_timeoff'
	hris_company = 'hris_company'
	hris_location = 'hris_location'
	hris_device = 'hris_device'
	hris_timeshift = 'hris_timeshift'
	hris_attendance = 'hris_attendance'
	hris_deduction = 'hris_deduction'
	hris_benefit = 'hris_benefit'
	hris_bankaccount = 'hris_bankaccount'
	hris_document = 'hris_document'
	hris_taxonomy = 'hris_taxonomy'
	hris_job = 'hris_job'
	hris_payroll = 'hris_payroll'
	hris_paycode = 'hris_paycode'
	hris_earning = 'hris_earning'
	martech_list = 'martech_list'
	martech_member = 'martech_member'
	martech_campaign = 'martech_campaign'
	martech_report = 'martech_report'
	passthrough = 'passthrough'
	ticketing_note = 'ticketing_note'
	ticketing_ticket = 'ticketing_ticket'
	ticketing_customer = 'ticketing_customer'
	ticketing_category = 'ticketing_category'
	uc_contact = 'uc_contact'
	uc_fax = 'uc_fax'
	uc_call = 'uc_call'
	uc_comment = 'uc_comment'
	uc_recording = 'uc_recording'
	uc_scorecard = 'uc_scorecard'
	uc_scorecardtemplate = 'uc_scorecardtemplate'
	enrich_person = 'enrich_person'
	enrich_company = 'enrich_company'
	storage_file = 'storage_file'
	genai_model = 'genai_model'
	genai_prompt = 'genai_prompt'
	genai_embedding = 'genai_embedding'
	genai_task = 'genai_task'
	genai_agent = 'genai_agent'
	genai_organization = 'genai_organization'
	genai_skill = 'genai_skill'
	genai_memory = 'genai_memory'
	messaging_message = 'messaging_message'
	messaging_channel = 'messaging_channel'
	messaging_event = 'messaging_event'
	kms_space = 'kms_space'
	kms_page = 'kms_page'
	kms_comment = 'kms_comment'
	task_project = 'task_project'
	task_task = 'task_task'
	task_comment = 'task_comment'
	task_change = 'task_change'
	scim_users = 'scim_users'
	scim_groups = 'scim_groups'
	lms_course = 'lms_course'
	lms_class = 'lms_class'
	lms_student = 'lms_student'
	lms_instructor = 'lms_instructor'
	lms_content = 'lms_content'
	lms_collection = 'lms_collection'
	lms_activity = 'lms_activity'
	repo_organization = 'repo_organization'
	repo_repository = 'repo_repository'
	repo_branch = 'repo_branch'
	repo_commit = 'repo_commit'
	repo_pullrequest = 'repo_pullrequest'
	metadata_metadata = 'metadata_metadata'
	calendar_calendar = 'calendar_calendar'
	calendar_event = 'calendar_event'
	calendar_busy = 'calendar_busy'
	calendar_link = 'calendar_link'
	calendar_recording = 'calendar_recording'
	calendar_webinar = 'calendar_webinar'
	calendar_bot = 'calendar_bot'
	calendar_botevent = 'calendar_botevent'
	calendar_room = 'calendar_room'
	calendar_location = 'calendar_location'
	ads_organization = 'ads_organization'
	ads_ad = 'ads_ad'
	ads_campaign = 'ads_campaign'
	ads_report = 'ads_report'
	ads_group = 'ads_group'
	ads_creative = 'ads_creative'
	ads_asset = 'ads_asset'
	ads_insertionorder = 'ads_insertionorder'
	ads_target = 'ads_target'
	ads_promoted = 'ads_promoted'
	ads_inventory = 'ads_inventory'
	analytics_property = 'analytics_property'
	analytics_event = 'analytics_event'
	analytics_session = 'analytics_session'
	analytics_visitor = 'analytics_visitor'
	analytics_report = 'analytics_report'
	forms_form = 'forms_form'
	forms_submission = 'forms_submission'
	shipping_carrier = 'shipping_carrier'
	shipping_rate = 'shipping_rate'
	shipping_shipment = 'shipping_shipment'
	shipping_label = 'shipping_label'
	shipping_tracking = 'shipping_tracking'
	signing_document = 'signing_document'
	signing_signatory = 'signing_signatory'
	signing_template = 'signing_template'
	clubs_group = 'clubs_group'
	clubs_member = 'clubs_member'
	clubs_activity = 'clubs_activity'
	clubs_location = 'clubs_location'
	clubs_event = 'clubs_event'
	datastore_database = 'datastore_database'
	datastore_table = 'datastore_table'
	datastore_record = 'datastore_record'
	datastore_query = 'datastore_query'
	cdp_profile = 'cdp_profile'
	cdp_segment = 'cdp_segment'
	cdp_event = 'cdp_event'
	cdp_source = 'cdp_source'
	cdp_destination = 'cdp_destination'
	cdp_activation = 'cdp_activation'
	performance_cycle = 'performance_cycle'
	performance_review = 'performance_review'
	performance_goal = 'performance_goal'
	performance_feedback = 'performance_feedback'
	social_post = 'social_post'
	social_profile = 'social_profile'
	social_review = 'social_review'
	social_insight = 'social_insight'
	social_comment = 'social_comment'
	legal_matter = 'legal_matter'
	legal_practicearea = 'legal_practicearea'
	legal_timeentry = 'legal_timeentry'
	legal_expense = 'legal_expense'
	compute_instance = 'compute_instance'
	compute_template = 'compute_template'
	compute_gputype = 'compute_gputype'
	compute_region = 'compute_region'
	compute_volume = 'compute_volume'
	compute_snapshot = 'compute_snapshot'
	compute_usage = 'compute_usage'
	compute_key = 'compute_key'
	compute_service = 'compute_service'
	compute_deployment = 'compute_deployment'
	compute_domain = 'compute_domain'
	compute_envvar = 'compute_envvar'
	healthcare_patient = 'healthcare_patient'
	healthcare_practitioner = 'healthcare_practitioner'
	healthcare_location = 'healthcare_location'
	healthcare_appointment = 'healthcare_appointment'
	healthcare_slot = 'healthcare_slot'
	healthcare_encounter = 'healthcare_encounter'
	healthcare_condition = 'healthcare_condition'
	healthcare_allergy = 'healthcare_allergy'
	healthcare_medication = 'healthcare_medication'
	healthcare_observation = 'healthcare_observation'
	healthcare_immunization = 'healthcare_immunization'
	healthcare_document = 'healthcare_document'
	healthcare_coverage = 'healthcare_coverage'
	healthcare_procedure = 'healthcare_procedure'
	healthcare_report = 'healthcare_report'
	healthcare_careplan = 'healthcare_careplan'
	healthcare_goal = 'healthcare_goal'
	property_listing = 'property_listing'
	property_unittype = 'property_unittype'
	property_guest = 'property_guest'
	property_reservation = 'property_reservation'
	property_availability = 'property_availability'
	property_quote = 'property_quote'
	property_review = 'property_review'
	property_conversation = 'property_conversation'
	plm_part = 'plm_part'
	plm_bomline = 'plm_bomline'
	plm_document = 'plm_document'
	plm_change = 'plm_change'
	plm_category = 'plm_category'

@dataclasses.dataclass
class WebhookEvent(str, Enum):
	updated = 'updated'
	created = 'created'
	deleted = 'deleted'

@dataclasses.dataclass
class WebhookWebhook_type(str, Enum):
	virtual = 'virtual'
	native = 'native'

@dataclasses.dataclass
class WebhookDb_type(str, Enum):
	mongodb = 'mongodb'
	mysql = 'mysql'
	postgres = 'postgres'
	mssql = 'mssql'
	mariadb = 'mariadb'
	supabase = 'supabase'
	snowflake = 'snowflake'

@dataclasses.dataclass
class Webhook:
	id: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	created_at: Optional[str]
	"""(ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	updated_at: Optional[str]
	"""(reference to KmsSpace)"""
	workspace_id: Optional[str]
	connection_id: str
	"""The URL of the webhook"""
	hook_url: Optional[str]
	"""The object to return (eg. CRM "contact")"""
	object_type: WebhookObject_type
	"""Virtual webhooks only. How often (in minutes) Unified.to checks for new or updated records. Minimum 1 on paid plans, 60 on free. Ignored for native webhooks."""
	interval: Optional[int]
	"""Read-only. The time Unified.to last recorded a check on this webhook. Behaviour varies by webhook implementation, so don't use this field to tell whether a webhook is still running. Use is_healthy, and subscribe to WEBHOOK_UNHEALTHY on the notifications webhook, to monitor health. (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format)"""
	checked_at: Optional[str]
	integration_type: Optional[str]
	environment: Optional[str]
	"""The event to subscribe to. "deleted" is supported on native webhooks, and on virtual webhooks where the integration supports it. Check the integration's Feature Support tab."""
	event: WebhookEvent
	"""An array of the most recent virtual webhook runs"""
	runs: Optional[List[List[str]]]
	fields: Optional[str]
	""""native" registers with the integration, which sends events as they happen. "virtual" checks for changes on "interval". Optional on create; if omitted, Unified.to picks a supported type for the object. Requesting a type the integration doesn't support returns 400. Set on create only: changes sent on update are ignored without an error. Delete and recreate the webhook to change type."""
	webhook_type: Optional[WebhookWebhook_type]
	meta: Optional[PropertyWebhookMeta]
	"""Read-only. True while the webhook can operate or recover; a transient failure may still be retrying. False after retries are exhausted or a non-retryable failure such as broken connection auth. Cannot be reset; recreate the webhook."""
	is_healthy: Optional[bool]
	page_max_limit: Optional[int]
	"""Supported on virtual webhooks, and on native webhooks for many integrations. Check the integration's Feature Support tab for which filters apply. Filters the integration doesn't support are accepted but have no effect. Some integrations require a filter; if it's missing, create returns an error naming the integration and the filter."""
	filters: Optional[PropertyWebhookFilters]
	db_type: Optional[WebhookDb_type]
	db_url: Optional[str]
	db_schema: Optional[str]
	db_name_prefix: Optional[str]
	is_paused: Optional[bool]
	is_beta: Optional[bool]
Are we missing anything? Let us know
Was this page helpful?