🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Openclaw Perfexcrm Skill

by @kostasmm

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

Versionv1.0.0
Downloads654
Stars⭐ 1
TERMINAL
clawhub install perfexcrm-api

πŸ“– About This Skill


name: perfexcrm-api description: > Manage PerfexCRM from any messaging app. Full CRUD for customers, invoices, leads, tickets, projects, contracts, and 13 more resources (170 API endpoints). Check overdue invoices, create leads, reply to tickets, track project progress β€” all through natural conversation on WhatsApp, Telegram, Slack, or Discord. version: 1.0.0 metadata: openclaw: emoji: "πŸ“Š" primaryEnv: PERFEXCRM_API_KEY requires: bins: - curl env: - PERFEXCRM_API_URL - PERFEXCRM_API_KEY links: homepage: https://perfexapi.com repository: https://github.com/sattip/perfexcrm-api-webhooks-module documentation: https://perfexapi.com/docs author: OBS Technologies

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)

    | Resource | List | Get | Create | Update | Delete | Sub-resources | |----------|:----:|:---:|:------:|:------:|:------:|:---:| | Customers | βœ… | βœ… | βœ… | βœ… | βœ… | contacts, invoices, estimates, projects, contracts, tickets | | Invoices | βœ… | βœ… | βœ… | βœ… | βœ… | payments (paginated) | | Leads | βœ… | βœ… | βœ… | βœ… | βœ… | activity_log, proposals | | Tickets | βœ… | βœ… | βœ… | βœ… | βœ… | replies, assign, status | | Projects | βœ… | βœ… | βœ… | βœ… | βœ… | tasks, milestones, files, discussions (all paginated) | | Contracts | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Tasks | βœ… | βœ… | βœ… | βœ… | βœ… | comments, checklist, followers, timers | | Estimates | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Proposals | βœ… | βœ… | βœ… | βœ… | βœ… | comments | | Expenses | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Staff | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Credit Notes | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Subscriptions | βœ… | βœ… | β€” | β€” | β€” | β€” | | Payments | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Items | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Contacts | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Timesheets | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Notes | βœ… | βœ… | βœ… | βœ… | βœ… | β€” | | Utilities | βœ… | β€” | β€” | β€” | β€” | currencies, 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:

    | Parameter | Default | Max | Description | |-----------|---------|-----|-------------| | page | 1 | β€” | Page number | | per_page | 25 | 100 | Results per page | | limit | 25 | 100 | Alias 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

    | Code | Meaning | |------|---------| | 200 | Success | | 201 | Created | | 400 | Bad request (missing or invalid parameters) | | 401 | Unauthorized (invalid or missing API key) | | 403 | Forbidden (insufficient permissions) | | 404 | Resource not found | | 429 | Rate limited | | 500 | Server 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

  • Buy PerfexAPI Module: https://perfexapi.com
  • API Documentation: https://perfexapi.com/docs
  • Full Changelog: https://perfexapi.com/changelog
  • MCP Integration: https://perfexapi.com/mcp (for AI coding tools)
  • n8n Workflows: https://perfexapi.com/templates/n8n