Leads
The “lead” resource is table_entries — every row in a Lead Pool is a lead entry. Use these endpoints to push leads from your CRM, update lead state as your team works through the pipeline, or sync external systems.
| Method | Path | Scope |
|---|---|---|
POST | /connect/table_entries/ | write |
PATCH | /connect/table_entries/:id | write |
GET | /connect/tables/ | read |
GET | /connect/tables/:id | read |
For interactive try-it and the canonical schemas, see the reference at /docs. Everything below is concept-level — semantics, gotchas, and what the endpoint shapes look like at a glance.
Differentiators
Section titled “Differentiators”datais free-form,customFieldDatais validated.dataaccepts any keys (the table’s schema is inferred over time).customFieldDatarejects unknown custom-field IDs with400.PATCHuses RFC 7396 merge patch. Providenullto delete a key, omit a key to leave it untouched. See Merge patch.- Initial
leadStateIdis required on create. Look it up from/connect/tables/:id(thedefault: truelead state is the canonical “new” state). - Both endpoints fire automation events. Create fires
table.entry.added+ initialtable.entry.leadState.changed. Patch firesleadState.changedonly when the state actually changes. See Automation triggers.
POST /connect/table_entries/
Section titled “POST /connect/table_entries/”Request body:
{ // The ID of the table the entry belongs to tableId: string; data: Record<string, Record<string, unknown>>; // JSON object keyed by customField ID with the corresponding value customFieldData?: Record<string, Record<string, unknown>>; leadStateId: string; // Optional UUID of an appointment type the lead expressed interest in. Typically set at form submission when the form includes an `appointment-type` field (RKTL-455). Cleared to null when the referenced appointment type is deleted. interestedInAppointmentTypeId?: string | unknown;}Response:
{ // The ID of the table the entry belongs to tableId: string; id: string; organizationId: string; archived: boolean; createdAt: string /* ISO-8601 */; updatedAt: string /* ISO-8601 */; data: Record<string, Record<string, unknown>>; // JSON object keyed by customField ID with the corresponding value customFieldData?: Record<string, Record<string, unknown>>; leadStateId: string; firstOpenedAt: string /* ISO-8601 */ | unknown; followUpDate: string /* ISO-8601 */ | unknown; // Optional UUID of an appointment type the lead expressed interest in. Typically set at form submission when the form includes an `appointment-type` field (RKTL-455). Cleared to null when the referenced appointment type is deleted. interestedInAppointmentTypeId?: string | unknown;}PATCH /connect/table_entries/:id
Section titled “PATCH /connect/table_entries/:id”Request body (merge-patch — every field optional):
{ data?: unknown | Record<string, Record<string, unknown> | unknown>; customFieldData?: unknown | Record<string, Record<string, unknown> | unknown>; leadStateId?: string; firstOpenedAt?: string /* ISO-8601 */ | unknown; followUpDate?: string /* ISO-8601 */ | unknown; // Optional UUID of an appointment type the lead expressed interest in. Typically set at form submission when the form includes an `appointment-type` field (RKTL-455). Cleared to null when the referenced appointment type is deleted. interestedInAppointmentTypeId?: string | unknown;}Response:
{ // The ID of the table the entry belongs to tableId: string; id: string; organizationId: string; archived: boolean; createdAt: string /* ISO-8601 */; updatedAt: string /* ISO-8601 */; data: Record<string, Record<string, unknown>>; // JSON object keyed by customField ID with the corresponding value customFieldData?: Record<string, Record<string, unknown>>; leadStateId: string; firstOpenedAt: string /* ISO-8601 */ | unknown; followUpDate: string /* ISO-8601 */ | unknown; // Optional UUID of an appointment type the lead expressed interest in. Typically set at form submission when the form includes an `appointment-type` field (RKTL-455). Cleared to null when the referenced appointment type is deleted. interestedInAppointmentTypeId?: string | unknown;}GET /connect/tables/:id
Section titled “GET /connect/tables/:id”Fetch a Lead Pool with its lead states (you’ll need a leadStateId for create).
Record<string, unknown>Related
Section titled “Related”- Workflows → CRM sync.
- Workflows → Move a lead to a new state.
- Merge patch —
PATCHsemantics. - Race conditions → Duplicate creates — dedup strategies.
- Bookings — link a lead entry to a booking via
tableEntryId. - Ingress webhooks — token-only alternative for “push only” integrations.