Raw OpenAPI Spec
The complete OpenAPI 3.1 specification for the Booked55 API. Copy this YAML to use with AI assistants, code generators, or your own tooling.
openapi.yaml
openapi: 3.1.0
info:
title: Booked55 API
description: |-
Public API reference for Booked55 — a CRM and sales management platform.
## Authentication
Most endpoints require a Bearer token in the `Authorization` header:
```
Authorization: Bearer <your_api_key>
```
Create an API key in your workspace settings. Keys are prefixed with `vg_` and shown only once at creation.
## Rate Limiting
API requests are rate limited in production and staging. Check response headers for limit details.
version: 1.0.0
contact:
name: Booked55 Support
license:
name: Proprietary
servers:
- url: https://api.booked55.com
description: Production
- url: https://api.stage.booked55.com
description: Staging
tags:
- name: Contacts
description: Contact management and bulk operations
- name: Companies
description: Company records
- name: Events
description: Events and attendance tracking
- name: Tasks
description: Tasks and follow-ups
- name: Pipelines
description: Sales pipelines, stages, and items
- name: Campaigns
description: Marketing and activity campaigns
- name: Email Templates
description: Reusable email templates
- name: Client Types
description: Client classification types
paths:
/contact:
post:
tags:
- Contacts
summary: Create contact
description: Create a new contact in your organization.
security: &ref_1
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ContactCreateRequest"
examples:
basic:
summary: Basic contact
value:
name: Jane Smith
email: [email protected]
phone_numbers:
- label: primary
phone_number: "+15551234567"
tags:
- prospect
company_id: 674a1b2c3d4e5f6789012345
responses:
"200":
description: Created contact
content:
application/json:
schema:
$ref: "#/components/schemas/Contact"
"400": &ref_0
$ref: "#/components/responses/Error"
"401": *ref_0
/contact/{contactId}:
get:
tags:
- Contacts
summary: Get contact
security: *ref_1
parameters:
- name: contactId
in: path
required: true
schema:
type: string
description: Contact ID
responses:
"200":
description: Contact details
content:
application/json:
schema:
$ref: "#/components/schemas/Contact"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Contacts
summary: Update contact
security: *ref_1
parameters:
- name: contactId
in: path
required: true
schema:
type: string
description: Contact ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ContactUpdateRequest"
responses:
"200":
description: Updated contact
content:
application/json:
schema:
$ref: "#/components/schemas/Contact"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Contacts
summary: Delete contact
security: *ref_1
parameters:
- name: contactId
in: path
required: true
schema:
type: string
description: Contact ID
responses:
"200":
description: Contact deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/contacts:
get:
tags:
- Contacts
summary: List contacts
description: Paginated list of contacts with optional filters.
security: *ref_1
parameters:
- name: limit
in: query
required: false
schema:
type: integer
- name: offset
in: query
required: false
schema:
type: integer
- name: source_id
in: query
required: false
schema:
type: string
- name: company_id
in: query
required: false
schema:
type: string
- name: event_id
in: query
required: false
schema:
type: string
- name: assigned_to
in: query
required: false
schema:
type: string
- name: is_client
in: query
required: false
schema:
type: string
enum:
- "true"
- "false"
- name: pipeline_id
in: query
required: false
schema:
type: string
- name: stage_id
in: query
required: false
schema:
type: string
- name: tags
in: query
required: false
schema:
type: string
description: Comma-separated tags
description: Comma-separated tags
- name: sort_by
in: query
required: false
schema:
type: string
- name: sort_order
in: query
required: false
schema:
type: string
enum:
- asc
- desc
responses:
"200":
description: Paginated contacts
content:
application/json:
schema:
$ref: "#/components/schemas/PaginatedContacts"
"401": *ref_0
/contacts/search:
get:
tags:
- Contacts
summary: Search contacts
description: Full-text search across name, email, phone, and company. Minimum query length is 2 characters.
security: *ref_1
parameters:
- name: query
in: query
required: true
schema:
type: string
minLength: 2
description: Search query
- name: limit
in: query
required: false
schema:
type: integer
maximum: 50
default: 20
- name: assigned_to
in: query
required: false
schema:
type: string
responses:
"200":
description: Matching contacts ranked by relevance
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Contact"
examples:
results:
summary: Search results
value:
- id: 674a1b2c3d4e5f6789012345
name: Jane Smith
email: [email protected]
tags:
- prospect
"400": *ref_0
"401": *ref_0
/contact/{contactId}/referrals:
get:
tags:
- Contacts
summary: Get referrals
description: Contacts referred by the given contact.
security: *ref_1
parameters:
- name: contactId
in: path
required: true
schema:
type: string
description: Contact ID
responses:
"200":
description: Referral list
content:
application/json:
schema:
$ref: "#/components/schemas/ReferralsResponse"
"401": *ref_0
"404": *ref_0
/contacts/check-duplicates:
get:
tags:
- Contacts
summary: Check duplicates
description: Check for existing contacts by email or phone.
security: *ref_1
parameters:
- name: email
in: query
required: false
schema:
type: string
format: email
- name: phone
in: query
required: false
schema:
type: string
responses:
"200":
description: Duplicate check result
content:
application/json:
schema:
$ref: "#/components/schemas/DuplicateCheckResponse"
"400": *ref_0
"401": *ref_0
/contacts/bulk-update-tags:
post:
tags:
- Contacts
summary: Bulk update tags
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BulkUpdateTagsRequest"
responses:
"200":
description: Tags updated
content:
application/json:
schema:
type: object
properties:
updated:
type: integer
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/contacts/bulk-add-event:
post:
tags:
- Contacts
summary: Bulk add to event
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BulkAddEventRequest"
responses:
"200":
description: Contacts added to event
content:
application/json:
schema:
type: object
properties:
updated:
type: integer
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/contacts/bulk-update-pipeline:
post:
tags:
- Contacts
summary: Bulk update pipeline
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BulkUpdatePipelineRequest"
responses:
"200":
description: Pipeline updated
content:
application/json:
schema:
type: object
properties:
updated:
type: integer
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/contacts/bulk-delete:
post:
tags:
- Contacts
summary: Bulk delete contacts
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BulkDeleteContactsRequest"
responses:
"200":
description: Contacts deleted
content:
application/json:
schema:
type: object
properties:
deleted:
type: integer
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/contacts/export:
post:
tags:
- Contacts
summary: Export contacts
description: Initiate an async contact export. Returns a request ID to poll for completion.
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ContactExportRequest"
responses:
"202":
description: Export job accepted
content:
application/json:
schema:
type: object
properties:
request_id:
type: string
"400": *ref_0
"401": *ref_0
/company:
post:
tags:
- Companies
summary: Create company
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CompanyCreateRequest"
responses:
"200":
description: Created company
content:
application/json:
schema:
$ref: "#/components/schemas/Company"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/company/{companyId}:
get:
tags:
- Companies
summary: Get company
security: *ref_1
parameters:
- name: companyId
in: path
required: true
schema:
type: string
description: Company ID
responses:
"200":
description: Company details
content:
application/json:
schema:
$ref: "#/components/schemas/Company"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Companies
summary: Update company
security: *ref_1
parameters:
- name: companyId
in: path
required: true
schema:
type: string
description: Company ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CompanyUpdateRequest"
responses:
"200":
description: Updated company
content:
application/json:
schema:
$ref: "#/components/schemas/Company"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Companies
summary: Delete company
security: *ref_1
parameters:
- name: companyId
in: path
required: true
schema:
type: string
description: Company ID
responses:
"200":
description: Company deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/companies:
get:
tags:
- Companies
summary: List companies
security: *ref_1
parameters:
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
- name: sort_by
in: query
required: false
schema:
type: string
enum:
- created_at
- updated_at
- name
- name: sort_order
in: query
required: false
schema:
type: string
enum:
- asc
- desc
responses:
"200":
description: Paginated companies
content:
application/json:
schema:
$ref: "#/components/schemas/PaginatedCompanies"
"401": *ref_0
/companies/search:
get:
tags:
- Companies
summary: Search companies
security: *ref_1
parameters:
- name: search
in: query
required: true
schema:
type: string
description: Search query
responses:
"200":
description: Matching companies
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Company"
"400": *ref_0
"401": *ref_0
/event:
post:
tags:
- Events
summary: Create event
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/EventCreateRequest"
responses:
"200":
description: Created event
content:
application/json:
schema:
$ref: "#/components/schemas/Event"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/event/{eventId}:
get:
tags:
- Events
summary: Get event
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
responses:
"200":
description: Event details
content:
application/json:
schema:
$ref: "#/components/schemas/Event"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Events
summary: Update event
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/EventUpdateRequest"
responses:
"200":
description: Updated event
content:
application/json:
schema:
$ref: "#/components/schemas/Event"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Events
summary: Delete event
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
responses:
"200":
description: Event deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/events:
get:
tags:
- Events
summary: List events
security: *ref_1
responses:
"200":
description: Event list
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Event"
"401": *ref_0
/events/search:
get:
tags:
- Events
summary: Search events
security: *ref_1
parameters:
- name: search
in: query
required: true
schema:
type: string
description: Search query
responses:
"200":
description: Matching events
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Event"
"400": *ref_0
"401": *ref_0
/event/{eventId}/attendance:
get:
tags:
- Events
summary: Get attendance
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
- name: attended_date
in: query
required: false
schema:
type: string
format: date
responses:
"200":
description: Attendance records
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/EventAttendance"
"401": *ref_0
"404": *ref_0
post:
tags:
- Events
summary: Mark attendance
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/MarkAttendanceRequest"
responses:
"201":
description: Attendance marked
content:
application/json:
schema:
$ref: "#/components/schemas/EventAttendance"
"400": *ref_0
"401": *ref_0
/event/{eventId}/attendance/{attendanceId}:
put:
tags:
- Events
summary: Update attendance
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
- name: attendanceId
in: path
required: true
schema:
type: string
description: Attendance ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAttendanceRequest"
responses:
"200":
description: Updated attendance
content:
application/json:
schema:
$ref: "#/components/schemas/EventAttendance"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Events
summary: Remove attendance
security: *ref_1
parameters:
- name: eventId
in: path
required: true
schema:
type: string
description: Event ID
- name: attendanceId
in: path
required: true
schema:
type: string
description: Attendance ID
responses:
"200":
description: Attendance removed
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
message:
type: string
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/task:
post:
tags:
- Tasks
summary: Create task
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TaskCreateRequest"
responses:
"200":
description: Created task
content:
application/json:
schema:
$ref: "#/components/schemas/Task"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/task/{taskId}:
get:
tags:
- Tasks
summary: Get task
security: *ref_1
parameters:
- name: taskId
in: path
required: true
schema:
type: string
description: Task ID
responses:
"200":
description: Task details
content:
application/json:
schema:
$ref: "#/components/schemas/Task"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Tasks
summary: Update task
security: *ref_1
parameters:
- name: taskId
in: path
required: true
schema:
type: string
description: Task ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TaskUpdateRequest"
responses:
"200":
description: Updated task
content:
application/json:
schema:
$ref: "#/components/schemas/Task"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Tasks
summary: Delete task
security: *ref_1
parameters:
- name: taskId
in: path
required: true
schema:
type: string
description: Task ID
- name: delete_reason
in: query
required: true
schema:
type: string
enum: &ref_5
- not_relevant
- contacted_too_many_times
- removing_contact
- moving_contact
- other
- name: delete_other_reason
in: query
required: false
schema:
type: string
responses:
"200":
description: Task deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/tasks:
get:
tags:
- Tasks
summary: List tasks
security: *ref_1
parameters:
- name: assigned_to
in: query
required: false
schema:
type: string
- name: contact_id
in: query
required: false
schema:
type: string
- name: status
in: query
required: false
schema:
type: string
enum: &ref_3
- active
- completed
- name: limit
in: query
required: false
schema:
type: integer
maximum: 500
default: 500
- name: offset
in: query
required: false
schema:
type: integer
default: 0
- name: sort_by
in: query
required: false
schema:
type: string
enum:
- date
- created_at
- status
- activity_type
- description
- name: sort_order
in: query
required: false
schema:
type: string
enum:
- asc
- desc
responses:
"200":
description: Paginated tasks
content:
application/json:
schema:
$ref: "#/components/schemas/PaginatedTasks"
"401": *ref_0
/tasks/search:
get:
tags:
- Tasks
summary: Search tasks
security: *ref_1
parameters:
- name: q
in: query
required: true
schema:
type: string
minLength: 1
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
default: 50
responses:
"200":
description: Matching tasks
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Task"
"400": *ref_0
"401": *ref_0
/tasks/bulk-delete:
post:
tags:
- Tasks
summary: Bulk delete tasks
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BulkDeleteTasksRequest"
responses:
"200":
description: Tasks deleted
content:
application/json:
schema:
type: object
properties:
deleted:
type: integer
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/tasks/bulk-complete:
post:
tags:
- Tasks
summary: Bulk complete tasks
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BulkCompleteTasksRequest"
responses:
"200":
description: Tasks completed
content:
application/json:
schema:
type: object
properties:
completed:
type: integer
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipeline:
post:
tags:
- Pipelines
summary: Create pipeline
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineCreateRequest"
responses:
"200":
description: Created pipeline
content:
application/json:
schema:
$ref: "#/components/schemas/Pipeline"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipeline/{pipelineId}:
get:
tags:
- Pipelines
summary: Get pipeline
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
responses:
"200":
description: Pipeline details
content:
application/json:
schema:
$ref: "#/components/schemas/Pipeline"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Pipelines
summary: Update pipeline
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineUpdateRequest"
responses:
"200":
description: Updated pipeline
content:
application/json:
schema:
$ref: "#/components/schemas/Pipeline"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Pipelines
summary: Delete pipeline
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
responses:
"200":
description: Pipeline deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipelines:
get:
tags:
- Pipelines
summary: List pipelines
security: *ref_1
responses:
"200":
description: Pipeline list
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Pipeline"
"401": *ref_0
/pipeline/{pipelineId}/stage:
post:
tags:
- Pipelines
summary: Create stage
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineStageCreateRequest"
responses:
"200":
description: Created stage
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineStage"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipeline/{pipelineId}/stages:
get:
tags:
- Pipelines
summary: List stages
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
responses:
"200":
description: Stage list
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/PipelineStage"
"401": *ref_0
/pipeline/{pipelineId}/stage/{stageId}:
get:
tags:
- Pipelines
summary: Get stage
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
- name: stageId
in: path
required: true
schema:
type: string
description: Stage ID
responses:
"200":
description: Stage details
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineStage"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Pipelines
summary: Update stage
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
- name: stageId
in: path
required: true
schema:
type: string
description: Stage ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineStageUpdateRequest"
responses:
"200":
description: Updated stage
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineStage"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Pipelines
summary: Delete stage
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
- name: stageId
in: path
required: true
schema:
type: string
description: Stage ID
responses:
"200":
description: Stage deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipeline/{pipelineId}/item:
post:
tags:
- Pipelines
summary: Create pipeline item
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineItemCreateRequest"
responses:
"200":
description: Created pipeline item
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineItem"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipeline/{pipelineId}/items:
get:
tags:
- Pipelines
summary: List pipeline items
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
responses:
"200":
description: Pipeline items
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/PipelineItem"
"401": *ref_0
/pipeline/{pipelineId}/item/{pipelineItemId}:
put:
tags:
- Pipelines
summary: Update pipeline item
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
- name: pipelineItemId
in: path
required: true
schema:
type: string
description: Pipeline item ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineItemUpdateRequest"
responses:
"200":
description: Updated pipeline item
content:
application/json:
schema:
$ref: "#/components/schemas/PipelineItem"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Pipelines
summary: Delete pipeline item
security: *ref_1
parameters:
- name: pipelineId
in: path
required: true
schema:
type: string
description: Pipeline ID
- name: pipelineItemId
in: path
required: true
schema:
type: string
description: Pipeline item ID
responses:
"200":
description: Pipeline item deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/pipeline-items/search:
get:
tags:
- Pipelines
summary: Search pipeline items
security: *ref_1
parameters:
- name: contact_id
in: query
required: false
schema:
type: string
- name: pipeline_id
in: query
required: false
schema:
type: string
- name: stage_id
in: query
required: false
schema:
type: string
- name: assigned_to
in: query
required: false
schema:
type: string
- name: status
in: query
required: false
schema:
type: string
responses:
"200":
description: Matching pipeline items
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/PipelineItem"
"401": *ref_0
/campaign:
post:
tags:
- Campaigns
summary: Create campaign
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CampaignCreateRequest"
responses:
"200":
description: Created campaign
content:
application/json:
schema:
$ref: "#/components/schemas/Campaign"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/campaign/{campaignId}:
get:
tags:
- Campaigns
summary: Get campaign
security: *ref_1
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
description: Campaign ID
responses:
"200":
description: Campaign details
content:
application/json:
schema:
$ref: "#/components/schemas/Campaign"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Campaigns
summary: Update campaign
security: *ref_1
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
description: Campaign ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CampaignUpdateRequest"
responses:
"200":
description: Updated campaign
content:
application/json:
schema:
$ref: "#/components/schemas/Campaign"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Campaigns
summary: Delete campaign
security: *ref_1
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
description: Campaign ID
responses:
"200":
description: Campaign deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/campaigns:
get:
tags:
- Campaigns
summary: List campaigns
security: *ref_1
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
default: 50
- name: offset
in: query
required: false
schema:
type: integer
default: 0
- name: status
in: query
required: false
schema:
type: string
enum:
- pending
- contact_filtering
- contact_filtered
- running
- completed
- error
responses:
"200":
description: Paginated campaigns
content:
application/json:
schema:
$ref: "#/components/schemas/PaginatedCampaigns"
"401": *ref_0
/campaign/{campaignId}/launch:
post:
tags:
- Campaigns
summary: Launch campaign
security: *ref_1
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
description: Campaign ID
responses:
"200":
description: Campaign launched
content:
application/json:
schema:
$ref: "#/components/schemas/Campaign"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/campaign/{campaignId}/contacts:
get:
tags:
- Campaigns
summary: Get campaign contacts
security: *ref_1
parameters:
- name: campaignId
in: path
required: true
schema:
type: string
description: Campaign ID
responses:
"200":
description: Campaign contacts
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Contact"
"401": *ref_0
"404": *ref_0
/email-template:
post:
tags:
- Email Templates
summary: Create template
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/EmailTemplateCreateRequest"
responses:
"200":
description: Created template
content:
application/json:
schema:
$ref: "#/components/schemas/EmailTemplate"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/email-template/{templateId}:
get:
tags:
- Email Templates
summary: Get template
security: *ref_1
parameters:
- name: templateId
in: path
required: true
schema:
type: string
description: Template ID
responses:
"200":
description: Template details
content:
application/json:
schema:
$ref: "#/components/schemas/EmailTemplate"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Email Templates
summary: Update template
security: *ref_1
parameters:
- name: templateId
in: path
required: true
schema:
type: string
description: Template ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/EmailTemplateUpdateRequest"
responses:
"200":
description: Updated template
content:
application/json:
schema:
$ref: "#/components/schemas/EmailTemplate"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Email Templates
summary: Delete template
security: *ref_1
parameters:
- name: templateId
in: path
required: true
schema:
type: string
description: Template ID
responses:
"200":
description: Template deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/email-templates:
get:
tags:
- Email Templates
summary: List templates
security: *ref_1
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
default: 50
- name: offset
in: query
required: false
schema:
type: integer
default: 0
responses:
"200":
description: Paginated templates
content:
application/json:
schema:
$ref: "#/components/schemas/PaginatedEmailTemplates"
"401": *ref_0
/email-templates/search:
get:
tags:
- Email Templates
summary: Search templates
security: *ref_1
parameters:
- name: query
in: query
required: true
schema:
type: string
minLength: 2
- name: limit
in: query
required: false
schema:
type: integer
maximum: 50
default: 20
responses:
"200":
description: Matching templates
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/EmailTemplate"
"401": *ref_0
/client-type:
post:
tags:
- Client Types
summary: Create client type
security: *ref_1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ClientTypeCreateRequest"
responses:
"200":
description: Created client type
content:
application/json:
schema:
$ref: "#/components/schemas/ClientType"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/client-type/{clientTypeId}:
get:
tags:
- Client Types
summary: Get client type
security: *ref_1
parameters:
- name: clientTypeId
in: path
required: true
schema:
type: string
description: Client type ID
responses:
"200":
description: Client type details
content:
application/json:
schema:
$ref: "#/components/schemas/ClientType"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
put:
tags:
- Client Types
summary: Update client type
security: *ref_1
parameters:
- name: clientTypeId
in: path
required: true
schema:
type: string
description: Client type ID
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ClientTypeUpdateRequest"
responses:
"200":
description: Updated client type
content:
application/json:
schema:
$ref: "#/components/schemas/ClientType"
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
delete:
tags:
- Client Types
summary: Delete client type
security: *ref_1
parameters:
- name: clientTypeId
in: path
required: true
schema:
type: string
description: Client type ID
responses:
"200":
description: Client type deleted
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
"400": *ref_0
"401": *ref_0
"403": *ref_0
"404": *ref_0
/client-types:
get:
tags:
- Client Types
summary: List client types
security: *ref_1
responses:
"200":
description: Client type list
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/ClientType"
"401": *ref_0
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: vg_ API key
description: Bearer token in Authorization header
responses:
Error:
description: Error response
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
schemas:
Error:
type: object
properties:
error:
type: object
properties:
message:
type: string
code:
type: string
Pagination:
type: object
properties:
limit:
type: integer
offset:
type: integer
total:
type: integer
has_more:
type: boolean
PaginatedContacts:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Contact"
pagination:
$ref: "#/components/schemas/Pagination"
PaginatedCompanies:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Company"
pagination:
$ref: "#/components/schemas/Pagination"
PaginatedTasks:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Task"
pagination:
$ref: "#/components/schemas/Pagination"
PaginatedCampaigns:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Campaign"
pagination:
$ref: "#/components/schemas/Pagination"
PaginatedEmailTemplates:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/EmailTemplate"
pagination:
$ref: "#/components/schemas/Pagination"
ContactBio:
type: object
description: Professional and business-relevant bio fields only
properties:
personal_info:
type: object
properties:
nick_name:
type: string
first_name:
type: string
last_name:
type: string
middle_name:
type: string
suffix:
type: string
birth_date:
oneOf:
- type: string
maxLength: 0
- type: string
format: date
birth_place:
type: string
nationality:
type: string
social_media:
type: object
properties:
facebook:
type: string
format: uri
twitter:
type: string
format: uri
instagram:
type: string
format: uri
linkedin:
type: string
format: uri
youtube:
type: string
format: uri
website:
type: string
format: uri
tiktok:
type: string
format: uri
others:
type: array
items:
type: string
hobbies:
type: array
items:
type: object
properties:
name:
type: string
description:
type: string
interest_score:
type: number
minimum: 0
maximum: 100
education:
type: array
items:
type: object
properties:
school:
type: string
degree:
type: string
duration:
type: string
start_date:
type: string
format: date
end_date:
type: string
format: date
work_history:
type: array
items:
type: object
properties:
company:
type: string
title:
type: string
duration:
type: string
start_date:
type: string
format: date
end_date:
type: string
format: date
location:
type: object
properties:
city:
type: string
state:
type: string
country:
type: string
zip_code:
type: string
languages:
type: array
items:
type: object
properties:
categories:
type: array
items:
type: string
primary:
type: boolean
proficiency:
type: number
minimum: 0
maximum: 100
interests:
type: object
properties:
sports:
type: object
music:
type: object
movies:
type: object
books:
type: object
others:
type: array
items:
type: object
ContactMeetingDetails:
type: object
properties:
conversation_summary:
type: array
items: &ref_2
type: object
properties:
summary:
type: string
timestamp:
oneOf:
- type: string
maxLength: 0
- type: string
format: date-time
occupation_learnings:
type: array
items: *ref_2
outside_work_interests:
type: array
items: *ref_2
dream:
type: array
items: *ref_2
ContactFields:
type: object
properties:
email:
oneOf:
- type: string
maxLength: 0
- type: string
format: email
name:
type: string
phone_numbers:
type: array
items:
type: object
properties:
label:
type: string
enum:
- primary
- mobile
- work
- home
- fax
- other
phone_number:
type: string
required:
- phone_number
external_id:
type: string
nullable: true
source_id:
type: string
company_id:
type: string
nullable: true
client_type_id:
type: string
is_client:
type: boolean
mark_as_client_on:
type: string
format: date-time
nullable: true
owned_by_id:
type: string
assigned_to_id:
type: string
referred_by:
type: string
nullable: true
referred_by_on:
type: string
format: date-time
nullable: true
event_id:
type: string
event_ids:
type: array
items:
type: string
attached_files:
type: array
items:
type: string
tags:
type: array
items:
type: string
gender:
type: string
intension:
type: string
enum:
- sell-right-now
- sell-later
- networking
- other
- ""
describe_intension_reasoning:
type: string
met_at:
type: string
met_at_description:
type: string
meeting_details:
$ref: "#/components/schemas/ContactMeetingDetails"
bio:
$ref: "#/components/schemas/ContactBio"
ContactCreateRequest:
allOf:
- $ref: "#/components/schemas/ContactFields"
- type: object
required:
- name
ContactUpdateRequest:
$ref: "#/components/schemas/ContactFields"
Contact:
allOf:
- $ref: "#/components/schemas/ContactFields"
- type: object
properties:
id:
type: string
org_id:
type: string
email_verified:
type: boolean
company:
type: object
nullable: true
properties:
id:
type: string
name:
type: string
email:
type: string
phone:
type: string
website:
type: string
assigned_to:
type: string
nullable: true
owned_by:
type: string
nullable: true
referred_by_contact:
type: object
nullable: true
properties:
id:
type: string
name:
type: string
email:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
ReferralsResponse:
type: object
properties:
total:
type: integer
referrals:
type: array
items:
$ref: "#/components/schemas/Contact"
DuplicateCheckResponse:
type: object
properties:
has_duplicates:
type: boolean
duplicates:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
email:
type: string
BulkUpdateTagsRequest:
type: object
required:
- contact_ids
- tags
properties:
contact_ids:
type: array
items:
type: string
minItems: 1
tags:
type: array
items:
type: string
minItems: 1
action:
type: string
enum:
- add
- remove
default: add
BulkAddEventRequest:
type: object
required:
- contact_ids
- event_id
properties:
contact_ids:
type: array
items:
type: string
minItems: 1
event_id:
type: string
BulkUpdatePipelineRequest:
type: object
required:
- contact_ids
- pipeline_id
- stage_id
properties:
contact_ids:
type: array
items:
type: string
minItems: 1
pipeline_id:
type: string
stage_id:
type: string
BulkDeleteContactsRequest:
type: object
required:
- contact_ids
properties:
contact_ids:
type: array
items:
type: string
minItems: 1
ContactFilters:
type: object
properties:
source_id:
type: string
company_id:
type: string
created_by:
type: string
assigned_to:
type: string
is_client:
type: boolean
event_id:
type: string
pipeline_id:
type: string
stage_id:
type: string
no_pipeline:
type: boolean
no_event:
type: boolean
missing_email:
type: boolean
missing_phone:
type: boolean
tags:
type: array
items:
type: string
ContactExportRequest:
type: object
properties:
selection_type:
type: string
enum:
- contact_list
- filter
contact_ids:
type: array
items:
type: string
contact_filters:
$ref: "#/components/schemas/ContactFilters"
excluded_contact_ids:
type: array
items:
type: string
CompanyFields:
type: object
properties:
name:
type: string
email:
oneOf:
- type: string
maxLength: 0
- type: string
format: email
phone:
type: string
fax:
type: string
website:
type: string
linkedin:
type: string
location:
type: object
properties:
address:
type: string
city:
type: string
state:
type: string
country:
type: string
zip:
type: string
industries:
type: array
items:
type: string
company_type:
type: string
enum:
- public
- private
- government
- ""
employee_range:
type: object
properties:
min:
type: number
max:
type: number
revenue:
type: number
minimum: 0
external_id:
type: string
nullable: true
description:
type: string
notes:
type: string
assigned_to:
type: string
CompanyCreateRequest:
allOf:
- $ref: "#/components/schemas/CompanyFields"
- type: object
required:
- name
CompanyUpdateRequest:
$ref: "#/components/schemas/CompanyFields"
Company:
allOf:
- $ref: "#/components/schemas/CompanyFields"
- type: object
properties:
id:
type: string
org_id:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
EventFields:
type: object
properties:
name:
type: string
description:
type: string
event_type:
type: string
enum:
- single-day
- multi-day
- recurring
- ""
date:
type: object
required:
- start
properties:
start:
type: string
format: date
end:
type: string
format: date
recurrence:
type: object
properties:
frequency:
type: string
enum:
- daily
- weekly
- monthly
- yearly
- ""
interval:
type: integer
minimum: 1
days_of_week:
type: array
items:
type: integer
minimum: 0
maximum: 6
day_of_month:
type: integer
nullable: true
ends_on:
type: string
nullable: true
occurrences:
type: integer
nullable: true
location:
type: string
cost:
type: number
minimum: 0
assigned_to:
type: string
EventCreateRequest:
allOf:
- $ref: "#/components/schemas/EventFields"
- type: object
required:
- name
- date
EventUpdateRequest:
$ref: "#/components/schemas/EventFields"
Event:
allOf:
- $ref: "#/components/schemas/EventFields"
- type: object
properties:
id:
type: string
org_id:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
EventAttendance:
type: object
properties:
id:
type: string
event_id:
type: string
user_id:
type: string
attended_date:
type: string
format: date
notes:
type: string
marked_by:
type: string
created_at:
type: string
format: date-time
MarkAttendanceRequest:
type: object
required:
- attended_date
properties:
attended_date:
type: string
format: date
description: Date in YYYY-MM-DD format
notes:
type: string
UpdateAttendanceRequest:
type: object
properties:
notes:
type: string
TaskCreateRequest:
type: object
required:
- description
- date
- activity_type
properties:
company_id:
type: string
contact_id:
type: string
pipeline_item_id:
type: string
description:
type: string
activity_type:
type: string
enum: &ref_4
- call
- sms
- email
- marketing_email
- social_engagement
- meeting
- visit
- lunch
- dinner
- recreation
- market_research
- event_and_networking
- brand_visibility
- referral_expansion
- partnership_ecosystem
- webinar
- group_video_calls
- one_to_many_outreach
- event_register
- event_attendance
- follow_up
- calendar_event
- note
- contact_created
- contact_updated
- pipeline_item_created
- pipeline_item_updated
- event_created
- company_created
- task
default: task
date:
type: string
format: date-time
assigned_to:
type: string
status:
type: string
enum: *ref_3
default: active
TaskUpdateRequest:
type: object
properties:
company_id:
type: string
contact_id:
type: string
pipeline_item_id:
type: string
description:
type: string
activity_type:
type: string
enum: *ref_4
date:
oneOf:
- type: string
maxLength: 0
- type: string
format: date-time
assigned_to:
type: string
status:
type: string
enum: *ref_3
task_result_description:
type: string
Task:
type: object
properties:
id:
type: string
org_id:
type: string
description:
type: string
activity_type:
type: string
enum: *ref_4
date:
type: string
format: date-time
status:
type: string
enum: *ref_3
contact_id:
type: string
company_id:
type: string
pipeline_item_id:
type: string
assigned_to:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
BulkDeleteTasksRequest:
type: object
required:
- task_ids
- delete_reason
properties:
task_ids:
type: array
items:
type: string
minItems: 1
delete_reason:
type: string
enum: *ref_5
delete_other_reason:
type: string
BulkCompleteTasksRequest:
type: object
required:
- task_ids
properties:
task_ids:
type: array
items:
type: string
minItems: 1
PipelineCreateRequest:
type: object
required:
- name
properties:
name:
type: string
description:
type: string
settings:
type: object
PipelineUpdateRequest:
type: object
properties:
name:
type: string
description:
type: string
settings:
type: object
Pipeline:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
order:
type: integer
settings:
type: object
org_id:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
PipelineStageCreateRequest:
type: object
required:
- name
- order
properties:
name:
type: string
order:
type: number
markAsClient:
type: boolean
generateActivityOnEntry:
type: boolean
activityFrequency:
type: object
automation:
type: object
PipelineStageUpdateRequest:
$ref: "#/components/schemas/PipelineStageCreateRequest"
PipelineStage:
type: object
properties:
id:
type: string
pipeline_id:
type: string
name:
type: string
order:
type: number
markAsClient:
type: boolean
generateActivityOnEntry:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
PipelineItemCreateRequest:
type: object
required:
- contact_id
- pipeline_id
- stage_id
properties:
contact_id:
type: string
pipeline_id:
type: string
stage_id:
type: string
status:
type: string
notes:
type: string
assigned_to:
type: string
value:
type: number
minimum: 0
client_type_id:
type: string
PipelineItemUpdateRequest:
$ref: "#/components/schemas/PipelineItemCreateRequest"
PipelineItem:
type: object
properties:
id:
type: string
contact_id:
type: string
pipeline_id:
type: string
stage_id:
type: string
status:
type: string
notes:
type: string
value:
type: number
assigned_to:
type: string
org_id:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
CampaignFields:
type: object
properties:
name:
type: string
description:
type: string
campaign_type:
type: string
enum:
- daily_activity
- marketing_email
date:
type: string
format: date-time
email_template_id:
type: string
email_subject:
type: string
email_body:
type: string
selection_type:
type: string
enum:
- contact_list
- filter
- ""
contact_list:
type: array
items:
oneOf:
- type: string
- type: object
required:
- contact_id
properties:
contact_id:
type: string
task_id:
type: string
contact_filters:
$ref: "#/components/schemas/ContactFilters"
excluded_contact_ids:
type: array
items:
type: string
CampaignCreateRequest:
allOf:
- $ref: "#/components/schemas/CampaignFields"
- type: object
required:
- name
CampaignUpdateRequest:
allOf:
- $ref: "#/components/schemas/CampaignFields"
- type: object
properties:
status:
type: string
enum:
- pending
- contact_filtering
- contact_filtered
- running
- completed
- error
error:
type: string
nullable: true
Campaign:
allOf:
- $ref: "#/components/schemas/CampaignUpdateRequest"
- type: object
properties:
id:
type: string
org_id:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
EmailTemplateFields:
type: object
properties:
name:
type: string
description:
type: string
subject:
type: string
body:
type: string
content_type:
type: string
enum:
- visual
- html
- unlayer
design_json:
type: object
attachments:
type: array
items:
type: object
properties:
file_id:
type: string
filename:
type: string
cid:
type: string
is_inline:
type: boolean
assigned_to:
type: string
EmailTemplateCreateRequest:
allOf:
- $ref: "#/components/schemas/EmailTemplateFields"
- type: object
required:
- name
- subject
EmailTemplateUpdateRequest:
$ref: "#/components/schemas/EmailTemplateFields"
EmailTemplate:
allOf:
- $ref: "#/components/schemas/EmailTemplateFields"
- type: object
properties:
id:
type: string
org_id:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
ClientTypeCreateRequest:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
description:
type: string
ClientTypeUpdateRequest:
$ref: "#/components/schemas/ClientTypeCreateRequest"
ClientType:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
org_id:
type: string
created_at:
type: string
format: date-time