openapi: 3.0.3 info: title: Rokwire Core Building Block Admin BBs API description: Core Building Block API Documentation version: 1.62.0 servers: - url: https://api.rokwire.illinois.edu/core tags: - name: BBs description: APIs consumed by the platform building blocks. paths: /bbs/test: get: tags: - BBs summary: Test API.. responses: '200': description: Success content: text/plain: schema: type: string example: Echooo /bbs/service-regs: get: tags: - BBs summary: Get service registrations description: 'Returns service registration records ' 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/AuthServiceReg' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /bbs/service-account/{id}: post: tags: - BBs summary: Get service account params description: 'Returns service account parameters ' parameters: - name: id in: path description: ID of the service account required: true style: simple explode: false schema: type: string requestBody: description: 'Service account credentials ' content: application/json: schema: $ref: '#/components/schemas/_services_req_service-accounts_params' examples: static_token: summary: Static token value: auth_type: static_token creds: token: account_token signature: summary: Signature value: auth_type: signature required: true responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/AppOrgPair' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /bbs/access-token: post: tags: - BBs summary: Get service account access token description: 'Returns a new service account access token ' requestBody: description: 'Service account credentials ' content: application/json: schema: $ref: '#/components/schemas/_services_req_service-accounts_access-token' examples: static_token: summary: Static token value: account_id: service_account_id app_id: '9766' org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 auth_type: static_token creds: token: account_token signature: summary: Signature value: account_id: service_account_id app_id: '9766' org_id: 0a2eff20-e2cd-11eb-af68-60f81db5ecc0 auth_type: signature required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/_shared_res_RokwireToken' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /bbs/access-tokens: post: tags: - BBs summary: Get all service account access tokens description: 'Returns a new service account access token for all authorized app org pairs ' requestBody: description: 'Service account credentials ' content: application/json: schema: $ref: '#/components/schemas/_services_req_service-accounts_access-tokens' examples: static_token: summary: Static token value: account_id: service_account_id auth_type: static_token creds: token: account_token signature: summary: Signature value: account_id: service_account_id auth_type: signature required: true responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/_services_res_service-accounts_access-tokens' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /bbs/deleted-memberships: get: tags: - BBs summary: Get deleted accounts description: 'Returns a list of deleted account IDs **Auth:** Requires auth token with permission to get deleted accounts ' security: - bearerAuth: [] parameters: - name: service_id in: query description: The ID of the service making the request required: true style: form explode: false schema: type: string - name: start_time in: query description: The start time for filtering results, specified as a Unix timestamp in seconds required: false style: form explode: false schema: type: integer format: int64 responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/DeletedAppOrgMembership' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /bbs/accounts: post: tags: - BBs summary: Finds user accounts description: 'Finds accounts for the given app_id and org_id (query or token) **Auth:** Requires service access token with `get_accounts` or `all_accounts` permission ' security: - bearerAuth: [] parameters: - name: app_id in: query description: The application ID to use to filter accounts required: false style: form explode: false schema: type: string - name: org_id in: query description: The organization ID to use to filter accounts required: false style: form explode: false schema: type: string - 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 requestBody: description: 'Service account credentials ' content: application/json: schema: type: object examples: single_value: summary: Multiple single-value search parameters value: profile.first_name: Example preferences.privacy_level: 4 external_ids.uin: '123456789' multiple_value: summary: Some single-value, some multi-value search parameters value: profile.first_name: Example preferences.privacy_level: - 3 - 4 - 5 external_ids.uin: '123456789' required: true responses: '200': description: Success content: application/json: schema: type: array items: type: object '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '500': description: Internal error /bbs/accounts/count: post: tags: - BBs summary: Finds the count of user accounts description: 'Finds the count of accounts for the given app_id and org_id (query or token) **Auth:** Requires service access token with `get_accounts_count` or `get_accounts_count_limited` permission ' security: - bearerAuth: [] parameters: - name: app_id in: query description: The application ID to use to filter accounts required: false style: form explode: false schema: type: string - name: org_id in: query description: The organization ID to use to filter accounts required: false style: form explode: false schema: type: string requestBody: description: 'Service account credentials ' content: application/json: schema: type: object examples: single_value: summary: Multiple single-value search parameters value: profile.first_name: Example preferences.privacy_level: 4 external_ids.uin: '123456789' multiple_value: summary: Some single-value, some multi-value search parameters value: profile.first_name: Example preferences.privacy_level: - 3 - 4 - 5 external_ids.uin: '123456789' required: true responses: '200': description: Success content: application/json: schema: type: integer '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '500': description: Internal error /bbs/accounts/ferpa: get: tags: - BBs summary: Get the account ids with FERPA filed true description: 'Get the account ids with FERPA filed true ' security: - bearerAuth: [] parameters: - 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: type: string '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/examples/{id}: get: tags: - BBs summary: Gets example description: 'Gets example record **Auth:** Requires valid first-party service account token with `get_examples` permission ' security: - bearerAuth: [] parameters: - name: id in: path description: ID of example to retrieve required: true style: simple explode: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Example' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/units: get: tags: - BBs summary: Gets the list of units (calendars) for a provider id description: "Gets the list of units (calendars) for a provider id\n\n**Auth:** Requires valid first-party service account token with `get_external_appointments` permission \n Requires the External-Authorization header containing the oidc access token from the campus provider\n" security: - bearerAuth: [] parameters: - name: external_id in: query description: External system id of person making the request required: true style: form explode: false schema: type: string - name: provider_id in: query description: Rokwire provider id of the organization tracking/providing appointment data required: true style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AppointmentUnit' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/people: get: tags: - BBs summary: Gets People with Calendars description: "Gets a list of people with calendars inside of a unit\n\n**Auth:** Requires valid first-party service account token with `get_external_appointments` permission\n Requires the External-Authorization header containing the oidc access token from the campus provider\n" security: - bearerAuth: [] parameters: - name: external_id in: query description: External system id of person making the request required: true style: form explode: false schema: type: string - name: provider_id in: query description: Rokwire provider id of the organization tracking/providing appointment data required: true style: form explode: false schema: type: string - name: unit_id in: query description: External id identifying the unit the calendar entries belong to required: true style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AppointmentPerson' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/slots: get: tags: - BBs summary: Gets available time slots on a calendar description: 'Gets a list of available time slots between two dates on a unit calendar **Auth:** Requires valid first-party service account token with `get_external_appointments` permission Requires the External-Authorization header containing the oidc access token from the campus provider ' security: - bearerAuth: [] parameters: - name: external_id in: query description: External system id of person making the request required: true style: form explode: false schema: type: string - name: provider_id in: query description: Rokwire provider id of the organization tracking/providing appointment data required: true style: form explode: false schema: type: string - name: unit_id in: query description: External id identifying the unit the calendar entries belong to required: true style: form explode: false schema: type: string - name: person_id in: query description: External id identifying the advisor the calendar entry belongs to required: true style: form explode: false schema: type: string - name: start_time in: query description: The first date to look for available slots (yyyy-mm-dd). Required if end_time is provided. required: false style: form explode: false schema: type: string - name: end_time in: query description: The last date to look for available slots (yyyy-mm-dd) Required if start_time is provided required: false style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/TimeSlot' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/questions: get: tags: - BBs summary: Gets the questions to ask when making an appointment description: 'Gets a list of the questions to ask when a user requests an appointment for a particular time slot. **Auth:** Requires valid first-party service account token with `get_external_appointments` permission Requires the External-Authorization header containing the oidc access token from the campus provider ' security: - bearerAuth: [] parameters: - name: external_id in: query description: External system id of person making the request required: true style: form explode: false schema: type: string - name: provider_id in: query description: Rokwire provider id of the organization tracking/providing appointment data required: true style: form explode: false schema: type: string - name: unit_id in: query description: External id identifying the unit the calendar entries belong to required: true style: form explode: false schema: type: string - name: person_id in: query description: External id identifying the advisor the calendar entry belongs to required: true style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/Question' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/qands: get: tags: - BBs summary: Gets available time slots on a calendar description: 'Gets a list of available time slots between two dates on a unit calendar **Auth:** Requires valid first-party service account token with `get_external_appointments` permission Requires the External-Authorization header containing the oidc access token from the campus provider ' security: - bearerAuth: [] parameters: - name: external_id in: query description: External system id of person making the request required: true style: form explode: false schema: type: string - name: provider_id in: query description: Rokwire provider id of the organization tracking/providing appointment data required: true style: form explode: false schema: type: string - name: unit_id in: query description: External id identifying the unit the calendar entries belong to required: true style: form explode: false schema: type: string - name: person_id in: query description: External id identifying the advisor the calendar entry belongs to required: true style: form explode: false schema: type: string - name: start_time in: query description: The first date to look for available slots (yyyy-mm-dd). Required if end_time is provided. required: false style: form explode: false schema: type: string - name: end_time in: query description: The last date to look for available slots (yyyy-mm-dd) Required if start_time is provided required: false style: form explode: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AppointmentOptions' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/: post: tags: - BBs summary: Creates an appointment in the specified provider system and returns the appointment data to the client description: "Posts an appointment request to the specified provider calendar. Returns the appointment data back to the client. \n\n**Auth:** Requires valid first-party service account token with `update_external_appointments` permission\nRequires the External-Authorization header containing the oidc access token from the campus provider\n" security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AppointmentPost' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/BuildingBlockAppointment' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error put: tags: - BBs summary: updates an appointment in the specified provider system and returns the appointment data to the client description: 'Updates an appointment in the specified provider system and returns the appointment data to the clients. For an upate, the source_id field in the request body is required. **Auth:** Requires valid first-party service account token with `update_external_appointments` permission Requires the External-Authorization header containing the oidc access token from the campus provider ' security: - bearerAuth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AppointmentPost' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/BuildingBlockAppointment' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/appointments/{id}: delete: tags: - BBs summary: Deletes an appointment in the specified provider system. description: 'Deletes an appointment request in the specified provider calendar. **Auth:** Requires valid first-party service account token with `update_external_appointments` permission Requires the External-Authorization header containing the oidc access token from the campus provider ' security: - bearerAuth: [] parameters: - name: id in: path description: source id of the appointment required: true style: simple explode: false schema: type: string - name: external_id in: query description: Users UIN required: true style: form explode: false schema: type: string - name: provider_id in: query description: Rokwire provider id of the organization tracking/providing appointment data required: true style: form explode: false schema: type: string responses: '200': description: Success '400': description: Bad request '401': description: Unauthorized '500': description: Internal error /api/bbs/events: get: tags: - BBs summary: Gets all legacy events description: "Gets all legacy events \n" security: - bearerAuth: [] responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/LegacyEvent' '400': description: Bad request '401': description: Unauthorized '500': description: Internal error components: schemas: AppOrgPair: required: - app_id - org_id type: object properties: app_id: type: string org_id: type: string ExternalUserID: type: object required: - uin properties: uin: type: string readOnly: true _services_req_service-accounts_access-tokens: required: - account_id - auth_type type: object properties: account_id: type: string auth_type: type: string enum: - static_token - signature creds: $ref: '#/components/schemas/_services_service-accounts_CredsStaticToken' _services_req_service-accounts_params: required: - auth_type type: object properties: auth_type: type: string enum: - static_token - signature creds: $ref: '#/components/schemas/_services_service-accounts_CredsStaticToken' AppointmentHost: type: object required: - first_name - last_name properties: first_name: type: string readOnly: true last_name: type: string readOnly: true Example: type: object required: - id - app_id - org_id - data - date_created properties: id: type: string readOnly: true org_id: type: string readOnly: true app_id: type: string readOnly: true data: type: string date_created: type: string readOnly: true date_updated: type: string nullable: true readOnly: true TimeSlot: type: object required: - id - provider_id - unit_id - person_id - start_time - end_time - capacity - filled - details properties: id: type: integer readOnly: true provider_id: type: integer readOnly: true unit_id: type: integer readOnly: true person_id: type: integer start_time: type: string end_time: type: string capacity: type: integer filled: type: integer details: type: object _services_res_service-accounts_access-tokens: required: - app_id - org_id - token type: object properties: app_id: type: string org_id: type: string token: $ref: '#/components/schemas/_shared_res_RokwireToken' BuildingBlockAppointment: type: object required: - provider_id - unit_id - person_id - type - start_time - end_time - user_external_ids - source_id - host properties: provider_id: type: string readOnly: true unit_id: type: string readOnly: true person_id: type: string readOnly: true type: type: string readOnly: true start_time: type: string readOnly: true end_time: type: string readOnly: true user_external_ids: $ref: '#/components/schemas/ExternalUserID' readOnly: true source_id: type: string readOnly: true host: $ref: '#/components/schemas/AppointmentHost' _services_req_service-accounts_access-token: required: - account_id - app_id - org_id - auth_type type: object properties: account_id: type: string app_id: type: string org_id: type: string auth_type: type: string enum: - static_token - signature creds: $ref: '#/components/schemas/_services_service-accounts_CredsStaticToken' AppointmentUnit: type: object required: - id - provider_id - name - location - hours_of_operation - details - next_available - image_url properties: id: type: integer readOnly: true provider_id: type: integer readOnly: true name: type: string readOnly: true location: type: string hours_of_operation: type: string details: type: string next_available: type: string image_url: type: string AppointmentPost: type: object required: - provider_id - unit_id - person_id - type - start_time - end_time - user_external_ids - slot_id - answers properties: provider_id: type: string readOnly: true unit_id: type: string readOnly: true person_id: type: string readOnly: true type: type: string readOnly: true start_time: type: string readOnly: true end_time: type: string readOnly: true user_external_ids: $ref: '#/components/schemas/ExternalUserID' readOnly: true slot_id: type: string readOnly: true source_id: type: string readOnly: true answers: type: array items: $ref: '#/components/schemas/QuestionAnswer' readOnly: true AppointmentOptions: type: object required: - time_slots - questions properties: time_slots: type: array items: $ref: '#/components/schemas/TimeSlot' readOnly: true questions: type: array items: $ref: '#/components/schemas/Question' readOnly: true PubKey: required: - key_pem - alg type: object properties: key_pem: type: string alg: type: string AppointmentPerson: type: object required: - id - provider_id - unit_id - next_available - name - notes - image_url properties: id: type: string readOnly: true provider_id: type: integer readOnly: true unit_id: type: integer readOnly: true next_available: type: string name: type: string notes: type: string image_url: type: string QuestionAnswer: type: object required: - question_id - values properties: question_id: type: string readOnly: true values: type: array items: type: string readOnly: true Question: type: object required: - id - provider_id - required - type - select_values - question properties: id: type: string readOnly: true provider_id: type: integer readOnly: true required: type: boolean readOnly: true type: type: string readOnly: true select_values: type: array items: type: string readOnly: true question: type: string readOnly: true LegacyEvent: type: object required: - all_day - calendar_id - category - subcategory - created_by - long_description - data_modified - data_source_event_id - date_created - end_date - event_id - ical_url - id - is_event_free - is_virtual - originating_calendar_id - originating_calendar_name - outlook_url - is_super_event - recurring_flag - source_id - sponsor - start_date - title - title_url - registration_url - cost properties: all_day: type: boolean calendar_id: type: string category: type: string subcategory: type: string created_by: type: string long_description: type: string data_modified: type: string data_source_event_id: type: string date_created: type: string end_date: type: string event_id: type: string ical_url: type: string id: type: string image_url: type: string nullable: true is_event_free: type: boolean is_virtual: type: boolean originating_calendar_id: type: string originating_calendar_name: type: string outlook_url: type: string recurrence_id: type: integer nullable: true is_super_event: type: boolean recurring_flag: type: boolean source_id: type: string sponsor: type: string start_date: type: string title: type: string title_url: type: string tags: type: array items: type: string nullable: true target_audience: type: array items: type: string nullable: true registration_url: type: string cost: type: string DeletedAppOrgMembership: allOf: - $ref: '#/components/schemas/AppOrgPair' - required: - memberships type: object properties: memberships: type: array items: $ref: '#/components/schemas/DeletedMembership' _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 DeletedMembership: required: - account_id type: object properties: account_id: readOnly: true type: string external_ids: type: object nullable: true additionalProperties: type: string context: type: object AuthServiceReg: required: - service_id - host type: object description: Service registration record used for auth properties: service_id: type: string service_account_id: type: string host: type: string pub_key: $ref: '#/components/schemas/PubKey' _services_service-accounts_CredsStaticToken: required: - token type: object description: Service account token for auth_type="static_token" properties: token: type: string securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT