openapi: 3.2.0 info: title: University Of Wisconsin Madison Salary Structures API version: 1.0.0 contact: name: DoIT Enterprise Integration API Team email: api@doit.wisc.edu description: 'Operations tagged Salary Structures across 2 of this provider''s published API definitions: university-of-wisconsin-madison-hr-api-openapi.yml, university-of-wisconsin-madison-mock-hr-api-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.wisc.edu/hr - url: https://mock.api.wisc.edu/hr security: - OAuth2ClientCredentials: [] tags: - name: Salary Structures paths: /salaryStructures: get: description: Get a list of salary structures. summary: Get a list of salary structures. operationId: get_salary_structures tags: - Salary Structures parameters: - name: page in: query description: 'Define options for pagination of responses. For example, `page[number]` parameter (example: `page[number]=4`). The `page[number]` determines the page to display. The size of the page is a constant of 100.' required: false style: deepObject explode: true schema: type: object properties: number: type: integer example: 5 default: 1 description: The page number to display. - name: filter in: query description: Filter results of query using the [filter query parameter family](https://jsonapi.org/recommendations/#filtering). Refer to the [HR API Documentation](https://kb.wisc.edu/uw-apis/158637) for more information about the `filter` query param. required: false style: deepObject explode: true schema: type: object additionalProperties: false properties: attribute: type: string example: name responses: '200': description: A collection of salary structures. content: application/vnd.api+json: schema: type: object required: - data - links properties: data: description: A collection of salary structures. type: array items: description: A salary structure. type: object properties: type: type: string example: salaryStructures id: type: string description: The salary structure ID. example: 30d6a232973a1001722a090ff0940000 attributes: type: object properties: salaryGrade: type: string example: Grade 015 description: The salary grade. salaryGradeProfile: type: string example: 'Grade 015: Grade 015 Madison Hourly' description: The salary grade profile. payRangeMinimum: type: string example: '17.0' pattern: ^\d+(?:\.\d+)?$ description: The minimum pay range. This value is provided as a string to avoid loss of precision. payRangeMaximum: type: string example: '31.62' pattern: ^\d+(?:\.\d+)?$ description: The maximum pay range. This value is provided as a string to avoid loss of precision. links: description: The link to the supervisory organization. type: object properties: self: type: string example: https://api.wisc.edu/hr/supervisoryOrganizations/SO0000123 links: description: Self and pagination links. allOf: - description: The links associated with a paginated collection type: object properties: self: description: The current page of data type: string format: uri-reference example: https://api.wisc.edu/hr/supervisoryOrganizations?page[number]=3 prev: description: The previous page of data type: string format: uri-reference example: https://api.wisc.edu/hr/supervisoryOrganizations?page[number]=2 next: description: The next page of data type: string format: uri-reference example: https://api.wisc.edu/hr/supervisoryOrganizations?page[number]=4 first: description: The first page of data type: string format: uri-reference example: https://api.wisc.edu/hr/supervisoryOrganizations?page[number]=1 last: description: The last page of data type: string format: uri-reference example: https://api.wisc.edu/hr/supervisoryOrganizations?page[number]=6 meta: type: object properties: paging: type: object properties: pageNumber: type: integer example: 5 description: The page number to display pageSize: type: integer example: 10 description: The number of items per page totalCount: type: integer example: 100 description: The total number of items available for the collection totalPages: type: integer example: 10 description: The total number of pages available for the collection example: 100 description: The total number of items in the collection examples: salary-structures: value: data: - id: 30d6a232973a1001722a090ff0940000 type: salaryStructures attributes: salaryGrade: Grade 015 salaryGradeProfile: 'Grade 015: Grade 015 Madison Hourly' payRangeMinimum: '17.0' payRangeMaximum: '31.62' links: self: https://api.wisc.edu/hr/salaryStructures/30d6a232973a1001722a090ff0940000 - id: 30d6a232973a1001722b18e92f860000 type: salaryStructures attributes: salaryGrade: Grade 015 salaryGradeProfile: 'Grade 015: Grade 015 Milwaukee Hourly' payRangeMinimum: '15.0' payRangeMaximum: '30.29' links: self: https://api.wisc.edu/hr/salaryStructures/30d6a232973a1001722b18e92f860000 - id: 30d6a232973a1001722c549806240000 type: salaryStructures attributes: salaryGrade: Grade 015 salaryGradeProfile: 'Grade 015: Grade 015 Comprehensive Hourly' payRangeMinimum: '15.0' payRangeMaximum: '30.29' links: self: https://api.wisc.edu/hr/salaryStructures/30d6a232973a1001722c549806240000 links: self: https://api.wisc.edu/hr/salaryStructures '400': description: A bad request. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: application/vnd.api+json: value: errors: - status: 400 title: Bad Request detail: Invalid properties in query parameters - resource type 'jobs' has no attribute 'invalid'. '401': description: Incorrect or expired OAuth token. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: unauthorized-response: value: errors: - status: 401 title: Unauthorized detail: Invalid OAuth authentication - InvalidAccessToken '406': description: Servers respond with a 406 Not Acceptable status code if a request’s Accept header contains the JSON:API media type and all instances of that media type are modified with media type parameters. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-acceptable-example: value: errors: - status: 406 title: Not Acceptable detail: Request's Accept header contained the JSON:API media type and all instances of that media type were modified with media type parameters. '429': description: The API quota has been exceeded. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-found-example: value: errors: - status: 429 title: Too Many Requests detail: The quota has been exceeded. '500': description: An unexpected error. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-found-example: value: errors: - status: 500 title: Internal Server Error detail: Something went wrong in the server-side. servers: - url: https://api.wisc.edu/hr /salaryStructures/{salaryStructureId}: get: description: Get a salary structure. summary: Get a salary structure. operationId: get_salary_structure tags: - Salary Structures parameters: - name: salaryStructureId description: The salary structure ID. in: path example: 30d6a232973a1001722a090ff0940000 required: true schema: type: string responses: '200': description: A salary structure. content: application/vnd.api+json: schema: type: object required: - data - links properties: data: description: A salary structure. type: object properties: type: type: string example: salaryStructures id: type: string description: The salary structure ID. example: 30d6a232973a1001722a090ff0940000 attributes: type: object properties: salaryGrade: type: string example: Grade 015 description: The salary grade. salaryGradeProfile: type: string example: 'Grade 015: Grade 015 Madison Hourly' description: The salary grade profile. payRangeMinimum: type: string example: '17.0' pattern: ^\d+(?:\.\d+)?$ description: The minimum pay range. This value is provided as a string to avoid loss of precision. payRangeMaximum: type: string example: '31.62' pattern: ^\d+(?:\.\d+)?$ description: The maximum pay range. This value is provided as a string to avoid loss of precision. links: description: The link to the supervisory organization. type: object properties: self: type: string example: https://api.wisc.edu/hr/supervisoryOrganizations/SO0000123 links: description: The link to the supervisory organization. type: object properties: self: type: string example: https://api.wisc.edu/hr/supervisoryOrganizations/SO0000123 examples: salary-structure: value: data: id: 30d6a232973a1001722a090ff0940000 type: salaryStructures attributes: salaryGrade: Grade 015 salaryGradeProfile: 'Grade 015: Grade 015 Madison Hourly' payRangeMinimum: '17.0' payRangeMaximum: '31.62' links: self: https://api.wisc.edu/hr/salaryStructures/30d6a232973a1001722a090ff0940000 links: self: https://api.wisc.edu/hr/salaryStructures/30d6a232973a1001722a090ff0940000 '400': description: A bad request. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: application/vnd.api+json: value: errors: - status: 400 title: Bad Request detail: Invalid properties in query parameters - resource type 'jobs' has no attribute 'invalid'. '401': description: Incorrect or expired OAuth token. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: unauthorized-response: value: errors: - status: 401 title: Unauthorized detail: Invalid OAuth authentication - InvalidAccessToken '404': description: Unable to find the specified record content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-found-example: value: errors: - status: 404 title: Not Found detail: Requested resource not found. '406': description: Servers respond with a 406 Not Acceptable status code if a request’s Accept header contains the JSON:API media type and all instances of that media type are modified with media type parameters. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-acceptable-example: value: errors: - status: 406 title: Not Acceptable detail: Request's Accept header contained the JSON:API media type and all instances of that media type were modified with media type parameters. '429': description: The API quota has been exceeded. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-found-example: value: errors: - status: 429 title: Too Many Requests detail: The quota has been exceeded. '500': description: An unexpected error. content: application/vnd.api+json: schema: type: object properties: errors: type: array items: description: An error type: object properties: status: type: integer example: 400 title: type: string example: Error title detail: type: string example: Additional details about the error links: type: object meta: type: object source: type: object examples: not-found-example: value: errors: - status: 500 title: Internal Server Error detail: Something went wrong in the server-side. servers: - url: https://api.wisc.edu/hr components: securitySchemes: OAuth2ClientCredentials: type: oauth2 flows: clientCredentials: tokenUrl: https://api.wisc.edu/oauth/token scopes: {} externalDocs: description: Read more about JSON:API here url: https://jsonapi.org/ x-refined-from: - university-of-wisconsin-madison-hr-api-openapi.yml - university-of-wisconsin-madison-mock-hr-api-openapi.yml x-operator: institution x-provenance: generated: '2026-08-19' method: probed source: https://public.enroll.wisc.edu/api/search/v1 note: 'Reverse-described from live unauthenticated responses. Not a UW-Madison publication and must never be counted as one. Probes: GET /terms (200, 499 bytes, 2 terms), GET /aggregate (200, 127,065 bytes), POST / (200, term 1266 "computer science" -> found=226; term 1272 -> found=932).'