openapi: 3.0.0 info: title: 8x8 Administration - User Management API version: "1.0" description: | User management API providing endpoints to create, retrieve, list, update, and delete users. The current version of the API is v1.0. ## Authentication All requests to this API require authentication using an API key. Include your API key in the request header: ``` x-api-key: YOUR_API_KEY ``` ## Versioning The API version is specified through a vendor-specific media type. Send it in the `Content-Type` header for requests that carry a payload (such as `POST` and `PUT`) and in the `Accept` header for requests that return a payload (`GET`, and asynchronous `DELETE` operations that return an operation resource). ``` Content-Type: application/vnd.users.v1+json # on POST/PUT (request payload) Accept: application/vnd.users.v1+json # on GET (response payload) ``` ## Base URL `https://api.8x8.com/admin-provisioning` ## Endpoints | Endpoint | Method | Purpose | Async? | |----------|--------|---------|--------| | `/users` | GET | Retrieve paginated list of users with filtering | No | | `/users` | POST | Create a new user account | Yes | | `/users/{userId}` | GET | Retrieve a specific user's details | No | | `/users/{userId}` | PUT | Update an existing user account | Yes | | `/users/{userId}` | DELETE | Remove a user account | Yes | ## OpenAPI Specification Download the complete OpenAPI specification: [user-api-v1.yaml](/administration/user-api-v1.yaml) servers: - url: https://api.8x8.com/admin-provisioning description: Production security: - ApiKeyAuth: [] paths: /users: get: operationId: listUsers summary: List users description: | List users with optional filtering, sorting, and infinite scroll pagination. Uses scrollId-based pagination for efficient navigation through large datasets. tags: - Users parameters: - name: X-Request-Id in: header description: Optional request identifier for tracking required: false schema: type: string format: uuid - name: pageSize in: query description: 'Number of items per page (default: 100)' required: false schema: type: integer example: 100 - name: scrollId in: query description: 'Scroll identifier for retrieving the next page of results' required: false schema: type: string - name: filter in: query description: "RSQL filter expression (e.g., 'basicInfo.userName==jane.doe@corp.com', 'basicInfo.status==ACTIVE')" required: false schema: type: string example: "basicInfo.status==ACTIVE" - name: sort in: query description: "Sort expression. Use '+' prefix or no prefix for ascending order, '-' prefix for descending order (e.g., 'basicInfo.userName', '+basicInfo.userName', or '-basicInfo.userName')" required: false schema: type: string example: "basicInfo.userName" responses: '200': description: Successful response with paginated users headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/UserPage' '400': description: Bad Request - Invalid query parameters or filter syntax headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: invalidSort: summary: Invalid sort parameter value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" field: "sort" message: "Invalid sort parameter" invalidFilter: summary: Invalid filter syntax value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" field: "filter" message: "Invalid filter syntax" conflictingParameters: summary: Conflicting query parameters value: status: 400 title: "Conflicting query parameters" errors: - code: "CONFLICTING_QUERY_PARAMETER" message: "Cannot use scrollId with other first-page query parameters" '503': description: Service Unavailable - Service unavailable due to connectivity or network issues headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 503 title: "Service unavailable" errors: - code: "SERVICE_UNAVAILABLE" message: "Service unavailable" '500': description: Internal Server Error - Unexpected error occurred headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 title: "Internal Server Error" errors: - code: "UNKNOWN" message: "An unexpected error occurred" post: operationId: createUser summary: Create user description: | Create a new user. This operation is asynchronous and returns an Operation object to track progress. tags: - Users parameters: - name: X-Request-Id in: header description: Optional request identifier for tracking required: false schema: type: string format: uuid requestBody: required: true content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/User' responses: '202': description: User creation operation initiated successfully headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/Operation' '400': description: Bad Request - Validation errors headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: validationError: summary: Field validation errors value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" field: "basicInfo.userName" message: "must not be blank" - code: "VALIDATION_ERROR" field: "basicInfo.primaryEmail" message: "must be a well-formed email address" - code: "VALIDATION_ERROR" field: "basicInfo.firstName" message: "size must be between 2 and 128" duplicateUserName: summary: Duplicate userName value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" message: "userName already in use" invalidSite: summary: Invalid site value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" field: "basicInfo.site.id" message: "Either site id or name must be provided" '403': description: Forbidden - Customer ID mismatch headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 title: "Forbidden" detail: "CustomerId mismatch: 0012J00042NkZQIQA3 vs 0012J00042NkZQIQA4" errors: - code: "FORBIDDEN" message: "CustomerId mismatch: 0012J00042NkZQIQA3 vs 0012J00042NkZQIQA4" '408': description: Request Timeout - Downstream service timeout headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 408 title: "Request Timeout" errors: - code: "REQUEST_TIMEOUT" message: "Request to downstream service timed out" '503': description: Service Unavailable - Service unavailable due to connectivity or network issues headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 503 title: "Service unavailable" errors: - code: "SERVICE_UNAVAILABLE" message: "Service unavailable" '429': description: Too Many Requests - Rate limit exceeded headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 title: "Too Many Requests" errors: - code: "TOO_MANY_REQUESTS" message: "Rate limit exceeded, please try again later" '500': description: Internal Server Error - Unexpected error occurred headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 title: "Internal Server Error" errors: - code: "UNKNOWN" message: "An unexpected error occurred" /users/{userId}: get: operationId: getUser summary: Get user by ID description: Retrieve a specific user by their ID tags: - Users parameters: - name: X-Request-Id in: header description: Optional request identifier for tracking required: false schema: type: string format: uuid - name: userId in: path description: User identifier required: true schema: type: string example: "hvOB1l3zDCaDAwp9tNLzZA" responses: '200': description: User retrieved successfully headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/User' '404': description: User not found headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 404 title: "Not Found" errors: - code: "NOT_FOUND" message: "Resource not found" '503': description: Service Unavailable - Service unavailable due to connectivity or network issues headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 503 title: "Service unavailable" errors: - code: "SERVICE_UNAVAILABLE" message: "Service unavailable" '500': description: Internal Server Error - Unexpected error occurred headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 title: "Internal Server Error" errors: - code: "UNKNOWN" message: "An unexpected error occurred" put: operationId: updateUser summary: Update user description: | Update an existing user by their ID. This operation is asynchronous and returns an Operation object to track progress. tags: - Users parameters: - name: X-Request-Id in: header description: Optional request identifier for tracking required: false schema: type: string format: uuid - name: userId in: path description: User identifier required: true schema: type: string example: "hvOB1l3zDCaDAwp9tNLzZA" requestBody: required: true content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/User' responses: '202': description: User update operation initiated successfully headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/Operation' '400': description: Bad Request - Validation errors headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: validationError: summary: Field validation errors value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" field: "basicInfo.userName" message: "must not be blank" mismatchedUserId: summary: Mismatched userId in payload value: status: 400 title: "Mismatched userId in url vs payload" detail: "Mismatched userId in url vs payload: hvOB1l3zDCaDAwp9tNLzZA vs anotherUserId" errors: - code: "VALIDATION_ERROR" field: "basicInfo.userId" message: "Mismatched userId in url vs payload: hvOB1l3zDCaDAwp9tNLzZA vs anotherUserId" duplicateUserName: summary: Duplicate userName value: status: 400 title: "Validation error" errors: - code: "VALIDATION_ERROR" message: "userName already in use" '403': description: Forbidden - Customer ID mismatch headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 403 title: "Forbidden" detail: "CustomerId mismatch: 0012J00042NkZQIQA3 vs 0012J00042NkZQIQA4" errors: - code: "FORBIDDEN" message: "CustomerId mismatch: 0012J00042NkZQIQA3 vs 0012J00042NkZQIQA4" '404': description: User not found headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 404 title: "Not Found" errors: - code: "NOT_FOUND" field: "basicInfo.userId" message: "User not found" '408': description: Request Timeout - Downstream service timeout headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 408 title: "Request Timeout" errors: - code: "REQUEST_TIMEOUT" message: "Request to downstream service timed out" '503': description: Service Unavailable - Service unavailable due to connectivity or network issues headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 503 title: "Service unavailable" errors: - code: "SERVICE_UNAVAILABLE" message: "Service unavailable" '429': description: Too Many Requests - Rate limit exceeded headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 429 title: "Too Many Requests" errors: - code: "TOO_MANY_REQUESTS" message: "Rate limit exceeded, please try again later" '500': description: Internal Server Error - Unexpected error occurred headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 title: "Internal Server Error" errors: - code: "UNKNOWN" message: "An unexpected error occurred" delete: operationId: deleteUser summary: Delete user description: | Delete a specific user by their ID. This operation is asynchronous and returns an Operation object to track progress. tags: - Users parameters: - name: X-Request-Id in: header description: Optional request identifier for tracking required: false schema: type: string format: uuid - name: userId in: path description: User identifier required: true schema: type: string example: "hvOB1l3zDCaDAwp9tNLzZA" responses: '202': description: User deletion operation initiated successfully headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/Operation' '503': description: Service Unavailable - Service unavailable due to connectivity or network issues headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 503 title: "Service unavailable" errors: - code: "SERVICE_UNAVAILABLE" message: "Service unavailable" '500': description: Internal Server Error - Unexpected error occurred headers: X-Response-Id: description: Unique response identifier generated by the service schema: type: string format: uuid content: application/vnd.users.v1+json: schema: $ref: '#/components/schemas/ErrorResponse' example: status: 500 title: "Internal Server Error" errors: - code: "UNKNOWN" message: "An unexpected error occurred" components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: x-api-key schemas: User: type: object properties: basicInfo: $ref: '#/components/schemas/BasicInfo' directoryInfo: $ref: '#/components/schemas/DirectoryInfo' serviceInfo: $ref: '#/components/schemas/ServiceInfo' assignmentInfo: $ref: '#/components/schemas/AssignmentInfo' required: - basicInfo BasicInfo: type: object properties: userId: type: string description: "Unique ID of the user" example: "hvOB1l3zDCaDAwp9tNLzZA" readOnly: true nullable: true customerId: type: string description: "Unique ID of the customer account" example: "0012J00042NkZQIQA3" nullable: true createdTime: type: string format: date-time description: "Date/time the user was created" example: "2025-01-01T01:02:03Z" readOnly: true nullable: true lastUpdatedTime: type: string format: date-time description: "Date/time the user was last updated" example: "2025-01-02T01:02:03Z" readOnly: true nullable: true scimProvider: type: string description: "The Identity Provider linked to the user for SCIM provisioning" example: "okta" nullable: true userName: type: string description: "Unique username used for logging into services" example: "jane.doe@corp.com" minLength: 3 maxLength: 70 pattern: '^[A-Za-z0-9.@\-_/]+$' firstName: type: string description: "User first or given name" example: "Jane" minLength: 2 maxLength: 128 pattern: "^[A-Za-z0-9.,\\-_()' ]+$" lastName: type: string description: "User surname or family name" example: "Doe" minLength: 2 maxLength: 30 pattern: "^[A-Za-z0-9.,\\-_()' ]+$" status: type: string enum: [ACTIVE, INACTIVE] description: "User status controls whether user can log in or use services" example: "ACTIVE" nullable: true locale: type: string enum: [da-DK, de-DE, en-AU, en-GB, en-US, es-ES, fi-FI, fr-BE, fr-CA, fr-CH, fr-FR, it-IT, ja-JP, nl-BE, nl-NL, no-NO, pl-PL, pt-BR, pt-PT, sv-SE, zh-CN] description: "Language for voice prompts, email notifications and device display" example: "en-US" nullable: true timezone: type: string description: "Time zone used for downloading call recordings and viewing call queues" example: "Europe/London" nullable: true primaryEmail: type: string description: "Email used for password setup and onboarding information" example: "jane.doe@corp.com" format: email minLength: 5 maxLength: 128 ssoProvider: type: string description: "The Identity provider linked to the user for Single Sign-On" example: "Okta" nullable: true ssoFederationId: type: string description: "The Identity Provider's ID for the user for Single Sign-On" example: "jdoe@corp.com" nullable: true site: $ref: '#/components/schemas/Site' required: - userName - firstName - lastName - primaryEmail Site: type: object properties: id: type: string description: "Unique ID of the users's site" example: "SAH3U8guQaK4WQhpDZi0rQ" nullable: true name: type: string description: "The name of the user's site" example: "Headquarters" nullable: true pbxName: type: string description: "Unique code name of the PBX on which the user's site resides" example: "corpco01" nullable: true DirectoryInfo: type: object properties: department: type: string description: "Free text field to store the user's department" example: "Sales" minLength: 1 maxLength: 100 pattern: "^[A-Za-z0-9.,&@*+\\-#\\\\/()'– ]+$" nullable: true directoryScope: type: string enum: [CUSTOMER, PBX, SITE] description: "Controls which other users this user can see in any directory features" example: "PBX" nullable: true displayInDirectory: type: boolean description: "Controls whether this user is visible to others in any directory features" example: true nullable: true jobTitle: type: string description: "Free text field to store the user's job title" example: "Account Executive" minLength: 1 maxLength: 254 nullable: true personalPhoneNumbers: type: array description: "List of personal contact numbers from other providers to appear in any directory features" items: $ref: '#/components/schemas/ContactPhoneNumber' nullable: true ServiceInfo: type: object properties: licenses: type: array description: "List of licenses (aka subscriptions) assigned to the user" items: $ref: '#/components/schemas/License' nullable: true extensions: type: array description: "List of the voice extensions belonging to the user" items: $ref: '#/components/schemas/Extension' nullable: true License: type: object properties: id: type: string description: "Unique ID of the license" example: "02KB7TGTYAG4Rq4jDUhwyQ" nullable: true name: type: string description: "Name for the type of license" example: "UC Call Recordings Cold Storage-VOSVC0504-01-GB" nullable: true country: type: string description: "ISO:3166-2 country code of the license" example: "US" nullable: true AssignmentInfo: type: object properties: profilePolicy: $ref: '#/components/schemas/ProfilePolicy' ringGroups: type: array description: "List of ring groups the user is a member of" items: $ref: '#/components/schemas/RingGroup' nullable: true ucCallQueues: type: array items: $ref: '#/components/schemas/UCCallQueue' nullable: true userGroups: type: array items: $ref: '#/components/schemas/UserGroup' nullable: true ProfilePolicy: type: object properties: name: type: string description: "Name of the profile policy assigned ot the user" example: "8x8 Master User Template" nullable: true RingGroup: type: object properties: id: type: string description: "Unique ID of the ring group" example: "aeP9pOoDRbq8_KKiwtsXhQ" nullable: true name: type: string description: "Name of the ring group" example: "Main Reception" nullable: true UCCallQueue: type: object properties: id: type: string description: "Unique ID of the call queue" example: "00NKl7r6SjqRmYTxWlGeQQ" nullable: true name: type: string description: "Name of the call queue" example: "Sales CQ" nullable: true memberType: type: string enum: [PRIMARY, SECONDARY] description: "Indicates whether primary or secondary member" example: "PRIMARY" nullable: true UserGroup: type: object properties: id: type: string description: "Unique ID of the user group" example: "12345" nullable: true name: type: string description: "Name of the user group" example: "Supervisors" nullable: true Extension: type: object description: User voice extension with phone numbers, devices, and settings properties: id: type: string description: "Unique identifier of the extension." example: "7yKxifh1SLuDcqQO4501jA" nullable: true allowInAutoAttendant: type: boolean description: "Indicates whether the extension can be included in Auto Attendant menus or call routing." example: true nullable: true analogFaxEnabled: type: boolean description: "Indicates whether the extension is configured as an analog fax line" example: false nullable: true blockOutboundCallerId: type: boolean description: "Indicates whether the outbound caller ID should be hidden when making external calls." example: false nullable: true callWaitingEnabled: type: boolean description: "Indicates whether call waiting is enabled for the extension." example: true nullable: true dedicatedAgent: type: boolean description: "Indicates whether the extension belongs to a dedicated call-center agent" example: false nullable: true devices: type: array description: "List of physical devices associated with the extension." items: $ref: '#/components/schemas/Device' nullable: true dialPlanCallingCountry: type: string description: "Country code that defines the dialing plan used for outbound and internal call routing." example: "NANP" nullable: true dialPlanRuleset: type: string enum: [INTERNATIONAL, DOMESTIC, EMERGENCYONLY] description: "Dialing plan rule set applied to the extension, determining allowed dialing patterns and call routing" example: "INTERNATIONAL" nullable: true displayInDirectory: type: boolean description: "Indicates whether the extension appears in the company directory" example: true nullable: true doNotDisturb: type: boolean description: "Indicates whether Do Not Disturb mode is enabled for the extension, blocking inbound calls" example: false nullable: true emergencyAddress: $ref: '#/components/schemas/Address' emergencyAddressInheritFromSite: type: boolean description: "Indicates whether the emergency address is inherited from the site configuration" example: true nullable: true extensionNumber: type: string description: "Internal short extension number assigned to the user" example: "1001" nullable: true externalCallerIdName: type: string description: "Name displayed to external recipients on outbound calls" example: "Jane Doe" nullable: true externalCallerIdNumber: type: string description: "Phone number displayed to external recipients on outbound calls" example: "+14085551234" nullable: true extensionType: type: string enum: [UC, CC] description: "Type of extension (UC or CC)" example: "UC" nullable: true fqExtensionNumber: type: string description: "Fully qualified extension number including site prefix that is unique across all sites" example: "231001" nullable: true hotDeskEnabled: type: boolean description: "Indicates whether hot desking is enabled, allowing users to log in to shared devices" example: false nullable: true internalCallerIdFirstName: type: string description: "First name displayed for the user on internal caller ID." example: "Jane" nullable: true internalCallerIdLastName: type: string description: "Last name displayed for the user on internal caller ID." example: "Doe" nullable: true licenseId: type: string description: "Identifier of the license assigned to the extension" example: "02KB7TGTYAG4Rq4jDUhwyQ" nullable: true maxConcurrentCalls: type: integer description: "Maximum number of simultaneous calls allowed on the extension" example: 2 nullable: true msTeamsEnabled: type: boolean description: "Indicates whether Microsoft Teams integration is enabled for the extension" example: false nullable: true musicOnHold: $ref: '#/components/schemas/AudioFile' nomadic911Enabled: type: boolean description: "Indicates whether Nomadic 911 location tracking is enabled for emergency calls" example: false nullable: true overheadPagingEnabled: type: boolean description: "Indicates whether overhead paging functionality is enabled for the extension" example: false nullable: true phoneNumbers: type: array description: "List of phone numbers assigned to the extension" items: $ref: '#/components/schemas/PhoneNumber' nullable: true primaryPhoneNumber: type: string description: "Primary phone number for the extension" example: "+14085551234" nullable: true recordingPlayAnnouncementToUser: type: boolean description: "Indicates whether a recording notification is played to the user when a call is being recorded" example: false nullable: true recordingPlayAnnouncementToOtherParty: type: boolean description: "Indicates whether a recording notification is played to the remote party when a call is being recorded" example: false nullable: true recordingMode: type: string enum: [OFF, ALWAYS, ON_DEMAND, ALWAYS_ALLOW_PAUSE] description: "Call recording mode configured for the extension" example: "ON_DEMAND" nullable: true showInboundCallerId: type: boolean description: "Indicates whether inbound caller ID is displayed on the user's device" example: true nullable: true voicemailEmail: type: string description: "Email address to which voicemail messages or notifications are delivered" example: "jane.doe@corp.com" format: email nullable: true voicemailNotification: type: string description: "Notification preference for new voicemail messages" nullable: true voicemailZeroOutDestination: type: string description: 'Destination used when callers press "0" during voicemail greeting (for example, operator extension or external number)' example: "1001" nullable: true Device: type: object properties: id: type: string description: "Unique ID of the device" example: "CyIkhSbwQ9GI1ZYLOXZr7A" nullable: true activationCode: type: string description: "Code that can be used to activate the device (associate a MAC address) via an IVR menu from the device itself" example: "5525266144968" nullable: true model: type: string description: "Display name of the device as shown in the admin interface or on device screens." example: "Yealink W56H" nullable: true macAddress: type: string description: "MAC address of the device. Allows colon or hyphen punctuation (will be ignored)" example: "0a1b2c3d4e5f" nullable: true status: type: string enum: [BINDED, AVAILABLE, RETIRED, ACTIVE, RESERVED] description: "Current operational state of the device." example: "ACTIVE" nullable: true lastUpdatedTime: type: string format: date-time description: "Date and time when the device record was last updated." example: "2025-01-01T00:00:01Z" nullable: true lines: type: integer description: "Number of voice lines currently configured on the device." example: 1 nullable: true port: type: integer description: "Identifier of the physical or logical port associated with the device." example: 0 nullable: true baseDevice: $ref: '#/components/schemas/BaseDevice' BaseDevice: type: object properties: id: type: string description: "Unique ID for the base device this device is linked to" example: "CyIkhSbwQ9GI1ZYLOXZr7A" nullable: true macAddress: type: string description: "MAC address of the base device" example: "0a1b2c3d4e5f" nullable: true displayName: type: string description: "Display name of the device as shown in the admin interface" example: "Store Room DECT Base" nullable: true AudioFile: type: object properties: id: type: string description: "Unique ID of the audio file." nullable: true name: type: string description: "The name of the audio file." nullable: true PhoneNumber: type: object properties: country: type: string description: "ISO:3166-2 two character country of the phone number" example: "US" nullable: true origin: type: string description: "Origin or source system of the phone number" example: "CLAIMED" nullable: true phoneNumber: type: string description: "E.164-formatted phone number assigned to the extension" example: "+14085551234" nullable: true portingNumber: $ref: '#/components/schemas/PortingNumber' primary: type: boolean description: "Indicates whether this is the primary phone number" example: true nullable: true PortingNumber: type: object properties: phoneNumber: type: string description: "The number which will replace this extension phone number when the porting process completes" example: "+14085556789" nullable: true ContactPhoneNumber: type: object properties: number: type: string description: "The personal contact number. Can include punctuation." example: "(408) 555-1234" nullable: true type: type: string enum: [WORK, MOBILE] description: "Type qualifier for the personal contact number" example: "WORK" nullable: true Address: type: object properties: id: type: string description: "Unique ID of the address" example: "b1c4944a-17a0-4b00-8d48-36001df07e22" nullable: true displayForm: type: string description: "Formatted, human-readable representation of the emergency address" example: "7 W 34TH ST, 613, New York NY, 10001" nullable: true organization: type: string description: "Organization name associated with the emergency address" example: "8x8" nullable: true building: type: string description: "Building name or identifier for the emergency address" example: "Bardon Hall" nullable: true streetNumber: type: string description: "Street number of the emergency address" example: "7" nullable: true streetNumberSuffix: type: string description: "Suffix associated with the street number, if applicable" example: "bis" nullable: true preDirectional: type: string description: "Directional prefix (N, S, E, W) used before the street name" example: "W" nullable: true streetName: type: string description: "Street name of the emergency address" example: "Whitechapel High Street" nullable: true streetNameSuffix: type: string description: "Street type or suffix (for example, Dr, Ave, St)" example: "Ave" nullable: true postDirectional: type: string description: "Directional suffix (N, S, E, W) used after the street name" example: "E" nullable: true dependentStreet: type: string description: "Secondary or dependent street name, if applicable" example: "Gemini Business Park" nullable: true secondaryLocation: type: string description: "Additional location information such as floor or suite number" example: "UNIT 203" nullable: true city: type: string description: "City name of the emergency address." example: "New York" nullable: true dependentCity: type: string description: "Dependent or alternative city name, if applicable" example: "NYC" nullable: true state: type: string description: "State or province code for the emergency address" example: "Santa Clara" nullable: true county: type: string description: "County or region associated with the emergency address" example: "NY" nullable: true postal: type: string description: "Postal or ZIP code of the emergency address" example: "10001" nullable: true zip4: type: string description: "Extended ZIP+4 code for U.S. addresses" example: "2032" nullable: true country: type: string description: "Country of the emergency address" example: "US" nullable: true UserPage: type: object properties: data: type: array items: $ref: '#/components/schemas/User' nullable: true pagination: $ref: '#/components/schemas/Pagination' _links: $ref: '#/components/schemas/PaginationLinks' Pagination: type: object properties: pageSize: type: integer description: Number of items per page example: 100 nullable: true pageNumber: type: integer description: Current page number (0-indexed) example: 0 nullable: true hasMore: type: boolean description: Indicates if there are more pages available example: false nullable: true filter: type: string description: RSQL filter expression used in the request example: "basicInfo.status==ACTIVE" nullable: true sort: type: string description: Sort expression used in the request example: "basicInfo.userName" nullable: true nextScrollId: type: string description: Scroll ID for retrieving the next page nullable: true PaginationLinks: type: object properties: self: $ref: '#/components/schemas/Link' next: $ref: '#/components/schemas/Link' Link: type: object properties: href: type: string description: URL for the link example: "https://api.8x8.com/admin-provisioning/users?pageSize=100" nullable: true Operation: type: object properties: operationId: type: string description: Unique identifier for the operation example: "op_123456789" nullable: true status: type: string enum: [PENDING, IN_PROGRESS, COMPLETED, FAILED, UNKNOWN] description: Current status of the operation example: "PENDING" nullable: true customerId: type: string description: Customer ID associated with the operation example: "0012J00042NkZQIQA3" nullable: true resourceType: type: string enum: [USER, RING_GROUP, SITE] description: Type of resource being operated on example: "USER" nullable: true resourceId: type: string description: ID of the resource being operated on example: "hvOB1l3zDCaDAwp9tNLzZA" nullable: true operationType: type: string enum: [CREATE, UPDATE, DELETE] description: Type of operation being performed example: "CREATE" nullable: true createdTime: type: string format: date-time description: Timestamp when the operation was created example: "2025-01-01T01:02:03Z" nullable: true completedTime: type: string format: date-time description: Timestamp when the operation completed example: "2025-01-01T01:05:03Z" nullable: true error: $ref: '#/components/schemas/ErrorResponse' _links: $ref: '#/components/schemas/OperationLinks' OperationLinks: type: object properties: self: $ref: '#/components/schemas/Link' resource: $ref: '#/components/schemas/Link' ErrorResponse: type: object properties: status: type: integer description: HTTP status code example: 404 nullable: true instance: type: string description: URI reference that identifies the specific occurrence of the problem nullable: true time: type: string format: date-time description: Timestamp when the error occurred example: "2025-01-01T01:02:03Z" nullable: true title: type: string description: Short, human-readable summary of the problem example: "User not found" nullable: true detail: type: string description: Human-readable explanation specific to this occurrence nullable: true errors: type: array items: $ref: '#/components/schemas/Error' nullable: true Error: type: object properties: field: type: string description: Field name related to the error nullable: true code: $ref: '#/components/schemas/ErrorCode' message: type: string description: Detailed error message example: "User not found" nullable: true ErrorCode: type: string enum: - UNKNOWN - VALIDATION_ERROR - FORBIDDEN - CONFLICTING_QUERY_PARAMETER - SERVICE_UNAVAILABLE - NOT_FOUND - BAD_REQUEST - REQUEST_TIMEOUT - TOO_MANY_REQUESTS - CONFLICT description: Error code indicating the type of error