swagger: '2.0' info: description: API used to communicate with Mycroft backend version: '1' title: Mycroft API host: api.mycroft.ai basePath: /v1 tags: - name: device description: Operations about device schemes: - https paths: /auth/token: get: tags: - device summary: Gets a fresh login session from a refresh token operationId: getRefreshToken responses: '200': description: Login entity schema: $ref: '#/definitions/Login' security: - refresh_auth: - 'refresh:token' /device: post: tags: - device summary: Creates a device operationId: createDevice consumes: - application/json parameters: - in: body name: body description: Device to be stored required: true schema: $ref: '#/definitions/Device' responses: '200': description: OK security: - device_auth: - 'write:device' - 'read:device' put: tags: - device summary: Updates an existent device operationId: updateDevice consumes: - application/json parameters: - in: body name: body description: Device to be updated required: true schema: $ref: '#/definitions/Device' responses: '200': description: OK security: - device_auth: - 'write:device' - 'read:device' /device/code: get: tags: - device summary: >- Generates a pairing code and associates with the state string passed as parameter operationId: generatePairingCode parameters: - name: state in: query description: random string to be associated with pairing code required: true type: string responses: '200': description: device pairing entity schema: $ref: '#/definitions/DevicePairing' /device/activate: post: tags: - device summary: Activates a paired device operationId: activateDevice parameters: - name: body in: body description: Device activation payload required: true schema: $ref: '#/definitions/DeviceActivation' responses: '200': description: OK '/device/{uuid}': get: tags: - device summary: Finds device by uuid operationId: findDeviceByUuid consumes: - application/json produces: - application/json responses: '200': description: Device entity schema: $ref: '#/definitions/Device' '404': description: Device not found parameters: - name: uuid in: path type: string format: uuid required: true security: - device_auth: - 'write:device' - 'read:device' patch: tags: - device summary: Performs a partial update over a device operationId: updateDevicePartial consumes: - application/json parameters: - name: uuid description: Device uuid to update in: path type: string format: uuid required: true - in: body name: body description: >- Device to be updated. Only needs pass the fields that need be changed required: true schema: $ref: '#/definitions/Device' responses: '200': description: OK '404': description: Device not found '422': description: Found validations error security: - device_auth: - 'write:device' - 'read:device' delete: tags: - device summary: Deletes a device operationId: deleteDeviceByUuid parameters: - name: uuid description: Device uuid to delete in: path type: string format: uuid required: true responses: '200': description: OK '404': description: Device not found security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/setting': get: tags: - device summary: Finds the setting from a device operationId: findDeviceSetting parameters: - name: uuid description: Device uuid to find the setting in: path type: string format: uuid required: true - name: If-None-Match description: Etag for the device setting in: header type: string required: false responses: '200': description: Setting entity schema: $ref: '#/definitions/Setting' security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/subscription': get: tags: - device summary: Finds the subscription of the user associated with the device operationId: findDeviceSubscription parameters: - name: uuid description: Device uuid in: path type: string format: uuid required: true responses: '200': description: Account entity schema: $ref: '#/definitions/Account' security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/location': get: tags: - device summary: Finds the device location operationId: findDeviceLocation parameters: - name: uuid description: Device uuid to find the location in: path type: string format: uuid required: true - name: If-None-Match description: Etag for the device location in: header type: string required: false responses: '200': description: OK schema: $ref: '#/definitions/Location' security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/skill': get: tags: - device summary: Finds all skill associated with a device operationId: findDeviceSkills parameters: - name: uuid description: Device uuid to find the skill in: path type: string format: uuid required: true - name: If-None-Match description: Etag for the device skill in: header type: string required: false responses: '200': description: Skills associated with the device schema: type: array items: $ref: '#/definitions/Skill' security: - device_auth: - 'write:device' - 'read:device' delete: tags: - device summary: Deletes a skill from a device operationId: deleteDeviceSkill parameters: - name: uuid description: Device uuid to delete the skill in: path type: string format: uuid required: true - name: body description: Skill to remove from the device in: body required: true schema: $ref: '#/definitions/Skill' responses: '200': description: OK '404': description: Device not found security: - device_auth: - 'write:device' - 'read:device' put: tags: - device summary: Creates or updates a skill from a device operationId: createUpdateDeviceSkill parameters: - name: uuid description: Device uuid to create the skill in: path type: string format: uuid required: true - name: body description: Skill to upload and associate with a device in: body required: true schema: $ref: '#/definitions/Skill' responses: '200': description: OK security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/skillJson': put: tags: - device summary: Updates the skill json associated with the device operationId: uptDeviceSkillJson parameters: - name: uuid description: Device uuid to find the skill in: path type: string format: uuid required: true - name: body description: skills.json file in: body required: true schema: $ref: '#/definitions/SkillJson' responses: '200': description: ok security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/voice': get: tags: - device summary: Finds a link to download a premium voice if user has a paid account operationId: getPremiumVoiceLink parameters: - name: uuid description: Device uuid to fetch the premium voice link in: path type: string format: uuid required: true - name: arch description: Architecture to fetch the voice link in: query type: string enum: - arm - x86_64 required: true responses: '200': description: OK security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/metric': post: tags: - device summary: Pushes the metric passed as body to a metrics service operationId: sendMetric parameters: - name: uuid description: Device uuid that is sending the metric in: path type: string format: uuid required: true responses: '200': description: OK security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/message': put: tags: - device summary: Sends an email to the user associated with the device operationId: sendEmail parameters: - name: uuid description: Device uuid that is sending the email in: path type: string format: uuid required: true - name: body in: body description: payload with data to send the email required: true schema: $ref: '#/definitions/SendEmail' responses: '200': description: OK security: - device_auth: - 'write:device' - 'read:device' '/device/{uuid}/userSkill': get: tags: - device summary: >- For a given device, fetch all skills with a given identifier associated with the user linked to the device operationId: getUserSkillsByIdentifier parameters: - name: uuid description: Device uuid in: path type: string format: uuid required: true - name: identifier description: Skill identifier in: query type: string required: true - name: If-None-Match description: Etag for the user skills in: header type: string required: false responses: '200': description: OK schema: type: array items: $ref: '#/definitions/Skill' security: - device_auth: - 'write:device' - 'read:device' securityDefinitions: user_auth: type: oauth2 authorizationUrl: 'https://api.mycroft.ai/v1/auth/login' flow: implicit scopes: 'write:user': modify user and entities associated with user 'read:user': read user and entities associated with user device_auth: type: oauth2 authorizationUrl: 'https://apy.mycroft.ai/v1/device/activate' flow: implicit scopes: 'write:device': modify device and entities associated with device 'read:device': read device and entities associated with device refresh_auth: type: oauth2 authorizationUrl: 'https://api.mycroft.ai/v1/auth/login' flow: implicit scopes: 'refresh:token': get a new fresh token basic_auth: type: basic definitions: Account: type: object properties: uuid: type: string format: uuid description: Entity id generated by application PaidAccount: allOf: - $ref: '#/definitions/Account' - type: object properties: '@type': type: string enum: - monthly - yearly expiratesAt: type: number format: int64 description: timestamp in milliseconds when the account expirates nextPayment: type: number format: int64 description: timestamp in millisecond of the next payment lastPayment: type: number format: int64 description: timestamp in milliseconds of the last payment FreeAccount: allOf: - $ref: '#/definitions/Account' - type: object properties: '@type': type: string enum: - free Device: type: object properties: uuid: type: string format: uuid description: entity id generated by application name: type: string description: type: string coreVersion: type: string enclosureVerion: type: string setting: $ref: '#/definitions/Setting' location: $ref: '#/definitions/Location' lastAccess: type: number format: int64 Setting: type: object properties: uuid: type: string format: uuid description: entity id generated by application device: $ref: '#/definitions/Device' systemUnit: type: string enum: - metric - imperial timeFormat: type: string enum: - half - full dateFormat: type: string enum: - DMY - MDY sttSettings: type: array items: $ref: '#/definitions/STTSetting' ttsSettings: type: array items: $ref: '#/definitions/TTSSetting' skillSetting: $ref: '#/definitions/SkillsSetting' listenerSetting: $ref: '#/definitions/ListenerSetting' enclosureSetting: $ref: '#/definitions/EnclosureSetting' optIn: type: boolean description: flag to store if user agrees in share his voice data with mycroft STTSetting: type: object properties: uuid: type: string format: uuid description: entity id generated by application '@type': type: string enum: - mycroft - google - openstt - ibm - wit active: type: boolean credential: $ref: '#/definitions/Credential' TTSSetting: type: object properties: uuid: type: string format: uuid description: entity id generated by application '@type': type: string enum: - mimic - espeak - google - marytts - fatts activate: type: boolean voice: type: string Credential: type: object properties: '@type': type: string enum: - basic - token SkillsSetting: type: object properties: uuid: type: string format: uuid description: entity id generated by application directory: type: string stopThreshold: type: number format: double ListenerSetting: type: object properties: uuid: type: string format: uuid description: entity id generated by application sampleRate: type: number format: int enum: - 8000 - 16000 channels: type: number format: int enum: - 1 - 2 wakeWord: type: string phonemes: type: string threshold: type: number format: double multiplier: type: number format: double energyRatio: type: number format: double EnclosureSetting: type: object properties: uuid: type: string format: uuid description: entity id generated by application path: type: string rate: type: number format: int32 enum: - 9600 timeout: type: number format: double Location: type: object properties: uuid: type: string format: uuid description: entity id generated by application coordinate: $ref: '#/definitions/Coordinate' timezone: $ref: '#/definitions/Timezone' city: $ref: '#/definitions/City' Coordinate: type: object properties: uuid: type: string format: uuid description: entity id generated by application latitude: type: number format: double minimum: -90 maximum: 90 longitude: type: number format: double minimum: -180 maximum: 180 Timezone: type: object properties: uuid: type: string format: uuid description: entity id generated by application code: type: string description: >- The UTC timezone code represented such as: UTC-N, UTC, UTC+M. Where N is in between [01:00, 12:00] and M is in between [01:00, 14:00] name: type: string offset: type: number format: int32 description: The UTC timezone offset in milliseconds dstOffset: type: number format: int32 description: The UTC daylight saving offset in milliseconds City: type: object properties: uuid: type: string format: uuid description: entity id generated by application code: type: string name: type: string state: $ref: '#/definitions/State' State: type: object properties: uuid: type: string format: uuid description: entity id generated by application code: type: string name: type: string country: $ref: '#/definitions/Country' Country: type: object properties: uuid: type: string format: uuid description: entity id generated by application code: type: string name: type: string Skill: type: object properties: uuid: type: string format: uuid description: entity id generated by application name: type: string description: type: string contributor: type: string icon: type: string identifier: type: string skillMetadata: $ref: '#/definitions/SkillMetadata' SkillMetadata: type: object properties: uuid: type: string format: uuid description: entity id generated by application sections: type: array items: $ref: '#/definitions/SkillMetadataSection' SkillMetadataSection: type: object properties: uuid: type: string format: uuid description: entity id generated by application name: type: string fields: type: array items: $ref: '#/definitions/SkillMetadataField' SkillMetadataField: type: object properties: uuid: type: string format: uuid description: entity id generated by application name: type: string type: type: string label: type: string hint: type: string placeholder: type: string value: type: string SkillJson: type: object properties: blacklist: type: array items: type: string skills: type: array items: $ref: '#/definitions/SkillManifest' SkillManifest: type: object properties: uuid: type: string format: uuid description: entity id generated by application name: type: string description: skill's name origin: type: string description: >- "default" means the skill was installed when found on the DEFAULT-SKILLS list; "marketplace" means the skill was installed from a user action on a remote UI; "voice" means the skill was installed from a device via voice; "cli" means the skill was installed from a device via MSM command line; "non-msm" means the skill just appeared, e.g. FTP, git or created on device installation: type: string description: >- This holds the installation status of the skill. It can be one of:"installed" fully installed; "installing" in the process of being installed (transitory state) "uninstalling" in the process of removal (transitory state); "failed" means an attempt was made to install the skill but it failed failure_message: type: string description: 'Optional error message, only meaningful when installation = "failed"' status: type: string description: >- "active" the normal state; "disabled" the user has temporarily disabled this skill; "error" the skill failed to load beta: type: string description: >- True if running at the repo HEAD, otherwise running the registered version This only has meaning for "remote" or "local" skills. installed: type: number format: int64 description: >- A simple UTC date/time of when the skill was created on the local system updated: type: number description: Last time the skill was updated from its source repo SendEmail: type: object properties: title: type: string body: type: string description: HTML message to be sent as body sender: type: string description: skill that is sending the message DevicePairing: type: object properties: code: type: string state: type: string token: type: string expiration: type: number format: int64 description: pairing code expiration time in milliseconds DeviceActivation: type: object properties: state: type: string token: type: string coreVersion: type: string enclosureVersion: type: string Login: type: object properties: uuid: type: string format: uuid description: User uuid accessToken: type: string description: User access token refreshToken: type: string description: Token used to renew access and get a fresh token expiration: type: string description: Token expiration time in milliseconds externalDocs: description: Find out more about Swagger url: 'http://swagger.io'