Templates
Templates are pre-built integration configurations that Partners publish to the Celigo marketplace for other users to install.
The template lifecycle is: create → upload zip (via GET /v1/s3SignedURL) → publish.
All endpoints require a Partner account — non-partner callers receive 403 access_restricted.
Template schema
Returns all templates owned by the authenticated Partner account. The response is a flat JSON array with no pagination.
Maximum number of records to return per page.
100Opaque cursor for forward pagination. Pass the value from the Link
response header (rel="next") to fetch the next page.
Array of template resources.
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
GET /v1/templates HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
{
"_id": "67ffe71a4432714ded99e81b",
"name": "Salesforce to NetSuite sync",
"description": "Bi-directional sync of contacts between Salesforce and NetSuite.",
"websiteURL": "https://example.com/templates/sf-ns",
"contactEmail": "partner@example.com",
"published": true,
"lastModified": "2026-05-05T17:09:48.338Z",
"applications": [
"salesforce",
"netsuite"
],
"free": false,
"numInstalls": 42
},
{
"_id": "68a2b3c4d5e6f70089012345",
"name": "Shopify order import",
"lastModified": "2026-04-20T10:15:00.000Z",
"applications": [
"shopify"
],
"free": false,
"numInstalls": 0
}
]Creates a new integration template. Only name is required; all other fields are optional. Upload a zip via GET /v1/s3SignedURL before attempting to publish.
Request body for creating or updating a template. name is always
required, even on PUT. published can only be set to true after
uploading a template zip via GET /v1/s3SignedURL.
Display name of the template.
Salesforce to NetSuite syncLonger description shown in the marketplace.
Bi-directional sync of contacts between Salesforce and NetSuite.URL of the template's marketplace image. Send an empty string to clear it.
https://example.com/images/sf-ns.pngURL to the partner's website or template landing page. Send an empty string to clear it.
https://example.com/templates/sf-nsContact email(s) for template support — a single address or a comma-separated list of addresses.
partner@example.comSet to true to publish the template to the marketplace (requires
a zip upload first). Set to false to unpublish.
Application identifiers to associate with this template.
Values may be application slugs (e.g. salesforce) or
Mongo ObjectIds.
Template created.
A template resource as returned by the API.
Fields that are false or empty may be omitted from the response
(e.g. published is omitted when the template is unpublished,
imageURL is omitted when not set).
Unique identifier for the resource. Format is a 24-character hexadecimal string.
5f8d43a1b9e5a80011a35f2cTimestamp when the resource was created. Set automatically and cannot be modified.
2023-04-01T09:15:32ZTimestamp when the resource was last updated. Changes whenever any property is modified.
2023-04-15T14:30:15ZTimestamp when the resource was soft-deleted. When null or absent, the resource is active.
2023-05-20T11:45:32ZDisplay name of the template.
Salesforce to NetSuite syncLonger description shown in the marketplace.
Bi-directional sync of contacts between Salesforce and NetSuite.URL of the template's marketplace image. Omitted when never set; may be an empty string when the field was cleared.
https://example.com/images/sf-ns.pngURL to the partner's website or template landing page. May be
an empty string when the field was cleared; legacy values may
lack a scheme (e.g. www.example.com).
https://example.com/templates/sf-nsContact email(s) for template support — a single address or a comma-separated list of addresses.
partner@example.comWhether the template is published to the marketplace. Omitted
from the response when false. Can only be set to true after
a template zip file has been uploaded via GET /v1/s3SignedURL.
Application identifiers associated with this template.
Values may be application slugs (e.g. salesforce) or
Mongo ObjectIds.
When true, the template is free to install with no license requirement.
Number of times this template has been installed.
42Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
POST /v1/templates HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 38
{
"name": "Salesforce to NetSuite sync"
}{
"_id": "68a2b3c4d5e6f70089012345",
"name": "Salesforce to NetSuite sync",
"lastModified": "2026-05-16T02:33:22.573Z",
"applications": [],
"free": false,
"numInstalls": 0
}Returns a single template by ID.
67ffe71a4432714ded99e81bThe template resource.
A template resource as returned by the API.
Fields that are false or empty may be omitted from the response
(e.g. published is omitted when the template is unpublished,
imageURL is omitted when not set).
Unique identifier for the resource. Format is a 24-character hexadecimal string.
5f8d43a1b9e5a80011a35f2cTimestamp when the resource was created. Set automatically and cannot be modified.
2023-04-01T09:15:32ZTimestamp when the resource was last updated. Changes whenever any property is modified.
2023-04-15T14:30:15ZTimestamp when the resource was soft-deleted. When null or absent, the resource is active.
2023-05-20T11:45:32ZDisplay name of the template.
Salesforce to NetSuite syncLonger description shown in the marketplace.
Bi-directional sync of contacts between Salesforce and NetSuite.URL of the template's marketplace image. Omitted when never set; may be an empty string when the field was cleared.
https://example.com/images/sf-ns.pngURL to the partner's website or template landing page. May be
an empty string when the field was cleared; legacy values may
lack a scheme (e.g. www.example.com).
https://example.com/templates/sf-nsContact email(s) for template support — a single address or a comma-separated list of addresses.
partner@example.comWhether the template is published to the marketplace. Omitted
from the response when false. Can only be set to true after
a template zip file has been uploaded via GET /v1/s3SignedURL.
Application identifiers associated with this template.
Values may be application slugs (e.g. salesforce) or
Mongo ObjectIds.
When true, the template is free to install with no license requirement.
Number of times this template has been installed.
42Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
Not found. The requested resource does not exist or is not visible to the caller.
GET /v1/templates/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"_id": "67ffe71a4432714ded99e81b",
"name": "Salesforce to NetSuite sync",
"description": "Bi-directional sync of contacts between Salesforce and NetSuite.",
"websiteURL": "https://example.com/templates/sf-ns",
"contactEmail": "partner@example.com",
"published": true,
"lastModified": "2026-05-05T17:09:48.338Z",
"applications": [
"salesforce",
"netsuite"
],
"free": false,
"numInstalls": 42
}Replaces the template's fields with the values in the request body. Omitted optional fields retain their current values. name is required on every PUT, even if unchanged.
67ffe71a4432714ded99e81bRequest body for creating or updating a template. name is always
required, even on PUT. published can only be set to true after
uploading a template zip via GET /v1/s3SignedURL.
Display name of the template.
Salesforce to NetSuite syncLonger description shown in the marketplace.
Bi-directional sync of contacts between Salesforce and NetSuite.URL of the template's marketplace image. Send an empty string to clear it.
https://example.com/images/sf-ns.pngURL to the partner's website or template landing page. Send an empty string to clear it.
https://example.com/templates/sf-nsContact email(s) for template support — a single address or a comma-separated list of addresses.
partner@example.comSet to true to publish the template to the marketplace (requires
a zip upload first). Set to false to unpublish.
Application identifiers to associate with this template.
Values may be application slugs (e.g. salesforce) or
Mongo ObjectIds.
Updated template.
A template resource as returned by the API.
Fields that are false or empty may be omitted from the response
(e.g. published is omitted when the template is unpublished,
imageURL is omitted when not set).
Unique identifier for the resource. Format is a 24-character hexadecimal string.
5f8d43a1b9e5a80011a35f2cTimestamp when the resource was created. Set automatically and cannot be modified.
2023-04-01T09:15:32ZTimestamp when the resource was last updated. Changes whenever any property is modified.
2023-04-15T14:30:15ZTimestamp when the resource was soft-deleted. When null or absent, the resource is active.
2023-05-20T11:45:32ZDisplay name of the template.
Salesforce to NetSuite syncLonger description shown in the marketplace.
Bi-directional sync of contacts between Salesforce and NetSuite.URL of the template's marketplace image. Omitted when never set; may be an empty string when the field was cleared.
https://example.com/images/sf-ns.pngURL to the partner's website or template landing page. May be
an empty string when the field was cleared; legacy values may
lack a scheme (e.g. www.example.com).
https://example.com/templates/sf-nsContact email(s) for template support — a single address or a comma-separated list of addresses.
partner@example.comWhether the template is published to the marketplace. Omitted
from the response when false. Can only be set to true after
a template zip file has been uploaded via GET /v1/s3SignedURL.
Application identifiers associated with this template.
Values may be application slugs (e.g. salesforce) or
Mongo ObjectIds.
When true, the template is free to install with no license requirement.
Number of times this template has been installed.
42Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
Not found. The requested resource does not exist or is not visible to the caller.
Template zip has not been uploaded yet.
PUT /v1/templates/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 144
{
"name": "Salesforce to NetSuite sync",
"description": "Updated description for the marketplace listing.",
"contactEmail": "new-contact@example.com"
}{
"_id": "67ffe71a4432714ded99e81b",
"name": "Salesforce to NetSuite sync",
"description": "Updated description for the marketplace listing.",
"websiteURL": "https://example.com/templates/sf-ns",
"contactEmail": "new-contact@example.com",
"published": true,
"lastModified": "2026-06-09T18:21:05.114Z",
"applications": [
"salesforce",
"netsuite"
],
"free": false,
"numInstalls": 42
}Permanently deletes a template.
67ffe71a4432714ded99e81bTemplate deleted.
No content
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
Not found. The requested resource does not exist or is not visible to the caller.
DELETE /v1/templates/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
Installs an integration from a published template. The caller provides a connectionMap that maps each template-defined connection ID to an actual connection ID in the caller's account. Every template connection must appear as a key in connectionMap.
The template ID to install from.
67ffe71a4432714ded99e81bConnection mapping from template connection IDs to the caller's real connection IDs.
Template installed successfully.
The created integration and related resources.
Missing or empty connectionMap.
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
Template not found.
Connection IDs in connectionMap do not match the template's
expected connection IDs.
POST /v1/integrations/template/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 127
{
"connectionMap": {
"61f92026dd053843b5d72350": "64a1234567890abcdef12345",
"61f92026dd053843b5d72351": "64a1234567890abcdef12346"
}
}{
"_integrationId": "6405b9d73496e05ff253d587"
}Previews the resources that would be created by installing a template from an uploaded zip file. The runKey query parameter ties this request to a previously uploaded zip (obtained from GET /v1/s3SignedURL).
The runKey returned by GET /v1/s3SignedURL after uploading the
template zip file.
abc123def456Preview of resources the template would create.
Preview envelope with resource docs.
Missing required runKey query parameter.
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
The runKey does not match any uploaded zip.
GET /v1/integrations/template/preview?runKey=abc123def456 HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"stackRequired": false,
"objects": [
{
"model": "Integration",
"doc": {
"_id": "6405b9d73496e05ff253d587",
"name": "Shopify - NetSuite",
"description": "Sync Abandoned Checkouts, Collects, … between Shopify and NetSuite."
}
},
{
"model": "Connection",
"doc": {
"_id": "61f92026dd053843b5d72350",
"type": "netsuite",
"name": "NetSuite Connection",
"netsuite": {
"wsdlVersion": "2020.2",
"concurrencyLevel": 1
}
}
}
]
}Installs a template from a previously uploaded zip file. The runKey in the request body ties this request to the zip upload (obtained from GET /v1/s3SignedURL).
The runKey from the zip upload.
The runKey returned by GET /v1/s3SignedURL after uploading
the template zip file.
abc123def456Template installed from uploaded zip.
The created integration and related resources.
Missing required runKey in request body.
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
Forbidden. The authenticated caller does not have permission to perform this operation.
The runKey does not match any uploaded zip.
POST /v1/integrations/template HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 25
{
"runKey": "abc123def456"
}{
"_integrationId": "6405b9d73496e05ff253d587"
}Last updated
Was this helpful?