Wazo Directory & Contacts API (wazo-dird)

Directory lookup, reverse lookup and personal-contact service. Aggregates multiple directory backends (CSV, CSV web service, LDAP, Wazo confd, Google, Microsoft Office 365, conference and personal sources) behind one search API, and manages displays, profiles, sources, phonebooks and favourites.

OpenAPI Specification

wazo-dird-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: wazo-dird
  description: "Contacts and directories in Wazo are managed by the wazo-dird daemon. This service provides a public API that\
    \ can be used to query the directories that are configured on a Wazo. \n\n\nA contact can contain various information\
    \ such as a person's phone number, number, office number, department, office number, etc. The information displayed is\
    \ selected via a profile. Directories can be aggregated using multiple data sources such as an LDAP server, a CSV file,\
    \ another Wazo server, etc.\n\n\nPlease refer to [the documentation](https://wazo-platform.org/uc-doc) for further details.\n\
    \n\nNote: The 0.1 API is currently in development. Major changes could still happen and new resources will be added over\
    \ time."
  version: '0.1'
  license:
    name: GPL v3
    url: http://www.gnu.org/licenses/gpl.txt
  contact:
    name: Wazo Dev Team
    url: https://wazo-platform.org/
    email: dev@wazo.community
  x-logo:
    url: https://wazo-platform.org/images/logo-black.svg
    backgroundColor: '#FAFAFA'
    altText: Wazo Logo
x-xivo-port: 9489
x-xivo-name: dird
schemes:
- http
basePath: /0.1
consumes:
- application/json
produces:
- application/json
securityDefinitions:
  wazo_auth_token:
    type: apiKey
    name: X-Auth-Token
    in: header
security:
- wazo_auth_token: []
responses:
  InvalidParameters:
    description: Invalid parameters
    schema:
      $ref: '#/definitions/LegacyError'
  ProfileInvalid:
    description: The profile does not exist
    schema:
      $ref: '#/definitions/LegacyError'
  AnotherServiceUnavailable:
    description: Another service is unavailable (e.g. wazo-auth, postgresql, ...)
    schema:
      $ref: '#/definitions/LegacyError'
  LimitOffsetInvalid:
    description: The limit or offset should be positive
    schema:
      $ref: '#/definitions/LegacyError'
  DuplicateFavorite:
    description: The contact has already been favorited
    schema:
      $ref: '#/definitions/LegacyError'
  DuplicateContact:
    description: This contact already exists
    schema:
      $ref: '#/definitions/LegacyError'
  CreateError:
    description: An error occurred when creating the resource
    schema:
      $ref: '#/definitions/APIError'
  NotFoundError:
    description: The resource requested was not found on the server
    schema:
      $ref: '#/definitions/APIError'
  ResourceUpdated:
    description: Resource was updated successfully
  ResourceDeleted:
    description: Resource was deleted successfully
  UpdateError:
    description: An error occurred when updating the resource
    schema:
      $ref: '#/definitions/APIError'
  PersonalContactIDInvalid:
    description: The personal contact does not exist
    schema:
      $ref: '#/definitions/LegacyError'
  DuplicatePhonebook:
    description: This phonebook already exists
    schema:
      $ref: '#/definitions/LegacyError'
  InvalidTenant:
    description: The tenant is not a valid ascii alphanumeric string
    schema:
      $ref: '#/definitions/LegacyError'
  PhonebookContactListResponse:
    description: A list of contacts
    schema:
      type: object
      properties:
        total:
          type: integer
          description: The total number of contacts
        items:
          $ref: '#/definitions/PhonebookContactList'
  DuplicateError:
    description: The name already exist
    schema:
      $ref: '#/definitions/APIError'
parameters:
  ContactID:
    name: contact_id
    in: path
    type: string
    required: true
    description: The ID of contact.
  direction:
    required: false
    name: direction
    in: query
    type: string
    enum:
    - asc
    - desc
    description: Sort list of items in 'asc' (ascending) or 'desc' (descending) order
  Directory:
    name: directory
    in: path
    type: string
    description: The directory where the contact is stored.
    required: true
  Exten:
    name: exten
    in: query
    type: string
    description: A search exten to look for
    required: true
  FavoriteID:
    name: contact
    in: path
    type: string
    description: The ID of the contact. This ID is unique within the {directory}.
    required: true
  Limit:
    name: limit
    in: query
    type: integer
    description: The limit defines the number of individual objects that are returned
    required: false
  Limit8:
    name: limit
    in: query
    type: integer
    description: The limit defines the number of individual objects that are returned
    default: 8
    required: false
  Limit16:
    name: limit
    in: query
    type: integer
    description: The limit defines the number of individual objects that are returned
    default: 16
    required: false
  Offset:
    name: offset
    in: query
    type: integer
    description: The offset defines the number of items of the collection to skip
    default: 0
    required: false
  order:
    required: false
    name: order
    in: query
    type: string
    description: Name of the field to use for sorting the list of items returned.
  Profile:
    name: profile
    in: path
    type: string
    description: The profile defines the list of directories to query and how the results are displayed. The profile is the
      context name of the user who started the contact lookup, e.g. `default`. More precisely, it is the name of the "Direct
      directory" defined in the web interface.
    required: true
  recurse:
    name: recurse
    in: query
    type: boolean
    description: Should the query include sub-tenants
    default: false
    required: false
  tenantuuid:
    name: Wazo-Tenant
    type: string
    in: header
    description: The tenant's UUID, defining the ownership of a given resource.
    required: false
  ProxyUrl:
    name: Proxy-URL
    in: header
    type: string
    required: false
    description: URL that will be integrated in the XML response. (not working on swagger 2.1)
  search:
    required: false
    name: search
    in: query
    type: string
    description: Search term for filtering a list of items. Only items with a field containing the search term will be returned.
  Term:
    name: term
    in: query
    type: string
    description: A search term to look for
    required: true
  UserUUID:
    name: user_uuid
    in: path
    type: string
    description: The user UUID of the user doing that query
    required: true
  backendname:
    required: true
    type: string
    name: backend_name
    in: path
    description: the backend's name
  sourceuuid:
    name: source_uuid
    type: string
    in: path
    description: The source's UUID
    required: true
  limit:
    name: limit
    in: query
    type: integer
    description: The limit defines the number of individual objects that are returned
    required: false
  offset:
    name: offset
    in: query
    type: integer
    description: The offset defines the offsets the start by the number specified
    default: 0
    required: false
  ConfigPatch:
    name: ConfigPatch
    in: body
    required: true
    description: See https://en.wikipedia.org/wiki/JSON_Patch.
    schema:
      type: array
      items:
        $ref: '#/definitions/ConfigPatchItem'
  displayuuid:
    required: true
    type: string
    name: display_uuid
    in: path
    description: the display's UUID
  PersonalContactID:
    name: contact_id
    in: path
    type: string
    required: true
    description: The ID of the personal contact.
  PhonebookUUID:
    name: phonebook_uuid
    type: string
    required: true
    in: path
    description: The phonebook's UUID
  PhonebookID:
    name: phonebook_id
    type: integer
    required: true
    in: path
    description: The phonebook's ID
  Tenant:
    name: tenant
    in: path
    type: string
    description: The tenant defines the ownership of a given resource.
    required: true
  profileuuid:
    required: true
    type: string
    name: profile_uuid
    in: path
    description: the profile's UUID
  wazo_backend_uuid:
    required: false
    name: uuid
    in: query
    type: array
    items:
      type: string
    description: Filter by contact uuid. Many uuid can be specified. Each uuid MUST be separated by a comma (,). Many uuid
      will perform a logical OR.
definitions:
  LegacyError:
    title: LegacyError
    description: Error message for the client
    properties:
      timestamp:
        description: Time at which the error occured
        type: array
        items:
          type: number
          format: timestamp
      reason:
        description: Human readable explanation of the error
        type: array
        items:
          type: string
      status_code:
        description: HTTP status code
        type: integer
  Error:
    title: Error
    description: Error message for the client
    properties:
      timestamp:
        description: Time at which the error occured, as a unix timestamp
        type: number
        format: timestamp
      message:
        description: Human readable explanation of the error
        type: string
      error_id:
        description: a identifier for the type of error
        type: string
      details:
        description: additional attributes specific to the error type and instance
        type: object
        additionalProperties:
          type:
          - string
          - boolean
          - number
          - object
          - array
      resource:
        description: an identifier for the resource type concerned by the error
        type: string
  Header:
    properties:
      column_headers:
        type: array
        description: Labels for the headers
        items:
          type: string
      column_types:
        type: array
        description: Data types for the headers
        items:
          type: string
  Contact:
    properties:
      column_values:
        items:
          type: string
        type: array
      relations:
        $ref: '#/definitions/Relation'
      source:
        type: string
      backend:
        type: string
        description: Backend type
  Relation:
    properties:
      xivo_id:
        type: string
      user_id:
        type: string
      user_uuid:
        type: string
      endpoint_id:
        type: string
      agent_id:
        type: string
      source_entry_id:
        type: string
  Source:
    properties:
      uuid:
        type: string
        description: The source's UUID
        readOnly: true
      name:
        type: string
        description: The source's name
      searched_columns:
        type: array
        items:
          type: string
          description: A list of columns which should be searched when doing a look up
      first_matched_columns:
        type: array
        items:
          type: string
        description: A list of columns which should be searched when doing a reverse look up
      format_columns:
        type: object
        description: A mapping of new fields and a python format string to generate the new columns value
  SourceItems:
    properties:
      total:
        type: integer
        description: The number of configured sources for this backend
        readOnly: true
      filtered:
        type: integer
        description: The number of configured sources matching the searched terms for this backend
        readOnly: true
  PhonebookContact:
    properties:
      id:
        type: string
        readOnly: true
      firstname:
        type: string
      lastname:
        type: string
    additionalProperties:
      type: string
  PhonebookContactList:
    type: array
    items:
      $ref: '#/definitions/PhonebookContact'
  ContactBodySample:
    description: Those are only example attributes. The API accepts any arbitrary attributes.
    properties:
      firstname:
        type: string
      lastname:
        type: string
  ContactImportResponse:
    properties:
      created:
        type: array
        items:
          type: object
      failed:
        type: array
        items:
          $ref: '#/definitions/ContactImportFailure'
  PhonebookContactImportResponse:
    $ref: '#/definitions/ContactImportResponse'
    properties:
      created:
        $ref: '#/definitions/PhonebookContactList'
  ContactImportFailure:
    properties:
      line:
        type: integer
      errors:
        type: array
        items:
          type: string
  PhonebookBody:
    properties:
      name:
        type: string
      description:
        type: string
    required:
    - name
  Phonebook:
    properties:
      id:
        type: integer
      uuid:
        type: string
      name:
        type: string
      description:
        type: string
  Reverse:
    properties:
      display:
        type: string
      exten:
        type: string
        description: A search exten to look for
      source:
        type: string
      fields:
        description: Fields defined for each source
        $ref: '#/definitions/ResultFields'
    required:
    - display
    - exten
    - fields
    - source
  ResultFields: {}
  WazoAuthConfig:
    title: Auth
    allOf:
    - $ref: '#/definitions/ExternalServiceConfig'
    - $ref: '#/definitions/WazoAuthConfigNoAuth'
    - properties:
        key_file:
          type: string
          description: The path the the file containing the credentials
        username:
          type: string
          description: The username to use when not using a key_file
        password:
          type: string
          description: The password to use when not using a key_file
  WazoAuthConfigNoAuth:
    title: Auth
    allOf:
    - $ref: '#/definitions/ExternalServiceConfig'
    - properties:
        port:
          type: integer
          default: 80
        version:
          type: string
          default: '0.1'
  ExternalServiceConfig:
    properties:
      host:
        type: string
        default: localhost
      verify_certificate:
        type: string
        description: If the HTTPs certificates should be verified and the path of the certificate if a custom certificate
          is used.
        default: 'true'
      timeout:
        type: number
  ConfdConfig:
    title: Confd
    allOf:
    - $ref: '#/definitions/ExternalServiceConfig'
    - properties:
        port:
          type: integer
          default: 9486
        https:
          type: boolean
          default: true
        version:
          type: string
          default: '1.1'
  Backend:
    title: Backend
    allOf:
    - properties:
        name:
          type: string
          readOnly: true
    - required:
      - name
  BackendItems:
    title: BackendItems
    allOf:
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/Backend'
          readOnly: true
        total:
          type: integer
          description: The number of backends
          readOnly: true
        filtered:
          type: integer
          description: The number of backends matching the search filters
          readOnly: true
    - required:
      - items
      - total
      - filtered
  ConferenceContact:
    properties:
      uuid:
        type: string
        description: The UUID of the contact
      name:
        type: string
        description: The lastname of the contact
      extensions:
        type: array
        items:
          type: string
          description: The internal number of that contact
      incalls:
        type: array
        items:
          type: string
          description: The external number of that contact
  ConferenceContactList:
    properties:
      total:
        type: integer
        description: The number of contacts in this source
        readOnly: true
      filtered:
        type: integer
        description: The number of contacts in this source (filtered is not implemented)
        readOnly: true
      items:
        type: array
        items:
          $ref: '#/definitions/ConferenceContact'
    required:
    - items
    - total
    - filtered
  ConferenceSource:
    title: ConferenceSource
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        auth:
          $ref: '#/definitions/WazoAuthConfig'
        confd:
          $ref: '#/definitions/ConfdConfig'
    - required:
      - name
      - auth
      - confd
  ConferenceSourceItems:
    title: ConferenceSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/ConferenceSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  APIError:
    type: object
    properties:
      timestamp:
        type: number
      message:
        type: string
      resource:
        type: string
      details:
        type: object
  Service:
    title: Service
    allOf:
    - properties:
        name:
          type: string
          readOnly: true
    - required:
      - name
  ServiceItems:
    title: ServiceItems
    allOf:
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/Service'
          readOnly: true
        total:
          type: integer
          description: The number of services
          readOnly: true
        filtered:
          type: integer
          description: The number of services matching the search filters
          readOnly: true
    - required:
      - items
      - total
      - filtered
  ConfigPatchItem:
    properties:
      op:
        type: string
        description: 'Patch operation. Supported operations: `replace`.'
      path:
        type: string
        description: 'JSON path to operate on. Supported paths: `/debug`.'
      value:
        type: object
        description: The new value for the operation. Type of value is dependent of `path`
  CSVSource:
    title: CSVSource
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        file:
          type: string
          description: The path of the CSV file
        separator:
          type: string
          description: The field separator in the CSV
          default: ','
        unique_column:
          type: string
          description: The column to use for favorites
    - required:
      - name
  CSVSourceItems:
    title: CSVSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/CSVSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  CSVWSSource:
    title: CSVWSSource
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        lookup_url:
          type: string
          description: The URL used to search the remote CSV
        list_url:
          type: string
          description: The URL used to list all values
        delimiter:
          type: string
          description: The field separator in the CSV
          default: ','
        timeout:
          type: number
          description: The timeout on the remote HTTP queries
          default: 10.0
        unique_column:
          type: string
          description: The column to use for favorites
    - required:
      - name
      - lookup_url
  CSVWSSourceItems:
    title: CSVWSSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/CSVWSSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  ContactList:
    properties:
      column_headers:
        type: array
        description: Labels for the headers
        items:
          type: string
      column_types:
        type: array
        description: Data types for the headers
        items:
          type: string
      results:
        items:
          $ref: '#/definitions/Contact'
        type: array
        description: List of results
  Lookup:
    allOf:
    - $ref: '#/definitions/ContactList'
    - properties:
        term:
          type: string
          description: Search term used for these results
  Display:
    title: Display
    allOf:
    - properties:
        uuid:
          type: string
          description: The display's UUID
          readOnly: true
        name:
          type: string
          description: The name of the display
        columns:
          type: array
          items:
            $ref: '#/definitions/DisplayColumn'
          default: []
    - required:
      - name
  DisplayIdentifier:
    title: DisplayUUID
    allOf:
    - properties:
        uuid:
          type: string
          description: The display's UUID
    - required:
      - uuid
  DisplayColumn:
    title: Column
    allOf:
    - properties:
        field:
          type: string
          description: The name of the field to display in this column
        title:
          type: string
          description: A human readable name for this column
        type:
          type: string
          description: The type of this column
        default:
          type: string
          description: A default value if theres no result in this column
        number_display:
          type: string
          description: A format string that overrides the default display. for number columns only.
    - required:
      - name
  DisplayItems:
    title: DisplayItems
    allOf:
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/Display'
          readOnly: true
        total:
          type: integer
          description: The number of configured displays
          readOnly: true
        filtered:
          type: integer
          description: The number of configured displays matching the searched terms
          readOnly: true
    - required:
      - items
      - total
      - filtered
  GoogleSource:
    title: GoogleSource
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        auth:
          $ref: '#/definitions/WazoAuthConfigNoAuth'
    - required:
      - name
      - auth
  GoogleContactList:
    properties:
      items:
        type: array
        items:
          type: object
        readOnly: true
      total:
        type: integer
        description: The number of contacts matching the searched terms
        readOnly: true
      filtered:
        type: integer
        description: The number of contacts matching the searched terms
        readOnly: true
  GoogleSourceItems:
    title: GoogleSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/GoogleSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  LDAPSource:
    title: LDAPSource
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        ldap_uri:
          type: string
          description: the URI of the LDAP server. Can only contains the scheme, host and port part of an LDAP URL
        ldap_base_dn:
          type: string
          description: the DN of the entry at which to start the search
        ldap_username:
          type: string
          description: the user’s DN to use when performing a “simple” bind.
        ldap_password:
          type: string
          description: the password to use when performing a “simple” bind.
        ldap_custom_filter:
          type: string
          description: the custom filter is used to add more criteria to the filter generated by the back end.
        ldap_network_timeout:
          type: number
          description: the maximum time, in second, that an LDAP network operation can take. If it takes more time than that,
            no result is returned.
          default: 0.3
        ldap_timeout:
          type: number
          description: the maximum time, in second, that an LDAP operation can take.
          default: 1.0
        unique_column:
          type: string
          description: the column that contains a unique identifier of the entry
        unique_column_format:
          type: string
          enum:
          - string
          - binary_uuid
          description: the unique column’s type returned by the queried LDAP server.
    - required:
      - name
      - ldap_uri
      - ldap_base_dn
  LDAPSourceItems:
    title: LDAPSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/LDAPSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  MicrosoftSource:
    title: MicrosoftSource
    description: 'In addition to the keys defined by the [Microsoft API](https://docs.microsoft.com/en-us/graph/api/resources/contact?view=graph-rest-1.0#),

      `format_columns` also accepts the following columns:

      * a `numbers` field that aggregates the values from the `businessPhones`, `homePhones` and `mobilePhone` fields. Example:
      `"format_columns": {"phone": "{numbers[0]}"}`

      * a `numbers_except_label` field that aggregates the same values than `numbers`, except for one field. Example: `"format_columns":
      {"phone": "{numbers_except_label[mobilePhone][0]}"}` will result in one of the phone numbers except the mobile phone.

      '
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        auth:
          $ref: '#/definitions/WazoAuthConfig'
        confd:
          $ref: '#/definitions/ConfdConfig'
        endpoint:
          description: Endpoint where to get the information from
          example: https://graph.microsoft.com/v1.0/me/contacts
          default: https://graph.microsoft.com/v1.0/me/contacts
          type: string
    - required:
      - name
      - auth
      - confd
  Office365ContactList:
    properties:
      items:
        type: array
        items:
          type: object
        readOnly: true
      total:
        type: integer
        description: The number of contacts
        readOnly: true
      filtered:
        type: integer
        description: The number of contacts matching the searched terms
        readOnly: true
  MicrosoftSourceItems:
    title: MicrosoftSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/MicrosoftSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  PersonalSource:
    title: PersonalSource
    allOf:
    - $ref: '#/definitions/Source'
    - required:
      - name
  PersonalSourceItems:
    title: PersonalSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/PersonalSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  PhonebookContactImportError:
    description: Error(s) during contact import
    allOf:
    - $ref: '#/definitions/Error'
    - type: object
      properties:
        details:
          type: object
          properties:
            errors:
              description: A list of errors concerning separate contact entries
              type: array
              items:
                type: object
                properties:
                  contact:
                    description: The contact entry as parsed from the request csv input
                    type: object
                    additionalProperties:
                      type: string
                  message:
                    type: string
                    description: Human readable description of the error
                  index:
                    type: integer
                    description: the zero-based index of the contact entry in the request csv input(excluding the header)
  PhonebookSource:
    title: PhonebookSource
    allOf:
    - $ref: '#/definitions/Source'
    - properties:
        name:
          readOnly: true
        phonebook_uuid:
          type: string
          readOnly: true
        phonebook_name:
          type: string
          readOnly: true
        phonebook_description:
          type: string
          readOnly: true
    - required:
      - phonebook_uuid
  PhonebookSourceItems:
    title: PhonebookSourceItems
    allOf:
    - $ref: '#/definitions/SourceItems'
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/PhonebookSource'
          readOnly: true
    - required:
      - items
      - total
      - filtered
  ProfileSource:
    properties:
      uuid:
        type: string
        description: The source's UUID
        readOnly: true
      backend:
        type: string
        description: The name of the source's backend
      name:
        type: string
        description: The source's name
      tenant_uuid:
        type: string
        description: The UUID of the tenant of this source
  ProfileSourceItems:
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/ProfileSource'
      total:
        type: integer
        description: The number of configured sources for this backend
        readOnly: true
      filtered:
        type: integer
        description: The number of configured sources matching the searched terms for this backend
        readOnly: true
  Profile:
    title: Profile
    allOf:
    - properties:
        uuid:
          type: string
          readOnly: true
        name:
          type: string
          description: The name of the profile
        display:
          $ref: '#/definitions/DisplayIdentifier'
        services:
          type: object
          properties:
            name:
              $ref: '#/definitions/ServiceConfiguration'
    - required:
      - name
  ProfileItems:
    title: ProfileItems
    allOf:
    - properties:
        items:
          type: array
          items:
            $ref: '#/definitions/Profile'
          readOnly: true
        total:
          type: integer
          description: The number of configured profiles
          readOnly: true
        filtered:
          type: integer
          description: The number of configured profiles matching the searched terms
          readOnly: true
    - required:
      - items
      - total
      - filtered
  ServiceConfiguration:
    title: Service
    properties:
      sources:
        type: array
        items:
          $ref: '#/definitions/SourceIdentifier'
          default: []
      options:
        type: object
        description: Service specific configuration options
  SourceIdentifier:
    title: SourceUUID
    allOf:
    - properties:
        uuid:
          type: string
          description: The source's UUID
    - required:
      - uuid
  SourceListItem:
    properties:
      uuid:
        type: string
        description: The UUID of the source
        readOnly: true
      backend:
        type: string
        description: The backend of this source
        readOnly: true
      name:
        type: string
        description: The name of the source
        readOnly: true
    required:
    - uuid
    - backend
    - name
  SourceListItems:
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/SourceListItem'
        readOnly: true
      total:
        type: integer
        description: The number of sources
        readOnly: true
      filtered:
        type: integer
        description: The number of sources matching the search filters
        readOnly: true
    required:
    - items
    - total
    - filtered
  StatusSummary:
    type: object
    properties:
      bus_consumer:
        $ref: '#/definitions/ComponentWithStatus'
      master_tenant:
        $ref: '#/definitions/ComponentWithStatus'
      rest_api:
        $ref: '#/definitions/ComponentWithStatus'
  ComponentWithStatus:
    type: object
    properties:
      status:
        $ref: '#/definitions/StatusValue'
  StatusValue:
    type: string
    enum:
    - fail
    - ok
  WazoContact:
    properties:
      id:
        type: integer
        description: The ID of the contact which is used to favorite that contact
      uuid:
        type: string
        description: The UUID of the contact
      firstname:
        type: string
        description: The firstname of the contact
      lastname:
        type: string
        description: The lastname of the contact
      email:
        type: string
        description: The email address of the contact
      exten:
        type: string
        description: The internal number of that contact
      mobile_ph

# --- truncated at 32 KB (113 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wazo/refs/heads/main/openapi/wazo-dird-api-openapi.yml