openapi: 3.0.0 info: title: Edge Impulse User API version: 1.0.0 servers: - url: https://studio.edgeimpulse.com/v1 security: - ApiKeyAuthentication: [] - JWTAuthentication: [] - JWTHttpHeaderAuthentication: [] tags: - name: User paths: /api-user-create: post: summary: Create user security: [] description: Create a new user and project tags: - User operationId: createUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateUserResponse' /api-user-create-evaluate: post: summary: Create evaluation user security: [] description: Creates an evaluation user and a new project, and redirects the user to the new project. tags: - User operationId: createEvaluationUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateEvaluationUserResponse' /api-create-pro-user: post: summary: Create Professional Tier user security: [] description: Create a new user for the Professional Plan and a new project. Note that the Professional plan will not be enabled until the payment is successful. tags: - User operationId: createProTierUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateProTierUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateUserResponse' /api-user-create-enterprise-trial: post: summary: Create enterprise trial user security: [] description: Creates an enterprise trial user and a new trial organization, and redirects the user to the new organization. tags: - User operationId: createEnterpriseTrialUser requestBody: description: Trial request required: true content: application/json: schema: $ref: '#/components/schemas/CreateEnterpriseTrialUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateEnterpriseTrialResponse' /api-user-need-to-set-password/{usernameOrEmail}: get: summary: Get user registration state security: [] description: Tells whether a user is registered and whether it needs to set its password. tags: - User operationId: getUserNeedToSetPassword parameters: - $ref: '#/components/parameters/UsernameOrEmailParameter' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetUserNeedToSetPasswordResponse' /api/user: get: summary: Get current user description: Get information about the current user. This function is only available through a JWT token. tags: - User operationId: getCurrentUser parameters: - $ref: '#/components/parameters/UserExcludeProjectsParameter' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetUserResponse' post: summary: Update current user description: Update user properties such as name. This function is only available through a JWT token. tags: - User operationId: updateCurrentUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' delete: summary: Delete current user description: Delete a user. This function is only available through a JWT token, and can only remove the current user. tags: - User operationId: deleteCurrentUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DeleteUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/projects: get: summary: Get current user projects description: Get projects for the current user. This returns all projects regardless of whitelabel. This function is only available through a JWT token. tags: - User operationId: getCurrentUserProjects responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetUserProjectsResponse' /api/user/convert: post: summary: Convert current evaluation user description: Convert current evaluation user account to regular account. tags: - User operationId: convertCurrentUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ConvertUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/activate: post: summary: Activate current user description: Activate the current user account (requires an activation code). This function is only available through a JWT token. tags: - User operationId: activateCurrentUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ActivateUserOrVerifyEmailRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/request-activation: post: summary: Request activation code description: Request a new activation code for the current user. This function is only available through a JWT token. tags: - User operationId: requestActivationCodeCurrentUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/create-developer-profile: post: summary: Create developer profile description: Create a developer profile for the current active user. tags: - User operationId: createDeveloperProfile responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateDeveloperProfileResponse' /api/user/trial: post: summary: Start enterprise trial description: Create an enterprise trial for the current user. Users can only go through a trial once. tags: - User operationId: startEnterpriseTrial requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/StartEnterpriseTrialRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateEnterpriseTrialResponse' /api/user/emails: get: summary: List emails description: Get a list of all emails sent by Edge Impulse to the current user. This function is only available through a JWT token, and is not available for all users. security: - permissions: - users:emails:read tags: - User operationId: listEmailsCurrentUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListEmailResponse' /api/user/photo: post: summary: Upload photo description: Upload a photo for the current user. This function is only available through a JWT token. tags: - User operationId: uploadPhotoCurrentUser requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadUserPhotoRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UploadUserPhotoResponse' delete: summary: Delete photo description: Delete user profile photo. This function is only available through a JWT token. tags: - User operationId: deletePhotoCurrentUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/change-password: post: summary: Change password current user description: Change the password for the current user account. This function is only available through a JWT token. tags: - User operationId: changePasswordCurrentUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangePasswordRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/organizations: get: summary: Get organizations description: List all organizations that the current user is a member of. This function is only available through a JWT token. tags: - User operationId: listOrganizationsCurrentUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListOrganizationsResponse' /api/users/buckets: get: summary: Get buckets current user description: List all organizational storage buckets that the current user has access to. This function is only available through a JWT token. tags: - User operationId: listOrganizationBucketsCurrentUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListOrganizationBucketsUserResponse' /api/user/by-third-party-activation-code: post: summary: Get user by third party activation code description: Get information about a user through an activation code. This function is only available through a JWT token. tags: - User operationId: getUserByThirdPartyActivationCode requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserByThirdPartyActivationRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetUserResponse' /api/user/activate-by-third-party-activation-code: post: summary: Activate user by third party activation code description: Activate a user that was created by a third party. This function is only available through a JWT token. tags: - User operationId: activateUserByThirdPartyActivationCode requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ActivateUserByThirdPartyActivationCodeRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetJWTResponse' /api/user/accept-tos: post: summary: Accept Terms of Service description: Accept Terms of Service. tags: - User operationId: acceptTermsOfService responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/dismiss-notification: post: summary: Dismiss a notification description: Dismiss a notification tags: - User operationId: userDismissNotification requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserDismissNotificationRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/mfa/totp/create-key: post: summary: Generate a new TOTP MFA key description: Creates a new MFA key, only allowed if the user has no MFA configured. TOTP tokens use SHA-1 algorithm. tags: - User operationId: userGenerateNewTotpMfaKey responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UserGenerateNewMfaKeyResponse' /api/user/mfa/totp/set-key: post: summary: Set TOTP MFA key description: Enable MFA on this account using an TOTP token. First create a new key via `userGenerateNewTotpMfaKey`. tags: - User operationId: userSetTotpMfaKey requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserSetTotpMfaKeyRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UserSetTotpMfaKeyResponse' /api/user/mfa/totp/clear: post: summary: Remove TOTP MFA key description: Disable MFA on this account using an TOTP token. tags: - User operationId: userDeleteTotpMfaKey requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserDeleteTotpMfaKeyRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/subscription/upgrade: post: summary: Upgrade subscription description: Upgrade the current subscription. tags: - User operationId: userUpgradeSubscription requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpgradeSubscriptionRequest' responses: '302': description: A redirect to the payment portal /api/user/subscription/cancel: post: summary: Cancel subscription description: Cancel the current subscription. tags: - User operationId: userCancelSubscription requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DowngradeSubscriptionRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/subscription/undo-cancel: post: summary: Undo subscription cancellation description: 'Stop a pending cancellation. If you schedule a subscription to be canceled, and the subscription hasn''t yet reached the end of the billing period, you can stop the cancellation. After a subscription has been canceled, you can''t reactivate it. ' tags: - User operationId: userUndoCancelSubscription responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/user/subscription/metrics: get: summary: Get user billable compute metrics description: Get billable compute metrics for a user. This function is only available to users with an active subscription. tags: - User operationId: userGetSubscriptionMetrics responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UserSubscriptionMetricsResponse' /api/users/{userId}: get: summary: Get user description: Get information about a user. This function is only available through a JWT token. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: getUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GetUserResponse' post: summary: Update user description: Update user properties such as name. This function is only available through a JWT token. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: updateUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' delete: summary: Delete user description: Delete a user. This function is only available through a JWT token, and can only remove the current user. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: deleteUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DeleteUserRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/activate: post: summary: Activate user description: Activate a user account (requires an activation code). This function is only available through a JWT token. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: activateUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ActivateUserOrVerifyEmailRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/request-activation: post: summary: Request activation code description: Request a new activation code. This function is only available through a JWT token. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: requestActivationCodeUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/emails: get: summary: List emails description: Get a list of all emails sent by Edge Impulse to a user. This function is only available through a JWT token, and is not available for all users. security: - permissions: - users:emails:read tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: listEmailsUser responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListEmailResponse' /api/users/{userId}/photo: post: summary: Upload photo description: Upload a photo for a user. This function is only available through a JWT token, and is not available for all users. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: uploadPhotoUser requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/UploadUserPhotoRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UploadUserPhotoResponse' /api/users/{userId}/change-password: post: summary: Change password description: Change the password for a user account. This function is only available through a JWT token. tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: changePasswordUser requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangePasswordRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/set-password: post: summary: Set password for SSO user description: Set the password for a new SSO user. This function is only available through an SSO access token. security: [] tags: - User parameters: - $ref: '#/components/parameters/UserIdParameter' operationId: setUserPassword requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SetUserPasswordRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/organizations: get: summary: Get organizations description: List all organizations for a user. This function is only available through a JWT token. tags: - User operationId: listOrganizationsUser parameters: - $ref: '#/components/parameters/UserIdParameter' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListOrganizationsResponse' /api/users/{userId}/buckets: get: summary: Get buckets description: List all organizational storage buckets that a user has access to. This function is only available through a JWT token. tags: - User operationId: listOrganizationBucketsUser parameters: - $ref: '#/components/parameters/UserIdParameter' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListOrganizationBucketsUserResponse' /api/users/{userId}/feedback: post: summary: Send feedback description: Send feedback to Edge Impulse or get in touch with sales. tags: - User operationId: sendUserFeedback parameters: - $ref: '#/components/parameters/UserIdParameter' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SendUserFeedbackRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/upgrade: post: summary: Send upgrade request description: Send an upgrade to Enterprise request to Edge Impulse. tags: - User operationId: sendUserUpgradeRequest parameters: - $ref: '#/components/parameters/UserIdParameter' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EnterpriseUpgradeOrTrialExtensionRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api/users/{userId}/trials: get: summary: Get enterprise trials description: Get a list of all enterprise trials for a user. This function is only available through a JWT token. tags: - User operationId: listEnterpriseTrialsUser parameters: - $ref: '#/components/parameters/UserIdParameter' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListEnterpriseTrialsResponse' /api-user-request-reset-password: post: summary: Request reset password security: [] description: Request a password reset link for a user. tags: - User operationId: requestResetPassword requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RequestResetPasswordRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api-user-reset-password: post: summary: Reset password security: [] description: Reset the password for a user. tags: - User operationId: resetPassword requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResetPasswordRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' /api-user-verify-reset-password-code: post: summary: Verify reset password code security: [] description: Verify whether the reset password code for the user is valid. tags: - User operationId: verifyResetPassword requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VerifyResetPasswordRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/GenericApiResponse' components: schemas: BillingCycle: type: string enum: - monthly - yearly description: 'Specifies the frequency at which the subscription fee is billed: - `monthly`: Billed once every month. - `yearly`: Billed once every year, often at a discounted rate compared to monthly billing. ' EntitlementLimits: type: object properties: totalStorage: type: number description: Storage entitlement, in bytes computeTimePerYear: type: number description: Total compute time entitlement (CPU + GPU), in seconds gpuComputeTimePerYear: type: number description: GPU compute time entitlement, in seconds numberOfProjects: type: integer description: Number of projects allowed for this organization numberOfUsers: type: integer description: Number of users allowed for this organization CreateDeveloperProfileResponse: allOf: - $ref: '#/components/schemas/GenericApiResponse' - type: object required: - organizationId properties: organizationId: type: integer link: type: string GetUserResponse: allOf: - $ref: '#/components/schemas/GenericApiResponse' - $ref: '#/components/schemas/User' - type: object required: - email - activated - organizations - projects - experiments - tier - suspended - notifications - passwordConfigured - projectsSortOrder - hasEnterpriseFeaturesAccess - lastAccessedProjects - privatePersonalProjectsUsed properties: email: type: string activated: type: boolean organizations: type: array description: Organizations that the user is a member of. Only filled when requesting information about yourself. items: $ref: '#/components/schemas/UserOrganization' projects: description: List of all projects. This returns all projects for the user (regardless of whitelabel) type: array items: $ref: '#/components/schemas/Project' experiments: type: array description: Experiments the user has access to. Enabling experiments can only be done through a JWT token. items: $ref: '#/components/schemas/UserExperiment' evaluation: type: boolean description: Whether this is an ephemeral evaluation account. ambassador: type: boolean description: Whether this user is an ambassador. whitelabels: description: List of white labels the user is a member of type: array items: type: object required: - id - domain - name - ownerOrganizationId - isAdmin properties: id: type: number domain: type: string name: type: string ownerOrganizationId: type: number isAdmin: type: boolean description: Whether the user is an admin of the white label. suspended: type: boolean description: Whether the user is suspended. notifications: type: array description: List of notifications to show to the user. items: type: string subscriptionDowngradeDate: type: string format: date-time description: The date at which the user's subscription will be downgraded due to cancellation. subscriptionTerminationDate: type: string format: date-time description: The date at which the user's subscription will be automatically terminated due to failed payments. passwordConfigured: type: boolean description: Whether the user has configured a password projectsSortOrder: description: Default sort order on the projects list $ref: '#/components/schemas/UserProjectsSortOrder' activeEnterpriseTrial: description: The ongoing free Enterprise trials that the user has created, if any. $ref: '#/components/schemas/EnterpriseTrial' hasEnterpriseFeaturesAccess: type: boolean description: Whether the current user has access to enterprise features. This is true if the user is an enterprise user, or has an active enterprise trial. timezone: description: Timezone for the user (or undefined if not specified). type: string lastAccessedProjects: description: Last 5 accessed projects. This _only_ returns projects for the current whitelabel ID. type: object required: - projects - hasMoreProjects properties: projects: type: array items: type: object required: - id - name - created properties: id: type: integer name: type: string created: type: string format: date-time lastAccessed: type: string format: date-time hasMoreProjects: type: boolean privatePersonalProjectsUsed: type: integer description: Number of private projects created by the current user. ConvertUserRequest: type: object required: - name - username - email - password - privacyPolicy properties: name: type: string description: Your name example: Jan Jongboom username: type: string description: Username, minimum 4 and maximum 30 characters. May contain alphanumeric characters, hyphens, underscores and dots. Validated according to `^(?=.{4,30}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._-]+(?