From syncro-msp
Manages Syncro MSP customer records: create, update, search; handle contacts, sites/locations via REST API. For MSP client onboarding and management.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin syncroThis skill uses the workspace's default tool permissions.
Syncro customers are the foundation of your service delivery. Every ticket, asset, invoice, and contract is associated with a customer. This skill covers comprehensive customer management including CRUD operations, contact management, and site/location handling.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
Syncro customers are the foundation of your service delivery. Every ticket, asset, invoice, and contract is associated with a customer. This skill covers comprehensive customer management including CRUD operations, contact management, and site/location handling.
The primary entity representing a client organization.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | System | Unique identifier |
business_name | string | Yes | Official company name |
firstname | string | No | Primary contact first name |
lastname | string | No | Primary contact last name |
email | string | No | Primary email address |
phone | string | No | Main phone number |
mobile | string | No | Mobile phone |
address | string | No | Street address |
address_2 | string | No | Address line 2 |
city | string | No | City |
state | string | No | State/Province |
zip | string | No | ZIP/Postal code |
notes | text | No | Internal notes |
referred_by | string | No | Referral source |
tax_rate | decimal | No | Tax rate percentage |
Individual people at a customer organization.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | System | Unique identifier |
customer_id | integer | Yes | Associated customer |
name | string | Yes | Full name |
email | string | No | Email address |
phone | string | No | Phone number |
mobile | string | No | Mobile number |
title | string | No | Job title |
notes | text | No | Notes about contact |
Syncro supports flexible customer categorization:
| Type | Use Case |
|---|---|
| Business | Standard commercial clients |
| Residential | Home users |
| Government | Government agencies |
| Non-Profit | Non-profit organizations |
POST /api/v1/customers
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"business_name": "Acme Corporation",
"firstname": "John",
"lastname": "Smith",
"email": "john.smith@acme.example.com",
"phone": "555-123-4567",
"address": "123 Main Street",
"city": "Springfield",
"state": "IL",
"zip": "62701",
"notes": "Referred by ABC Company"
}
Search by name:
GET /api/v1/customers?query=acme
List all customers with pagination:
GET /api/v1/customers?page=1
Filter by email:
GET /api/v1/customers?email=john.smith@acme.example.com
GET /api/v1/customers/{id}
Response includes:
PUT /api/v1/customers/{id}
Content-Type: application/json
{
"phone": "555-987-6543",
"notes": "Updated contact information per request"
}
POST /api/v1/contacts
Content-Type: application/json
{
"customer_id": 12345,
"name": "Jane Doe",
"email": "jane.doe@acme.example.com",
"phone": "555-123-4568",
"title": "IT Manager",
"notes": "Primary technical contact"
}
Contacts for a customer:
GET /api/v1/contacts?customer_id=12345
Search by email:
GET /api/v1/contacts?email=jane.doe@acme.example.com
PUT /api/v1/contacts/{id}
Content-Type: application/json
{
"title": "IT Director",
"phone": "555-123-4569"
}
DELETE /api/v1/contacts/{id}
Create customer record
Create primary contact
Add additional contacts
Set up assets
Create contract/agreement
Verify before creating
Maintain accuracy
Track relationships
When you discover duplicate customers:
{
"customer": {
"id": 12345,
"business_name": "Acme Corporation",
"firstname": "John",
"lastname": "Smith",
"email": "john.smith@acme.example.com",
"phone": "555-123-4567",
"address": "123 Main Street",
"city": "Springfield",
"state": "IL",
"zip": "62701",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-02-10T14:22:00Z"
}
}
{
"contact": {
"id": 67890,
"customer_id": 12345,
"name": "Jane Doe",
"email": "jane.doe@acme.example.com",
"phone": "555-123-4568",
"mobile": "555-987-6543",
"title": "IT Manager",
"notes": "Primary technical contact",
"created_at": "2024-01-15T11:00:00Z"
}
}
| Code | Message | Resolution |
|---|---|---|
| 400 | Invalid parameters | Check field values |
| 401 | Unauthorized | Verify API key |
| 404 | Customer not found | Confirm customer ID |
| 422 | Validation failed | Check required fields |
| 429 | Rate limited | Wait and retry |
"business_name is required" - Customer must have a name
"Invalid email format" - Check email address syntax
"customer_id required" - Contact must belong to a customer