Openclaw Perfexcrm Skill

v1.0.0

Manage PerfexCRM from any messaging app. Full CRUD for customers, invoices, leads, tickets, projects, contracts, and 13 more resources (170 API endpoints). C...

1· 214· 1 versions· 0 current· 0 all-time· Updated 20h ago· MIT-0
byKonstantinos Malakontas@kostasmm

Install

openclaw skills install perfexcrm-api

PerfexCRM API Skill

Manage your entire PerfexCRM installation through conversation. This skill connects to the PerfexCRM API & Webhooks module, giving you access to 170 API endpoints across 19 resources.

Get the API module: https://perfexapi.com

Environment Variables

Set these before using the skill:

export PERFEXCRM_API_URL="https://your-crm.com/api/v1"
export PERFEXCRM_API_KEY="your-api-key-here"
  • PERFEXCRM_API_URL: Your PerfexCRM installation URL with /api/v1 suffix
  • PERFEXCRM_API_KEY: API key created in PerfexCRM Admin > Setup > API & Webhooks > API Keys

Authentication

All requests use the X-API-KEY header. The key controls which resources and operations are available.

Available Resources (19)

ResourceListGetCreateUpdateDeleteSub-resources
Customerscontacts, invoices, estimates, projects, contracts, tickets
Invoicespayments (paginated)
Leadsactivity_log, proposals
Ticketsreplies, assign, status
Projectstasks, milestones, files, discussions (all paginated)
Contracts
Taskscomments, checklist, followers, timers
Estimates
Proposalscomments
Expenses
Staff
Credit Notes
Subscriptions
Payments
Items
Contacts
Timesheets
Notes
Utilitiescurrencies, countries, taxes, payment_modes, groups

Common Operations

Customers

List all customers:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers"

Search customers:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers?search=acme"

Create a customer:

curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
  "$PERFEXCRM_API_URL/customers" \
  -d '{"company":"Acme Corp","phonenumber":"+1234567890","city":"New York","state":"NY","country":"US"}'

Get a specific customer:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers/123"

Get customer's invoices:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers/123/invoices"

Invoices

List all invoices:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices"

Filter overdue invoices:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices?status=overdue"

Create an invoice:

curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
  "$PERFEXCRM_API_URL/invoices" \
  -d '{"clientid":123,"currency":1,"items":[{"description":"Web Development","qty":1,"rate":2500}]}'

Get invoice payments (paginated):

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices/45/payments?page=1&per_page=25"

Leads

List leads:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/leads"

Create a lead:

curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
  "$PERFEXCRM_API_URL/leads" \
  -d '{"name":"John Smith","email":"john@example.com","phonenumber":"+1234567890","company":"TechCorp","source":1,"status":1}'

Tickets

List open tickets:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/tickets?status=open"

Reply to a ticket:

curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
  "$PERFEXCRM_API_URL/tickets/55/replies" \
  -d '{"message":"Thank you for reaching out. We are looking into this issue."}'

Assign a ticket:

curl -s -X PUT -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
  "$PERFEXCRM_API_URL/tickets/55/assign" \
  -d '{"assigned":3}'

Projects

List projects:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects"

Get project tasks (paginated):

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects/10/tasks?page=1&per_page=25"

Get project milestones:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects/10/milestones"

Tasks

Create a task:

curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
  "$PERFEXCRM_API_URL/tasks" \
  -d '{"name":"Review proposal","rel_id":10,"rel_type":"project","startdate":"2026-03-15","duedate":"2026-03-20","priority":2,"assignees":[3]}'

Pagination

All list endpoints support pagination:

ParameterDefaultMaxDescription
page1Page number
per_page25100Results per page
limit25100Alias for per_page

Response includes pagination metadata:

{
  "data": [...],
  "meta": {
    "total": 150,
    "per_page": 25,
    "current_page": 1,
    "last_page": 6,
    "from": 1,
    "to": 25
  }
}

Response Filtering

Select specific fields:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers?fields=id,company,phonenumber"

Include related data:

curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects?include=members,tasks"

Sorting & Search

# Sort by date descending
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices?sort=date&order=desc"

# Search across all fields
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers?search=acme"

Webhook Events (100+)

The module fires 100+ webhook events for real-time notifications. Key events:

  • customer.created, customer.updated, customer.deleted
  • invoice.created, invoice.paid, invoice.overdue
  • lead.created, lead.converted, lead.status_changed
  • ticket.created, ticket.reply_added, ticket.status_changed
  • project.created, task.created, task.completed
  • payment.received, contract.signed, estimate.accepted

Error Handling

CodeMeaning
200Success
201Created
400Bad request (missing or invalid parameters)
401Unauthorized (invalid or missing API key)
403Forbidden (insufficient permissions)
404Resource not found
429Rate limited
500Server error

Recommended Agent Behavior

When the user asks about their CRM data:

  1. Always paginate large result sets — use ?per_page=25 and iterate if needed
  2. Use ?fields= to reduce response size — only fetch columns you need
  3. Search first — use ?search= before listing all records
  4. Summarize results — don't dump raw JSON, extract key information
  5. Confirm destructive actions — ask before deleting records
  6. Use natural language — translate user intent to the correct API call

Links

Version tags

apivk97743dmc2t55e11tdfff4ab5s82y2stautomationvk97743dmc2t55e11tdfff4ab5s82y2stcrmvk97743dmc2t55e11tdfff4ab5s82y2stinvoicesvk97743dmc2t55e11tdfff4ab5s82y2stlatestvk97743dmc2t55e11tdfff4ab5s82y2stperfexcrmvk97743dmc2t55e11tdfff4ab5s82y2sttelegramvk97743dmc2t55e11tdfff4ab5s82y2stticketsvk97743dmc2t55e11tdfff4ab5s82y2stwhatsappvk97743dmc2t55e11tdfff4ab5s82y2st

Runtime requirements

📊 Clawdis
Binscurl
EnvPERFEXCRM_API_URL, PERFEXCRM_API_KEY
Primary envPERFEXCRM_API_KEY