get_template
Retrieve a specific email or SMS template from Klaviyo by providing its unique ID to access and use in marketing campaigns.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the template to retrieve |
Implementation Reference
- src/tools/templates.js:35-47 (handler)The main execution logic for the get_template tool: fetches template by ID via klaviyoClient.get and returns JSON or error response.async (params) => { try { const template = await klaviyoClient.get(`/templates/${params.id}/`); return { content: [{ type: "text", text: JSON.stringify(template, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving template: ${error.message}` }], isError: true }; } },
- src/tools/templates.js:32-34 (schema)Zod input schema defining the required 'id' parameter as a string.{ id: z.string().describe("ID of the template to retrieve") },
- src/tools/templates.js:31-49 (registration)Direct registration of the 'get_template' tool using server.tool, including name, schema, handler, and description."get_template", { id: z.string().describe("ID of the template to retrieve") }, async (params) => { try { const template = await klaviyoClient.get(`/templates/${params.id}/`); return { content: [{ type: "text", text: JSON.stringify(template, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving template: ${error.message}` }], isError: true }; } }, { description: "Get a specific template from Klaviyo" } );
- src/server.js:40-40 (registration)High-level registration call to registerTemplateTools which includes the get_template tool registration.registerTemplateTools(server);
- src/klaviyo-client.js:135-180 (helper)The klaviyoClient.get() helper function called by the handler, handling URL building, caching, rate limiting retries, and error handling for Klaviyo API GET requests.export async function get(endpoint, params = {}, fallbackFn) { // Build the URL with query parameters according to Klaviyo API specs let url = endpoint; const queryParams = []; // Special handling for campaign endpoint - add required filter if missing if (endpoint === '/campaigns/' && !params.filter) { logger.debug('Adding default email filter for campaigns endpoint'); params.filter = "equals(messages.channel,'email')"; } // Handle filter parameter if provided if (params.filter) { queryParams.push(`filter=${encodeURIComponent(params.filter)}`); } // Handle include parameter if provided if (params.include) { queryParams.push(`include=${encodeURIComponent(params.include)}`); } // Handle page_size parameter if provided if (params.page_size) { queryParams.push(`page[size]=${params.page_size}`); } // Handle pagination cursor if provided if (params.page_cursor) { queryParams.push(`page[cursor]=${params.page_cursor}`); } // Add query parameters to URL if (queryParams.length > 0) { url = `${endpoint}?${queryParams.join('&')}`; } logger.debug(`Prepared GET request to: ${url}`); return executeWithRetry( () => client.get(url), 'GET', endpoint, params, fallbackFn ); }