Freshworks products are built around modules — functional areas like Tickets, Contacts, or Deals. Each module represents a business entity with its own data model, UI, and workflows.
Build apps for different modules across products
Understanding Modules and SKUs
Each Freshworks product offers different modules based on the SKU (Stock Keeping Unit) or plan tier:
- Modules = Functional areas (e.g., Tickets, Contacts, Knowledge Base)
- SKUs = Product plans (Free, Growth, Pro, Enterprise) that determine which modules are available
- Your app can target specific modules and work across different SKUs
Common Modules
| Product | Key Modules |
|---|---|
| Freshdesk | Tickets, Contacts, Companies, Agents |
| Freshservice | Incidents, Problems, Changes, Assets |
| Freshsales | Leads, Contacts, Accounts, Deals |
View all modules across products →
How Apps Work with Modules
1. Placeholders (Where Your App Shows Up)
Your app displays UI at specific locations called placeholders. Once installed, your app loads within a secure iframe in the Freshworks product interface, where it can interact with product data and display custom functionality.
Example of an app loaded in a ticket sidebar placeholderCommon placeholders:
- ticket_sidebar - Shows in ticket detail page
- contact_sidebar - Shows in contact detail page
- full_page_app - Standalone page
- ticket_background - No UI, runs in background
View the code: Configuration Sample App demonstrates various placeholders in action.
2. Access Data
1// Get current ticket data
2client.data.get('ticket').then(function(data) {
3 console.log(data.ticket.subject);
4 console.log(data.ticket.status);
5});3. React to Events
- app.activated - App loaded
- ticket.updated - Ticket changed
- onTicketCreate - New ticket (serverless)
4. Trigger Actions
- Show notifications
- Open modals
- Navigate pages
- Call APIs
App Components
my-app/
├── manifest.json # App blueprint (placeholders, features)
├── index.html # Frontend UI
├── app.js # Frontend logic
├── iparams.json # Installation settings (API keys, etc.)
└── server/ # Serverless functions (optional)
└── server.jsWe'll create your first app in the next section and explore these files hands-on.
Example: Ticket Enrichment App
Flow:
- Agent opens ticket → App loads in ticket_sidebar
- App reads ticket data via SDK
- App calls external API with customer email
- App displays enriched data in UI
- Agent clicks "Add to Ticket" → App updates ticket
App development process