openapi: 3.0.3 info: title: Revert Unified Accounting CRM Contacts API description: Revert is an open-source unified API platform that makes it easy to build integrations with third-party services including CRMs (Salesforce, HubSpot, Zoho CRM, Pipedrive, Close CRM), ticketing systems (Jira, Asana), accounting (Xero, QuickBooks), chat (Slack, Microsoft Teams, Discord), and more — all through a single standardized API. version: 1.0.0 contact: url: https://www.revert.dev/ license: name: AGPL-3.0 url: https://github.com/revertinc/revert/blob/main/LICENSE.txt servers: - url: https://api.revert.dev description: Production - url: https://api-staging.revert.dev description: Staging security: - ApiTokenAuth: [] tags: - name: CRM Contacts description: Unified CRM contact operations across Salesforce, HubSpot, Zoho, Pipedrive, and Close paths: /crm/contacts/{id}: get: operationId: getCrmContact summary: Get CRM Contact description: Get details of a specific CRM contact by ID tags: - CRM Contacts parameters: - name: id in: path required: true schema: type: string - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/ApiVersion' - $ref: '#/components/parameters/Fields' - $ref: '#/components/parameters/Associations' responses: '200': description: Contact details content: application/json: schema: type: object properties: status: $ref: '#/components/schemas/ResponseStatus' result: $ref: '#/components/schemas/Contact' '401': description: Unauthorized '404': description: Not found patch: operationId: updateCrmContact summary: Update CRM Contact description: Update an existing CRM contact tags: - CRM Contacts parameters: - name: id in: path required: true schema: type: string - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/ApiVersion' requestBody: required: true content: application/json: schema: allOf: - $ref: '#/components/schemas/Contact' - type: object properties: additional: type: object responses: '200': description: Contact updated '401': description: Unauthorized /crm/contacts: get: operationId: getCrmContacts summary: List CRM Contacts description: Get all CRM contacts with pagination tags: - CRM Contacts parameters: - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/ApiVersion' - $ref: '#/components/parameters/Fields' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Cursor' - $ref: '#/components/parameters/Associations' responses: '200': description: List of contacts content: application/json: schema: allOf: - $ref: '#/components/schemas/PaginatedResponse' - type: object properties: results: type: array items: $ref: '#/components/schemas/Contact' '401': description: Unauthorized post: operationId: createCrmContact summary: Create CRM Contact description: Create a new CRM contact tags: - CRM Contacts parameters: - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/ApiVersion' requestBody: required: true content: application/json: schema: allOf: - $ref: '#/components/schemas/Contact' - type: object properties: additional: type: object responses: '200': description: Contact created '401': description: Unauthorized /crm/contacts/search: post: operationId: searchCrmContacts summary: Search CRM Contacts description: Search CRM contacts by criteria tags: - CRM Contacts parameters: - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/ApiVersion' - $ref: '#/components/parameters/Fields' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Cursor' requestBody: required: true content: application/json: schema: type: object properties: searchCriteria: type: object responses: '200': description: Search results content: application/json: schema: allOf: - $ref: '#/components/schemas/PaginatedResponse' - type: object properties: results: type: array items: $ref: '#/components/schemas/Contact' '401': description: Unauthorized /crm/proxy: post: operationId: crmProxy summary: CRM Proxy Request description: Make a direct proxy request to the underlying CRM provider API tags: - CRM Contacts parameters: - $ref: '#/components/parameters/TenantId' - $ref: '#/components/parameters/ApiVersion' requestBody: required: true content: application/json: schema: type: object properties: method: type: string path: type: string body: type: object responses: '200': description: Proxy response '401': description: Unauthorized components: schemas: ResponseStatus: type: string enum: - ok - error PaginatedResponse: type: object properties: status: $ref: '#/components/schemas/ResponseStatus' next: type: string description: Cursor for next page previous: type: string description: Cursor for previous page Contact: type: object properties: id: type: string firstName: type: string lastName: type: string email: type: string phone: type: string company: type: string title: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time remoteId: type: string additional: type: object description: Non-unified fields from the source CRM parameters: Cursor: name: cursor in: query required: false schema: type: string description: Pagination cursor for next/previous page Fields: name: fields in: query required: false schema: type: string description: Comma-separated list of fields to include in response PageSize: name: pageSize in: query required: false schema: type: string description: Number of results per page Associations: name: associations in: query required: false schema: type: string description: Comma-separated list of associated objects to include TenantId: name: x-revert-t-id in: header required: true schema: type: string description: The unique customer id used when the customer linked their account ApiVersion: name: x-api-version in: header required: false schema: type: string description: Optional Revert API version. Defaults to latest if missing securitySchemes: ApiTokenAuth: type: apiKey in: header name: x-revert-api-token description: Your official API key for accessing Revert APIs