openapi: 3.0.3 info: title: Rokwire Core Building Block Admin Services API description: Core Building Block API Documentation version: 1.62.0 servers: - url: https://api.rokwire.illinois.edu/core tags: - name: Services description: Clients applications APIs. paths: /services/auth/login: post: tags: - Services summary: Login description: 'Login using credentials to retrieve access token, refresh token, and user data ' requestBody: description: 'User credential details and parameters ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_Login' examples: email-sign_in: summary: Email - sign in value: auth_type: email app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: email: test@example.com password: test12345 device: type: mobile device_id: '5555' os: Android email-sign_up: summary: Email - sign up value: auth_type: email app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: email: test@example.com password: test12345 params: sign_up: true confirm_password: test12345 preferences: key1: value1 key2: value2 profile: address: address address2: address2 po_box: po box city: city birth_year: 1990 country: county email: email first_name: first name last_name: last name phone: '+000000000000' photo_url: photo url state: state zip_code: zip code privacy: public: false device: type: mobile device_id: '5555' os: Android phone: summary: Phone - sign in OR sign up value: auth_type: twilio_phone app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: phone: '+12223334444' code: '123456' preferences: key1: value1 key2: value2 profile: address: address address2: address2 po_box: po box city: city birth_year: 1990 country: county email: email first_name: first name last_name: last name phone: '+000000000000' photo_url: photo url state: state zip_code: zip code privacy: public: false device: type: mobile device_id: '5555' os: Android illinois_oidc: summary: Illinois OIDC login value: auth_type: illinois_oidc app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: https://redirect.example.com?code=ai324uith8gSEefesEguorgwsf43 params: redirect_uri: https://redirect.example.com pkce_verifier: w4iuhfq0u43hfq38ghn3gnSFSFiqp3ugnpugnqiprgUGNPINfsdoirpgia preferences: key1: value1 key2: value2 profile: address: address address2: address2 po_box: po box city: city birth_year: 1990 country: county email: email first_name: first name last_name: last name phone: '+000000000000' photo_url: photo url state: state zip_code: zip code privacy: public: false device: type: mobile device_id: '5555' os: Android anonymous: summary: Anonymous login value: auth_type: anonymous app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: anonymous_id: dbb5ea5d-6c6c-44b8-9952-7ebf0e844beb device: type: mobile device_id: '5555' os: Android username-sign_in: summary: Username - sign in value: auth_type: username app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: username: testName password: test12345 device: type: mobile device_id: '5555' os: Android username-sign_up: summary: Username - sign up value: auth_type: username app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: username: testName password: test12345 params: sign_up: true confirm_password: test12345 preferences: key1: value1 key2: value2 profile: address: address address2: address2 po_box: po box city: city birth_year: 1990 country: county email: email first_name: first name last_name: last name phone: '+000000000000' photo_url: photo url state: state zip_code: zip code privacy: public: false device: type: mobile device_id: '5555' os: Android required: true responses: '200': description: Success content: application/json: schema: anyOf: - $ref: '#/components/schemas/_shared_res_Login_Mfa' - $ref: '#/components/schemas/_shared_res_Login' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error content: application/json: schema: type: object properties: status: type: string enum: - invalid - unverified - verification-expired - already-exists - not-found - internal-server-error - shared-credential-unverified description: '- `invalid`: Invalid credentials - `unverified`: Unverified credentials - `verification-expired`: Credentials verification expired. The verification is restarted - `already-exists`: Account already exists when `sign-up=true` - `not-found`: Account could not be found when `sign-up=false` - `internal-server-error`: An undefined error occurred - `shared-credential-unverified`: The shared credential has not been verified yet ' message: type: string /services/auth/mfa: post: tags: - Services summary: MFA description: 'Verify multi-factor authentication credentials to complete login ' parameters: - name: state in: query description: Login state required: false style: form explode: false schema: type: string requestBody: description: 'MFA credentials and parameters ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_Login_Mfa' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_Login' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/refresh: post: tags: - Services summary: Refresh description: 'Refresh access token using a refresh token ' requestBody: description: 'Refresh token ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_Refresh' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_Refresh' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/login-url: post: tags: - Services summary: Get SSO login url description: 'Retrieve a pre-formatted SSO login URL ' requestBody: content: application/json: schema: $ref: '#/components/schemas/_shared_req_LoginUrl' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_LoginUrl' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/logout: post: tags: - Services summary: Logout description: 'Logouts an account ' security: - bearerAuth: [] requestBody: content: application/json: schema: required: - all_sessions type: object properties: all_sessions: type: boolean default: false responses: '200': description: Success content: text/plain: schema: type: string example: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/credential/verify: get: tags: - Services summary: Validate verification code description: 'Validates verification code to verify account ownership ' parameters: - name: id in: query description: Credential ID required: true style: form explode: false schema: type: string - name: code in: query description: Verification code required: true style: form explode: false schema: type: string responses: '200': description: Successful operation content: text/plain: schema: type: string example: Successfully verified code '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/credential/send-verify: post: tags: - Services summary: Send verification code to identifier description: 'Sends verification code to identifier to verify account ownership ' requestBody: description: 'Account information to be checked ' content: application/json: schema: $ref: '#/components/schemas/_services_req_credential_send-verify' required: true responses: '200': description: Successful operation content: text/plain: schema: type: string example: Successfully sent verification code '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/credential/forgot/initiate: post: tags: - Services summary: Initiate reset credential for a given identifier description: "Email auth type:\nSends the reset password code for a given identifier\nGenerates a reset code and expiry and sends it to the given identifier \n" requestBody: content: application/json: schema: $ref: '#/components/schemas/_services_req_credential_forgot_initiate' required: true responses: '200': description: Success content: text/plain: schema: type: string '400': description: Bad request '401': description: Unauthorized '500': description: Internal error content: application/json: schema: type: object properties: status: type: string enum: - unverified - verification-expired - internal-server-error description: '- `unverified`: Unverified credentials - `verification-expired`: Credentials verification expired. The verification is restarted - `internal-server-error`: An undefined error occurred ' message: type: string /services/auth/credential/forgot/complete: post: tags: - Services summary: Complete resetting forgotten credential requestBody: content: application/json: schema: $ref: '#/components/schemas/_services_req_credential_forgot_complete' required: true responses: '200': description: Success content: text/plain: schema: type: string '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/credential/update: post: tags: - Services summary: Reset a credential from client application description: 'Needs user auth token for authorization **Auth:** Requires token from direct user authentication from recent login ' security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/_services_req_credential_update' required: true responses: '200': description: Success content: text/plain: schema: type: string '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/verify-mfa: post: tags: - Services summary: MFA description: 'Verify multi-factor authentication credentials to complete MFA registration ' requestBody: description: 'MFA credentials and parameters ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_Mfa' required: true responses: '200': description: Success content: application/json: schema: type: array items: type: string '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/account/exists: post: tags: - Services summary: Check if an account already exists description: 'Account exists checks if an account exists for the provided user identifier and auth type ' requestBody: description: 'Account information to be checked ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_AccountCheck' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_AccountCheck' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/account/can-sign-in: post: tags: - Services summary: Check if a client can sign in description: 'Checks if a client can sign in to an existing account for the provided user identifier and auth type ' requestBody: description: 'Account information to be checked ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_AccountCheck' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_AccountCheck' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/account/can-link: post: tags: - Services summary: Check if a client can link an auth type description: 'Checks if a client is able to link a new auth type to an account ' requestBody: description: 'Account information to be checked ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_AccountCheck' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_AccountCheck' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/account/auth-type/link: post: tags: - Services summary: Link credentials description: 'Link credentials to an existing account **Auth:** Requires "authenticated" auth token ' security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/_services_req_account_auth-type-link' examples: email-sign_up: summary: Email value: auth_type: email app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: email: test@example.com password: test12345 params: confirm_password: test12345 phone: summary: Phone value: auth_type: twilio_phone app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: phone: '+12223334444' illinois_oidc: summary: Illinois OIDC value: auth_type: illinois_oidc app_type_identifier: edu.illinois.rokwire org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 api_key: 95a463e3-2ce8-450b-ba75-d8506b874738 creds: https://redirect.example.com?code=ai324uith8gSEefesEguorgwsf43 params: redirect_uri: https://redirect.example.com pkce_verifier: w4iuhfq0u43hfq38ghn3gnSFSFiqp3ugnpugnqiprgUGNPINfsdoirpgia required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_services_res_account_auth-type-link' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error content: application/json: schema: type: object properties: status: type: string enum: - invalid - unverified - verification-expired - already-exists - not-found - internal-server-error description: '- `invalid`: Invalid credentials - `unverified`: Unverified credentials - `verification-expired`: Credentials verification expired. The verification is restarted - `already-exists`: Auth type identifier already exists - `not-found`: Account could not be found when `sign-up=false` - `internal-server-error`: An undefined error occurred ' message: type: string delete: tags: - Services summary: Unlink credentials description: 'Unlink credentials from an existing account **Auth:** Requires "authenticated" auth token ' security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/_services_req_account_auth-type-unlink' examples: email: summary: Email value: auth_type: email app_type_identifier: edu.illinois.rokwire identifier: test@example.com phone: summary: Phone value: auth_type: twilio_phone app_type_identifier: edu.illinois.rokwire identifier: '+12223334444' illinois_oidc: summary: Illinois OIDC value: auth_type: illinois_oidc app_type_identifier: edu.illinois.rokwire identifier: '123456789' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_services_res_account_auth-type-link' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/authorize-service: post: tags: - Services summary: Authorize service description: 'Authorize a third-party service and get a scoped access token that can be used to access its APIs **Auth:** Requires user auth token ' security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/_services_req_authorize-service' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_services_res_authorize-service' examples: authorized: summary: Service authorized value: access_token: string token_type: Bearer approved_scopes: - string unauthorized: summary: Service unauthorized value: service_reg: service_id: string service_account_id: string host: string pub_key: key_pem: string alg: string name: string description: string info_url: string logo_url: string scopes: - scope: string required: true explanation: string first_party: true '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/auth/service-regs: get: tags: - Services summary: Get service registrations description: 'Returns service registration records **Auth:** Requires auth token ' security: - bearerAuth: [] parameters: - name: ids in: query description: A comma-separated list of service IDs to return registrations for required: true style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/ServiceReg' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/accounts: get: tags: - Services summary: Finds accounts description: 'Finds accounts using a set of optional search parameters **Auth:** Requires access token with `get_accounts`, `update_accounts`, or `all_accounts` permission ' security: - bearerAuth: [] parameters: - name: limit in: query description: The maximum number of accounts to return required: false style: form explode: false schema: type: integer - name: offset in: query description: The index of the first account to return required: false style: form explode: false schema: type: integer - name: account-id in: query description: The account ID required: false style: form explode: false schema: type: string - name: firstname in: query description: The account profile first name required: false style: form explode: false schema: type: string - name: lastname in: query description: The account profile last name required: false style: form explode: false schema: type: string - name: auth-type in: query description: The auth type required: false style: form explode: false schema: type: string - name: auth-type-identifier in: query description: The authentication type identifier required: false style: form explode: false schema: type: string - name: has-permissions in: query description: Account has permissions (permissions, roles, or groups) filter required: false style: form explode: false schema: type: boolean - name: permissions in: query description: A comma-separated list of permission names required: false style: form explode: false schema: type: string - name: role-ids in: query description: A comma-separated list of role IDs required: false style: form explode: false schema: type: string - name: group-ids in: query description: A comma-separated list of group IDs required: false style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/PartialAccount' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error post: tags: - Services summary: Create admin account description: 'Create a new admin account **Auth:** Requires auth token with `create_accounts` or `all_accounts` permission ' security: - bearerAuth: [] requestBody: description: 'User account details and parameters ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_CreateAccount' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PartialAccount' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error put: tags: - Services summary: Update admin account description: 'Update an existing admin account **Auth:** Requires auth token with `update_accounts` or `all_accounts` permission ' security: - bearerAuth: [] requestBody: description: 'User account details and parameters ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_UpdateAccount' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PartialAccount' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/accounts/public: get: tags: - Services summary: Finds public accounts description: 'Finds public accounts using search, username, first name, and last name, following id, and follower id ' security: - bearerAuth: [] parameters: - name: limit in: query description: The maximum number of accounts to return required: false style: form explode: false schema: type: integer - name: offset in: query description: The index of the first account to return required: false style: form explode: false schema: type: integer - name: search in: query description: The search for username, firstname, or lastname required: false style: form explode: false schema: type: string - name: username in: query description: The username required: false style: form explode: false schema: type: string - name: firstname in: query description: The account profile first name required: false style: form explode: false schema: type: string - name: lastname in: query description: The account profile last name required: false style: form explode: false schema: type: string - name: following-id in: query description: The ID of the account being followed required: false style: form explode: false schema: type: string - name: follower-id in: query description: The ID of the account following required: false style: form explode: false schema: type: string - name: unstructured_properties in: query description: Map containing filters by unstructured properties in profile required: false style: form explode: true schema: type: object - name: ids in: query description: A comma-separated list of IDs required: false style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/PublicAccount' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/v2/accounts/public: get: tags: - Services summary: Finds public accounts description: 'Finds public accounts using search, username, first name, and last name, following id, and follower id ' security: - bearerAuth: [] parameters: - name: limit in: query description: The maximum number of accounts to return required: false style: form explode: false schema: type: integer - name: offset in: query description: The comma-separated name and ID of the first account to return (lastname,firstname,id) required: false style: form explode: false schema: type: string - name: order in: query description: The sort order to return accounts required: false style: form explode: false schema: type: string enum: - asc - desc - name: search in: query description: The search for username, firstname, or lastname required: false style: form explode: false schema: type: string - name: username in: query description: The username required: false style: form explode: false schema: type: string - name: firstname in: query description: The account profile first name required: false style: form explode: false schema: type: string - name: lastname in: query description: The account profile last name required: false style: form explode: false schema: type: string - name: following-id in: query description: The ID of the account being followed required: false style: form explode: false schema: type: string - name: follower-id in: query description: The ID of the account following required: false style: form explode: false schema: type: string - name: unstructured_properties in: query description: Map containing filters by unstructured properties in profile required: false style: form explode: true schema: type: object - name: ids in: query description: A comma-separated list of IDs required: false style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_services_res_accounts-public' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account: delete: tags: - Services summary: Delete account description: 'Deletes account **Auth:** Requires auth token ' security: - bearerAuth: [] parameters: - name: apps in: query description: A comma-separated list of app_ids required: false style: form explode: false schema: type: string requestBody: description: optional context data per service that should be considered when deleting user data content: application/json: schema: type: array items: $ref: '#/components/schemas/_shared_req_DeleteAccount' examples: single_app_surveys: summary: Retain some survey responses value: - app_id: app_id context: surveys: retain_responses: survey_ids: - survey_id1 - survey_id2 single_app_groups: summary: Retain some groups data value: - app_id: app_id context: groups: retain_posts: group_ids: - group_id1 - group_id2 multiple_app_surveys: summary: Retain some survey responses for multiple apps value: - app_id: app_id1 context: surveys: retain_responses: survey_ids: - survey_id1 - survey_id2 - app_id: app_id2 context: surveys: retain_responses: survey_ids: - survey_id3 - survey_id4 responses: '200': description: Success content: text/plain: schema: type: string example: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error get: tags: - Services summary: Get account description: 'Gets account **Auth:** Requires auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Account' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/mfa: get: tags: - Services summary: Get account MFA types description: 'Get MFA types set up for an account **Auth:** Requires user auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/_shared_res_Mfa' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error post: tags: - Services summary: Enroll in MFA type description: 'Add MFA type to an account **Auth:** Requires user auth token ' security: - bearerAuth: [] requestBody: description: 'MFA enrollment params ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_Mfa' examples: email: summary: Enroll in email MFA value: identifier: test@test.com type: email required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_Mfa' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error delete: tags: - Services summary: Remove MFA type description: 'Remove MFA type from an account **Auth:** Requires user auth token ' security: - bearerAuth: [] requestBody: description: 'MFA params ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_Mfa' examples: email: summary: Unenroll in email MFA value: identifier: test@test.com type: email responses: '200': description: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/preferences: put: tags: - Services summary: Update account preferences description: 'Updates account preferences **Auth:** Requires auth token ' security: - bearerAuth: [] requestBody: description: Account preferences content: application/json: schema: type: object required: true responses: '200': description: Success content: text/plain: schema: type: string example: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error get: tags: - Services summary: Get preferences description: 'Returns account preferences **Auth:** Requires auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: type: object '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/profile: get: tags: - Services summary: Get user profile description: 'Returns a user profile **Auth:** Requires user auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Profile' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error put: tags: - Services summary: Update user profile description: 'Updates a user profile **Auth:** Requires user auth token ' security: - bearerAuth: [] requestBody: description: Profile update content: application/json: schema: $ref: '#/components/schemas/Profile' required: true responses: '200': description: Success content: text/plain: schema: type: string example: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/privacy: get: tags: - Services summary: Get user privacy settings description: 'Returns a user''s privacy settings **Auth:** Requires user auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Privacy' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error put: tags: - Services summary: Update user privacy description: 'Updates a user privacy **Auth:** Requires user auth token ' security: - bearerAuth: [] requestBody: description: Privacy update content: application/json: schema: $ref: '#/components/schemas/Privacy' example: public: true field_visibility: profile: first_name: public last_name: connections email: private auth_types: id1: public id2: private external_ids: net_id: connections uin: public username: public required: true responses: '200': description: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/system-configs: get: tags: - Services summary: Get system configs description: 'Returns account system configs **Auth:** Requires auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: type: object nullable: true '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/username: put: tags: - Services summary: Update account username description: 'Update the username associated with the user''s account **Auth:** Requires user access token ' security: - bearerAuth: [] requestBody: description: Username content: application/json: schema: $ref: '#/components/schemas/Username' required: true responses: '200': description: Success content: text/plain: schema: type: string example: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/follow: post: tags: - Services summary: Add follower description: 'Adds follower to specified user **Auth:** Requires user auth token ' security: - bearerAuth: [] requestBody: description: Follow relationship content: application/json: schema: $ref: '#/components/schemas/Follow' required: true responses: '200': description: Success content: text/plain: schema: type: string example: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/account/follow/{id}: delete: tags: - Services summary: Delete a follow relationship description: 'Delete a follow where subject follows userID **Auth:** Requires user auth token ' security: - bearerAuth: [] parameters: - name: id in: path description: The account ID to stop following required: true style: simple explode: false schema: type: string responses: '200': description: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /services/test: get: tags: - Services summary: Test API.. responses: '200': description: Success content: text/plain: schema: type: string example: Echooo /services/app-configs: post: tags: - Services summary: Gets default app config description: 'Returns the default app config for the highest version that is equal to or less than the provided version **Auth:** Requires a valid API Key for access. ' requestBody: description: 'App config query ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_app-configs' example: version: 1.0.1 app_type_identifier: edu.illinois.rokwire.android api_key: '' responses: '200': description: successfully read app configuration content: application/json: schema: $ref: '#/components/schemas/ApplicationConfig' '400': description: Bad request. '401': description: Unauthorized '404': description: AppConfig not found '500': description: Internal error /services/app-configs/organization: post: tags: - Services summary: Gets organization-specific app configs description: 'Returns the app config for the highest version that is equal to or less than the provided version for the currently authenticated organization **Auth:** Requires auth token ' security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/_shared_req_app-configs-org' example: version: 1.0.1 app_type_identifier: edu.illinois.rokwire.android responses: '200': description: successfully read app configuration content: application/json: schema: $ref: '#/components/schemas/ApplicationConfig' '400': description: Bad request. '401': description: Unauthorized '404': description: AppConfig not found '500': description: Internal error /services/application/configs: post: tags: - Services summary: Gets default app config description: 'Returns the default app config for the highest version that is equal to or less than the provided version **Auth:** Requires a valid API Key for access. ' deprecated: true requestBody: description: 'App config query ' content: application/json: schema: $ref: '#/components/schemas/_shared_req_app-configs' example: version: 1.0.1 app_type_identifier: edu.illinois.rokwire.android api_key: '' responses: '200': description: successfully read app configuration content: application/json: schema: $ref: '#/components/schemas/ApplicationConfig' '400': description: Bad request. '401': description: Unauthorized '404': description: AppConfig not found '500': description: Internal error /services/application/organization/configs: post: tags: - Services summary: Gets organization-specific app configs description: 'Returns the app config for the highest version that is equal to or less than the provided version for the currently authenticated organization **Auth:** Requires auth token ' security: - bearerAuth: [] deprecated: true requestBody: content: application/json: schema: $ref: '#/components/schemas/_shared_req_app-configs-org' example: version: 1.0.1 app_type_identifier: edu.illinois.rokwire.android responses: '200': description: successfully read app configuration content: application/json: schema: $ref: '#/components/schemas/ApplicationConfig' '400': description: Bad request. '401': description: Unauthorized '404': description: AppConfig not found '500': description: Internal error /services/user-data: get: tags: - Services summary: Get user data description: 'Gets user data **Auth:** Requires auth token ' security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UserData' '400': description: Bad request '401': description: Unauthorized '500': description: Internal errors components: schemas: AccountAuthType: required: - id - code - identifier type: object properties: id: type: string code: type: string identifier: type: string params: type: object additionalProperties: true nullable: true active: type: boolean unverified: type: boolean _services_req_credential_forgot_complete: required: - credential_id - reset_code type: object properties: credential_id: type: string reset_code: type: string params: type: object anyOf: - $ref: '#/components/schemas/_shared_req_ParamsSetEmailCredential' ApplicationConfig: required: - id - app_type_id - version - data type: object properties: id: type: string readOnly: true app_type_id: type: string org_id: type: string version: type: string description: conforms major.minor.patch format data: type: object _shared_res_ParamsOIDC: type: object description: Auth login response params for auth_type="oidc" (or variants) properties: oidc_token: type: object properties: id_token: type: string access_token: type: string refresh_token: type: string token_type: type: string redirect_uri: type: string _shared_res_LoginUrl: required: - login_url type: object properties: login_url: type: string params: type: object description: Params to be submitted with 'login' request (if necessary) ApplicationType: required: - id - identifier type: object properties: id: readOnly: true type: string identifier: type: string name: type: string versions: type: array items: type: string _shared_req_CredsOIDC: type: string description: "Auth login creds for auth_type=\"oidc\" (or variants)\n - full redirect URI received from OIDC provider\n" _shared_req_Login: required: - auth_type - app_type_identifier - org_id - api_key - device type: object properties: auth_type: type: string enum: - email - twilio_phone - illinois_oidc - anonymous - username app_type_identifier: type: string org_id: type: string api_key: type: string creds: anyOf: - $ref: '#/components/schemas/_shared_req_CredsEmail' - $ref: '#/components/schemas/_shared_req_CredsTwilioPhone' - $ref: '#/components/schemas/_shared_req_CredsOIDC' - $ref: '#/components/schemas/_shared_req_CredsAPIKey' - $ref: '#/components/schemas/_shared_req_CredsUsername' params: type: object anyOf: - $ref: '#/components/schemas/_shared_req_ParamsEmail' - $ref: '#/components/schemas/_shared_req_ParamsOIDC' - $ref: '#/components/schemas/_shared_req_ParamsNone' - $ref: '#/components/schemas/_shared_req_ParamsUsername' device: $ref: '#/components/schemas/Device' profile: $ref: '#/components/schemas/ProfileNullable' privacy: $ref: '#/components/schemas/PrivacyNullable' preferences: type: object nullable: true username: type: string nullable: true PublicAccount: required: - id - is_connection - profile - identifiers type: object properties: id: type: string verified: type: boolean is_following: type: boolean is_connection: type: boolean profile: $ref: '#/components/schemas/ProfileNullable' identifiers: type: array items: $ref: '#/components/schemas/PublicAccountIdentifier' _shared_req_ParamsSetEmailCredential: required: - new_password - confirm_password type: object properties: new_password: type: string confirm_password: type: string InactiveExpirePolicy: type: object required: - active - inactivity_period properties: active: type: boolean inactivity_period: type: integer AppOrgGroup: required: - id - name type: object properties: id: type: string readOnly: true name: type: string description: type: string system: type: boolean date_created: type: string date_updated: type: string application: $ref: '#/components/schemas/Application' permissions: type: array items: $ref: '#/components/schemas/Permission' roles: type: array items: $ref: '#/components/schemas/AppOrgRole' RefreshGracePeriodPolicy: type: object required: - active - grace_period properties: active: type: boolean grace_period: type: integer _services_req_credential_send-verify: required: - auth_type - app_type_identifier - org_id - api_key - identifier type: object properties: identifier: type: string org_id: type: string api_key: type: string app_type_identifier: type: string auth_type: type: string enum: - email _shared_res_Mfa: type: object properties: type: type: string verified: type: boolean params: type: object _shared_req_DeleteAccount: required: - app_id type: object properties: app_id: writeOnly: true type: string context: type: object Profile: required: - id type: object properties: id: readOnly: true type: string photo_url: type: string pronunciation_url: type: string pronouns: type: string first_name: type: string last_name: type: string email: type: string nullable: true phone: type: string nullable: true birth_year: type: integer nullable: true address: type: string nullable: true address2: type: string nullable: true po_box: type: string nullable: true city: type: string nullable: true zip_code: type: string nullable: true state: type: string nullable: true country: type: string nullable: true website: type: string unstructured_properties: type: object nullable: true _services_res_authorize-service: type: object properties: access_token: type: string token_type: description: The type of the provided tokens to be specified when they are sent in the "Authorization" header type: string enum: - Bearer approved_scopes: type: array items: type: string service_reg: $ref: '#/components/schemas/ServiceReg' _shared_res_Login_Mfa: required: - enrolled - account_id - session_id - state type: object properties: enrolled: type: array items: $ref: '#/components/schemas/_shared_res_Mfa' account_id: type: string session_id: type: string state: type: string params: type: object nullable: true anyOf: - $ref: '#/components/schemas/_shared_res_ParamsOIDC' - $ref: '#/components/schemas/_shared_res_ParamsAPIKey' - $ref: '#/components/schemas/_shared_res_ParamsNone' _shared_res_Refresh: type: object properties: token: $ref: '#/components/schemas/_shared_res_RokwireToken' params: type: object nullable: true anyOf: - $ref: '#/components/schemas/_shared_res_ParamsOIDC' - $ref: '#/components/schemas/_shared_res_ParamsAPIKey' - $ref: '#/components/schemas/_shared_res_ParamsNone' _shared_req_UpdateAccount: required: - auth_type - identifier type: object properties: auth_type: type: string enum: - email - illinois_oidc identifier: type: string permissions: type: array items: type: string role_ids: type: array items: type: string group_ids: type: array items: type: string scopes: type: array items: type: string _shared_res_ParamsNone: type: object description: Auth login response params for unlisted auth_types (None) nullable: true _services_res_account_auth-type-link: required: - auth_types type: object properties: message: type: string nullable: true auth_types: type: array items: $ref: '#/components/schemas/AccountAuthType' _shared_req_app-configs: required: - app_type_identifier - version - api_key type: object properties: app_type_identifier: type: string version: type: string description: conforms major.minor.patch format api_key: type: string _shared_req_AccountCheck: required: - auth_type - app_type_identifier - org_id - api_key - user_identifier type: object properties: auth_type: type: string enum: - username - email - twilio_phone - illinois_oidc - anonymous app_type_identifier: type: string org_id: type: string api_key: type: string user_identifier: type: string _shared_req_CredsTwilioPhone: type: object description: Auth login creds for auth_type="twilio_phone" required: - phone properties: phone: type: string code: type: string Follow: required: - id - follower_id - following_id type: object properties: id: readOnly: true type: string following_id: type: string follower_id: readOnly: true type: string _services_req_authorize-service: required: - service_id type: object properties: service_id: type: string approved_scopes: description: Scopes to be granted to this service in this and future tokens. Replaces existing scopes if present. type: array items: type: string _services_req_account_auth-type-link: required: - auth_type - app_type_identifier - creds type: object properties: auth_type: type: string enum: - email - twilio_phone - illinois_oidc - username app_type_identifier: type: string creds: anyOf: - $ref: '#/components/schemas/_shared_req_CredsEmail' - $ref: '#/components/schemas/_shared_req_CredsTwilioPhone' - $ref: '#/components/schemas/_shared_req_CredsOIDC' params: type: object anyOf: - $ref: '#/components/schemas/_shared_req_ParamsEmail' - $ref: '#/components/schemas/_shared_req_ParamsOIDC' - $ref: '#/components/schemas/_shared_req_ParamsNone' _shared_req_Refresh: required: - api_key - refresh_token type: object properties: api_key: type: string refresh_token: type: string _services_req_credential_forgot_initiate: required: - auth_type - app_type_identifier - org_id - api_key - identifier type: object properties: auth_type: type: string enum: - email app_type_identifier: type: string org_id: type: string api_key: type: string identifier: type: string PrivacyNullable: type: object nullable: true properties: public: type: boolean nullable: true field_visibility: type: object additionalProperties: true nullable: true _shared_req_app-configs-org: required: - app_type_identifier - version type: object properties: app_type_identifier: type: string version: type: string description: conforms major.minor.patch format Device: required: - id - type type: object properties: id: readOnly: true type: string device_id: type: string nullable: true type: type: string enum: - mobile - web - desktop - other os: type: string Username: required: - username type: object properties: username: type: string _shared_req_ParamsEmail: type: object description: Auth login params for auth_type="email" properties: confirm_password: type: string description: This should match the `creds` password field when sign_up=true. This should be verified on the client side as well to reduce invalid requests. sign_up: type: boolean SupportedAuthTypes: type: object properties: app_type_id: type: string supported_auth_types: type: array items: $ref: '#/components/schemas/SupportedAuthType' _shared_req_ParamsNone: type: object description: Auth login request params for unlisted auth_types (None) nullable: true Account: required: - id type: object properties: id: readOnly: true type: string app_org: $ref: '#/components/schemas/ApplicationOrganization' username: type: string profile: $ref: '#/components/schemas/Profile' privacy: $ref: '#/components/schemas/Privacy' preferences: type: object nullable: true system_configs: type: object nullable: true anonymous: type: boolean verified: type: boolean system: type: boolean external_ids: type: object nullable: true auth_types: type: array items: $ref: '#/components/schemas/AccountAuthType' permissions: type: array items: $ref: '#/components/schemas/Permission' roles: type: array items: $ref: '#/components/schemas/AppOrgRole' apps: type: array items: $ref: '#/components/schemas/PartialApp' groups: type: array items: $ref: '#/components/schemas/AppOrgGroup' scopes: type: array items: type: string devices: type: array items: $ref: '#/components/schemas/Device' last_login_date: type: string last_access_token_date: type: string most_recent_client_version: type: string YearlyExpirePolicy: type: object required: - active - day - month - hour - min properties: active: type: boolean day: type: integer month: type: integer hour: type: integer min: type: integer ServiceScope: required: - scope - required type: object properties: scope: type: string required: type: boolean explanation: description: Explanation displayed to users for why this scope is requested/required type: string Permission: required: - id - name type: object properties: id: readOnly: true type: string name: type: string description: type: string service_id: type: string assigners: type: array items: type: string date_created: type: string date_updated: type: string Privacy: type: object properties: public: type: boolean nullable: true field_visibility: type: object additionalProperties: true nullable: true IdentityProviderSettings: required: - identity_provider_id - user_identifier_field type: object properties: identity_provider_id: type: string user_identifier_field: type: string external_id_fields: type: object additionalProperties: type: string nullable: true first_name_field: type: string middle_name_field: type: string last_name_field: type: string email_field: type: string ferpa_field: type: string roles_field: type: string groups_field: type: string user_specific_fields: type: array items: type: string nullable: true roles: type: object additionalProperties: type: string nullable: true groups: type: object additionalProperties: type: string nullable: true always_sync_profile: type: boolean identity_bb_base_url: type: string identity_bb_profile_fields: type: object additionalProperties: type: string nullable: true admin_app_access_roles: type: array items: type: string PubKey: required: - key_pem - alg type: object properties: key_pem: type: string alg: type: string SupportedAuthType: type: object properties: auth_type_id: type: string params: type: object additionalProperties: true nullable: true _shared_req_LoginUrl: required: - auth_type - app_type_identifier - org_id - api_key - redirect_uri type: object properties: auth_type: type: string enum: - illinois_oidc app_type_identifier: type: string org_id: type: string api_key: type: string redirect_uri: type: string _shared_req_CreateAccount: required: - auth_type - identifier type: object properties: auth_type: type: string enum: - email - illinois_oidc identifier: type: string permissions: type: array items: type: string role_ids: type: array items: type: string group_ids: type: array items: type: string scopes: type: array items: type: string profile: $ref: '#/components/schemas/ProfileNullable' privacy: $ref: '#/components/schemas/PrivacyNullable' username: type: string nullable: true _shared_req_ParamsOIDC: type: object description: Auth login params for auth_type="oidc" (or variants) properties: redirect_uri: type: string pkce_verifier: type: string _shared_req_CredsAPIKey: type: object description: Auth login creds for auth_type="anonymous" properties: anonymous_id: type: string LoginSession: type: object properties: id: type: string anonymous: type: boolean identifier: type: string auth_type_code: type: string app_org_id: type: string app_type_id: type: string app_type_identifier: type: string account_auth_type_id: type: string account_auth_type_identifier: type: string device_id: type: string nullable: true ip_address: type: string refresh_tokens_count: type: integer state: type: string state_expires: type: string nullable: true mfa_attempts: type: integer date_refreshed: type: string nullable: true date_updated: type: string nullable: true date_created: type: string _shared_res_ParamsAPIKey: type: object description: Auth login response params for auth_type="anonymous" properties: anonymous_id: type: string AppOrgRole: required: - id - name type: object properties: id: type: string readOnly: true name: type: string description: type: string system: type: boolean date_created: type: string date_updated: type: string application: $ref: '#/components/schemas/Application' permissions: type: array items: $ref: '#/components/schemas/Permission' scopes: type: array items: type: string _services_res_accounts-public: required: - total - counts - accounts type: object properties: total: type: integer counts: type: object additionalProperties: type: integer accounts: type: array items: $ref: '#/components/schemas/PublicAccount' _shared_req_Login_Mfa: required: - api_key - account_id - session_id - state - identifier - type - code type: object properties: api_key: type: string account_id: type: string session_id: type: string state: type: string identifier: type: string type: type: string enum: - email - phone - totp - recovery code: type: string _services_req_account_auth-type-unlink: required: - auth_type - app_type_identifier - identifier type: object properties: auth_type: type: string enum: - email - twilio_phone - illinois_oidc - username app_type_identifier: type: string identifier: type: string PartialApp: required: - id - name - code type: object properties: id: readOnly: true type: string name: type: string code: type: string PublicAccountIdentifier: required: - code - identifier type: object properties: code: type: string identifier: type: string ApplicationOrganization: required: - id - app_id - org_id type: object nullable: true properties: id: readOnly: true type: string app_id: type: string org_id: type: string services_ids: type: array nullable: true items: type: string identity_provider_settings: type: array nullable: true items: $ref: '#/components/schemas/IdentityProviderSettings' supported_auth_types: type: array nullable: true items: $ref: '#/components/schemas/SupportedAuthTypes' logins_session_settings: $ref: '#/components/schemas/LoginSessionSettings' _shared_res_RokwireToken: type: object properties: access_token: description: The user's access token to be provided to authorize access to ROKWIRE APIs type: string refresh_token: description: A refresh token that can be used to get a new access token once the one provided expires type: string token_type: description: The type of the provided tokens to be specified when they are sent in the "Authorization" header type: string enum: - Bearer _shared_req_CredsEmail: required: - email - password type: object description: Auth login creds for auth_type="email" properties: email: type: string password: type: string _shared_req_Mfa: required: - identifier - type type: object properties: identifier: type: string type: type: string enum: - email - phone - totp code: type: string _services_req_credential_update: required: - account_auth_type_id type: object properties: account_auth_type_id: type: string params: type: object anyOf: - $ref: '#/components/schemas/_shared_req_ParamsSetEmailCredential' _shared_res_Login: type: object properties: token: $ref: '#/components/schemas/_shared_res_RokwireToken' account: $ref: '#/components/schemas/Account' params: type: object nullable: true anyOf: - $ref: '#/components/schemas/_shared_res_ParamsOIDC' - $ref: '#/components/schemas/_shared_res_ParamsAPIKey' - $ref: '#/components/schemas/_shared_res_ParamsNone' message: type: string _shared_req_ParamsUsername: type: object description: Auth login params for auth_type="username" properties: confirm_password: type: string description: This should match the `creds` password field when sign_up=true. This should be verified on the client side as well to reduce invalid requests. sign_up: type: boolean _shared_req_CredsUsername: required: - username - password type: object description: Auth login creds for auth_type="username" properties: username: type: string password: type: string LoginSessionSettings: type: object properties: max_concurrent_sessions: type: integer inactivity_expire_policy: $ref: '#/components/schemas/InactiveExpirePolicy' time_since_login_expire_policy: $ref: '#/components/schemas/TSLExpirePolicy' yearly_expire_policy: $ref: '#/components/schemas/YearlyExpirePolicy' refresh_grace_period_policy: $ref: '#/components/schemas/RefreshGracePeriodPolicy' UserData: type: object properties: account: $ref: '#/components/schemas/Account' login_sessions: type: array items: $ref: '#/components/schemas/LoginSession' TSLExpirePolicy: type: object required: - active - time_since_login_period properties: active: type: boolean time_since_login_period: type: integer ServiceReg: required: - service_id - host - name - description - first_party type: object description: Full service registration record properties: service_id: type: string service_account_id: type: string host: type: string pub_key: $ref: '#/components/schemas/PubKey' name: type: string description: type: string info_url: type: string logo_url: type: string scopes: type: array nullable: true items: $ref: '#/components/schemas/ServiceScope' first_party: type: boolean PartialAccount: required: - id - app_id - org_id - first_name - last_name - permissions - roles - groups - anonymous - auth_types - date_created type: object properties: id: type: string readOnly: true app_id: type: string org_id: type: string first_name: type: string last_name: type: string system: type: boolean username: type: string permissions: type: array items: $ref: '#/components/schemas/Permission' roles: type: array items: $ref: '#/components/schemas/AppOrgRole' groups: type: array items: $ref: '#/components/schemas/AppOrgGroup' apps: type: array items: $ref: '#/components/schemas/PartialApp' scopes: type: array items: type: string auth_types: type: array items: $ref: '#/components/schemas/AccountAuthType' system_configs: type: object nullable: true params: type: object nullable: true anonymous: type: boolean privacy: $ref: '#/components/schemas/Privacy' verified: type: boolean date_created: readOnly: true type: string date_updated: type: string nullable: true external_ids: type: object nullable: true Application: required: - id - name - multi_tenant - admin - code type: object properties: id: readOnly: true type: string name: type: string multi_tenant: type: boolean admin: type: boolean code: type: string types: type: array items: $ref: '#/components/schemas/ApplicationType' _shared_res_AccountCheck: type: boolean ProfileNullable: type: object nullable: true properties: photo_url: type: string nullable: true pronunciation_url: type: string nullable: true pronouns: type: string nullable: true first_name: type: string nullable: true last_name: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true birth_year: type: integer nullable: true address: type: string nullable: true address2: type: string nullable: true po_box: type: string nullable: true city: type: string nullable: true zip_code: type: string nullable: true state: type: string nullable: true country: type: string nullable: true website: type: string nullable: true unstructured_properties: type: object nullable: true securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT