Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
278 changes: 214 additions & 64 deletions src/provider-guides/connectWise.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,79 +7,229 @@ title: ConnectWise

This connector supports:
- [Read Actions](/read-actions), including full historic backfill and incremental read. Please note that incremental read is unreliable due to ConnectWise API limitations. You may get more data than what is within the time range.
- [Subscribe Actions](/subscribe-actions).
- [Write Actions](/write-actions).
- [Proxy Actions](/proxy-actions), using the base URL `https://{{.region}}.myconnectwise.net`.

The ConnectWise connector supports reading from all standard objects and writing to most standard objects, including the following:

export const rows = [
{
label: "activities", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Activities"
}, {
label: "agreements", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Agreements",
}, {
Comment thread
Cobalt0s marked this conversation as resolved.
label: "attachments", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/WorkflowAttachments",
}, {
label: "companies", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Companies",
}, {
label: "catalog", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/CatalogsItem",
}, {
label: "configurations", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Configurations",
}, {
label: "contacts", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Contacts",
}, {
label: "countries", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Countries",
}, {
label: "currencies", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Currencies",
}, {
label: "customFieldInfos", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/CustomFieldInfos",
}, {
label: "customReports", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/CustomReports",
}, {
label: "emailTemplates", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ServiceEmailTemplates",
}, {
label: "entityTypes", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/EntityTypes",
}, {
label: "expense/entries", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ExpenseEntries",
}, {
label: "finance/agreements/types", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/AgreementTypes",
}, {
label: "finance/billingCycles/info", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/BillingCycleInfos",
}, {
label: "finance/billingTerms/info", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/BillingTermInfos",
}, {
label: "glAccounts", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/GLAccounts",
}, {
label: "groups", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Groups",
}, {
label: "invoices", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Invoices",
}, {
label: "knowledgeBaseArticles", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/KnowledgeBaseArticles",
}, {
label: "knowledgeBaseCategories", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/KnowledgeBaseCategories",
}, {
label: "kpis", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/KPIs",
}, {
label: "management", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Managements",
}, {
label: "noteTypes", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/CompanyNoteTypes",
}, {
label: "sales/opportunities", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Opportunities",
}, {
label: "orders", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Orders",
}, {
label: "priorities", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Priorities",
}, {
label: "products", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ProductsItem",
}, {
label: "project/projectTemplates", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ProjectTemplates",
}, {
label: "project/tickets", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ProjectTickets",
}, {
label: "projects", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Projects",
}, {
label: "purchaseorders", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/PurchaseOrders",
}, {
label: "quotas", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/SalesQuotas",
}, {
label: "ratings", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/OpportunityRatings",
}, {
label: "reports", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ExpenseReports",
}, {
label: "rmaActions", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/RMAActions",
}, {
label: "rmaStatuses", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/RmaStatuses",
}, {
label: "schedule/entries", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ScheduleEntries",
}, {
label: "securityRoles", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ProjectSecurityRoles",
}, {
label: "service/boards", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Boards",
}, {
label: "service/slas/info", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/SLAInfos",
}, {
label: "service/tickets", read: true, write: true,
subscribe: <a href={"#row/project/tickets"}>Use project/tickets</a>,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Tickets",
}, {
label: "sources", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Sources",
}, {
label: "states", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/States",
}, {
label: "system/departments", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Departments",
}, {
label: "system/documents", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Documents",
}, {
label: "system/locations", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Locations",
}, {
label: "system/members", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Members",
}, {
label: "system/securityroles/info", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/SecurityRoleInfos",
}, {
label: "system/workflows/events/actions", read: true, write: false, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/WorkflowActions",
}, {
label: "ticketLinks", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/ServiceTicketLinks",
}, {
label: "time/entries", read: true, write: true, subscribe: true,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/TimeEntries",
}, {
label: "warehouses", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Warehouses",
}, {
label: "workflows", read: true, write: true, subscribe: false,
href: "https://developer.connectwise.com/Products/ConnectWise_PSA/REST#/Workflows",
},
]
Comment thread
Cobalt0s marked this conversation as resolved.

export const Check = () => <span>✅</span>
export const Cross = () => <span>🚫</span>

<div style={{ width: '100%', overflowX: 'auto', display: 'block' }}>
<table style={{ width: '100%', minWidth: '100%', tableLayout: 'fixed', textAlign: 'center', borderCollapse: 'collapse', display: 'table' }}>
<thead style={{ display: 'table-header-group', width: '100%' }}>
<tr style={{ display: 'table-row', width: '100%' }}>
<th style={{ textAlign: 'left', width: '40%' }}>Object</th>
<th style={{ width: '30%' }}>Read</th>
<th style={{ width: '30%' }}>Write</th>
export function renderCellValue(value) {
if (typeof value === "boolean") {
return value ? <Check/> : <Cross/>;
}

if (typeof value === "string" && value.startsWith("<")) {
return <span dangerouslySetInnerHTML={{__html: value}}/>;
}
Comment thread
Cobalt0s marked this conversation as resolved.

return value;
}

<div style={{width: '100%', overflowX: 'auto', display: 'block'}}>
<table style={{
width: '100%',
minWidth: '100%',
tableLayout: 'fixed',
textAlign: 'center',
borderCollapse: 'collapse',
display: 'table'
}}>
<thead style={{display: 'table-header-group', width: '100%'}}>
<tr style={{display: 'table-row', width: '100%'}}>
<th style={{textAlign: 'left', width: '40%'}}>Object</th>
<th style={{width: '20%'}}>Read</th>
<th style={{width: '20%'}}>Write</th>
<th style={{width: '20%'}}>Subscribe</th>
</tr>
</thead>
<tbody style={{ display: 'table-row-group', width: '100%' }}>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>activities</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>agreements</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>attachments</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>companies</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>configurations</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>contacts</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>countries</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>currencies</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>customFieldInfos</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>customReports</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>emailTemplates</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>entityTypes</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>expense/entries</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>finance/agreements/types</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>finance/billingCycles/info</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>finance/billingTerms/info</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>glAccounts</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>groups</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>invoices</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>knowledgeBaseArticles</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>knowledgeBaseCategories</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>kpis</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>management</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>noteTypes</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>sales/opportunities</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>orders</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>priorities</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>products</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>project/projectTemplates</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>projects</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>purchaseorders</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>quotas</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>ratings</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>reports</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>rmaActions</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>rmaStatuses</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>schedule/entries</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>securityRoles</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>service/boards</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>service/slas/info</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>service/tickets</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>sources</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>states</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>system/departments</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>system/documents</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>system/locations</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>system/members</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>system/securityroles/info</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>system/workflows/events/actions</td><td><Check /></td><td><Cross /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>ticketLinks</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>time/entries</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>warehouses</td><td><Check /></td><td><Check /></td></tr>
<tr style={{ display: 'table-row' }}><td style={{ textAlign: 'left' }}>workflows</td><td><Check /></td><td><Check /></td></tr>
</tbody>
</table>
</thead>
<tbody style={{display: 'table-row-group', width: '100%'}}>
{[...rows]
.sort((a, b) => a.label.localeCompare(b.label))
.map((row) => (
<tr id={"row/" + row.label} key={row.label}>
<td style={{textAlign: "left"}}>
<a href={row.href}>{row.label}</a>
</td>
<td>{renderCellValue(row.read)}</td>
<td>{renderCellValue(row.write)}</td>
<td>{renderCellValue(row.subscribe)}</td>
</tr>
))}
</tbody>
</table>
</div>


Expand Down
Loading