Skip to content

Partners CRM — API

All endpoints require a valid token_admin JWT. Most CRM endpoints additionally require the named permission crm-partners. Locale filtering is applied automatically based on the authenticated admin's locale assignment.

Endpoint Summary

MethodPathAuthDescription
GET/partner/groupedcrm-partnersKanban view — partners and prospects grouped by pipeline column
GET/partner/listcrm-partnersPaginated list of partners and prospects
GET/partner/kpiscrm-partnersRevenue KPI totals per pipeline column
GET/partner/activitiescrm-partnersCalendar events (scheduled follow-ups, UNION of both entity types)
GET/partner/autocompletetoken_adminPartner search for autocomplete inputs
GET/partner/{id}/detailscrm-partnersFull detail for a registered partner
POST/partner/{id}/notescrm-partnersCreate a follow-up note for a registered partner
POST/partner/{id}/contactscrm-partnersAdd an extra contact to a registered partner
PATCH/partner/{id}/datacrm-partnersUpsert CRM metadata for a registered partner
POST/partner/prospectcrm-partnersCreate a new partner prospect (type 3)
GET/prospects/{id}perm 319Partner prospect detail (pass source=partner)
POST/prospects/{id}/notesperm 319Create a follow-up note for a partner prospect
PATCH/prospects/{id}/partner-datacrm-partnersUpsert CRM metadata for a partner prospect

GET /partner/grouped

Returns partners and partner prospects grouped into Kanban columns.

Query Parameters

ParameterTypeDefaultDescription
startnumber0Pagination offset (per column)
lengthnumber20Page size per column
sortBystringSort field
sortTypestringASC or DESC
localeIdanyFilter by country locale
reportbooleanInclude report-level data
countersbooleanInclude total counts per column
categorynumberFilter to a specific pipeline column ID
startDatestringFilter by creation date range start (ISO)
endDatestringFilter by creation date range end (ISO)
sourcestringpartnercompany or partner; always partner for this CRM
followstringFollow-up status filter
typestringEntity type filter (partner or prospect)
searchstringFull-text search (name, email, company)
referralsbooleanFilter to partners with at least one referral

Response

json
{
  "data": [
    {
      "id": 1,
      "name": "Pipeline Stage Name",
      "order": 1,
      "items": [
        {
          "id": 42,
          "type": "partner",
          "name": "Acme Corp",
          "email": "contact@acme.com",
          "follow_up_id": 1,
          "referrals": 12,
          "revenue": 4500.00
        }
      ],
      "total": 8
    }
  ]
}

GET /partner/list

Returns a flat paginated list of partners and partner prospects for the List (table) view.

Query Parameters

Same as /partner/grouped, plus:

ParameterTypeDescription
lengthnumberDefault 100
'createdAt[0]'stringCreation date range start
'createdAt[1]'stringCreation date range end
campaingstringCampaign filter
salesmanstringAssigned salesman filter
statusnumberPartner status (0 = removed, 1 = active, 2 = registered)
adminnumberAssigned administrator filter

Response

json
{
  "data": [
    {
      "id": 42,
      "type": "partner",
      "name": "Acme Corp",
      "email": "contact@acme.com",
      "phone": "+1 555-0100",
      "follow_up_id": 1,
      "follow_up_name": "Active",
      "referrals": 12,
      "revenue": 4500.00,
      "status": 1,
      "created_at": "2024-01-15T10:00:00Z"
    }
  ],
  "total": 120
}

GET /partner/kpis

Returns total referral revenue per pipeline column. Used by the Kanban view to show USD revenue badges at the top of each column.

Query Parameters

Same as /partner/grouped (same filters apply so KPIs reflect current view state).

Response

json
{
  "data": [
    {
      "follow_up_id": 1,
      "follow_up_name": "Active",
      "total_revenue": 18500.00
    }
  ]
}

GET /partner/activities

Returns scheduled follow-up events for the Calendar view. The result is a UNION of activities for registered partners and partner prospects that have a scheduled_date.

Query Parameters

ParameterTypeDescription
startDatestringCalendar range start (ISO)
endDatestringCalendar range end (ISO)
activityFilterstringoverdue, upcoming, today, or month
searchstringName/email search
followstringPipeline column filter
typestringpartner or prospect
salesmanstringFilter by assigned salesman
localeIdanyLocale filter
startnumberPagination offset
lengthnumberPage size

Response

json
{
  "data": [
    {
      "id": 7,
      "type": "partner",
      "entity_id": 42,
      "name": "Acme Corp",
      "action": "call",
      "note": "Quarterly check-in",
      "scheduled_date": "2024-06-10T14:00:00Z",
      "follow_up_name": "Active"
    }
  ],
  "total": 14
}

GET /partner/autocomplete

Lightweight partner search for select inputs (e.g., filtering by partner in other modules).

Query Parameters

ParameterTypeDescription
searchstringPartial name or email

Response

json
{
  "data": [
    { "id": 42, "name": "Acme Corp", "email": "contact@acme.com" }
  ]
}

GET /partner/{id}/details

Returns the full detail payload for a registered partner, including notes and extra contacts.

Path Parameters

ParameterTypeDescription
idnumberPartner ID

Response

json
{
  "partner": {
    "id": 42,
    "name": "Acme Corp",
    "email": "contact@acme.com",
    "phone": "+1 555-0100",
    "follow_up_id": 1,
    "follow_up_name": "Active",
    "url": "https://acme.com",
    "partner_type_id": 2,
    "partner_origin_id": 1,
    "rating": 4,
    "locale_id": 1,
    "social_network": "@acmecorp",
    "referrals": 12,
    "revenue": 4500.00,
    "admin_name": "Jane Doe",
    "support_name": "John Smith"
  },
  "notes": [
    {
      "id": 100,
      "comment": "Discussed new referral targets",
      "action": "call",
      "follow_up_name": "Active",
      "scheduled_date": null,
      "created_at": "2024-05-20T09:30:00Z",
      "created_by_name": "Jane Doe"
    }
  ],
  "contacts": [
    {
      "id": 5,
      "name": "Bob Jones",
      "email": "bob@acme.com",
      "phone_code": "+1",
      "phone": "555-0101",
      "position": "Marketing Manager"
    }
  ]
}

POST /partner/{id}/notes

Creates a follow-up note for a registered partner. Also updates partners.follow_up_id if follow is provided.

Path Parameters

ParameterTypeDescription
idnumberPartner ID (maps to company_id in follow_up_comments)

Request Body

json
{
  "follow": 2,
  "action": "call",
  "note": "Reviewed Q2 referral performance. Moving to Active.",
  "scheduled_date": "2024-06-15T10:00:00Z"
}
FieldTypeRequiredDescription
follownumberNoTarget pipeline column ID (updates follow_up_id)
actionstringNocall, whatsapp, email, meeting, sms, other
notestringYesNote text
scheduled_dateISO datetimeNoSchedule a follow-up date

Response

json
{ "success": true }

POST /partner/{id}/contacts

Adds an extra contact to a registered partner. Stored in extra_contacts keyed by company_id.

Path Parameters

ParameterTypeDescription
idnumberPartner ID

Request Body

json
{
  "name": "Alice Lee",
  "email": "alice@acme.com",
  "phone_code": "+1",
  "phone": "555-0102",
  "position": "CEO"
}
FieldTypeRequired
namestringYes
emailstringYes
phone_codestringYes
phonestringYes
positionstringNo

Response

json
{ "success": true, "id": 6 }

PATCH /partner/{id}/data

Upserts partner_follow_up_data for a registered partner (model = 'partner', model_id = {id}).

Path Parameters

ParameterTypeDescription
idnumberPartner ID

Request Body

json
{
  "url": "https://acme.com",
  "partner_type_id": 2,
  "partner_origin_id": 1,
  "rating": 4,
  "locale_id": 1,
  "social_network": "@acmecorp"
}
FieldTypeRequiredConstraints
urlstringYes
partner_type_idnumberYesFK to catalog_partner_types
partner_origin_idnumberYesFK to catalog_partner_origins
ratingnumber (int)Yes1–5
locale_idnumberYesFK to locales
social_networkstringNoMax 150 chars

Response

json
{ "success": true }

POST /partner/prospect

Creates a new partner prospect (prospection_users with type = 3, company_id = NULL). Also inserts an initial follow-up record with source = 'partner'.

Request Body

json
{
  "name": "Maria Garcia",
  "company": "Garcia Logistics",
  "email": "maria@garcia-logistics.com",
  "phone": "5550100",
  "code": "+52",
  "locale": 3
}
FieldTypeRequiredDescription
namestringYesContact person name
companystringYesCompany/organization name
emailstring (email)YesPrimary email
phonestringYesPhone number
codestringYesCountry phone code (e.g. +52)
localenumberYesLocale/country ID
typenumberNoPartner sub-type

Response

json
{ "success": true, "id": 77, "token": "<jwt>" }

Error Codes

CodeDescription
422Duplicate email already exists as a partner prospect

GET /prospects/{id}

Returns detail for a partner prospect. Shared with the main CRM; pass source=partner to signal the Partners CRM context.

Query Parameters

ParameterValue
sourcepartner

Auth: Permission 319 (base CRM access).

Response: Same structure as the main CRM prospect detail. Includes prospection_users fields, notes from prospect_follow_up_comments, and extra_contacts.


POST /prospects/{id}/notes

Creates a follow-up note for a partner prospect. Stored in prospect_follow_up_comments. Also updates prospection_users.follow_up_id.

Auth: Permission 319.

Request Body: Same schema as POST /partner/{id}/notes.


PATCH /prospects/{id}/partner-data

Upserts partner_follow_up_data for a partner prospect (model = 'prospect', model_id = {id}).

Auth: crm-partners.

Request Body: Same schema as PATCH /partner/{id}/data.


Catalog Endpoints

These catalog endpoints are used by the Partners CRM UI to populate dropdowns and Kanban columns.

MethodPathDescription
GET/catalog/tours?type=partnerFollow-up status categories (source = 'partner') for Kanban columns
GET/catalog/partners/typesPartner type options for the Details form
GET/catalog/partners/originsPartner origin/channel options for the Details form

Error Codes

HTTP StatusDescription
400Missing or invalid required fields
401Missing or expired token_admin JWT
403Admin lacks the required permission (crm-partners or 319)
422Business rule violation (e.g., duplicate email on prospect creation)
500Internal server error

Envia Admin