ConnectWise Manage Companies

SkillProductivity

ConnectWise PSA company/account management: company types, statuses, sites/locations, custom fields, and company relationships. Essential for MSP account management and CRM operations in ConnectWise PSA.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the ConnectWise Manage Companies skill

What this skill tells your AI

The instructions your AI receives, as published by wyre-ai/msp-claude-plugins in msp-claude-plugins/connectwise/manage/skills/companies/SKILL.md and read by ahel’s review.

Overview

Companies in ConnectWise PSA represent your clients, prospects, vendors, and other business entities. Company records are central to ticketing, agreements, projects, and billing. This skill covers company CRUD operations, types, statuses, sites, and custom fields.

Anti-triggers

  • The same customer in Automate — ConnectWise Automate calls it a Client and keeps its own ID space; a PSA company/id never matches an Automate ClientID. Use connectwise-automate-clients.
  • People at the company — names, email addresses, phone numbers and portal logins are contact records; use connectwise-psa-contacts.
  • The same client in a documentation or distributor platform — a Hudu company is a documentation container and a Pax8 company is the billing account licences are bought against; neither shares an ID with the PSA. Use hudu-companies or pax8-companies.

API Endpoint

Base: /company/companies

Company Types

Standard company types in ConnectWise PSA:

Type IDNameDescription
1ClientActive paying customer
2ProspectPotential customer
3VendorSupplier or partner
4PartnerStrategic partner
5CompetitorMarket competitor

Note: Company types are configurable. Query /company/companies/types for your instance's types.

Company Statuses

Standard company statuses:

Status IDNameDescriptionActive
1ActiveActive companyYes
2InactiveInactive companyNo
3Not ApprovedPending approvalNo

Query /company/companies/statuses for available statuses.

Complete Company Field Reference

Core Fields

FieldTypeRequiredDescription
idintSystemAuto-generated unique identifier
identifierstring(25)YesUnique company code (e.g., "ACME")
namestring(50)YesFull company name
statusobjectNo{id: statusId}
typeobjectNo{id: typeId}

Contact Information

FieldTypeRequiredDescription
phoneNumberstring(30)NoMain phone
faxNumberstring(30)NoFax number
websitestring(255)NoCompany website URL

Address Fields

FieldTypeRequiredDescription
addressLine1string(50)NoStreet address
addressLine2string(50)NoSuite/unit
citystring(50)NoCity
statestring(50)NoState/province
zipstring(12)NoPostal code
countryobjectNo{id: countryId}

Classification Fields

FieldTypeRequiredDescription
territoryobjectNo{id: territoryId} - Sales territory
marketobjectNo{id: marketId} - Industry/market
accountNumberstring(30)NoExternal accounting ID
taxIdentifierstring(25)NoTax ID/EIN
annualRevenuedecimalNoCompany annual revenue
numberOfEmployeesintNoEmployee count

Billing Fields

FieldTypeRequiredDescription
billingTermsobjectNo{id: termsId} - Payment terms
billToCompanyobjectNo{id: companyId} - Bill to different company
invoiceDeliveryMethodobjectNo{id: methodId} - Email, Mail, etc.
invoiceTemplateobjectNo{id: templateId}
pricingScheduleobjectNo{id: scheduleId}

Ownership Fields

FieldTypeRequiredDescription
ownerLevelobjectNo{id: levelId} - Account manager level
defaultContactobjectNo{id: contactId} - Primary contact
leadSourcestring(50)NoHow lead was acquired
leadFlagbooleanNoIs this a lead

Tracking Fields

FieldTypeRequiredDescription
dateAcquireddateNoWhen became customer
deletedFlagbooleanSystemSoft delete status
mobileGuidguidSystemMobile app identifier
_infoobjectSystemMetadata including last updated

Company Sites

Sites represent physical locations for a company. Each company can have multiple sites.

Site Endpoint

/company/companies/{companyId}/sites

Site Fields

FieldTypeRequiredDescription
idintSystemSite identifier
namestring(50)YesSite name
addressLine1string(50)NoStreet address
addressLine2string(50)NoSuite/unit
citystring(50)NoCity
statestring(50)NoState/province
zipstring(12)NoPostal code
countryobjectNo{id: countryId}
phoneNumberstring(30)NoSite phone
faxNumberstring(30)NoSite fax
taxCodeobjectNo{id: taxCodeId}
defaultFlagbooleanNoIs primary site

Create Site

POST /company/companies/{companyId}/sites
Content-Type: application/json

{
  "name": "Main Office",
  "addressLine1": "123 Main Street",
  "city": "Springfield",
  "state": "IL",
  "zip": "62701",
  "defaultFlag": true
}

Custom Fields

Custom fields store company-specific data not in standard fields.

Get Custom Fields

GET /company/companies/{companyId}/customFields

Custom Field Response

{
  "id": 1,
  "caption": "SLA Tier",
  "value": "Gold",
  "type": "Text"
}

Update Custom Fields

Custom fields are updated via the company PATCH:

PATCH /company/companies/{id}
Content-Type: application/json

{
  "customFields": [
    {
      "id": 1,
      "value": "Platinum"
    }
  ]
}

Custom Field Types

TypeDescription
TextFree-form text
NumberNumeric value
DateDate value
CheckboxBoolean true/false
DropdownSelection from list

API Operations

Create Company

POST /company/companies
Content-Type: application/json

{
  "identifier": "ACME",
  "name": "Acme Corporation",
  "status": {"id": 1},
  "type": {"id": 1},
  "addressLine1": "123 Main Street",
  "city": "Springfield",
  "state": "IL",
  "zip": "62701",
  "phoneNumber": "555-123-4567",
  "website": "https://www.acme.com"
}

Get Company

GET /company/companies/{id}

Get Company by Identifier

GET /company/companies?conditions=identifier="ACME"

Update Company

PATCH /company/companies/{id}
Content-Type: application/json

{
  "phoneNumber": "555-987-6543",
  "status": {"id": 1}
}

Search Companies

GET /company/companies?conditions=name contains "Acme" and status/id=1

Delete Company

DELETE /company/companies/{id}

Note: Deleting a company with related records (tickets, contacts, etc.) will fail. Use status change to Inactive instead.

Common Query Patterns

Active clients:

conditions=status/id=1 and type/id=1

Companies by territory:

conditions=territory/id=5

Companies with no contact:

conditions=defaultContact=null

Recently added companies:

conditions=_info/lastUpdated>[2024-01-01]
orderBy=_info/lastUpdated desc

Search by name:

conditions=name contains "tech"

Companies by market:

conditions=market/id=3

Company Relationships

Parent/Child Companies

Companies can have hierarchical relationships:

GET /company/companies/{id}/managedDevicesIntegrations

Related Entities

EntityRelationship
Contacts/company/contacts?conditions=company/id={id}
Tickets/service/tickets?conditions=company/id={id}
Agreements/finance/agreements?conditions=company/id={id}
Projects/project/projects?conditions=company/id={id}
Configurations/company/configurations?conditions=company/id={id}

Best Practices

  1. Use unique identifiers - Keep short, meaningful codes (ACME, ABC123)
  2. Standardize company names - Consistent naming helps searching
  3. Set company type - Enables filtering and reporting
  4. Add default contact - Primary point of contact for communications
  5. Configure sites - Multiple locations need separate sites
  6. Use custom fields - Store industry-specific data
  7. Link to accounting - Set accountNumber for integration

Error Handling

ErrorCauseResolution
Identifier requiredMissing identifierProvide unique company code
Name requiredMissing company nameInclude name field
Identifier existsDuplicate identifierChoose unique identifier
Cannot deleteHas related recordsSet status to Inactive instead
Invalid statusStatus doesn't existQuery statuses endpoint

Related Skills

Signals

GitHub stars
45
Forks
24
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
connectwise-manage-companies
Source
github.com/wyre-ai/msp-claude-plugins