Revert · Capability

Revert CRM Integration

Workflow capability for building unified CRM integrations across Salesforce, HubSpot, Zoho CRM, Pipedrive, and Close CRM. Enables product teams to manage contacts, companies, deals, leads, tasks, events, and notes through a single normalized API with automatic OAuth and field mapping.

Run with Naftiko RevertCRMIntegrationsSalesforceHubSpotPipedrive

What You Can Do

GET
List contacts — List all contacts from the tenant's connected CRM
/v1/contacts
POST
Create contact — Create a new contact in the tenant's CRM
/v1/contacts
GET
Get contact — Get a specific contact by ID
/v1/contacts/{id}
PATCH
Update contact — Update an existing contact
/v1/contacts/{id}
POST
Search contacts — Search contacts using filter criteria
/v1/contacts/search
GET
List companies — List all companies from the tenant's CRM
/v1/companies
POST
Create company — Create a new company/account in the CRM
/v1/companies
GET
List deals — List all deals/opportunities from the tenant's CRM
/v1/deals
POST
Create deal — Create a new deal/opportunity in the CRM
/v1/deals
GET
List leads — List all leads from the tenant's CRM
/v1/leads
POST
Create lead — Create a new lead in the CRM
/v1/leads
GET
Get connection — Get OAuth connection status for a tenant
/v1/connections

MCP Tools

list-contacts

List all contacts from the tenant's connected CRM (Salesforce, HubSpot, Zoho, Pipedrive, or Close)

read-only
get-contact

Get details of a specific CRM contact by ID

read-only
create-contact

Create a new contact in the tenant's CRM

update-contact

Update an existing CRM contact

idempotent
search-contacts

Search CRM contacts using filter criteria

read-only
list-companies

List all companies/accounts from the tenant's CRM

read-only
create-company

Create a new company/account in the CRM

list-deals

List all deals/opportunities in the CRM pipeline

read-only
create-deal

Create a new deal/opportunity in the CRM pipeline

list-leads

List all leads in the CRM

read-only
create-lead

Create a new lead in the CRM

get-connection-status

Get OAuth connection status and details for a tenant

read-only

Capability Spec

crm-integration.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Revert CRM Integration
  description: Workflow capability for building unified CRM integrations across Salesforce, HubSpot, Zoho CRM, Pipedrive,
    and Close CRM. Enables product teams to manage contacts, companies, deals, leads, tasks, events, and notes through a single
    normalized API with automatic OAuth and field mapping.
  tags:
  - Revert
  - CRM
  - Integrations
  - Salesforce
  - HubSpot
  - Pipedrive
  created: '2026-05-02'
  modified: '2026-05-06'
binds:
- namespace: env
  keys:
    REVERT_API_TOKEN: REVERT_API_TOKEN
    REVERT_TENANT_ID: REVERT_TENANT_ID
capability:
  consumes:
  - type: http
    namespace: revert
    baseUri: https://api.revert.dev
    description: Revert Unified API for CRM, ticketing, chat, and accounting integrations
    authentication:
      type: apikey
      key: x-revert-api-token
      value: '{{REVERT_API_TOKEN}}'
      placement: header
    resources:
    - name: connections
      path: /connection
      description: Manage third-party OAuth connections and webhooks
      operations:
      - name: get-connection
        method: GET
        description: Get details of a connection for a specific tenant
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: The unique customer id used when the customer linked their account
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: create-connection-webhook
        method: POST
        description: Create a webhook for a tenant connection
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: The unique customer tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            webhookUrl: '{{tools.webhookUrl}}'
    - name: crm-contacts
      path: /crm/contacts
      description: Unified CRM contact operations
      operations:
      - name: get-contacts
        method: GET
        description: Get all CRM contacts with pagination
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        - name: fields
          in: query
          type: string
          required: false
          description: Comma-separated list of fields
        - name: pageSize
          in: query
          type: string
          required: false
          description: Number of results per page
        - name: cursor
          in: query
          type: string
          required: false
          description: Pagination cursor
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: get-contact
        method: GET
        description: Get details of a specific CRM contact by ID
        inputParameters:
        - name: id
          in: path
          type: string
          required: true
          description: Contact ID
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: create-contact
        method: POST
        description: Create a new CRM contact
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            firstName: '{{tools.firstName}}'
            lastName: '{{tools.lastName}}'
            email: '{{tools.email}}'
      - name: update-contact
        method: PATCH
        description: Update an existing CRM contact
        inputParameters:
        - name: id
          in: path
          type: string
          required: true
          description: Contact ID
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: search-contacts
        method: POST
        description: Search CRM contacts by criteria
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            searchCriteria: '{{tools.searchCriteria}}'
    - name: crm-companies
      path: /crm/companies
      description: Unified CRM company/account operations
      operations:
      - name: get-companies
        method: GET
        description: Get all CRM companies/accounts with pagination
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        - name: pageSize
          in: query
          type: string
          required: false
          description: Number of results per page
        - name: cursor
          in: query
          type: string
          required: false
          description: Pagination cursor
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: create-company
        method: POST
        description: Create a new CRM company/account
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            name: '{{tools.name}}'
            website: '{{tools.website}}'
    - name: crm-deals
      path: /crm/deals
      description: Unified CRM deal/opportunity operations
      operations:
      - name: get-deals
        method: GET
        description: Get all CRM deals/opportunities with pagination
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        - name: pageSize
          in: query
          type: string
          required: false
          description: Number of results per page
        - name: cursor
          in: query
          type: string
          required: false
          description: Pagination cursor
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: create-deal
        method: POST
        description: Create a new CRM deal/opportunity
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            name: '{{tools.name}}'
            amount: '{{tools.amount}}'
            stage: '{{tools.stage}}'
    - name: crm-leads
      path: /crm/leads
      description: Unified CRM lead operations
      operations:
      - name: get-leads
        method: GET
        description: Get all CRM leads with pagination
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        - name: pageSize
          in: query
          type: string
          required: false
          description: Number of results per page
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: create-lead
        method: POST
        description: Create a new CRM lead
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            firstName: '{{tools.firstName}}'
            lastName: '{{tools.lastName}}'
            email: '{{tools.email}}'
    - name: ticket-tasks
      path: /ticket/tasks
      description: Unified ticketing task operations
      operations:
      - name: get-ticket-tasks
        method: GET
        description: Get all ticketing tasks with pagination
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        - name: pageSize
          in: query
          type: string
          required: false
          description: Number of results per page
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: create-ticket-task
        method: POST
        description: Create a new ticketing task
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            title: '{{tools.title}}'
            description: '{{tools.description}}'
            priority: '{{tools.priority}}'
    - name: chat-messages
      path: /chat/messages
      description: Unified chat message operations
      operations:
      - name: get-messages
        method: GET
        description: Get chat messages with pagination
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        - name: pageSize
          in: query
          type: string
          required: false
          description: Number of results per page
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: send-message
        method: POST
        description: Send a new chat message to a channel
        inputParameters:
        - name: x-revert-t-id
          in: header
          type: string
          required: true
          description: Tenant ID
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        body:
          type: json
          data:
            text: '{{tools.text}}'
            channelId: '{{tools.channelId}}'
  exposes:
  - type: rest
    port: 8080
    namespace: revert-crm-api
    description: Unified REST API for CRM integration workflows.
    resources:
    - path: /v1/contacts
      name: contacts
      description: Unified contact management across all connected CRMs
      operations:
      - method: GET
        name: list-contacts
        description: List all contacts from the tenant's connected CRM
        call: revert.get-contacts
        with:
          x-revert-t-id: rest.tenant_id
          pageSize: rest.page_size
          cursor: rest.cursor
          fields: rest.fields
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: create-contact
        description: Create a new contact in the tenant's CRM
        call: revert.create-contact
        with:
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/contacts/{id}
      name: contact
      description: Individual contact operations
      operations:
      - method: GET
        name: get-contact
        description: Get a specific contact by ID
        call: revert.get-contact
        with:
          id: rest.id
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
      - method: PATCH
        name: update-contact
        description: Update an existing contact
        call: revert.update-contact
        with:
          id: rest.id
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/contacts/search
      name: contact-search
      description: Search contacts by criteria
      operations:
      - method: POST
        name: search-contacts
        description: Search contacts using filter criteria
        call: revert.search-contacts
        with:
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/companies
      name: companies
      description: Unified company/account management
      operations:
      - method: GET
        name: list-companies
        description: List all companies from the tenant's CRM
        call: revert.get-companies
        with:
          x-revert-t-id: rest.tenant_id
          pageSize: rest.page_size
          cursor: rest.cursor
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: create-company
        description: Create a new company/account in the CRM
        call: revert.create-company
        with:
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/deals
      name: deals
      description: Unified deal/opportunity pipeline management
      operations:
      - method: GET
        name: list-deals
        description: List all deals/opportunities from the tenant's CRM
        call: revert.get-deals
        with:
          x-revert-t-id: rest.tenant_id
          pageSize: rest.page_size
          cursor: rest.cursor
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: create-deal
        description: Create a new deal/opportunity in the CRM
        call: revert.create-deal
        with:
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/leads
      name: leads
      description: Unified lead management
      operations:
      - method: GET
        name: list-leads
        description: List all leads from the tenant's CRM
        call: revert.get-leads
        with:
          x-revert-t-id: rest.tenant_id
          pageSize: rest.page_size
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: create-lead
        description: Create a new lead in the CRM
        call: revert.create-lead
        with:
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/connections
      name: connections
      description: Tenant OAuth connection management
      operations:
      - method: GET
        name: get-connection
        description: Get OAuth connection status for a tenant
        call: revert.get-connection
        with:
          x-revert-t-id: rest.tenant_id
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    port: 9080
    namespace: revert-crm-mcp
    transport: http
    description: MCP server for AI-assisted CRM integration workflows.
    tools:
    - name: list-contacts
      description: List all contacts from the tenant's connected CRM (Salesforce, HubSpot, Zoho, Pipedrive, or Close)
      hints:
        readOnly: true
        openWorld: true
      call: revert.get-contacts
      with:
        x-revert-t-id: tools.tenant_id
        pageSize: tools.page_size
        cursor: tools.cursor
      outputParameters:
      - type: object
        mapping: $.
    - name: get-contact
      description: Get details of a specific CRM contact by ID
      hints:
        readOnly: true
        openWorld: false
      call: revert.get-contact
      with:
        id: tools.contact_id
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: create-contact
      description: Create a new contact in the tenant's CRM
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: revert.create-contact
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: update-contact
      description: Update an existing CRM contact
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: revert.update-contact
      with:
        id: tools.contact_id
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: search-contacts
      description: Search CRM contacts using filter criteria
      hints:
        readOnly: true
        openWorld: true
      call: revert.search-contacts
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: list-companies
      description: List all companies/accounts from the tenant's CRM
      hints:
        readOnly: true
        openWorld: true
      call: revert.get-companies
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: create-company
      description: Create a new company/account in the CRM
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: revert.create-company
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: list-deals
      description: List all deals/opportunities in the CRM pipeline
      hints:
        readOnly: true
        openWorld: true
      call: revert.get-deals
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: create-deal
      description: Create a new deal/opportunity in the CRM pipeline
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: revert.create-deal
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: list-leads
      description: List all leads in the CRM
      hints:
        readOnly: true
        openWorld: true
      call: revert.get-leads
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: create-lead
      description: Create a new lead in the CRM
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: revert.create-lead
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.
    - name: get-connection-status
      description: Get OAuth connection status and details for a tenant
      hints:
        readOnly: true
        openWorld: false
      call: revert.get-connection
      with:
        x-revert-t-id: tools.tenant_id
      outputParameters:
      - type: object
        mapping: $.