From 14203004c6c47c387edac488031b84012ce30337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Vistry?= Date: Tue, 9 Jun 2026 16:44:01 +0200 Subject: [PATCH 1/6] Added v2 files --- .../v2/freshdesk-v2-foreign-keys.yml | 127 +++++++ .../freshdesk/v2/freshdesk-v2-tables.yml | 130 +++++++ .../schemas/freshdesk/v2/json/agents.json | 157 ++++++++ .../schemas/freshdesk/v2/json/companies.json | 81 +++++ .../schemas/freshdesk/v2/json/contacts.json | 177 +++++++++ .../freshdesk/v2/json/conversations.json | 120 ++++++ .../schemas/freshdesk/v2/json/groups.json | 74 ++++ .../taps/schemas/freshdesk/v2/json/roles.json | 43 +++ .../v2/json/satisfaction_ratings.json | 87 +++++ .../schemas/freshdesk/v2/json/tickets.json | 344 ++++++++++++++++++ .../freshdesk/v2/json/time_entries.json | 72 ++++ _data/taps/versions/freshdesk.yml | 6 +- .../freshdesk/v2/freshdesk-v2.md | 123 +++++++ 13 files changed, 1540 insertions(+), 1 deletion(-) create mode 100644 _data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml create mode 100644 _data/taps/schemas/freshdesk/v2/freshdesk-v2-tables.yml create mode 100644 _data/taps/schemas/freshdesk/v2/json/agents.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/companies.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/contacts.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/conversations.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/groups.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/roles.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/satisfaction_ratings.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/tickets.json create mode 100644 _data/taps/schemas/freshdesk/v2/json/time_entries.json create mode 100644 _saas-integrations/freshdesk/v2/freshdesk-v2.md diff --git a/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml b/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml new file mode 100644 index 000000000..b24991b06 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml @@ -0,0 +1,127 @@ +tap: freshdesk +version: '2' +keys: + agents_agent_id: + - table: agents + keys: + - id + - table: groups + keys: + - agent_ids + - table: satisfaction_ratings + keys: + - agent_id + - table: tickets + keys: + - responder_id + - table: time_entries + keys: + - agent_id + companies_company_id: + - table: companies + keys: + - id + - table: tickets + keys: + - company_id + contacts_contact_id: + - table: contacts + keys: + - id + conversations_conversation_id: + - table: conversations + keys: + - id + groups_group_id: + - table: agents + keys: + - group_ids + - table: groups + keys: + - id + - table: satisfaction_ratings + keys: + - group_id + - table: tickets + keys: + - group_id + roles_role_id: + - table: agents + keys: + - role_ids + - table: roles + keys: + - id + satisfaction_ratings_satisfaction_rating_id: + - table: satisfaction_ratings + keys: + - id + tickets_ticket_id: + - table: conversations + keys: + - ticket_id + - table: tickets + keys: + - id + - table: satisfaction_ratings + keys: + - ticket_id + time_entries_time_entry_id: + - table: time_entries + keys: + - id +tables: +- table-name: agents + join: + - table-name: groups + keys: + - key: id + foreign-key: agent_ids + - table-name: roles + keys: + - key: id + foreign-key: role_ids +- table-name: conversations + join: + - table-name: tickets + keys: + - key: id + foreign-key: ticket_id +- table-name: satisfaction_ratings + join: + - table-name: agents + keys: + - key: id + foreign-key: agent_id + - table-name: groups + keys: + - key: id + foreign-key: group_id + - table-name: tickets + keys: + - key: id + foreign-key: ticket_id +- table-name: tickets + join: + - table-name: companies + keys: + - key: id + foreign-key: company_id + - table-name: agents + keys: + - key: id + foreign-key: responder_id + - table-name: groups + keys: + - key: id + foreign-key: group_id +- table-name: time_entries + join: + - table-name: tickets + keys: + - key: id + foreign-key: ticket_id + - table-name: agents + keys: + - key: id + foreign-key: agent_id diff --git a/_data/taps/schemas/freshdesk/v2/freshdesk-v2-tables.yml b/_data/taps/schemas/freshdesk/v2/freshdesk-v2-tables.yml new file mode 100644 index 000000000..2dec9da5b --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/freshdesk-v2-tables.yml @@ -0,0 +1,130 @@ +tap: freshdesk +version: '2' +tables: +- name: agents + description: 'The `{{ table.name }}` table contains info about the agents in your + {{ integration.display_name }} account. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#agents + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/agents.json + api-method: https://developers.freshdesk.com/api/#list_all_agents + table-details: + replication-method: Full Table + primary-key: id +- name: companies + description: 'The `{{ table.name }}` table contains info about the companies your + various customers and contacts belong to. + + #### Custom Fields + + If applicable, Stitch will replicate custom fields related to `{{ table.name }}` + in {{ integration.display_name }}. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#companies + api-method: https://developers.freshdesk.com/api/#list_all_companies + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: conversations + description: 'The `{{ table.name }}` table contains info about replies and public/private + notes added to the tickets in your {{ integration.display_name }} account. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#conversations + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/conversations.json + api-method: https://developers.freshdesk.com/api/#list_all_ticket_notes + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: contacts + description: 'The `{{ table.name }}` table contains info about the customers or + potential customers that have filed support tickets in any of the channels in + your {{ integration.display_name }} account. + + #### Custom Fields + + If applicable, Stitch will replicate custom fields related to `{{ table.name }}` + in {{ integration.display_name }}. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#contacts + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/contacts.json + api-method: https://developers.freshdesk.com/api/#list_all_contacts + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: groups + description: 'The `{{ table.name }}` table contains info about the groups your agents + belong to. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#groups + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/groups.json + api-method: https://developers.freshdesk.com/api/#list_all_groups + table-details: + replication-method: Full Table + primary-key: id +- name: roles + description: 'The `{{ table.name }}` table contains info about the various roles + that can be assigned to team members in your {{ integration.display_name }} account. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#roles + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/roles.json + api-method: https://developers.freshdesk.com/api/#list_all_roles + table-details: + replication-method: Full Table + primary-key: id +- name: satisfaction_ratings + description: 'The `{{ table.name }}` table contains info about customer satisfaction + survey responses, or satisfaction ratings. + + ' + links: + doc-link: https://developers.freshdesk.com/api/#satisfaction-ratings + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/satisfaction_ratings.json + api-method: https://developers.freshdesk.com/api/#view_all_satisfaction_ratings + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: tickets + description: 'The `tickets` table contains info about the tickets in your {{ integration.display_name + }} account. + + #### Custom Fields + + If applicable, Stitch will replicate custom fields related to `tickets` in {{ + integration.display_name }}. + + ' + links: + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/tickets.json + api-method: https://developers.freshdesk.com/api/#tickets + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: time_entries + description: 'The `time_entries` table contains info about the time entries entered + by agents working on tickets. + + ' + links: + singer-schema: https://github.com/singer-io/tap-freshdesk/blob/master/tap_freshdesk/schemas/time_entries.json + api-method: https://developers.freshdesk.com/api/#time-entries + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at diff --git a/_data/taps/schemas/freshdesk/v2/json/agents.json b/_data/taps/schemas/freshdesk/v2/json/agents.json new file mode 100644 index 000000000..b218a1491 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/agents.json @@ -0,0 +1,157 @@ +{ + "type": "object", + "properties": { + "available": { + "type": [ + "null", + "boolean" + ] + }, + "available_since": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "occasional": { + "type": [ + "null", + "boolean" + ] + }, + "signature": { + "type": [ + "null", + "string" + ] + }, + "ticket_scope": { + "type": [ + "null", + "integer" + ] + }, + "group_ids": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "integer" + ] + } + }, + "role_ids": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "integer" + ] + } + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "contact": { + "type": [ + "null", + "object" + ], + "properties": { + "active": { + "type": [ + "null", + "boolean" + ] + }, + "email": { + "type": [ + "null", + "string" + ] + }, + "job_title": { + "type": [ + "null", + "string" + ] + }, + "language": { + "type": [ + "null", + "string" + ] + }, + "last_login_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "mobile": { + "type": [ + "null", + "string" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "phone": { + "type": [ + "null", + "string" + ] + }, + "time_zone": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + } + } + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/companies.json b/_data/taps/schemas/freshdesk/v2/json/companies.json new file mode 100644 index 000000000..8d1546e4d --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/companies.json @@ -0,0 +1,81 @@ +{ + "type": "object", + "properties": { + "custom_fields": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "type": [ + "null", + "string" + ] + }, + "value": { + "type": [ + "null", + "string" + ] + } + } + } + }, + "description": { + "type": [ + "null", + "string" + ] + }, + "domains": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "string" + ] + } + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "note": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/contacts.json b/_data/taps/schemas/freshdesk/v2/json/contacts.json new file mode 100644 index 000000000..c9f8480a2 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/contacts.json @@ -0,0 +1,177 @@ +{ + "type": "object", + "properties": { + "custom_fields": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "type": [ + "null", + "string" + ] + }, + "value": { + "type": [ + "null", + "string" + ] + } + } + } + }, + "other_companies": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "view_all_tickets": { + "type": [ + "null", + "boolean" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "other_emails": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "company_id": { + "type": [ + "null", + "number" + ] + }, + "email": { + "type": [ + "null", + "string" + ] + }, + "job_title": { + "type": [ + "null", + "string" + ] + }, + "description": { + "type": [ + "null", + "string" + ] + }, + "tags": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "deleted": { + "type": [ + "null", + "boolean" + ] + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "phone": { + "type": [ + "null", + "string" + ] + }, + "address": { + "type": [ + "null", + "string" + ] + }, + "active": { + "type": [ + "null", + "boolean" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "language": { + "type": [ + "null", + "string" + ] + }, + "mobile": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "twitter_id": { + "type": [ + "null", + "string" + ] + }, + "time_zone": { + "type": [ + "null", + "string" + ] + }, + "avatar": { + "type": [ + "null", + "object" + ] + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/conversations.json b/_data/taps/schemas/freshdesk/v2/json/conversations.json new file mode 100644 index 000000000..cb46d88b4 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/conversations.json @@ -0,0 +1,120 @@ +{ + "type": "object", + "properties": { + "body_text": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "incoming": { + "type": [ + "null", + "boolean" + ] + }, + "private": { + "type": [ + "null", + "boolean" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + }, + "support_email": { + "type": [ + "null", + "string" + ] + }, + "source": { + "type": [ + "null", + "integer" + ] + }, + "ticket_id": { + "type": [ + "null", + "integer" + ] + }, + "to_emails": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "from_email": { + "type": [ + "null", + "string" + ] + }, + "cc_emails": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "bcc_emails": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ] + }, + "updated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ] + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/groups.json b/_data/taps/schemas/freshdesk/v2/json/groups.json new file mode 100644 index 000000000..a7cf9972f --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/groups.json @@ -0,0 +1,74 @@ +{ + "type": "object", + "properties": { + "agent_ids": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "integer" + ] + } + }, + "auto_ticket_assign": { + "type": [ + "null", + "integer", + "boolean" + ] + }, + "business_hour_id": { + "type": [ + "null", + "integer" + ] + }, + "description": { + "type": [ + "null", + "string" + ] + }, + "escalate_to": { + "type": [ + "null", + "integer" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "unassigned_for": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/roles.json b/_data/taps/schemas/freshdesk/v2/json/roles.json new file mode 100644 index 000000000..8fd73dc55 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/roles.json @@ -0,0 +1,43 @@ +{ + "type": "object", + "properties": { + "description": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "default": { + "type": [ + "null", + "boolean" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/satisfaction_ratings.json b/_data/taps/schemas/freshdesk/v2/json/satisfaction_ratings.json new file mode 100644 index 000000000..4cec4c0f5 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/satisfaction_ratings.json @@ -0,0 +1,87 @@ +{ + "type": "object", + "properties": { + "survey_id": { + "type": [ + "null", + "integer" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + }, + "feedback": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "agent_id": { + "type": [ + "null", + "integer" + ] + }, + "group_id": { + "type": [ + "null", + "integer" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "ticket_id": { + "type": [ + "null", + "integer" + ] + }, + "ratings": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "object" + ], + "properties": { + "question": { + "type": [ + "null", + "string" + ] + }, + "value": { + "type": [ + "null", + "integer" + ] + } + } + } + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/tickets.json b/_data/taps/schemas/freshdesk/v2/json/tickets.json new file mode 100644 index 000000000..45d94fede --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/tickets.json @@ -0,0 +1,344 @@ +{ + "type": "object", + "properties": { + "custom_fields": { + "type": [ + "null", + "array" + ], + "items": { + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "type": [ + "null", + "string" + ] + }, + "value": { + "type": [ + "null", + "string" + ] + } + } + } + }, + "cc_emails": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "type": { + "type": [ + "null", + "string" + ] + }, + "to_emails": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "fwd_emails": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "source": { + "type": [ + "null", + "number" + ] + }, + "due_by": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "company_id": { + "type": [ + "null", + "integer" + ] + }, + "responder_id": { + "type": [ + "null", + "integer" + ] + }, + "priority": { + "type": [ + "null", + "number" + ] + }, + "deleted": { + "type": [ + "null", + "boolean" + ] + }, + "facebook_id": { + "type": [ + "null", + "string" + ] + }, + "subject": { + "type": [ + "null", + "string" + ] + }, + "fr_due_by": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "email": { + "type": [ + "null", + "string" + ] + }, + "status": { + "type": [ + "null", + "number" + ] + }, + "is_escalated": { + "type": [ + "null", + "boolean" + ] + }, + "reply_cc_emails": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "description": { + "type": [ + "null", + "string" + ] + }, + "tags": { + "items": { + "type": [ + "null", + "string" + ] + }, + "type": [ + "null", + "array" + ] + }, + "email_config_id": { + "type": [ + "null", + "integer" + ] + }, + "phone": { + "type": [ + "null", + "string" + ] + }, + "description_text": { + "type": [ + "null", + "string" + ] + }, + "requester_id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "product_id": { + "type": [ + "null", + "integer" + ] + }, + "fr_escalated": { + "type": [ + "null", + "boolean" + ] + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "spam": { + "type": [ + "null", + "boolean" + ] + }, + "twitter_id": { + "type": [ + "null", + "string" + ] + }, + "group_id": { + "type": [ + "null", + "integer" + ] + }, + "company": { + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + } + } + }, + "requester": { + "type": [ + "null", + "object" + ], + "properties": { + "email": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "mobile": { + "type": [ + "null", + "string" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "phone": { + "type": [ + "null", + "string" + ] + } + } + }, + "stats": { + "type": [ + "null", + "object" + ], + "properties": { + "closed_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "first_responded_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "resolved_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + } + } + } + } +} diff --git a/_data/taps/schemas/freshdesk/v2/json/time_entries.json b/_data/taps/schemas/freshdesk/v2/json/time_entries.json new file mode 100644 index 000000000..cf34043d7 --- /dev/null +++ b/_data/taps/schemas/freshdesk/v2/json/time_entries.json @@ -0,0 +1,72 @@ +{ + "type": "object", + "properties": { + "time_spent": { + "type": [ + "null", + "string" + ] + }, + "start_time": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "created_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "executed_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "updated_at": { + "type": [ + "null", + "string" + ], + "format": "date-time" + }, + "timer_running": { + "type": [ + "null", + "boolean" + ] + }, + "note": { + "type": [ + "null", + "string" + ] + }, + "ticket_id": { + "type": [ + "null", + "integer" + ] + }, + "billable": { + "type": [ + "null", + "boolean" + ] + }, + "id": { + "type": "integer" + }, + "agent_id": { + "type": [ + "null", + "integer" + ] + } + } +} diff --git a/_data/taps/versions/freshdesk.yml b/_data/taps/versions/freshdesk.yml index 000cf7a19..4747621c9 100644 --- a/_data/taps/versions/freshdesk.yml +++ b/_data/taps/versions/freshdesk.yml @@ -2,9 +2,13 @@ # FRESHDESK VERSIONS # # -------------------------- # -latest-version: "1" +latest-version: "2" released-versions: + - number: "2" + date-released: "February 12, 2026" + # date-last-connection: + - number: "1" date-released: "March 1, 2017" # date-last-connection: \ No newline at end of file diff --git a/_saas-integrations/freshdesk/v2/freshdesk-v2.md b/_saas-integrations/freshdesk/v2/freshdesk-v2.md new file mode 100644 index 000000000..e862fc476 --- /dev/null +++ b/_saas-integrations/freshdesk/v2/freshdesk-v2.md @@ -0,0 +1,123 @@ +--- +title: Freshdesk (v2) +permalink: /integrations/saas/freshdesk +keywords: freshdesk, integration, schema, etl freshdesk, freshdesk etl, freshdesk schema +summary: "Connection instructions and schema details for Stitch's Freshdesk integration." +layout: singer + +key: "freshdesk-setup" + +# -------------------------- # +# Tap Details # +# -------------------------- # + +name: "freshdesk" +display_name: "Freshdesk" + +singer: true +repo-url: https://github.com/singer-io/tap-freshdesk + +this-version: "2" + +api: | + [{{ integration.display_name }} REST API v2](https://developers.freshdesk.com/api/){:target="new"} + + +# -------------------------- # +# Stitch Details # +# -------------------------- # + +certified: false # Community-supported integration + +historical: "1 year" +frequency: "30 minutes" +tier: "Standard" +status-url: https://status.freshdesk.com/ + +api-type: "platform.freshdesk" + +table-selection: true +column-selection: true + +anchor-scheduling: true +cron-scheduling: true + +extraction-logs: true +loading-reports: true + +# Release date for this version +release-date: "February 12, 2026" + +# -------------------------- # +# Feature Summary # +# -------------------------- # + +feature-summary: | + Stitch's {{ integration.display_name }} integration replicates data using the {{ integration.api | flatify | strip }}. Refer to the [Schema](#schema) section for a list of objects available for replication. + +# -------------------------- # +# What's New in v2 # +# -------------------------- # + +whats-new: | + + **Version 2.0 of the {{ integration.display_name }} integration includes the following updates:** + + - **Discovery support**: You can now select which tables to replicate in Stitch's interface. + - **Improved replication methods**: Some tables now use Full Table replication for more reliable synchronization. + - **API v2 support**: The integration now uses {{ integration.display_name }}'s API v2, providing access to current endpoints and functionality. + - **Enhanced parent-child relationships**: Improved handling of dependent objects (conversations, satisfaction ratings, time entries). + - **Updated dependencies**: Singer Python upgraded to v6.1.0 for improved compatibility and performance. + + +# -------------------------- # +# Setup Instructions # +# -------------------------- # + +requirements-list: + - item: | + **Administrator permissions in Freshdesk.** As Stitch will only be able to replicate data that the authorizing user has access to, we recommend that someone with these permissions complete the setup. For example: if the authorizing user only has access to a handful of tickets, Stitch will only be able to access and replicate the data for those tickets. + + Having a Freshdesk administrator create the integration will ensure that Stitch is able to replicate all the data in your Freshdesk account. + +setup-steps: + - title: "Retrieve your Freshdesk API Key" + anchor: "retrieve-api-credentials" + content: | + 1. Sign into your Freshdesk account. + 2. Click the **user menu (your icon) > Profile Settings**. + 3. Your API Key will display under the **Change Password** section of your profile page. Copy this key. + + Leave this page open for now - you'll need it to wrap things up in Stitch. + + - title: "Add {{ integration.display_name }} as a Stitch data source" + anchor: "add-stitch-data-source" + content: | + {% include integrations/shared-setup/connection-setup.html %} + + - title: "Set objects to replicate" + anchor: "setting-data-to-replicate" + content: | + {% include integrations/saas/setup/table-selection.html %} + + - title: "Define the historical replication start date" + anchor: "define-historical-sync" + content: | + {% include integrations/saas/setup/historical-sync.html %} + + - title: "Create a replication schedule" + anchor: "define-rep-frequency" + content: | + {% include integrations/shared-setup/replication-frequency.html %} + + +# -------------------------- # +# Table Schemas # +# -------------------------- # + +# Looking for the table schemas & info? +# Each table has a its own .md file in /_integration-schemas/freshdesk/v2 + +--- +{% assign integration = page %} +{% include misc/data-files.html %} From 4fc97f1b94d474e9c768328274fe8458f3f2fbd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Vistry?= Date: Tue, 9 Jun 2026 16:45:44 +0200 Subject: [PATCH 2/6] Updated v1 --- .../freshdesk/{freshdesk-latest.md => v1/freshdesk-v1.md} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename _saas-integrations/freshdesk/{freshdesk-latest.md => v1/freshdesk-v1.md} (98%) mode change 100755 => 100644 diff --git a/_saas-integrations/freshdesk/freshdesk-latest.md b/_saas-integrations/freshdesk/v1/freshdesk-v1.md old mode 100755 new mode 100644 similarity index 98% rename from _saas-integrations/freshdesk/freshdesk-latest.md rename to _saas-integrations/freshdesk/v1/freshdesk-v1.md index 258e074da..5f66935c1 --- a/_saas-integrations/freshdesk/freshdesk-latest.md +++ b/_saas-integrations/freshdesk/v1/freshdesk-v1.md @@ -1,9 +1,10 @@ --- title: Freshdesk (v1) -permalink: /integrations/saas/freshdesk +permalink: /integrations/saas/freshdesk/v1 keywords: freshdesk, integration, schema, etl freshdesk, freshdesk etl, freshdesk schema summary: "Connection instructions and schema details for Stitch's Freshdesk integration." layout: singer +input: false key: "freshdesk-setup" From 1d98db2b06d6adeb2155f08d9e0b6dadfbdf3617 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 9 Jun 2026 14:47:54 +0000 Subject: [PATCH 3/6] Automated commit: Generate foreign keys --- .../v2/freshdesk-v2-foreign-keys.yml | 132 ++++++++++++++++-- 1 file changed, 117 insertions(+), 15 deletions(-) diff --git a/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml b/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml index b24991b06..d062a598b 100644 --- a/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml +++ b/_data/taps/schemas/freshdesk/v2/freshdesk-v2-foreign-keys.yml @@ -77,51 +77,153 @@ tables: keys: - key: id foreign-key: agent_ids - - table-name: roles + - key: group_ids + foreign-key: id + - table-name: satisfaction_ratings keys: - key: id - foreign-key: role_ids -- table-name: conversations - join: + foreign-key: agent_id + - key: group_ids + foreign-key: group_id - table-name: tickets keys: - key: id - foreign-key: ticket_id -- table-name: satisfaction_ratings + foreign-key: responder_id + - key: group_ids + foreign-key: group_id + - table-name: time_entries + keys: + - key: id + foreign-key: agent_id + - table-name: roles + keys: + - key: role_ids + foreign-key: id +- table-name: groups join: - table-name: agents keys: + - key: agent_ids + foreign-key: id - key: id - foreign-key: agent_id - - table-name: groups + foreign-key: group_ids + - table-name: satisfaction_ratings keys: + - key: agent_ids + foreign-key: agent_id - key: id foreign-key: group_id - table-name: tickets keys: + - key: agent_ids + foreign-key: responder_id - key: id + foreign-key: group_id + - table-name: time_entries + keys: + - key: agent_ids + foreign-key: agent_id +- table-name: satisfaction_ratings + join: + - table-name: agents + keys: + - key: agent_id + foreign-key: id + - key: group_id + foreign-key: group_ids + - table-name: groups + keys: + - key: agent_id + foreign-key: agent_ids + - key: group_id + foreign-key: id + - table-name: tickets + keys: + - key: agent_id + foreign-key: responder_id + - key: group_id + foreign-key: group_id + - key: ticket_id + foreign-key: id + - table-name: time_entries + keys: + - key: agent_id + foreign-key: agent_id + - table-name: conversations + keys: + - key: ticket_id foreign-key: ticket_id - table-name: tickets join: + - table-name: agents + keys: + - key: responder_id + foreign-key: id + - key: group_id + foreign-key: group_ids + - table-name: groups + keys: + - key: responder_id + foreign-key: agent_ids + - key: group_id + foreign-key: id + - table-name: satisfaction_ratings + keys: + - key: responder_id + foreign-key: agent_id + - key: group_id + foreign-key: group_id + - key: id + foreign-key: ticket_id + - table-name: time_entries + keys: + - key: responder_id + foreign-key: agent_id - table-name: companies + keys: + - key: company_id + foreign-key: id + - table-name: conversations keys: - key: id - foreign-key: company_id + foreign-key: ticket_id +- table-name: time_entries + join: - table-name: agents keys: - - key: id - foreign-key: responder_id + - key: agent_id + foreign-key: id - table-name: groups keys: - - key: id - foreign-key: group_id -- table-name: time_entries + - key: agent_id + foreign-key: agent_ids + - table-name: satisfaction_ratings + keys: + - key: agent_id + foreign-key: agent_id + - table-name: tickets + keys: + - key: agent_id + foreign-key: responder_id +- table-name: companies join: - table-name: tickets keys: - key: id + foreign-key: company_id +- table-name: conversations + join: + - table-name: tickets + keys: + - key: ticket_id + foreign-key: id + - table-name: satisfaction_ratings + keys: + - key: ticket_id foreign-key: ticket_id +- table-name: roles + join: - table-name: agents keys: - key: id - foreign-key: agent_id + foreign-key: role_ids From 762cff35a95e20a303e43bada3ceda1a03b72754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Vistry?= Date: Wed, 10 Jun 2026 15:44:15 +0200 Subject: [PATCH 4/6] Fixed link --- _saas-integrations/freshdesk/v2/freshdesk-v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_saas-integrations/freshdesk/v2/freshdesk-v2.md b/_saas-integrations/freshdesk/v2/freshdesk-v2.md index e862fc476..dd0e72ca4 100644 --- a/_saas-integrations/freshdesk/v2/freshdesk-v2.md +++ b/_saas-integrations/freshdesk/v2/freshdesk-v2.md @@ -98,7 +98,7 @@ setup-steps: - title: "Set objects to replicate" anchor: "setting-data-to-replicate" content: | - {% include integrations/saas/setup/table-selection.html %} + {% include integrations/shared-setup/data-selection/saas-object-selection.html %} - title: "Define the historical replication start date" anchor: "define-historical-sync" From 6bbceab30f4294e625bafd6b4226c3223a420c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Vistry?= Date: Wed, 10 Jun 2026 15:55:03 +0200 Subject: [PATCH 5/6] Fixed Set objects to replicate section --- _saas-integrations/freshdesk/v2/freshdesk-v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_saas-integrations/freshdesk/v2/freshdesk-v2.md b/_saas-integrations/freshdesk/v2/freshdesk-v2.md index dd0e72ca4..29dc221d5 100644 --- a/_saas-integrations/freshdesk/v2/freshdesk-v2.md +++ b/_saas-integrations/freshdesk/v2/freshdesk-v2.md @@ -98,7 +98,7 @@ setup-steps: - title: "Set objects to replicate" anchor: "setting-data-to-replicate" content: | - {% include integrations/shared-setup/data-selection/saas-object-selection.html %} + {% include integrations/shared-setup/data-selection/object-selection.html %} - title: "Define the historical replication start date" anchor: "define-historical-sync" From f014cd92e0b4b0e5a09cfe637b1e0065b9f3d16f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Vistry?= Date: Wed, 10 Jun 2026 15:58:28 +0200 Subject: [PATCH 6/6] Moved section --- _saas-integrations/freshdesk/v2/freshdesk-v2.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_saas-integrations/freshdesk/v2/freshdesk-v2.md b/_saas-integrations/freshdesk/v2/freshdesk-v2.md index 29dc221d5..bd325bfa3 100644 --- a/_saas-integrations/freshdesk/v2/freshdesk-v2.md +++ b/_saas-integrations/freshdesk/v2/freshdesk-v2.md @@ -95,11 +95,6 @@ setup-steps: content: | {% include integrations/shared-setup/connection-setup.html %} - - title: "Set objects to replicate" - anchor: "setting-data-to-replicate" - content: | - {% include integrations/shared-setup/data-selection/object-selection.html %} - - title: "Define the historical replication start date" anchor: "define-historical-sync" content: | @@ -110,6 +105,11 @@ setup-steps: content: | {% include integrations/shared-setup/replication-frequency.html %} + - title: "Set objects to replicate" + anchor: "setting-data-to-replicate" + content: | + {% include integrations/shared-setup/data-selection/object-selection.html %} + # -------------------------- # # Table Schemas #