{
  "openapi": "3.0.3",
  "info": {
    "title": "App Connect CRM Server API",
    "version": "1.7.38",
    "description": "HTTP API for the App Connect CRM server. The contract covers shared routes from @app-connect/core and connector-specific routes in this server. Response payloads may include connector-defined fields where an operation delegates to a connector interface.\n\nThis public reference omits internal and application-specific endpoints.",
    "contact": {
      "name": "RingCentral Labs",
      "url": "https://github.com/ringcentral/rc-unified-crm-extension"
    },
    "license": {
      "name": "MIT",
      "url": "https://opensource.org/license/mit"
    }
  },
  "externalDocs": {
    "description": "App Connect developer guide",
    "url": "https://appconnect.labs.ringcentral.com/developers/"
  },
  "servers": [
    {
      "url": "https://unified-crm-extension.labs.ringcentral.com",
      "description": "RingCentral Labs hosted server"
    },
    {
      "url": "http://localhost:6066",
      "description": "Local development server"
    },
    {
      "url": "https://{host}",
      "description": "Self-managed connector server",
      "variables": {
        "host": {
          "default": "unified-crm-extension.labs.ringcentral.com",
          "description": "Hostname of the deployed App Connect server."
        }
      }
    }
  ],
  "tags": [
    {
      "name": "Health",
      "description": "Health and runtime readiness endpoints."
    },
    {
      "name": "Manifest",
      "description": "Connector manifests, implemented interfaces, release notes, and version metadata."
    },
    {
      "name": "Auth",
      "description": "CRM authorization, managed-auth state, and user-session lifecycle."
    },
    {
      "name": "Admin",
      "description": "Account administration, managed credentials, settings, and user mapping."
    },
    {
      "name": "User",
      "description": "Per-user settings and connector user information."
    },
    {
      "name": "Contacts",
      "description": "CRM contact lookup and creation."
    },
    {
      "name": "Appointments",
      "description": "Connector-backed appointment listing and mutations."
    },
    {
      "name": "Call Logs",
      "description": "CRM call-log lookup, creation, updates, notes, and dispositions."
    },
    {
      "name": "Message Logs",
      "description": "CRM logging for SMS, fax, voicemail, and related messages."
    },
    {
      "name": "Call Down",
      "description": "Call-down list creation, retrieval, updates, and deletion."
    },
    {
      "name": "Plugins",
      "description": "Plugin registration, callbacks, license checks, and plugin execution."
    },
    {
      "name": "RingCentral Reports",
      "description": "RingCentral account and extension reporting endpoints."
    }
  ],
  "security": [],
  "paths": {
    "/isAlive": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "Health check",
        "operationId": "getIsAlive",
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Plain-text liveness response.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                },
                "examples": {
                  "healthy": {
                    "summary": "Healthy server",
                    "value": "OK"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/implementedInterfaces": {
      "get": {
        "tags": [
          "Manifest"
        ],
        "summary": "List implemented connector methods for a platform",
        "operationId": "getImplementedInterfaces",
        "parameters": [
          {
            "$ref": "#/components/parameters/platform"
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Connector-interface availability for the requested platform.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImplementedInterfacesResponse"
                },
                "examples": {
                  "oauthConnector": {
                    "summary": "OAuth connector capabilities",
                    "value": {
                      "getAuthType": true,
                      "getOauthInfo": true,
                      "getUserInfo": true,
                      "createCallLog": true,
                      "updateCallLog": true,
                      "getCallLog": true,
                      "createMessageLog": true,
                      "updateMessageLog": true,
                      "createContact": true,
                      "findContact": true,
                      "listAppointments": false,
                      "createAppointment": false,
                      "updateAppointment": false,
                      "refreshAppointment": false,
                      "confirmAppointment": false,
                      "cancelAppointment": false,
                      "unAuthorize": true,
                      "upsertCallDisposition": true,
                      "findContactWithName": true,
                      "getUserList": false,
                      "getLicenseStatus": true,
                      "getLogFormatType": true,
                      "refreshUserInfo": true,
                      "cacheCallNote": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/crmManifest": {
      "get": {
        "tags": [
          "Manifest"
        ],
        "summary": "Return a platform manifest",
        "description": "Deprecated legacy manifest endpoint retained for client compatibility.",
        "operationId": "getCrmManifest",
        "parameters": [
          {
            "name": "platformName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "deprecated": true
      }
    },
    "/releaseNotes": {
      "get": {
        "tags": [
          "Manifest"
        ],
        "summary": "Return merged global and connector release notes",
        "operationId": "getReleaseNotes",
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Release notes grouped by server version and connector.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseNotesResponse"
                },
                "examples": {
                  "release": {
                    "summary": "Global and connector release notes",
                    "value": {
                      "1.7.14": {
                        "global": [],
                        "exampleCRM": [
                          {
                            "type": "New",
                            "description": "Added SMS time tracking."
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/serverVersionInfo": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "Return server version metadata",
        "operationId": "getServerVersionInfo",
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Version metadata from the default CRM manifest.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerVersionInfoResponse"
                },
                "examples": {
                  "version": {
                    "summary": "Server version",
                    "value": {
                      "version": "1.7.38"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": true,
        "description": "Deprecated legacy version endpoint retained for client compatibility."
      }
    },
    "/oauth-callback": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "CRM OAuth callback",
        "operationId": "getOauthCallback",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "callbackUri",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hostname",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tokenUrl",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "apiUrl",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "proxyId",
            "in": "query",
            "required": false,
            "description": "Proxy connector identifier retained through the OAuth exchange.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/apiKeyLogin": {
      "post": {
        "tags": [
          "Auth"
        ],
        "summary": "API-key login",
        "description": "Authenticates a user with connector-defined API-key credentials. The platform field selects the connector; credential fields can be supplied directly or resolved from managed authentication when a RingCentral access token is present.",
        "operationId": "postApiKeyLogin",
        "requestBody": {
          "$ref": "#/components/requestBodies/ApiKeyLogin"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The connector credentials were accepted and an App Connect user token was issued.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKeyLoginResponse"
                },
                "examples": {
                  "connected": {
                    "summary": "Connected user session",
                    "value": {
                      "jwtToken": "eyJhbGciOiJIUzI1NiJ9.example.signature",
                      "name": "Ada Lovelace",
                      "returnMessage": {
                        "message": "Connected successfully.",
                        "messageType": "success",
                        "ttl": 3000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {},
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/unAuthorize": {
      "post": {
        "tags": [
          "Auth"
        ],
        "summary": "Disconnect a CRM user",
        "operationId": "postUnAuthorize",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/licenseStatus": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "Get connector license status",
        "operationId": "getLicenseStatus",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/authValidation": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "Validate the current CRM authentication",
        "operationId": "getAuthValidation",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "CRM authentication validation result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthValidationResponse"
                },
                "examples": {
                  "valid": {
                    "summary": "Authentication is valid",
                    "value": {
                      "successful": true,
                      "returnMessage": {
                        "message": "Authentication is valid.",
                        "messageType": "success",
                        "ttl": 1000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/apiKeyManagedAuthState": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "Get admin-managed API-key auth state",
        "operationId": "getApiKeyManagedAuthState",
        "parameters": [
          {
            "$ref": "#/components/parameters/platform"
          },
          {
            "name": "connectorId",
            "in": "query",
            "required": false,
            "description": "Private or proxy connector identifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isPrivate",
            "in": "query",
            "required": false,
            "description": "Whether connector-scoped managed credentials should be used.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Managed API-key field state for the RingCentral user and account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagedAuthStateResponse"
                },
                "examples": {
                  "manualAuth": {
                    "summary": "No managed credentials are configured",
                    "value": {
                      "hasManagedAuth": false,
                      "allRequiredFieldsSatisfied": false,
                      "visibleFieldConsts": null,
                      "missingRequiredFieldConsts": [
                        "apiKey"
                      ],
                      "fallbackToManualAuth": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/oauthManagedAuthState": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "Get admin-managed OAuth state",
        "operationId": "getOauthManagedAuthState",
        "parameters": [
          {
            "$ref": "#/components/parameters/platform"
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Managed OAuth configuration state for the RingCentral account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagedOAuthStateResponse"
                },
                "examples": {
                  "unconfigured": {
                    "summary": "No managed OAuth configuration",
                    "value": {
                      "isAdmin": false,
                      "hasAccountOAuth": false,
                      "hasPendingOAuth": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/hostname": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "Resolve hostname metadata for a platform",
        "operationId": "getHostname",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Stored CRM hostname.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "500": {
            "description": "The hostname could not be loaded."
          }
        },
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "description": "Returns the CRM hostname stored for the authenticated App Connect user."
      }
    },
    "/userInfoHash": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Return a hash for the current user info",
        "operationId": "getUserInfoHash",
        "security": [],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Deterministic account and extension hashes.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserInfoHashResponse"
                },
                "examples": {
                  "hashes": {
                    "summary": "Hashed user identifiers",
                    "value": {
                      "extensionId": "74c4089f5df0e6f37a78371fc535c2335327999ffb55ddf2c17ab6feeb9378c7",
                      "accountId": "318b43a184b5607066f97c570af26b73fc787778d221cd06002308ef50755d90"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "parameters": [
          {
            "name": "extensionId",
            "in": "query",
            "required": false,
            "description": "RingCentral extension identifier to hash.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountId",
            "in": "query",
            "required": false,
            "description": "RingCentral account identifier to hash.",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/admin/settings": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Read admin settings",
        "operationId": "getAdminSettings",
        "parameters": [],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "userJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "userJwt": [],
            "legacyRingCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "legacyRingCentralAccessToken": []
          }
        ]
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Save admin settings",
        "operationId": "postAdminSettings",
        "parameters": [],
        "requestBody": {
          "$ref": "#/components/requestBodies/AdminSettingsUpdate"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The account settings were updated.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/AdminSuccessMessage"
                },
                "examples": {
                  "updated": {
                    "summary": "Settings updated",
                    "value": "Admin settings updated"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/admin/managedAuth": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Read admin-managed API-key credentials",
        "operationId": "getAdminManagedAuth",
        "parameters": [
          {
            "name": "connectorId",
            "in": "query",
            "required": false,
            "description": "Private or proxy connector identifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isPrivate",
            "in": "query",
            "required": false,
            "description": "Whether connector-scoped managed credentials should be used.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Managed authentication field definitions and configured account/user values.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagedAuthAdminResponse"
                },
                "examples": {
                  "configured": {
                    "summary": "Managed authentication configuration",
                    "value": {
                      "hasManagedAuth": true,
                      "fields": [
                        {
                          "const": "tenantId",
                          "required": true,
                          "managed": true,
                          "managedScope": "account"
                        },
                        {
                          "const": "userToken",
                          "required": true,
                          "managed": true,
                          "managedScope": "user"
                        }
                      ],
                      "orgFields": [
                        {
                          "const": "tenantId",
                          "required": true,
                          "managed": true,
                          "managedScope": "account"
                        }
                      ],
                      "userFields": [
                        {
                          "const": "userToken",
                          "required": true,
                          "managed": true,
                          "managedScope": "user"
                        }
                      ],
                      "orgValues": {
                        "tenantId": {
                          "hasValue": true,
                          "value": "tenant.example"
                        }
                      },
                      "userValues": [
                        {
                          "rcExtensionId": "101",
                          "rcUserName": "Ada Lovelace",
                          "fields": {
                            "userToken": {
                              "hasValue": true,
                              "value": "configured"
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "userJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "userJwt": [],
            "legacyRingCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "legacyRingCentralAccessToken": []
          }
        ]
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Save admin-managed API-key credentials",
        "operationId": "postAdminManagedAuth",
        "parameters": [],
        "requestBody": {
          "$ref": "#/components/requestBodies/ManagedAuthUpdate"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The managed authentication values were updated.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/AdminSuccessMessage"
                },
                "examples": {
                  "updated": {
                    "summary": "Managed authentication updated",
                    "value": "Shared authentication updated"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "userJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "userJwt": [],
            "legacyRingCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/admin/managedOAuth/cache": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Cache admin-managed OAuth credentials",
        "operationId": "postAdminManagedOauthCache",
        "parameters": [],
        "requestBody": {
          "$ref": "#/components/requestBodies/AdminManagedOAuthCache"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The pending managed OAuth values were cached.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                },
                "examples": {
                  "cached": {
                    "summary": "Pending values cached",
                    "value": {
                      "successful": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete cached admin-managed OAuth credentials",
        "operationId": "deleteAdminManagedOauthCache",
        "parameters": [],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The pending managed OAuth values were removed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                },
                "examples": {
                  "removed": {
                    "summary": "Pending values removed",
                    "value": {
                      "successful": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/admin/managedOAuth/account": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete account-scoped admin-managed OAuth credentials",
        "operationId": "deleteAdminManagedOauthAccount",
        "parameters": [
          {
            "$ref": "#/components/parameters/platform"
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The account managed OAuth values were reset.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                },
                "examples": {
                  "reset": {
                    "summary": "Account OAuth reset",
                    "value": {
                      "successful": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/admin/userMapping": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Save admin user mapping",
        "operationId": "postAdminUserMapping",
        "parameters": [],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenericJson"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "userJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "userJwt": [],
            "legacyRingCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/admin/reinitializeUserMapping": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Reinitialize admin user mapping",
        "operationId": "postAdminReinitializeUserMapping",
        "parameters": [],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenericJson"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "userJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "userJwt": [],
            "legacyRingCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "ringCentralAccessToken": []
          },
          {
            "legacyUserJwt": [],
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/admin/serverLoggingSettings": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Read server-side logging settings",
        "operationId": "getAdminServerLoggingSettings",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Update server-side logging settings",
        "operationId": "postAdminServerLoggingSettings",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenericJson"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/user/preloadSettings": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Preload user settings for a platform",
        "operationId": "getUserPreloadSettings",
        "parameters": [
          {
            "name": "rcAccountId",
            "in": "query",
            "required": false,
            "description": "RingCentral account identifier used when no access token is available.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Account-level user settings to preload before CRM login.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSettingsEnvelope"
                },
                "examples": {
                  "configured": {
                    "summary": "Preconfigured account settings",
                    "value": {
                      "userSettings": {
                        "theme": {
                          "value": "dark",
                          "customizable": true,
                          "defaultValue": "system",
                          "options": [
                            "system",
                            "light",
                            "dark"
                          ]
                        }
                      }
                    }
                  },
                  "empty": {
                    "summary": "No account settings configured",
                    "value": {}
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {},
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/user/refreshInfo": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Refresh connector-owned CRM user information",
        "description": "Resolves the current user from the App Connect JWT, refreshes OAuth credentials when needed, then calls the connector's refreshUserInfo interface.",
        "operationId": "postUserRefreshInfo",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "CRM user-information refresh result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                },
                "examples": {
                  "refreshed": {
                    "summary": "User information refreshed",
                    "value": {
                      "successful": true,
                      "returnMessage": {
                        "message": "User information refreshed.",
                        "messageType": "success"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/user/settings": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Read user settings",
        "operationId": "getUserSettings",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "name": "rcAccountId",
            "in": "query",
            "required": false,
            "description": "RingCentral account id used to resolve account-managed defaults when an access token is unavailable.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Effective user settings after account-level overrides are applied.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSettings"
                },
                "examples": {
                  "settings": {
                    "summary": "Effective user settings",
                    "value": {
                      "theme": {
                        "value": "dark",
                        "customizable": true,
                        "defaultValue": "system",
                        "options": [
                          "system",
                          "light",
                          "dark"
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      },
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Update user settings",
        "operationId": "postUserSettings",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UserSettingsUpdate"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Updated user settings. Legacy connector-hook failures can return an empty object.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSettingsEnvelope"
                },
                "examples": {
                  "updated": {
                    "summary": "User settings updated",
                    "value": {
                      "userSettings": {
                        "theme": {
                          "value": "dark",
                          "customizable": true,
                          "defaultValue": "system",
                          "options": [
                            "system",
                            "light",
                            "dark"
                          ]
                        }
                      }
                    }
                  },
                  "empty": {
                    "summary": "Legacy connector hook returned no settings",
                    "value": {}
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/contact": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Find contacts by phone number",
        "operationId": "getContact",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/phoneNumber"
          },
          {
            "name": "overridingFormat",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated phone-number formats used by CRM-specific matching."
          },
          {
            "$ref": "#/components/parameters/isExtension"
          },
          {
            "name": "isForceRefreshAccountData",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Bypass and refresh cached contact search data."
          }
        ],
        "responses": {
          "200": {
            "description": "Matching CRM contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactSearchResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      },
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Create a contact",
        "operationId": "postContact",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateContact"
        },
        "responses": {
          "200": {
            "description": "Created CRM contact information.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/custom/contact/search": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Find contacts by name",
        "operationId": "getCustomContactSearch",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "CRM contact name search text."
          }
        ],
        "responses": {
          "200": {
            "description": "Matching CRM contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactSearchResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/appointments": {
      "get": {
        "tags": [
          "Appointments"
        ],
        "summary": "List appointments",
        "operationId": "getAppointments",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Appointments returned by the active connector.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentListResponse"
                },
                "examples": {
                  "appointments": {
                    "summary": "Scheduled appointments",
                    "value": {
                      "successful": true,
                      "appointments": [
                        {
                          "id": "101",
                          "thirdPartyAppointmentId": "101",
                          "title": "Candidate Screen",
                          "description": "Talk through resume",
                          "participantName": "",
                          "startTimeUtc": "2026-07-20T15:00:00.000Z",
                          "durationMinutes": 45,
                          "status": "scheduled",
                          "contactId": "501",
                          "contactType": "Candidate",
                          "attendees": [
                            {
                              "id": "601",
                              "name": "Alice Able",
                              "type": "CorporateUser",
                              "status": "ACCEPTED"
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "unavailable": {
                    "summary": "Appointments unavailable",
                    "value": {
                      "successful": false,
                      "returnMessage": {
                        "message": "Error listing appointments",
                        "messageType": "warning",
                        "ttl": 5000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        },
        "parameters": [
          {
            "x-app-connect-generated-contract": true,
            "name": "startDate",
            "in": "query",
            "required": false,
            "description": "Inclusive appointment start date. Supply together with endDate.",
            "schema": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "ISO-8601 calendar date."
            },
            "example": "2026-07-01"
          },
          {
            "x-app-connect-generated-contract": true,
            "name": "endDate",
            "in": "query",
            "required": false,
            "description": "Inclusive appointment end date. Supply together with startDate.",
            "schema": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "ISO-8601 calendar date."
            },
            "example": "2026-07-31"
          }
        ]
      },
      "post": {
        "tags": [
          "Appointments"
        ],
        "summary": "Create an appointment",
        "operationId": "postAppointments",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AppointmentCreate"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Appointment creation result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentCreateResponse"
                },
                "examples": {
                  "created": {
                    "summary": "Appointment created",
                    "value": {
                      "successful": true,
                      "appointmentId": "777"
                    }
                  },
                  "rejected": {
                    "summary": "Connector rejected the create request",
                    "value": {
                      "successful": false,
                      "returnMessage": {
                        "message": "Could not create appointment in Bullhorn.",
                        "messageType": "warning",
                        "ttl": 5000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/appointments/{appointmentId}": {
      "patch": {
        "tags": [
          "Appointments"
        ],
        "summary": "Update an appointment",
        "operationId": "patchAppointment",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/appointmentId"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AppointmentPatch"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Appointment update result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentRecordResponse"
                },
                "examples": {
                  "updated": {
                    "summary": "Appointment updated",
                    "value": {
                      "successful": true,
                      "appointmentId": "333",
                      "appointment": {
                        "id": "333",
                        "title": "Updated Strategy Call",
                        "description": "Updated description",
                        "startTimeUtc": "2026-07-20T20:00:00.000Z",
                        "durationMinutes": 60,
                        "status": "scheduled"
                      }
                    }
                  },
                  "missing": {
                    "summary": "Appointment not found",
                    "value": {
                      "successful": false,
                      "returnMessage": {
                        "message": "Appointment not found in Clio.",
                        "messageType": "warning",
                        "ttl": 5000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/appointments/{appointmentId}/status": {
      "post": {
        "tags": [
          "Appointments"
        ],
        "summary": "Update an appointment status",
        "description": "Normalizes the supplied status to lowercase and delegates the update to the connector appointment interface.",
        "operationId": "postAppointmentStatus",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/appointmentId"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AppointmentStatusUpdate"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Appointment status update result; connector support varies.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentRecordResponse"
                },
                "examples": {
                  "updated": {
                    "summary": "Appointment status updated",
                    "value": {
                      "successful": true,
                      "appointmentId": "3003",
                      "appointment": {
                        "id": "3003",
                        "title": "Strategy Call",
                        "status": "TENTATIVE"
                      }
                    }
                  },
                  "unsupported": {
                    "summary": "Connector does not support status changes",
                    "value": {
                      "successful": false,
                      "returnMessage": {
                        "message": "This connector does not support appointment status changes.",
                        "messageType": "warning",
                        "ttl": 5000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/appointments/{appointmentId}/refresh": {
      "get": {
        "tags": [
          "Appointments"
        ],
        "summary": "Refresh an appointment",
        "operationId": "getAppointmentRefresh",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/appointmentId"
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Refreshed appointment result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentRecordResponse"
                },
                "examples": {
                  "refreshed": {
                    "summary": "Appointment refreshed",
                    "value": {
                      "successful": true,
                      "appointmentId": "888",
                      "appointment": {
                        "id": "888",
                        "title": "Candidate Screen",
                        "description": "Talk through resume",
                        "startTimeUtc": "2026-07-20T15:00:00.000Z",
                        "durationMinutes": 45,
                        "status": "scheduled"
                      }
                    }
                  },
                  "missing": {
                    "summary": "Appointment not found",
                    "value": {
                      "successful": false,
                      "returnMessage": {
                        "message": "Appointment not found in Bullhorn.",
                        "messageType": "warning",
                        "ttl": 5000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/appointments/{appointmentId}/confirm": {
      "post": {
        "tags": [
          "Appointments"
        ],
        "summary": "Confirm an appointment",
        "operationId": "postAppointmentConfirm",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/appointmentId"
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Appointment confirmation result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentActionResponse"
                },
                "examples": {
                  "confirmed": {
                    "summary": "Appointment confirmed",
                    "value": {
                      "successful": true,
                      "appointmentId": "3003",
                      "returnMessage": {
                        "message": "Appointment confirmed successfully",
                        "messageType": "success",
                        "ttl": 60000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/appointments/{appointmentId}/cancel": {
      "post": {
        "tags": [
          "Appointments"
        ],
        "summary": "Cancel an appointment",
        "operationId": "postAppointmentCancel",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/appointmentId"
          }
        ],
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Appointment cancellation result.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppointmentActionResponse"
                },
                "examples": {
                  "cancelled": {
                    "summary": "Appointment cancelled",
                    "value": {
                      "successful": true,
                      "appointmentId": "888",
                      "returnMessage": {
                        "message": "Appointment cancelled successfully.",
                        "messageType": "success",
                        "ttl": 5000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/callLog": {
      "get": {
        "tags": [
          "Call Logs"
        ],
        "summary": "Fetch existing call logs",
        "operationId": "getCallLog",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "description": "Call-log lookup result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CallLogLookupResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/sessionIds"
          },
          {
            "$ref": "#/components/parameters/extensionNumber"
          },
          {
            "$ref": "#/components/parameters/hashedExtensionId"
          },
          {
            "$ref": "#/components/parameters/requireDetails"
          }
        ],
        "description": "Looks up local App Connect call-log linkage records by RingCentral session id and extension identity. hashedExtensionId is preferred when present; extensionNumber is retained as a legacy fallback. When requireDetails is true, also fetches the current CRM activity details through the connector getCallLog interface."
      },
      "post": {
        "tags": [
          "Call Logs"
        ],
        "summary": "Create a call log",
        "operationId": "postCallLog",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateCallLog"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Call-log creation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CallLogMutationResponse"
                },
                "examples": {
                  "created": {
                    "summary": "Call log created with a numeric connector id",
                    "value": {
                      "successful": true,
                      "logId": 42,
                      "returnMessage": {
                        "message": "Call logged.",
                        "messageType": "success",
                        "ttl": 3000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        },
        "description": "Creates one CRM activity/log for a RingCentral call and stores the local mapping for later updates. The mapping is keyed by session id plus extension identity. Client-side requests may send hashedExtensionId; server-side logging may send rcExtensionId, which the adapter server hashes locally before duplicate checks and persistence. The logInfo object follows the RingCentral CallLogRecord shape, trimmed to fields consumed by App Connect."
      },
      "patch": {
        "tags": [
          "Call Logs"
        ],
        "summary": "Update a call log",
        "operationId": "patchCallLog",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateCallLog"
        },
        "responses": {
          "200": {
            "description": "Updated call-log result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CallLogUpdateResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        },
        "description": "Updates an existing CRM call activity using the local mapping found by sessionId and extension identity. hashedExtensionId is preferred when present; rcExtensionId is hashed locally for server-side logging; extensionNumber remains a legacy fallback."
      }
    },
    "/callLog/cacheNote": {
      "post": {
        "tags": [
          "Call Logs"
        ],
        "summary": "Cache a call note before full logging",
        "operationId": "postCallLogCacheNote",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CallNoteCache"
        },
        "responses": {
          "200": {
            "description": "Call note cache result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/callDisposition": {
      "put": {
        "tags": [
          "Call Logs"
        ],
        "summary": "Upsert call dispositions",
        "operationId": "putCallDisposition",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CallDisposition"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Disposition upsert result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                },
                "examples": {
                  "saved": {
                    "summary": "Disposition saved",
                    "value": {
                      "successful": true,
                      "returnMessage": {
                        "message": "Disposition saved.",
                        "messageType": "success",
                        "ttl": 3000
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        }
      }
    },
    "/messageLog": {
      "post": {
        "tags": [
          "Message Logs"
        ],
        "summary": "Create or update an SMS/fax/message log",
        "operationId": "postMessageLog",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/MessageLog"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "Message-log creation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageLogResponse"
                },
                "examples": {
                  "created": {
                    "summary": "Message logs created with numeric connector ids",
                    "value": {
                      "successful": true,
                      "logIds": [
                        101,
                        102
                      ],
                      "returnMessage": {
                        "message": "Messages logged.",
                        "messageType": "success",
                        "ttl": 3000
                      }
                    }
                  },
                  "alreadyLogged": {
                    "summary": "All messages were already logged",
                    "value": {
                      "successful": true,
                      "logIds": [],
                      "returnMessage": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedSession"
          }
        },
        "description": "Creates or updates CRM activities for SMS, MMS, voicemail, fax, and shared SMS conversations. The server groups normal messages by conversation/day and shared SMS by conversationLogId."
      }
    },
    "/calldown": {
      "get": {
        "tags": [
          "Call Down"
        ],
        "summary": "List call-down entries",
        "operationId": "getCallDown",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Optional call-down status filter.",
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Call Down"
        ],
        "summary": "Create a call-down entry",
        "operationId": "postCallDown",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenericJson"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/calldown/{id}": {
      "patch": {
        "tags": [
          "Call Down"
        ],
        "summary": "Update a call-down entry",
        "operationId": "patchCallDown",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/id"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenericJson"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      },
      "delete": {
        "tags": [
          "Call Down"
        ],
        "summary": "Delete a call-down entry",
        "operationId": "deleteCallDown",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/id"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/plugin/register": {
      "post": {
        "tags": [
          "Plugins"
        ],
        "summary": "Register a plugin for an account",
        "operationId": "postPluginRegister",
        "parameters": [],
        "requestBody": {
          "$ref": "#/components/requestBodies/PluginRegister"
        },
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "The plugin was registered for the account.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PluginMutationResponse"
                },
                "examples": {
                  "registered": {
                    "summary": "Plugin registered",
                    "value": {
                      "successful": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/plugin/unregister": {
      "delete": {
        "tags": [
          "Plugins"
        ],
        "summary": "Unregister a plugin for an account",
        "operationId": "deletePluginUnregister",
        "parameters": [],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "security": [
          {
            "ringCentralAccessToken": []
          },
          {
            "legacyRingCentralAccessToken": []
          }
        ]
      }
    },
    "/plugin/licenseStatus": {
      "get": {
        "tags": [
          "Plugins"
        ],
        "summary": "Get plugin license status for a user",
        "operationId": "getPluginLicenseStatus",
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "name": "rcAccountId",
            "in": "query",
            "required": true,
            "description": "RingCentral account id whose plugin license is being checked.",
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "pluginId",
            "in": "query",
            "required": true,
            "description": "Plugin identifier from the connector manifest.",
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/plugin/async-callback/{taskId}": {
      "post": {
        "tags": [
          "Plugins"
        ],
        "summary": "Receive an async plugin callback",
        "description": "Receives async call-log plugin completion. The task id in the path validates the callback task.",
        "operationId": "postPluginAsyncCallback",
        "parameters": [
          {
            "$ref": "#/components/parameters/taskId"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AsyncPluginCallback"
        },
        "responses": {
          "200": {
            "description": "Async plugin callback result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncPluginCallbackResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "description": "Async plugin task was not found or expired.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncPluginCallbackResponse"
                }
              }
            }
          },
          "500": {
            "description": "Callback was valid, but App Connect failed to update the CRM log.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncPluginCallbackResponse"
                }
              }
            }
          }
        }
      }
    },
    "/ringcentral/admin/report": {
      "get": {
        "tags": [
          "RingCentral Reports"
        ],
        "summary": "Generate an admin report",
        "operationId": "getRingCentralAdminReport",
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA timezone used to group report data.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "timeFrom",
            "in": "query",
            "required": false,
            "description": "Inclusive report start time.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "timeTo",
            "in": "query",
            "required": false,
            "description": "Exclusive report end time.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "groupBy",
            "in": "query",
            "required": false,
            "description": "Report aggregation interval.",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/ringcentral/admin/userReport": {
      "get": {
        "tags": [
          "RingCentral Reports"
        ],
        "summary": "Generate an admin user report",
        "operationId": "getRingCentralAdminUserReport",
        "responses": {
          "200": {
            "$ref": "#/components/responses/OkJson"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ],
        "parameters": [
          {
            "name": "rcExtensionId",
            "in": "query",
            "required": true,
            "description": "RingCentral extension identifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": false,
            "description": "IANA timezone used for report data.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "timeFrom",
            "in": "query",
            "required": false,
            "description": "Inclusive report start time.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "timeTo",
            "in": "query",
            "required": false,
            "description": "Exclusive report end time.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ]
      }
    },
    "/ringcentral/oauth/callback": {
      "get": {
        "tags": [
          "RingCentral Reports"
        ],
        "summary": "RingCentral admin OAuth callback",
        "description": "Exchanges the RingCentral OAuth authorization code for the account associated with the authenticated App Connect user.",
        "operationId": "getRingCentralOauthCallback",
        "parameters": [
          {
            "name": "code",
            "in": "query",
            "required": true,
            "description": "One-time authorization code returned by RingCentral OAuth.",
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The RingCentral OAuth authorization was completed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ]
      }
    },
    "/debug/report/url": {
      "get": {
        "tags": [
          "RingCentral Reports"
        ],
        "summary": "Generate a debug report URL",
        "operationId": "getDebugReportUrl",
        "responses": {
          "200": {
            "x-app-connect-generated-contract": true,
            "description": "A short-lived debug-report upload URL.",
            "headers": {
              "X-Refreshed-JWT-Token": {
                "$ref": "#/components/headers/RefreshedUserJwt"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DebugReportUrlResponse"
                },
                "examples": {
                  "uploadUrl": {
                    "summary": "Presigned report upload URL",
                    "value": {
                      "presignedUrl": "https://uploads.example.com/debug-report.json?signature=example"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        },
        "security": [
          {
            "userJwt": []
          },
          {
            "legacyUserJwt": []
          }
        ]
      }
    }
  },
  "x-app-connect-generated-contracts": {
    "version": 1,
    "schemas": [
      "AdminSuccessMessage",
      "AdminSettingsUpdateRequest",
      "ManagedAuthFieldDefinition",
      "StoredFieldValue",
      "ManagedAuthAdminUserValue",
      "ManagedAuthAdminResponse",
      "ManagedAuthUpdateRequest",
      "ManagedOAuthValues",
      "AdminManagedOAuthCacheRequest",
      "AppointmentAttendee",
      "IdentifiedAppointment",
      "AppointmentContactReference",
      "AppointmentCreateInput",
      "AppointmentPatchInput",
      "AppointmentCreateRequest",
      "AppointmentPatchRequest",
      "AppointmentStatusUpdateRequest",
      "AppointmentFailureResponse",
      "AppointmentListResponse",
      "AppointmentCreateResponse",
      "AppointmentRecordResponse",
      "AppointmentActionResponse",
      "ReturnMessage",
      "BasicMutationResponse",
      "ApiKeyLoginRequest",
      "ApiKeyLoginResponse",
      "AuthValidationResponse",
      "ManagedAuthStateResponse",
      "ManagedOAuthStateResponse",
      "HealthResponse",
      "ReleaseNoteItem",
      "ReleaseNoteSections",
      "ReleaseNotesResponse",
      "ServerVersionInfoResponse",
      "ImplementedInterfacesResponse",
      "UserInfoHashResponse",
      "DebugReportUrlResponse",
      "PluginRegisterRequest",
      "PluginMutationResponse",
      "AdditionalSubmission",
      "ContactInfo",
      "CallLogMutationResponse",
      "MessageLogResponse",
      "CallDispositionItem",
      "CallDispositionRequest",
      "UserSetting",
      "UserSettings",
      "UserSettingsEnvelope",
      "UserSettingsUpdateRequest"
    ],
    "requestBodies": [
      "ApiKeyLogin",
      "PluginRegister",
      "CallDisposition",
      "UserSettingsUpdate",
      "AdminSettingsUpdate",
      "ManagedAuthUpdate",
      "AdminManagedOAuthCache",
      "AppointmentCreate",
      "AppointmentPatch",
      "AppointmentStatusUpdate"
    ],
    "operations": [
      {
        "method": "get",
        "path": "/isAlive",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/releaseNotes",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/apiKeyLogin",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/serverVersionInfo",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/implementedInterfaces",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/userInfoHash",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/debug/report/url",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/plugin/register",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/callLog",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/messageLog",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "put",
        "path": "/callDisposition",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/authValidation",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/apiKeyManagedAuthState",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/oauthManagedAuthState",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/user/preloadSettings",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/user/refreshInfo",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/user/settings",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/user/settings",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/admin/settings",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/admin/managedAuth",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/admin/managedAuth",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/admin/managedOAuth/cache",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "delete",
        "path": "/admin/managedOAuth/cache",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "delete",
        "path": "/admin/managedOAuth/account",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/appointments",
        "parameters": [
          "query:startDate",
          "query:endDate"
        ],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/appointments",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "patch",
        "path": "/appointments/{appointmentId}",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/appointments/{appointmentId}/status",
        "parameters": [],
        "requestBody": true,
        "responses": [
          "200"
        ]
      },
      {
        "method": "get",
        "path": "/appointments/{appointmentId}/refresh",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/appointments/{appointmentId}/confirm",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      },
      {
        "method": "post",
        "path": "/appointments/{appointmentId}/cancel",
        "parameters": [],
        "requestBody": false,
        "responses": [
          "200"
        ]
      }
    ]
  },
  "components": {
    "securitySchemes": {
      "userJwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "App Connect user-session JWT. A response may rotate this token in the X-Refreshed-JWT-Token header."
      },
      "legacyUserJwt": {
        "type": "apiKey",
        "in": "query",
        "name": "jwtToken",
        "description": "Legacy App Connect user-session JWT query parameter. Prefer Authorization: Bearer."
      },
      "ringCentralAccessToken": {
        "type": "apiKey",
        "in": "header",
        "name": "X-RC-Access-Token",
        "description": "RingCentral OAuth access token used for user or administrator validation."
      },
      "legacyRingCentralAccessToken": {
        "type": "apiKey",
        "in": "query",
        "name": "rcAccessToken",
        "description": "Legacy RingCentral access-token query parameter. Prefer X-RC-Access-Token. Some legacy request bodies also carry rcAccessToken."
      }
    },
    "parameters": {
      "platform": {
        "name": "platform",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "phoneNumber": {
        "name": "phoneNumber",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Phone number to search, normally E.164."
      },
      "appointmentId": {
        "name": "appointmentId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "id": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "taskId": {
        "name": "taskId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Async plugin task id generated by App Connect."
      },
      "sessionIds": {
        "name": "sessionIds",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Comma-separated RingCentral call session ids. The server processes at most five ids."
      },
      "extensionNumber": {
        "name": "extensionNumber",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Legacy RingCentral extension number used to disambiguate duplicated call session ids when hashedExtensionId is unavailable."
      },
      "hashedExtensionId": {
        "name": "hashedExtensionId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Hashed RingCentral extension id used to disambiguate duplicated call session ids. Preferred over extensionNumber when available."
      },
      "requireDetails": {
        "name": "requireDetails",
        "in": "query",
        "required": false,
        "schema": {
          "type": "boolean",
          "default": false
        },
        "description": "When true, the server calls the connector getCallLog interface and includes CRM log details."
      },
      "isExtension": {
        "name": "isExtension",
        "in": "query",
        "required": false,
        "schema": {
          "type": "boolean",
          "default": false
        },
        "description": "Marks the lookup as an internal extension-number lookup."
      }
    },
    "requestBodies": {
      "GenericJson": {
        "required": false,
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "description": "Connector-defined JSON payload. The exact fields depend on the selected connector interface."
      },
      "ApiKeyLogin": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Connector and credential data used to create an App Connect user session.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiKeyLoginRequest"
            },
            "examples": {
              "apiKey": {
                "summary": "API-key login",
                "value": {
                  "platform": "exampleCRM",
                  "apiKey": "example-api-key",
                  "hostname": "crm.example.com"
                }
              }
            }
          }
        }
      },
      "CreateContact": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CreateContactRequest"
            }
          }
        }
      },
      "CreateCallLog": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CreateCallLogRequest"
            }
          }
        }
      },
      "UpdateCallLog": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UpdateCallLogRequest"
            }
          }
        }
      },
      "CallNoteCache": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CallNoteCacheRequest"
            }
          }
        }
      },
      "CallDisposition": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Call-log identity and the dispositions selected by the user.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CallDispositionRequest"
            },
            "examples": {
              "qualifiedLead": {
                "summary": "Set a call disposition",
                "value": {
                  "sessionId": "s-a1b2c3d4",
                  "extensionNumber": "101",
                  "hashedExtensionId": "c16b7b40d7a9d5b5f6d8f633f0e362af",
                  "dispositions": [
                    {
                      "id": "qualified-lead",
                      "value": "Qualified lead"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "MessageLog": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/MessageLogRequest"
            }
          }
        }
      },
      "AsyncPluginCallback": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AsyncPluginCallbackRequest"
            }
          }
        }
      },
      "AppointmentStatusUpdate": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "New appointment status. Status support depends on connector capability.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AppointmentStatusUpdateRequest"
            },
            "examples": {
              "tentative": {
                "summary": "Mark an appointment tentative",
                "value": {
                  "status": "tentative"
                }
              }
            }
          }
        }
      },
      "PluginRegister": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Plugin and RingCentral account identifiers to register.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PluginRegisterRequest"
            },
            "examples": {
              "sharedPlugin": {
                "summary": "Register a shared plugin",
                "value": {
                  "pluginId": "plugin.example",
                  "rcAccountId": "123456789",
                  "pluginAccess": "shared",
                  "pluginName": "Example CRM workflow"
                }
              }
            }
          }
        }
      },
      "UserSettingsUpdate": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "User settings to upsert and setting keys to remove.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UserSettingsUpdateRequest"
            },
            "examples": {
              "update": {
                "summary": "Update user settings",
                "value": {
                  "userSettings": {
                    "theme": {
                      "value": "dark",
                      "customizable": true,
                      "defaultValue": "system",
                      "options": [
                        "system",
                        "light",
                        "dark"
                      ]
                    }
                  },
                  "settingKeysToRemove": [
                    "legacySetting"
                  ]
                }
              }
            }
          }
        }
      },
      "AdminSettingsUpdate": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Account-level App Connect settings. Nested setting definitions are extensible.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AdminSettingsUpdateRequest"
            },
            "examples": {
              "settings": {
                "summary": "Update account settings",
                "value": {
                  "adminSettings": {
                    "userSettings": {
                      "autoLogCalls": true,
                      "autoLogMessages": false
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ManagedAuthUpdate": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Account-scoped or user-scoped managed authentication values.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ManagedAuthUpdateRequest"
            },
            "examples": {
              "account": {
                "summary": "Update account-scoped values",
                "value": {
                  "scope": "org",
                  "values": {
                    "tenantId": "tenant.example"
                  },
                  "fieldsToRemove": [
                    "legacyTenantId"
                  ]
                }
              },
              "user": {
                "summary": "Update user-scoped values",
                "value": {
                  "scope": "user",
                  "rcExtensionId": "101",
                  "rcUserName": "Ada Lovelace",
                  "values": {
                    "userToken": "example-user-token"
                  },
                  "fieldsToRemove": [
                    "oldUserToken"
                  ]
                }
              }
            }
          }
        }
      },
      "AdminManagedOAuthCache": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Managed OAuth values cached until the account OAuth flow completes.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AdminManagedOAuthCacheRequest"
            },
            "examples": {
              "oauth": {
                "summary": "Cache managed OAuth client settings",
                "value": {
                  "values": {
                    "clientId": "managed-oauth-client",
                    "clientSecret": "example-client-secret",
                    "authorizationUri": "https://crm.example.com/oauth/authorize",
                    "accessTokenUri": "https://crm.example.com/oauth/token",
                    "scopes": [
                      "contacts.read",
                      "activities.write"
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "AppointmentCreate": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Appointment payload. The wrapper is canonical; the direct form remains for compatibility.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AppointmentCreateRequest"
            },
            "examples": {
              "appointment": {
                "summary": "Create an appointment",
                "value": {
                  "payload": {
                    "title": "Strategy Call",
                    "summary": "Discuss case plan",
                    "startTimeUtc": "2026-07-20T19:00:00.000Z",
                    "durationMinutes": 30,
                    "contacts": [
                      {
                        "id": "501",
                        "type": "Contact"
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "AppointmentPatch": {
        "x-app-connect-generated-contract": true,
        "required": true,
        "description": "Partial appointment update. Omitted fields are preserved.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AppointmentPatchRequest"
            },
            "examples": {
              "appointment": {
                "summary": "Patch an appointment",
                "value": {
                  "patch": {
                    "title": "Updated Strategy Call"
                  }
                }
              }
            }
          }
        }
      }
    },
    "responses": {
      "OkJson": {
        "description": "Successful JSON response. Exact response shape depends on the route and connector interface.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GenericSuccessResponse"
            }
          }
        },
        "headers": {
          "X-Refreshed-JWT-Token": {
            "$ref": "#/components/headers/RefreshedUserJwt"
          }
        }
      },
      "BadRequest": {
        "description": "Bad request, missing authentication, or connector error.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          },
          "text/plain": {
            "schema": {
              "type": "string"
            }
          }
        },
        "headers": {
          "X-Refreshed-JWT-Token": {
            "$ref": "#/components/headers/RefreshedUserJwt"
          }
        }
      },
      "Forbidden": {
        "description": "The caller is authenticated but is not permitted to perform the operation.",
        "headers": {
          "X-Refreshed-JWT-Token": {
            "$ref": "#/components/headers/RefreshedUserJwt"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          },
          "text/plain": {
            "schema": {
              "type": "string"
            }
          }
        }
      },
      "UnauthorizedSession": {
        "description": "The user session is expired or revoked.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          },
          "text/plain": {
            "schema": {
              "type": "string"
            }
          }
        },
        "headers": {
          "X-Refreshed-JWT-Token": {
            "$ref": "#/components/headers/RefreshedUserJwt"
          }
        }
      }
    },
    "schemas": {
      "ReturnMessage": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "messageType": {
            "type": "string",
            "description": "Presentation severity. Common values are success, info, warning, danger, and error."
          },
          "ttl": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647,
            "format": "int32"
          },
          "details": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ApiKeyLoginRequest": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "minLength": 1,
            "description": "Connector platform identifier from the App Connect manifest.",
            "example": "exampleCRM"
          },
          "apiKey": {
            "type": "string",
            "format": "password",
            "writeOnly": true,
            "description": "Primary connector credential. It can be omitted when managed authentication supplies the value."
          },
          "rcAccessToken": {
            "type": "string",
            "format": "password",
            "writeOnly": true,
            "deprecated": true,
            "description": "Legacy body location for a RingCentral access token. Use the X-RC-Access-Token header instead."
          },
          "hostname": {
            "type": "string",
            "description": "Optional connector host name for CRM deployments with tenant-specific endpoints."
          },
          "proxyId": {
            "type": "string",
            "description": "Optional proxy connector identifier."
          },
          "connectorId": {
            "type": "string",
            "description": "Developer Portal connector identifier used to resolve managed authentication fields."
          },
          "isPrivate": {
            "type": "boolean",
            "default": false,
            "description": "Whether connectorId identifies a private connector."
          },
          "additionalInfo": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Connector-defined credential fields, such as tenant or user identifiers."
          }
        },
        "required": [
          "platform"
        ],
        "additionalProperties": false,
        "x-app-connect-generated-contract": true
      },
      "ApiKeyLoginResponse": {
        "type": "object",
        "properties": {
          "jwtToken": {
            "type": "string",
            "description": "App Connect JWT used to authenticate subsequent user operations."
          },
          "name": {
            "type": "string",
            "description": "Display name returned by the CRM connector."
          },
          "returnMessage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReturnMessage"
              }
            ]
          }
        },
        "required": [
          "jwtToken"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ErrorResponse": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "error": {},
              "successful": {
                "type": "boolean"
              },
              "returnMessage": {
                "$ref": "#/components/schemas/ReturnMessage"
              }
            },
            "additionalProperties": true
          }
        ],
        "description": "Error payload. Legacy routes may return a plain string instead."
      },
      "GenericSuccessResponse": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "description": "Connector-defined JSON response. The exact fields depend on the selected connector interface."
      },
      "BasicMutationResponse": {
        "type": "object",
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "returnMessage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReturnMessage"
              }
            ]
          }
        },
        "required": [
          "successful"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ContactInfo": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "phoneNumber": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "company": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "createdDate": {
            "type": "string"
          },
          "mostRecentActivityDate": {
            "type": "string"
          },
          "additionalInfo": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "isNewContact": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ContactSearchResponse": {
        "type": "object",
        "required": [
          "successful"
        ],
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "returnMessage": {
            "$ref": "#/components/schemas/ReturnMessage"
          },
          "contact": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactInfo"
            }
          }
        }
      },
      "CreateContactRequest": {
        "type": "object",
        "required": [
          "phoneNumber",
          "newContactName"
        ],
        "properties": {
          "phoneNumber": {
            "type": "string"
          },
          "newContactName": {
            "type": "string"
          },
          "newContactType": {
            "type": "string"
          },
          "additionalSubmission": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "ContactMutationResponse": {
        "type": "object",
        "required": [
          "successful"
        ],
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "returnMessage": {
            "$ref": "#/components/schemas/ReturnMessage"
          },
          "contact": {
            "$ref": "#/components/schemas/ContactInfo"
          }
        }
      },
      "RcParty": {
        "type": "object",
        "properties": {
          "phoneNumber": {
            "type": "string"
          },
          "extensionNumber": {
            "type": "string"
          },
          "extensionId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "location": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "RcCallRecording": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "uri": {
            "type": "string",
            "format": "uri"
          },
          "type": {
            "type": "string",
            "enum": [
              "Automatic",
              "OnDemand"
            ]
          },
          "contentUri": {
            "type": "string",
            "format": "uri"
          },
          "link": {
            "type": "string",
            "format": "uri"
          }
        },
        "additionalProperties": true
      },
      "RcCallLogLeg": {
        "type": "object",
        "properties": {
          "legType": {
            "type": "string"
          },
          "master": {
            "type": "boolean"
          },
          "direction": {
            "type": "string",
            "enum": [
              "Inbound",
              "Outbound"
            ]
          },
          "action": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "startTime": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "integer",
            "format": "int64"
          },
          "from": {
            "$ref": "#/components/schemas/RcParty"
          },
          "to": {
            "$ref": "#/components/schemas/RcParty"
          }
        },
        "additionalProperties": true
      },
      "RcCallLogRecord": {
        "type": "object",
        "required": [
          "sessionId"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "uri": {
            "type": "string",
            "format": "uri"
          },
          "accountId": {
            "type": "string"
          },
          "sessionId": {
            "type": "string"
          },
          "telephonySessionId": {
            "type": "string"
          },
          "direction": {
            "type": "string",
            "enum": [
              "Inbound",
              "Outbound"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "Voice",
              "Fax"
            ]
          },
          "action": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "startTime": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "integer",
            "format": "int64"
          },
          "durationMs": {
            "type": "integer",
            "format": "int64"
          },
          "from": {
            "$ref": "#/components/schemas/RcParty"
          },
          "to": {
            "$ref": "#/components/schemas/RcParty"
          },
          "recording": {
            "$ref": "#/components/schemas/RcCallRecording"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RcCallLogLeg"
            }
          },
          "customSubject": {
            "type": "string"
          },
          "lastModifiedTime": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true
      },
      "AdditionalSubmission": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "description": "Connector-defined custom fields collected by the App Connect client.",
        "x-app-connect-generated-contract": true
      },
      "CreateCallLogRequest": {
        "type": "object",
        "required": [
          "logInfo",
          "contactId"
        ],
        "properties": {
          "logInfo": {
            "$ref": "#/components/schemas/RcCallLogRecord"
          },
          "extensionNumber": {
            "type": "string",
            "description": "Legacy RingCentral extension number identity fallback."
          },
          "hashedExtensionId": {
            "type": "string",
            "description": "Hashed RingCentral extension id generated by the client for client-side call logging requests."
          },
          "rcExtensionId": {
            "type": "string",
            "description": "Raw RingCentral extension id sent by server-side call logging; the adapter server hashes it locally before duplicate checks and persistence."
          },
          "contactId": {
            "type": "string"
          },
          "contactType": {
            "type": "string"
          },
          "contactName": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "additionalSubmission": {
            "$ref": "#/components/schemas/AdditionalSubmission"
          },
          "aiNote": {
            "type": "string"
          },
          "transcript": {
            "type": "string"
          },
          "ringSenseTranscript": {
            "type": "string"
          },
          "ringSenseSummary": {
            "type": "string"
          },
          "ringSenseAIScore": {
            "type": "object",
            "additionalProperties": true
          },
          "ringSenseBulletedSummary": {
            "type": "string"
          },
          "ringSenseLink": {
            "type": "string",
            "format": "uri"
          }
        },
        "example": {
          "logInfo": {
            "id": "123456789",
            "sessionId": "987654321",
            "telephonySessionId": "s-a1b2c3",
            "direction": "Inbound",
            "from": {
              "phoneNumber": "+14155550100",
              "name": "Jane Smith"
            },
            "to": {
              "phoneNumber": "+16505550199",
              "extensionNumber": "101"
            },
            "startTime": "2026-06-24T02:30:00.000Z",
            "duration": 125,
            "result": "Accepted",
            "recording": {
              "link": "https://example.com/recording/123"
            }
          },
          "extensionNumber": "101",
          "hashedExtensionId": "hashed-extension-101",
          "contactId": "crm-contact-123",
          "contactName": "Jane Smith",
          "contactType": "Contact",
          "note": "Discussed renewal options."
        }
      },
      "UpdateCallLogRequest": {
        "type": "object",
        "required": [
          "sessionId"
        ],
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "extensionNumber": {
            "type": "string",
            "description": "Legacy RingCentral extension number identity fallback."
          },
          "hashedExtensionId": {
            "type": "string",
            "description": "Hashed RingCentral extension id used to find the local call-log mapping."
          },
          "rcExtensionId": {
            "type": "string",
            "description": "Raw RingCentral extension id sent by server-side call logging; the adapter server hashes it locally before lookup."
          },
          "accountId": {
            "type": "string"
          },
          "recordingLink": {
            "type": "string",
            "format": "uri"
          },
          "recordingDownloadLink": {
            "type": "string",
            "format": "uri"
          },
          "subject": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "startTime": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "integer",
            "format": "int64"
          },
          "result": {
            "type": "string"
          },
          "direction": {
            "type": "string",
            "enum": [
              "Inbound",
              "Outbound"
            ]
          },
          "from": {
            "$ref": "#/components/schemas/RcParty"
          },
          "to": {
            "$ref": "#/components/schemas/RcParty"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RcCallLogLeg"
            }
          },
          "aiNote": {
            "type": "string"
          },
          "transcript": {
            "type": "string"
          },
          "additionalSubmission": {
            "$ref": "#/components/schemas/AdditionalSubmission"
          },
          "ringSenseTranscript": {
            "type": "string"
          },
          "ringSenseSummary": {
            "type": "string"
          },
          "ringSenseAIScore": {
            "type": "object",
            "additionalProperties": true
          },
          "ringSenseBulletedSummary": {
            "type": "string"
          },
          "ringSenseLink": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "CallLogInfo": {
        "type": "object",
        "properties": {
          "subject": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "fullBody": {
            "type": "string"
          },
          "fullLogResponse": {
            "type": "object",
            "additionalProperties": true
          },
          "contactName": {
            "type": "string"
          },
          "dispositions": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "CallLogLookupItem": {
        "type": "object",
        "required": [
          "sessionId",
          "matched"
        ],
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "matched": {
            "type": "boolean"
          },
          "logId": {
            "type": "string"
          },
          "logData": {
            "$ref": "#/components/schemas/CallLogInfo"
          }
        }
      },
      "CallLogLookupResponse": {
        "type": "object",
        "required": [
          "successful",
          "logs"
        ],
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "logs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CallLogLookupItem"
            }
          },
          "returnMessage": {
            "$ref": "#/components/schemas/ReturnMessage"
          }
        }
      },
      "CallLogMutationResponse": {
        "type": "object",
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "logId": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "returnMessage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReturnMessage"
              }
            ]
          }
        },
        "required": [
          "successful"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "CallLogUpdateResponse": {
        "type": "object",
        "required": [
          "successful"
        ],
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "logId": {
            "type": "string"
          },
          "updatedNote": {
            "type": "string"
          },
          "returnMessage": {
            "$ref": "#/components/schemas/ReturnMessage"
          }
        }
      },
      "CallNoteCacheRequest": {
        "type": "object",
        "required": [
          "sessionId",
          "note"
        ],
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        }
      },
      "CallDispositionRequest": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string",
            "minLength": 1
          },
          "extensionNumber": {
            "anyOf": [
              {
                "nullable": true,
                "type": "string"
              },
              {
                "nullable": true,
                "type": "number"
              }
            ],
            "description": "Legacy RingCentral extension-number identity fallback."
          },
          "hashedExtensionId": {
            "anyOf": [
              {
                "nullable": true,
                "type": "string"
              },
              {
                "nullable": true,
                "type": "number"
              }
            ],
            "description": "Hashed RingCentral extension id used to find the local call-log mapping."
          },
          "dispositions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CallDispositionItem"
            }
          },
          "additionalSubmission": {
            "description": "Accepted for client compatibility; the current call-disposition handler does not persist or forward these values.",
            "allOf": [
              {
                "$ref": "#/components/schemas/AdditionalSubmission"
              }
            ]
          }
        },
        "required": [
          "sessionId"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "MessageAttachment": {
        "type": "object",
        "properties": {
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int64"
              }
            ]
          },
          "uri": {
            "type": "string",
            "format": "uri"
          },
          "link": {
            "type": "string",
            "format": "uri"
          },
          "type": {
            "type": "string",
            "enum": [
              "AudioRecording",
              "AudioTranscription",
              "Text",
              "SourceDocument",
              "RenderedDocument",
              "MmsAttachment"
            ]
          },
          "contentType": {
            "type": "string"
          },
          "vmDuration": {
            "type": "integer",
            "format": "int32"
          },
          "fileName": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "format": "int32"
          },
          "width": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": true
      },
      "MessageParty": {
        "type": "object",
        "properties": {
          "phoneNumber": {
            "type": "string"
          },
          "extensionNumber": {
            "type": "string"
          },
          "extensionId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "recipientId": {
            "type": "string"
          },
          "target": {
            "type": "boolean"
          },
          "messageStatus": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "RcMessage": {
        "type": "object",
        "required": [
          "id",
          "type"
        ],
        "properties": {
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int64"
              }
            ]
          },
          "uri": {
            "type": "string",
            "format": "uri"
          },
          "extensionId": {
            "type": "string"
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MessageAttachment"
            }
          },
          "availability": {
            "type": "string",
            "enum": [
              "Alive",
              "Deleted",
              "Purged"
            ]
          },
          "conversationId": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int64"
              }
            ]
          },
          "conversation": {
            "type": "object",
            "additionalProperties": true
          },
          "creationTime": {
            "type": "string",
            "format": "date-time"
          },
          "lastModifiedTime": {
            "type": "string",
            "format": "date-time"
          },
          "direction": {
            "type": "string",
            "enum": [
              "Inbound",
              "Outbound"
            ]
          },
          "from": {
            "$ref": "#/components/schemas/MessageParty"
          },
          "to": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MessageParty"
            }
          },
          "messageStatus": {
            "type": "string"
          },
          "priority": {
            "type": "string",
            "enum": [
              "Normal",
              "High"
            ]
          },
          "readStatus": {
            "type": "string",
            "enum": [
              "Read",
              "Unread"
            ]
          },
          "smsDeliveryTime": {
            "type": "string",
            "format": "date-time"
          },
          "smsSendingAttemptsCount": {
            "type": "integer",
            "format": "int32"
          },
          "subject": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "Fax",
              "SMS",
              "MMS",
              "VoiceMail",
              "Pager",
              "Text"
            ]
          },
          "faxPageCount": {
            "type": "integer",
            "format": "int32"
          },
          "faxResolution": {
            "type": "string"
          },
          "deliveryErrorCode": {
            "type": "string"
          },
          "segmentCount": {
            "type": "integer",
            "format": "int32"
          },
          "vmTranscriptionStatus": {
            "type": "string"
          },
          "owner": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "MessageCorrespondent": {
        "type": "object",
        "required": [
          "phoneNumber"
        ],
        "properties": {
          "phoneNumber": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "id": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "MessageConversationLog": {
        "type": "object",
        "required": [
          "messages",
          "correspondents"
        ],
        "properties": {
          "conversationId": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int64"
              }
            ]
          },
          "conversationLogId": {
            "type": "string"
          },
          "messages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RcMessage"
            }
          },
          "correspondents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MessageCorrespondent"
            }
          },
          "owner": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "assignee": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "rcAccessToken": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "MessageLogRequest": {
        "type": "object",
        "required": [
          "logInfo",
          "contactId"
        ],
        "properties": {
          "logInfo": {
            "$ref": "#/components/schemas/MessageConversationLog"
          },
          "contactId": {
            "type": "string"
          },
          "contactType": {
            "type": "string"
          },
          "contactName": {
            "type": "string"
          },
          "additionalSubmission": {
            "$ref": "#/components/schemas/AdditionalSubmission"
          }
        },
        "example": {
          "contactId": "crm-contact-123",
          "contactName": "Jane Smith",
          "contactType": "Contact",
          "logInfo": {
            "conversationId": 555100,
            "conversationLogId": "555100-2026-06-24",
            "correspondents": [
              {
                "phoneNumber": "+14155550100",
                "name": "Jane Smith"
              }
            ],
            "messages": [
              {
                "id": 1724099032020,
                "type": "SMS",
                "direction": "Inbound",
                "subject": "Can we talk later today?",
                "from": {
                  "phoneNumber": "+14155550100",
                  "name": "Jane Smith"
                },
                "to": [
                  {
                    "phoneNumber": "+16505550199",
                    "extensionNumber": "101"
                  }
                ],
                "creationTime": "2026-06-24T03:15:00.000Z"
              }
            ]
          }
        }
      },
      "MessageLogResponse": {
        "type": "object",
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "returnMessage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ReturnMessage"
              },
              {
                "type": "string",
                "nullable": true,
                "enum": [
                  null
                ]
              }
            ]
          },
          "logIds": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            }
          }
        },
        "required": [
          "successful"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AsyncPluginCallbackRequest": {
        "type": "object",
        "required": [
          "successful"
        ],
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "note": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "AsyncPluginCallbackResponse": {
        "type": "object",
        "required": [
          "successful"
        ],
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "AppointmentStatusUpdateRequest": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "status"
        ],
        "additionalProperties": false,
        "x-app-connect-generated-contract": true
      },
      "ServerVersionInfoResponse": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "description": "Version declared by the default CRM manifest."
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false,
        "x-app-connect-generated-contract": true
      },
      "ImplementedInterfacesResponse": {
        "type": "object",
        "properties": {
          "getAuthType": {
            "type": "boolean"
          },
          "getOauthInfo": {
            "type": "boolean"
          },
          "getBasicAuth": {
            "type": "boolean"
          },
          "getUserInfo": {
            "type": "boolean"
          },
          "createCallLog": {
            "type": "boolean"
          },
          "updateCallLog": {
            "type": "boolean"
          },
          "getCallLog": {
            "type": "boolean"
          },
          "createMessageLog": {
            "type": "boolean"
          },
          "updateMessageLog": {
            "type": "boolean"
          },
          "createContact": {
            "type": "boolean"
          },
          "findContact": {
            "type": "boolean"
          },
          "listAppointments": {
            "type": "boolean"
          },
          "createAppointment": {
            "type": "boolean"
          },
          "updateAppointment": {
            "type": "boolean"
          },
          "refreshAppointment": {
            "type": "boolean"
          },
          "confirmAppointment": {
            "type": "boolean"
          },
          "cancelAppointment": {
            "type": "boolean"
          },
          "unAuthorize": {
            "type": "boolean"
          },
          "upsertCallDisposition": {
            "type": "boolean"
          },
          "findContactWithName": {
            "type": "boolean"
          },
          "getUserList": {
            "type": "boolean"
          },
          "getLicenseStatus": {
            "type": "boolean"
          },
          "getLogFormatType": {
            "type": "boolean"
          },
          "refreshUserInfo": {
            "type": "boolean"
          },
          "cacheCallNote": {
            "type": "boolean"
          }
        },
        "required": [
          "getAuthType",
          "getUserInfo",
          "createCallLog",
          "updateCallLog",
          "getCallLog",
          "createMessageLog",
          "updateMessageLog",
          "createContact",
          "findContact",
          "listAppointments",
          "createAppointment",
          "updateAppointment",
          "refreshAppointment",
          "confirmAppointment",
          "cancelAppointment",
          "unAuthorize",
          "upsertCallDisposition",
          "findContactWithName",
          "getUserList",
          "getLicenseStatus",
          "getLogFormatType",
          "refreshUserInfo",
          "cacheCallNote"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "UserInfoHashResponse": {
        "type": "object",
        "properties": {
          "extensionId": {
            "type": "string",
            "minLength": 64,
            "maxLength": 64,
            "description": "SHA-256 hash of the supplied extension identifier."
          },
          "accountId": {
            "type": "string",
            "minLength": 64,
            "maxLength": 64,
            "description": "SHA-256 hash of the supplied account identifier."
          }
        },
        "required": [
          "extensionId",
          "accountId"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "DebugReportUrlResponse": {
        "type": "object",
        "properties": {
          "presignedUrl": {
            "type": "string",
            "format": "uri",
            "description": "Short-lived URL for uploading the debug report."
          }
        },
        "required": [
          "presignedUrl"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "PluginRegisterRequest": {
        "type": "object",
        "properties": {
          "pluginId": {
            "type": "string",
            "minLength": 1,
            "description": "Plugin identifier from the developer portal."
          },
          "rcAccountId": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ],
            "description": "RingCentral account that will receive the plugin."
          },
          "ownerRcAccountId": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ],
            "description": "RingCentral account that owns a shared plugin."
          },
          "pluginAccess": {
            "type": "string",
            "description": "Plugin access mode, such as private, shared, or public."
          },
          "pluginName": {
            "type": "string",
            "description": "Human-readable plugin name."
          },
          "rcAccessToken": {
            "type": "string",
            "format": "password",
            "writeOnly": true,
            "deprecated": true,
            "description": "Legacy body location for a RingCentral access token. Use the X-RC-Access-Token header instead."
          }
        },
        "required": [
          "pluginId",
          "rcAccountId"
        ],
        "additionalProperties": false,
        "x-app-connect-generated-contract": true
      },
      "PluginMutationResponse": {
        "type": "object",
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "returnMessage": {
            "type": "string"
          }
        },
        "required": [
          "successful"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "CallDispositionItem": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "value": {}
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AuthValidationResponse": {
        "type": "object",
        "properties": {
          "successful": {
            "type": "boolean"
          },
          "returnMessage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReturnMessage"
              }
            ]
          }
        },
        "required": [
          "successful"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ManagedAuthStateResponse": {
        "type": "object",
        "properties": {
          "hasManagedAuth": {
            "type": "boolean"
          },
          "allRequiredFieldsSatisfied": {
            "type": "boolean"
          },
          "visibleFieldConsts": {
            "nullable": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "missingRequiredFieldConsts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "fallbackToManualAuth": {
            "type": "boolean"
          }
        },
        "required": [
          "hasManagedAuth",
          "allRequiredFieldsSatisfied",
          "visibleFieldConsts",
          "missingRequiredFieldConsts",
          "fallbackToManualAuth"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ManagedOAuthStateResponse": {
        "type": "object",
        "properties": {
          "isAdmin": {
            "type": "boolean"
          },
          "hasAccountOAuth": {
            "type": "boolean"
          },
          "hasPendingOAuth": {
            "type": "boolean"
          },
          "oauthValues": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "pendingValues": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "required": [
          "isAdmin",
          "hasAccountOAuth",
          "hasPendingOAuth"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "UserSetting": {
        "type": "object",
        "properties": {
          "value": {},
          "customizable": {
            "type": "boolean"
          },
          "isCustomizable": {
            "type": "boolean"
          },
          "isRemoved": {
            "type": "boolean"
          },
          "defaultValue": {},
          "options": {
            "type": "array",
            "items": {}
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "UserSettings": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/UserSetting"
        },
        "description": "User-setting entries keyed by their manifest setting identifier.",
        "x-app-connect-generated-contract": true
      },
      "UserSettingsEnvelope": {
        "type": "object",
        "properties": {
          "userSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserSettings"
              }
            ]
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "UserSettingsUpdateRequest": {
        "type": "object",
        "properties": {
          "userSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserSettings"
              }
            ]
          },
          "settingKeysToRemove": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AdminSuccessMessage": {
        "type": "string",
        "x-app-connect-generated-contract": true
      },
      "AdminSettingsUpdateRequest": {
        "type": "object",
        "properties": {
          "adminSettings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          }
        },
        "required": [
          "adminSettings"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ManagedAuthFieldDefinition": {
        "type": "object",
        "properties": {
          "const": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          },
          "managed": {
            "type": "boolean"
          },
          "managedScope": {
            "type": "string",
            "enum": [
              "account",
              "user"
            ]
          }
        },
        "required": [
          "const"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "StoredFieldValue": {
        "type": "object",
        "properties": {
          "hasValue": {
            "type": "boolean"
          },
          "value": {}
        },
        "required": [
          "hasValue",
          "value"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ManagedAuthAdminUserValue": {
        "type": "object",
        "properties": {
          "rcExtensionId": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "rcUserName": {
            "type": "string"
          },
          "fields": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/StoredFieldValue"
            }
          }
        },
        "required": [
          "rcExtensionId",
          "rcUserName",
          "fields"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ManagedAuthAdminResponse": {
        "type": "object",
        "properties": {
          "hasManagedAuth": {
            "type": "boolean"
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ManagedAuthFieldDefinition"
            }
          },
          "orgFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ManagedAuthFieldDefinition"
            }
          },
          "userFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ManagedAuthFieldDefinition"
            }
          },
          "orgValues": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/StoredFieldValue"
            }
          },
          "userValues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ManagedAuthAdminUserValue"
            }
          }
        },
        "required": [
          "hasManagedAuth",
          "fields",
          "orgFields",
          "userFields",
          "orgValues",
          "userValues"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "ManagedAuthUpdateRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "scope": {
                "type": "string",
                "enum": [
                  "org"
                ]
              },
              "values": {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              "fieldsToRemove": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "scope"
            ],
            "additionalProperties": true
          },
          {
            "type": "object",
            "properties": {
              "scope": {
                "type": "string",
                "enum": [
                  "user"
                ]
              },
              "rcExtensionId": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              "rcUserName": {
                "type": "string"
              },
              "values": {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              "fieldsToRemove": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "scope",
              "rcExtensionId"
            ],
            "additionalProperties": true
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "ManagedOAuthValues": {
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string"
          },
          "clientSecret": {
            "type": "string",
            "format": "password",
            "writeOnly": true
          },
          "accessTokenUri": {
            "type": "string"
          },
          "authorizationUri": {
            "type": "string"
          },
          "redirectUri": {
            "type": "string"
          },
          "scopes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "hostname": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AdminManagedOAuthCacheRequest": {
        "type": "object",
        "properties": {
          "values": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ManagedOAuthValues"
              }
            ]
          }
        },
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AppointmentAttendee": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "email": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AppointmentContactReference": {
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[1-9]\\d*$"
              },
              {
                "type": "integer",
                "minimum": 0,
                "exclusiveMinimum": true,
                "maximum": 9007199254740991
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "anyOf": [
                  {
                    "type": "string",
                    "pattern": "^[1-9]\\d*$"
                  },
                  {
                    "type": "integer",
                    "minimum": 0,
                    "exclusiveMinimum": true,
                    "maximum": 9007199254740991
                  }
                ]
              },
              "type": {
                "type": "string"
              },
              "contactType": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "AppointmentCreateRequest": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "payload": {
                "$ref": "#/components/schemas/AppointmentCreateInput"
              }
            },
            "required": [
              "payload"
            ],
            "additionalProperties": false
          },
          {
            "deprecated": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AppointmentCreateInput"
              }
            ]
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "AppointmentPatchRequest": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "patch": {
                "$ref": "#/components/schemas/AppointmentPatchInput"
              }
            },
            "required": [
              "patch"
            ],
            "additionalProperties": false
          },
          {
            "deprecated": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AppointmentPatchInput"
              }
            ]
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "AppointmentListResponse": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "successful": {
                "type": "boolean",
                "enum": [
                  true
                ]
              },
              "appointments": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/IdentifiedAppointment"
                }
              }
            },
            "required": [
              "successful",
              "appointments"
            ],
            "additionalProperties": true
          },
          {
            "$ref": "#/components/schemas/AppointmentFailureResponse"
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "HealthResponse": {
        "type": "string",
        "enum": [
          "OK"
        ],
        "x-app-connect-generated-contract": true
      },
      "ReleaseNoteItem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Release-note category such as New or Fix."
          },
          "description": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "type",
          "description"
        ],
        "additionalProperties": false,
        "x-app-connect-generated-contract": true
      },
      "ReleaseNoteSections": {
        "type": "object",
        "additionalProperties": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/ReleaseNoteItem"
          }
        },
        "x-app-connect-generated-contract": true
      },
      "ReleaseNotesResponse": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/ReleaseNoteSections"
        },
        "x-app-connect-generated-contract": true
      },
      "AppointmentCreateInput": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1
          },
          "summary": {
            "type": "string"
          },
          "startTimeUtc": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "description": "ISO-8601 appointment timestamp with a UTC offset."
          },
          "durationMinutes": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": true,
            "maximum": 9007199254740991,
            "description": "Appointment duration in whole minutes."
          },
          "contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppointmentContactReference"
            }
          }
        },
        "required": [
          "title",
          "summary",
          "startTimeUtc",
          "durationMinutes"
        ],
        "additionalProperties": false,
        "x-app-connect-generated-contract": true
      },
      "AppointmentPatchInput": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "minLength": 1
              },
              "summary": {
                "type": "string"
              },
              "contacts": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AppointmentContactReference"
                }
              }
            },
            "additionalProperties": false,
            "minProperties": 1
          },
          {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "minLength": 1
              },
              "summary": {
                "type": "string"
              },
              "contacts": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AppointmentContactReference"
                }
              },
              "startTimeUtc": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                "description": "ISO-8601 appointment timestamp with a UTC offset."
              },
              "durationMinutes": {
                "type": "integer",
                "minimum": 0,
                "exclusiveMinimum": true,
                "maximum": 9007199254740991,
                "description": "Appointment duration in whole minutes."
              }
            },
            "required": [
              "startTimeUtc",
              "durationMinutes"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "minLength": 1
              },
              "summary": {
                "type": "string"
              },
              "contacts": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AppointmentContactReference"
                }
              },
              "startTime": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                "description": "ISO-8601 appointment timestamp with a UTC offset."
              },
              "durationMinutes": {
                "type": "integer",
                "minimum": 0,
                "exclusiveMinimum": true,
                "maximum": 9007199254740991,
                "description": "Appointment duration in whole minutes."
              }
            },
            "required": [
              "startTime",
              "durationMinutes"
            ],
            "additionalProperties": false,
            "deprecated": true
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "AppointmentFailureResponse": {
        "type": "object",
        "properties": {
          "successful": {
            "type": "boolean",
            "enum": [
              false
            ]
          },
          "returnMessage": {
            "$ref": "#/components/schemas/ReturnMessage"
          }
        },
        "required": [
          "successful",
          "returnMessage"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      },
      "AppointmentCreateResponse": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "successful": {
                "type": "boolean",
                "enum": [
                  true
                ]
              },
              "appointmentId": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              "appointment": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/IdentifiedAppointment"
                  }
                ]
              },
              "returnMessage": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ReturnMessage"
                  }
                ]
              }
            },
            "required": [
              "successful",
              "appointmentId"
            ],
            "additionalProperties": true
          },
          {
            "$ref": "#/components/schemas/AppointmentFailureResponse"
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "AppointmentRecordResponse": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "successful": {
                "type": "boolean",
                "enum": [
                  true
                ]
              },
              "appointmentId": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              "appointment": {
                "$ref": "#/components/schemas/IdentifiedAppointment"
              },
              "returnMessage": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ReturnMessage"
                  }
                ]
              }
            },
            "required": [
              "successful",
              "appointmentId",
              "appointment"
            ],
            "additionalProperties": true
          },
          {
            "$ref": "#/components/schemas/AppointmentFailureResponse"
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "AppointmentActionResponse": {
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "successful": {
                    "type": "boolean",
                    "enum": [
                      true
                    ]
                  },
                  "appointmentId": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "number"
                      }
                    ]
                  },
                  "appointment": {
                    "$ref": "#/components/schemas/IdentifiedAppointment"
                  },
                  "returnMessage": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/ReturnMessage"
                      }
                    ]
                  }
                },
                "required": [
                  "successful",
                  "appointmentId",
                  "appointment"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "properties": {
                  "successful": {
                    "type": "boolean",
                    "enum": [
                      true
                    ]
                  },
                  "appointmentId": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "number"
                      }
                    ]
                  },
                  "returnMessage": {
                    "$ref": "#/components/schemas/ReturnMessage"
                  }
                },
                "required": [
                  "successful",
                  "appointmentId",
                  "returnMessage"
                ],
                "additionalProperties": true
              }
            ]
          },
          {
            "$ref": "#/components/schemas/AppointmentFailureResponse"
          }
        ],
        "x-app-connect-generated-contract": true
      },
      "IdentifiedAppointment": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "type": "number"
              }
            ]
          },
          "thirdPartyAppointmentId": {
            "anyOf": [
              {
                "nullable": true,
                "type": "string"
              },
              {
                "nullable": true,
                "type": "number"
              }
            ]
          },
          "title": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "nullable": true,
            "description": "Canonical appointment description returned by list operations.",
            "type": "string"
          },
          "summary": {
            "nullable": true,
            "description": "Compatibility alias returned by some create, update, and refresh connectors.",
            "type": "string"
          },
          "participantName": {
            "nullable": true,
            "type": "string"
          },
          "startTimeUtc": {
            "nullable": true,
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "description": "ISO-8601 appointment timestamp with a UTC offset."
          },
          "durationMinutes": {
            "nullable": true,
            "type": "number",
            "minimum": 0
          },
          "status": {
            "nullable": true,
            "type": "string"
          },
          "contactId": {
            "anyOf": [
              {
                "nullable": true,
                "type": "string"
              },
              {
                "nullable": true,
                "type": "number"
              }
            ]
          },
          "contactType": {
            "nullable": true,
            "type": "string"
          },
          "attendees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppointmentAttendee"
            }
          },
          "attendeeIds": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            },
            "description": "Compatibility representation returned by connectors that do not provide attendee objects."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": true,
        "x-app-connect-generated-contract": true
      }
    },
    "headers": {
      "RefreshedUserJwt": {
        "description": "Rotated App Connect user-session JWT. Clients should replace the token they sent when this header is present.",
        "schema": {
          "type": "string"
        }
      }
    }
  }
}
