Reonic Contacts API

External people you interact with, such as customers or leads. Not to be confused with [**Users**](#tag/users), which represent members of your workspace.

Operations 4

GET /contacts List contacts #
GET /contacts/{contactId} Get contact #
POST /contacts/create Create contact #
POST /contacts/{contactId}/update Update contact #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/reonic-contacts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

reonic-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Reonic REST Api v3 Contacts API
  description: The Reonic REST API v3 provides programmatic access to create and manage resources.
  version: 3.2.0
  contact:
    email: kontakt@reonic.de
    url: https://reonic.com
    name: Reonic GmbH
servers:
- url: '{apiBaseUrl}/rest/v3/'
security:
- X-Authorization: []
tags:
- name: Contacts
  description: External people you interact with, such as customers or leads. Not to be confused with **Users**, which represent members of your workspace.
paths:
  /contacts:
    get:
      summary: List contacts
      description: 'List contacts for the authenticated client in a paginated format.


        **Allowed API keys:** Read-only, Read and Write'
      tags:
      - Contacts
      parameters:
      - schema:
          type: string
          format: email
          description: Return only contacts whose primary or secondary email equals this address (case-insensitive exact match). Useful for matching an incoming email to a contact.
          example: jane.doe@example.com
        required: false
        description: Return only contacts whose primary or secondary email equals this address (case-insensitive exact match). Useful for matching an incoming email to a contact.
        name: email
        in: query
      - schema:
          type: string
          pattern: ^\+[1-9]\d{1,14}$
          description: Return only contacts whose phone or mobile number exactly matches this number. Must be in E.164 format (e.g. +491511234567). Useful for matching an incoming call to a contact. Numbers not stored in E.164 format cannot be matched by this filter.
          example: '+491511234567'
        required: false
        description: Return only contacts whose phone or mobile number exactly matches this number. Must be in E.164 format (e.g. +491511234567). Useful for matching an incoming call to a contact. Numbers not stored in E.164 format cannot be matched by this filter.
        name: phoneNumber
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Filter records where createdAt is after this datetime (exclusive)
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Filter records where createdAt is after this datetime (exclusive)
        name: createdAt.gt
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Filter records where createdAt is before this datetime (exclusive)
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Filter records where createdAt is before this datetime (exclusive)
        name: createdAt.lt
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Filter records where updatedAt is after this datetime (exclusive)
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Filter records where updatedAt is after this datetime (exclusive)
        name: updatedAt.gt
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Filter records where updatedAt is before this datetime (exclusive)
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Filter records where updatedAt is before this datetime (exclusive)
        name: updatedAt.lt
        in: query
      - schema:
          type: integer
          minimum: 1
          default: 1
          description: 'Page number, starting from 1. Default: 1.'
        required: false
        description: 'Page number, starting from 1. Default: 1.'
        name: page
        in: query
      - schema:
          type: integer
          minimum: 1
          maximum: 200
          default: 50
          description: 'Number of items per page. Default: 50. Max: 200.'
        required: false
        description: 'Number of items per page. Default: 50. Max: 200.'
        name: itemsPerPage
        in: query
      - schema:
          type:
          - string
          - 'null'
          default: -createdAt
          description: 'Sort order. Use field names for ascending (e.g. "createdAt"), minus sign for descending (e.g. "-createdAt"). Chain with commas (e.g. "createdAt,editedAt"). Sortable fields: fullName, createdAt. Defaults to -createdAt.'
          examples:
          - -createdAt
          - createdAt,-fullName
        required: false
        description: 'Sort order. Use field names for ascending (e.g. "createdAt"), minus sign for descending (e.g. "-createdAt"). Chain with commas (e.g. "createdAt,editedAt"). Sortable fields: fullName, createdAt. Defaults to -createdAt.'
        name: sort
        in: query
      - schema:
          type: string
          example: no-cache
        required: false
        name: Reonic-Cache-Control
        in: header
        description: Set to 'no-cache' to bypass the 1-hour response cache and force a fresh read. The fresh response is then written back to the cache for subsequent callers. Forced refreshes count against the uncached rate-limit bucket (30/min); only cache hits count against the cached bucket (500/min).
      responses:
        '200':
          description: Paginated list of contacts
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                        minimum: 1
                        description: Current page number
                      perPage:
                        type: integer
                        minimum: 1
                        description: Number of items per page
                      total:
                        type: integer
                        minimum: 0
                        description: Total number of items across all pages
                      totalPages:
                        type: integer
                        minimum: 1
                      next:
                        type:
                        - string
                        - 'null'
                        description: Path to the next page, or null if there is no next page
                      prev:
                        type:
                        - string
                        - 'null'
                        description: Path to the previous page, or null if there is no previous page
                    required:
                    - page
                    - perPage
                    - total
                    - totalPages
                    - next
                    - prev
                required:
                - data
                - pagination
      operationId: getContacts
      x-operation-id-source: derived
  /contacts/{contactId}:
    get:
      summary: Get contact
      description: 'Get a single contact by its ID.


        **Allowed API keys:** Read-only, Read and Write'
      tags:
      - Contacts
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: contactId
        in: path
      - schema:
          type: string
          example: no-cache
        required: false
        name: Reonic-Cache-Control
        in: header
        description: Set to 'no-cache' to bypass the 1-hour response cache and force a fresh read. The fresh response is then written back to the cache for subsequent callers. Forced refreshes count against the uncached rate-limit bucket (30/min); only cache hits count against the cached bucket (500/min).
      responses:
        '200':
          description: The contact
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactDetail'
      operationId: getContactsByContactId
      x-operation-id-source: derived
  /contacts/create:
    post:
      summary: Create contact
      description: 'Create a new contact.


        **Allowed API keys:** Read and Write, Lead creation only'
      tags:
      - Contacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreate'
      responses:
        '201':
          description: The created contact
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactDetail'
      operationId: postContactsCreate
      x-operation-id-source: derived
  /contacts/{contactId}/update:
    post:
      summary: Update contact
      description: 'Update a contact by its ID.


        **Allowed API keys:** Read and Write'
      tags:
      - Contacts
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: contactId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  minLength: 1
                  maxLength: 1000
                lastName:
                  type: string
                  minLength: 1
                  maxLength: 1000
                salutation:
                  type:
                  - string
                  - 'null'
                  enum:
                  - Female
                  - Male
                  - Diverse
                  - Family
                  - Business
                  - null
                primaryEmail:
                  type:
                  - string
                  - 'null'
                  maxLength: 1000
                  format: email
                secondaryEmail:
                  type:
                  - string
                  - 'null'
                  maxLength: 1000
                  format: email
                  description: Alternative email address
                mobile:
                  type:
                  - string
                  - 'null'
                  maxLength: 100
                  description: Mobile phone number
                phone:
                  type:
                  - string
                  - 'null'
                  maxLength: 100
                  description: Landline phone number
                phoneReachability:
                  type:
                  - string
                  - 'null'
                  enum:
                  - Morning
                  - Afternoon
                  - Evening
                  - Fulltime
                  - WeekendOnly
                  - EmailOnly
                  - null
                address:
                  type: object
                  properties:
                    street:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                    houseNumber:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                    city:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                    postcode:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                    country:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                  additionalProperties: false
                integrations:
                  type: object
                  properties:
                    bitrixId:
                      type:
                      - integer
                      - 'null'
                      minimum: 1
                      maximum: 9007199254740991
                    hubspotId:
                      type:
                      - string
                      - 'null'
                      format: uuid
                    pdsId:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                    photovateId:
                      type:
                      - string
                      - 'null'
                      maxLength: 1000
                    pipedriveId:
                      type:
                      - integer
                      - 'null'
                      minimum: 1
                      maximum: 9007199254740991
                    weclappId:
                      type:
                      - string
                      - 'null'
                      format: uuid
                  additionalProperties: false
                  description: IDs of this contact in third-party systems
              additionalProperties: false
      responses:
        '200':
          description: The updated contact
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactDetail'
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                required:
                - message
      operationId: postContactsByContactIdUpdate
      x-operation-id-source: derived
components:
  schemas:
    ContactDetail:
      allOf:
      - $ref: '#/components/schemas/Contact'
      - type: object
        properties:
          commercialProjectIds:
            type: array
            items:
              type: string
              format: uuid
            description: IDs of commercial projects associated with this contact
            example:
            - 123e4567-e89b-12d3-a456-426614174000
          residentialProjectIds:
            type: array
            items:
              type: string
              format: uuid
            description: IDs of residential projects associated with this contact
            example:
            - 123e4567-e89b-12d3-a456-426614174000
          marketingConsent:
            type: boolean
            description: Whether the contact has given marketing consent
          marketingConsentText:
            type:
            - string
            - 'null'
          marketingConsentDataProtectionLink:
            type:
            - string
            - 'null'
          utm:
            type: object
            properties:
              campaign:
                type:
                - string
                - 'null'
              content:
                type:
                - string
                - 'null'
              medium:
                type:
                - string
                - 'null'
              source:
                type:
                - string
                - 'null'
              term:
                type:
                - string
                - 'null'
            required:
            - campaign
            - content
            - medium
            - source
            - term
            description: UTM parameters associated with this contact
          integrations:
            type: object
            properties:
              bitrixId:
                type:
                - number
                - 'null'
              hubspotId:
                type:
                - string
                - 'null'
                format: uuid
              pdsId:
                type:
                - string
                - 'null'
              photovateId:
                type:
                - string
                - 'null'
              pipedriveId:
                type:
                - number
                - 'null'
              weclappId:
                type:
                - string
                - 'null'
                format: uuid
            required:
            - bitrixId
            - hubspotId
            - pdsId
            - photovateId
            - pipedriveId
            - weclappId
            description: IDs of the contact in integrated third-party systems
        required:
        - commercialProjectIds
        - residentialProjectIds
        - marketingConsent
        - marketingConsentText
        - marketingConsentDataProtectionLink
        - utm
        - integrations
    ContactCreate:
      type: object
      properties:
        firstName:
          type: string
          minLength: 1
          maxLength: 1000
        lastName:
          type: string
          minLength: 1
          maxLength: 1000
        salutation:
          type:
          - string
          - 'null'
          enum:
          - Female
          - Male
          - Diverse
          - Family
          - Business
          - null
        primaryEmail:
          type:
          - string
          - 'null'
          maxLength: 1000
          format: email
        secondaryEmail:
          type:
          - string
          - 'null'
          maxLength: 1000
          format: email
          description: Alternative email address
        mobile:
          type:
          - string
          - 'null'
          maxLength: 100
          description: Mobile phone number
        phone:
          type:
          - string
          - 'null'
          maxLength: 100
          description: Landline phone number
        phoneReachability:
          type:
          - string
          - 'null'
          enum:
          - Morning
          - Afternoon
          - Evening
          - Fulltime
          - WeekendOnly
          - EmailOnly
          - null
        address:
          type: object
          properties:
            street:
              type:
              - string
              - 'null'
              maxLength: 1000
            houseNumber:
              type:
              - string
              - 'null'
              maxLength: 1000
            city:
              type:
              - string
              - 'null'
              maxLength: 1000
            postcode:
              type:
              - string
              - 'null'
              maxLength: 1000
            country:
              type:
              - string
              - 'null'
              maxLength: 1000
          additionalProperties: false
        marketingConsent:
          type: boolean
          description: Whether the contact has given marketing consent
        marketingConsentText:
          type:
          - string
          - 'null'
          maxLength: 10000
        marketingConsentDataProtectionLink:
          type:
          - string
          - 'null'
          maxLength: 2000
        utm:
          type: object
          properties:
            campaign:
              type:
              - string
              - 'null'
              maxLength: 1000
            content:
              type:
              - string
              - 'null'
              maxLength: 1000
            medium:
              type:
              - string
              - 'null'
              maxLength: 1000
            source:
              type:
              - string
              - 'null'
              maxLength: 1000
            term:
              type:
              - string
              - 'null'
              maxLength: 1000
          additionalProperties: false
          description: UTM parameters associated with this contact
        integrations:
          type: object
          properties:
            bitrixId:
              type:
              - integer
              - 'null'
              minimum: 1
              maximum: 9007199254740991
            hubspotId:
              type:
              - string
              - 'null'
              format: uuid
            pdsId:
              type:
              - string
              - 'null'
              maxLength: 1000
            photovateId:
              type:
              - string
              - 'null'
              maxLength: 1000
            pipedriveId:
              type:
              - integer
              - 'null'
              minimum: 1
              maximum: 9007199254740991
            weclappId:
              type:
              - string
              - 'null'
              format: uuid
          additionalProperties: false
          description: IDs of this contact in third-party systems
      required:
      - firstName
      - lastName
      - marketingConsent
      additionalProperties: false
    Contact:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
        fullName:
          type: string
          description: First and last name combined
        firstName:
          type: string
        lastName:
          type: string
        salutation:
          type:
          - string
          - 'null'
          enum:
          - Female
          - Male
          - Diverse
          - Family
          - Business
          - null
        primaryEmail:
          type:
          - string
          - 'null'
        secondaryEmail:
          type:
          - string
          - 'null'
          description: Alternative email address
        mobile:
          type:
          - string
          - 'null'
          description: Mobile phone number
        phone:
          type:
          - string
          - 'null'
          description: Landline phone number
        phoneReachability:
          type:
          - string
          - 'null'
          enum:
          - Morning
          - Afternoon
          - Evening
          - Fulltime
          - WeekendOnly
          - EmailOnly
          - null
        address:
          type: object
          properties:
            street:
              type:
              - string
              - 'null'
            houseNumber:
              type:
              - string
              - 'null'
            city:
              type:
              - string
              - 'null'
            postcode:
              type:
              - string
              - 'null'
            country:
              type:
              - string
              - 'null'
          required:
          - street
          - houseNumber
          - city
          - postcode
          - country
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
          description: Last edited date
        deletedAt:
          type:
          - string
          - 'null'
          format: date-time
      required:
      - id
      - fullName
      - firstName
      - lastName
      - salutation
      - primaryEmail
      - secondaryEmail
      - mobile
      - phone
      - phoneReachability
      - address
      - createdAt
      - updatedAt
      - deletedAt
  securitySchemes:
    X-Authorization:
      type: apiKey
      in: header
      name: X-Authorization
x-tagGroups:
- name: People
  tags:
  - Contacts
  - Users
  - Teams
- name: Projects
  tags:
  - Residential Projects
  - Commercial Projects
- name: Working on a project
  tags:
  - Notes
  - Tasks
  - Files
  - File Folders
  - Activities
  - Time Tracking
  - Checklists
  - Checklist Templates
  - Signature Requests
- name: Calendar
  tags:
  - Calendars
  - Calendar Categories
  - Appointments
- name: Catalog
  tags:
  - Components
  - Planning Templates
  - Planning Packages
  - Offer Templates
- name: Workspace setup
  tags:
  - Kanban Boards
  - Kanban Columns
  - Tags
  - Lead Sources
- name: Wiki
  tags:
  - Wiki
- name: Services
  tags:
  - Photogrammetry
- name: API helpers
  tags:
  - Upload
  - Links
- name: Integrations
  tags:
  - Webhooks
- name: Guides
  tags:
  - Migrating from API v2 to v3
  - Changelog