Finance API

The largest contract in the estate — 73 operations covering sponsored research and financial administration: awards, award lines and tasks, grants, gifts, funds, cost centers, budget lines, billing schedules, customer invoices, expense reports and assets. Built by the DoIT Enterprise Business Systems (EBS) Integrated Business Solutions team. OpenAPI 3.0.4, OAuth 2.0 client credentials, gated.

OpenAPI Specification

university-of-wisconsin-madison-finance-api-openapi.yml Raw ↑
components:
  securitySchemes:
    OAuth2ClientCredentials:
      flows:
        clientCredentials:
          scopes: {}
          tokenUrl: https://api.wisc.edu/oauth/token
      type: oauth2
info:
  contact:
    email: finance-apis@doit.wisc.edu
    name: DoIT Enterprise Business Systems (EBS) Integrated Business Solutions (IBS)
      API Team
  description: 'An API for accessing and validating UW financial data.

    ## Getting Started

    For information on how to create an application on the portal and request access
    to the API, please visit the [Getting Started page](https://financeapis.wisc.edu/getting-started/)
    on our website.

    ## Endpoints, Filtering, Inclusions, and Sourcing

    Information on how to use the filter query parameter and include related resources,
    individual endpoints, and how we source our data can be found on the [Documentation
    page](https://financeapis.wisc.edu/documentation/) of our website.

    ## Help/Support

    If you need assistance in using the Finance API, have questions about the data,
    need to report a bug, or would like to suggest features/improvements, please fill
    out the form on the [Contact Us page](https://financeapis.wisc.edu/contact-us/)
    of our website or email us at [finance-apis@doit.wisc.edu](mailto:finance-apis@doit.wisc.edu).'
  title: Finance API
  version: 2026-02-18
openapi: 3.0.4
paths:
  /activities:
    get:
      description: Retrieves a paginated listing of all activities.
      parameters:
      - description: The datetime that the record was last changed in the Finance
          API's database.
        in: query
        name: filter[lastModified]
        required: false
        schema:
          format: datetime
          type: string
      - description: Page offset of records included in the response
        in: query
        name: page[number]
        required: false
        schema:
          minimum: 1
          type: integer
      - description: Number of records included in the response
        in: query
        name: page[size]
        required: false
        schema:
          maximum: 1000
          minimum: 1
          type: integer
      responses:
        '200':
          content:
            application/vnd.api+json:
              example:
                data:
                - attributes:
                    active: true
                    company: UWRVF
                    name: AC000001 UWRVF | BIOL 341 and 342 - Anatomy and Physiology
                      I and II
                  id: AC000001
                  links:
                    self: https://api.wisc.edu/finance/activities/AC000001
                  meta:
                    lastModified: 2026-06-15 13:11:13
                  type: activities
                links:
                  first: https://api.wisc.edu/finance/activities?page[number]=1
                  last: https://api.wisc.edu/finance/activities?page[number]=99
                  next: https://api.wisc.edu/finance/activities/page[number]=2
                  prev: https://api.wisc.edu/finance/activities?page[number]=1
                  self: https://api.wisc.edu/finance/activities
                meta:
                  pageNumber: 1
                  pageSize: 100
                  totalCount: 1234
                  totalPages: 13
              schema:
                oneOf:
                - properties:
                    data:
                      description: A collection of activities.
                      items:
                        description: A single activity record.
                        properties:
                          attributes:
                            properties:
                              active:
                                description: Whether the activity is currently active
                                  or not.
                                example: true
                                nullable: true
                                type: boolean
                              company:
                                description: Company this activity belongs to.
                                example: UWRVF
                                nullable: false
                                type: string
                              name:
                                description: Name of the activity.
                                example: AC000001 UWRVF | BIOL 341 and 342 - Anatomy
                                  and Physiology I and II
                                nullable: false
                                type: string
                            type: object
                          id:
                            description: The unique identifier for an activity record.
                            example: AC000001
                            type: string
                          links:
                            description: Links related to this record
                            properties:
                              self:
                                example: https://api.wisc.edu/finance/activities/AC000001
                                type: string
                            type: object
                          meta:
                            properties:
                              lastModified:
                                description: Date/time of the last time this worktag
                                  was updated in the product database in ISO format.
                                example: 2026-06-15 13:11:13
                                nullable: true
                                type: string
                            type: object
                          type:
                            example: activities
                            type: string
                        type: object
                      type: array
                    links:
                      properties:
                        first:
                          description: A link to the first page of results
                          example: https://api.wisc.edu/finance/activities?page[number]=1
                          type: string
                        last:
                          description: A link to the last page of results
                          example: https://api.wisc.edu/finance/activities?page[number]=99
                          type: string
                        next:
                          description: A link to the next page of results, if there
                            is one
                          example: https://api.wisc.edu/finance/activities/page[number]=2
                          nullable: true
                          type: string
                        prev:
                          description: A link to the previous page of results, if
                            there is one
                          example: https://api.wisc.edu/finance/activities?page[number]=1
                          nullable: true
                          type: string
                        self:
                          description: The link that generated this response
                          example: https://api.wisc.edu/finance/activities
                          type: string
                      type: object
                    meta:
                      properties:
                        pageNumber:
                          description: Page number requested.
                          example: 1
                          format: int64
                          type: integer
                        pageSize:
                          description: Number of items on each page.
                          example: 100
                          format: int64
                          type: integer
                        totalCount:
                          description: Total number of items across all pages.
                          example: 1234
                          format: int64
                          type: integer
                        totalPages:
                          description: Total number of pages given pageSize.
                          example: 13
                          format: int64
                          type: integer
                      type: object
                  type: object
                - properties:
                    attributes:
                      properties:
                        url:
                          description: Presigned URL to download the data from S3.
                            The URL is valid for 15 minutes.
                          example: https://example.com/link
                          type: string
                      type: object
                    id:
                      description: The unique identifier for an presigned link.
                      example: 670ac856-91ef-47ee-8f1d-b79d4f656a10
                      type: string
                    type:
                      enum:
                      - bulkDelivery
                      example: bulkDelivery
                      type: string
                  type: object
          description: An API response with a collection of activities, pagination,
            and metadata
        '400':
          content:
            application/vnd.api+json:
              examples:
                invalid-filter-parameters-not-filterable:
                  description: 'Error raised when filtering on valid attributes that
                    cannot be filtered on, such as attributes that are containers
                    for nested objects.

                    '
                  value:
                    errors:
                    - detail: Attribute 'lines' cannot be filtered on for internalServiceDeliveries.
                      status: 400
                      title: Bad Request
                invalid-filter-parameters-not-found:
                  description: Error raised when filtering on non-existent attributes.
                  value:
                    errors:
                    - detail: Attribute 'foo' does not exist on internalServiceProviders.
                      status: 400
                      title: Bad Request
                invalid-pagination-parameters-bad-value:
                  description: 'Error raised when providing pagination parameters
                    outside the allowed range or in an invalid datatype/format.

                    '
                  value:
                    errors:
                    - detail: 'Invalid pagination parameter: ''size'' must be a positive
                        integer between 1 and 1000 (got: '''').'
                      status: 400
                      title: Bad Request
                invalid-pagination-parameters-not-found:
                  description: Error raised when providing non-existent pagination
                    parameters.
                  value:
                    errors:
                    - detail: 'Invalid pagination parameter: ''num'' does not exist.'
                      status: 400
                      title: Bad Request
                invalid-query-parameters:
                  description: 'Error raised when using invalid query parameters,
                    such as malformed filter parameters on valid attributes.

                    '
                  value:
                    errors:
                    - detail: 'Invalid parameter: ''filter[id''.'
                      status: 400
                      title: Bad Request
                unsupported-parameters:
                  description: Error raised when attempting to use query parameters
                    that an endpoint does not support.
                  value:
                    errors:
                    - detail: 'The following query parameters are not supported/recongized
                        for this endpoint: include, page.'
                      status: 400
                      title: Bad Request
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: A bad request.
        '401':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Invalid or expired OAuth token.
                  status: 401
                  title: Unauthorized
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Invalid or expired OAuth token.
        '403':
          content:
            application/vnd.api+json:
              examples:
                invalid-company-access:
                  description: Error raised when your application has misconfigured
                    company access.
                  value:
                    errors:
                    - detail: Your application has no allowed companies set. Contact
                        the Finance API team (finance-apis@doit.wisc.edu) to resolve
                        this.
                      status: 403
                      title: Forbidden
                no-company-access:
                  description: Error raised when attempting to query data belonging
                    to companies you not have access to.
                  value:
                    errors:
                    - detail: You don't have access to company 'XYZ'.
                      status: 403
                      title: Forbidden
                no-permission:
                  description: Error raised when your application does not have permission
                    to use an endpoint.
                  value:
                    errors:
                    - detail: You don't have access to this endpoint.
                      status: 403
                      title: Forbidden
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: You requested information for which you don't have the proper
            authorization.
        '404':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Requested record could not be found.
                  status: 404
                  title: Not Found
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Requested record could not be found.
        '415':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Expected media type 'application/vnd.api+json'.
                  status: 415
                  title: Unsupported Media Type
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Invalid media type in contentType header.
        '429':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Quota exceeded.
                  status: 429
                  title: Too Many Requests
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Quota exceeded.
        '503':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Dependent service unavailable.
                  status: 503
                  title: Service Unavailable
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Finance API is unavailable.
      tags:
      - Worktags
  /activities/{id}:
    get:
      description: Retrieves a single activity by its ID.
      parameters:
      - description: An activity ID passed in as a URL parameter.
        in: path
        name: id
        required: true
        schema:
          description: The unique identifier for an activity record.
          example: AC000001
          type: string
      responses:
        '200':
          content:
            application/vnd.api+json:
              example:
                data:
                  attributes:
                    active: true
                    company: UWRVF
                    name: AC000001 UWRVF | BIOL 341 and 342 - Anatomy and Physiology
                      I and II
                  id: AC000001
                  links:
                    self: https://api.wisc.edu/finance/activities/AC000001
                  meta:
                    lastModified: 2026-06-15 13:11:13
                  type: activities
                links:
                  self: https://api.wisc.edu/finance/activities/AC000001
              schema:
                properties:
                  data:
                    description: A single activity record.
                    properties:
                      attributes:
                        properties:
                          active:
                            description: Whether the activity is currently active
                              or not.
                            example: true
                            nullable: true
                            type: boolean
                          company:
                            description: Company this activity belongs to.
                            example: UWRVF
                            nullable: false
                            type: string
                          name:
                            description: Name of the activity.
                            example: AC000001 UWRVF | BIOL 341 and 342 - Anatomy and
                              Physiology I and II
                            nullable: false
                            type: string
                        type: object
                      id:
                        description: The unique identifier for an activity record.
                        example: AC000001
                        type: string
                      links:
                        description: Links related to this record
                        properties:
                          self:
                            example: https://api.wisc.edu/finance/activities/AC000001
                            type: string
                        type: object
                      meta:
                        properties:
                          lastModified:
                            description: Date/time of the last time this worktag was
                              updated in the product database in ISO format.
                            example: 2026-06-15 13:11:13
                            nullable: true
                            type: string
                        type: object
                      type:
                        example: activities
                        type: string
                    type: object
                  links:
                    description: Links related to this record
                    properties:
                      self:
                        example: https://api.wisc.edu/finance/activities/AC000001
                        type: string
                    type: object
                type: object
          description: An API response with a collection of activities, pagination,
            and metadata
        '400':
          content:
            application/vnd.api+json:
              examples:
                invalid-filter-parameters-not-filterable:
                  description: 'Error raised when filtering on valid attributes that
                    cannot be filtered on, such as attributes that are containers
                    for nested objects.

                    '
                  value:
                    errors:
                    - detail: Attribute 'lines' cannot be filtered on for internalServiceDeliveries.
                      status: 400
                      title: Bad Request
                invalid-filter-parameters-not-found:
                  description: Error raised when filtering on non-existent attributes.
                  value:
                    errors:
                    - detail: Attribute 'foo' does not exist on internalServiceProviders.
                      status: 400
                      title: Bad Request
                invalid-pagination-parameters-bad-value:
                  description: 'Error raised when providing pagination parameters
                    outside the allowed range or in an invalid datatype/format.

                    '
                  value:
                    errors:
                    - detail: 'Invalid pagination parameter: ''size'' must be a positive
                        integer between 1 and 1000 (got: '''').'
                      status: 400
                      title: Bad Request
                invalid-pagination-parameters-not-found:
                  description: Error raised when providing non-existent pagination
                    parameters.
                  value:
                    errors:
                    - detail: 'Invalid pagination parameter: ''num'' does not exist.'
                      status: 400
                      title: Bad Request
                invalid-query-parameters:
                  description: 'Error raised when using invalid query parameters,
                    such as malformed filter parameters on valid attributes.

                    '
                  value:
                    errors:
                    - detail: 'Invalid parameter: ''filter[id''.'
                      status: 400
                      title: Bad Request
                unsupported-parameters:
                  description: Error raised when attempting to use query parameters
                    that an endpoint does not support.
                  value:
                    errors:
                    - detail: 'The following query parameters are not supported/recongized
                        for this endpoint: include, page.'
                      status: 400
                      title: Bad Request
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: A bad request.
        '401':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Invalid or expired OAuth token.
                  status: 401
                  title: Unauthorized
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Invalid or expired OAuth token.
        '403':
          content:
            application/vnd.api+json:
              examples:
                invalid-company-access:
                  description: Error raised when your application has misconfigured
                    company access.
                  value:
                    errors:
                    - detail: Your application has no allowed companies set. Contact
                        the Finance API team (finance-apis@doit.wisc.edu) to resolve
                        this.
                      status: 403
                      title: Forbidden
                no-company-access:
                  description: Error raised when attempting to query data belonging
                    to companies you not have access to.
                  value:
                    errors:
                    - detail: You don't have access to company 'XYZ'.
                      status: 403
                      title: Forbidden
                no-permission:
                  description: Error raised when your application does not have permission
                    to use an endpoint.
                  value:
                    errors:
                    - detail: You don't have access to this endpoint.
                      status: 403
                      title: Forbidden
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: You requested information for which you don't have the proper
            authorization.
        '404':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Requested record could not be found.
                  status: 404
                  title: Not Found
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Requested record could not be found.
        '415':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Expected media type 'application/vnd.api+json'.
                  status: 415
                  title: Unsupported Media Type
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Invalid media type in contentType header.
        '429':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Quota exceeded.
                  status: 429
                  title: Too Many Requests
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Quota exceeded.
        '503':
          content:
            application/vnd.api+json:
              example:
                errors:
                - detail: Dependent service unavailable.
                  status: 503
                  title: Service Unavailable
              schema:
                properties:
                  errors:
                    items:
                      description: An error
                      properties:
                        detail:
                          type: string
                        status:
                          type: number
                        title:
                          type: string
                    type: array
                type: object
          description: Finance API is unavailable.
      tags:
      - Worktags
  /assets:
    get:
      description: Retrieves a paginated listing of all assets.
      parameters:
      - description: Delivery mode for the response. When set to 'bulk', the API will
          save the response to S3 and return a link to download it instead of returning
          the data directly. Cannot be used with pagination parameters.
        examples:
          bulk:
            description: Returns a link to download data from S3
            summary: Bulk delivery mode
            value: bulk
          pagination:
            description: Returns data with pagination support
            summary: Pagination delivery mode
            value: pagination
        in: query
        name: delivery
        schema:
          default: pagination
          enum:
          - pagination
          - bulk
          type: string
      - description: The identifier of the record.
        in: query
        name: filter[id]
        required: false
        schema:
          type: string
      - description: The datetime that the record was last changed in the Finance
          API's database.
        in: query
        name: filter[lastModified]
        required: false
        schema:
          format: datetime
          type: string
      - description: Page offset of records included in the response
        in: query
        name: page[number]
        required: false
        schema:
          minimum: 1
          type: integer
      - description: Number of records included in the response
        in: query
        name: page[size]
        required: false
        schema:
          maximum: 1000
          minimum: 1
          type: integer
      - in: query
        name: filter[accountingTreatment]
        schema:
          type: string
      - in: query
        name: filter[acquisitionDate]
        schema:
          format: date
          type: string
      - in: query
        name: filter[acquisitionMethod]
       

# --- truncated at 32 KB (1453 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-wisconsin-madison/refs/heads/main/openapi/university-of-wisconsin-madison-finance-api-openapi.yml