Lookup / Ibis Web Service API

Read/write HTTP API over the University directory of people and institutions. Returns XML, JSON, or text; path style /person/crsid/{id}. Anonymous read-only within the Cambridge University Data Network; HTTP Basic auth (group credentials) for external or read-write access. Swagger 2.0 / OpenAPI 3.0 specs published, with Java/Python/PHP client libraries.

OpenAPI Specification

university-of-cambridge-lookup.yaml Raw ↑
openapi: 3.0.0
info:
  title: Lookup/Ibis web service API
  version: '1.2'
servers:
  - url: 'https://lookup-test.srv.uis.cam.ac.uk/api/v1'
    description: Test server
  - url: 'https://www.lookup.cam.ac.uk/api/v1'
    description: Live server
paths:
  '/group/all-groups':
    get:
      tags:
        - group
      summary: Return a list of all groups.
      description: |-
        Return a list of all groups.
        
        By default, only a few basic details about each group are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references.
      operationId: Group_allGroups
      parameters:
        - name: includeCancelled
          in: query
          description: |-
            Whether or not to include cancelled
            groups. By default, only live groups are returned.
          required: false
          schema:
            type: boolean
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The requested groups (in groupid order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      groups:
                        type: array
                        items:
                          $ref: '#/components/schemas/Group'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/list':
    get:
      tags:
        - group
      summary: Get the groups with the specified IDs or names.
      description: |-
        Get the groups with the specified IDs or names.
        
        By default, only a few basic details about each group are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references.
        
        The results are sorted by groupid.
        
        NOTE: The URL path length is limited to around 8000 characters,
        which limits the number of groups that this method can fetch. Group
        IDs are currently 6 characters long, and must be comma separated and
        URL encoded, which limits this method to around 800 groups by ID,
        but probably fewer by name, depending on the group name lengths.
        
        NOTE: The groups returned may include cancelled groups. It is the
        caller's responsibility to check their cancelled flags.
      operationId: Group_listGroups
      parameters:
        - name: groupids
          in: query
          description: |-
            A comma-separated list of group IDs or
            group names (may be a mix of both).
          required: true
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The requested groups (in groupid order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      groups:
                        type: array
                        items:
                          $ref: '#/components/schemas/Group'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/modified-groups':
    get:
      tags:
        - group
      summary: Find all groups modified between the specified pair of transactions.
      description: |-
        Find all groups modified between the specified pair of transactions.
        
        The transaction IDs specified should be the IDs from two different
        requests for the last (most recent) transaction ID, made at different
        times, that returned different values, indicating that some Lookup
        data was modified in the period between the two requests. This method
        then determines which (if any) groups were affected.
        
        By default, only a few basic details about each group are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references.
        
        NOTE: All data returned reflects the latest available data about each
        group. It is not possible to query for old data, or more detailed
        information about the specific changes made.
      operationId: Group_modifiedGroups
      parameters:
        - name: minTxId
          in: query
          description: |-
            Include modifications made in transactions
            after (but not including) this one.
          required: true
          schema:
            type: integer
            format: int64
        - name: maxTxId
          in: query
          description: |-
            Include modifications made in transactions
            up to and including this one.
          required: true
          schema:
            type: integer
            format: int64
        - name: groupids
          in: query
          description: |-
            Only include groups with IDs or names in
            this list. By default, all modified groups will be included.
          required: false
          schema:
            type: string
        - name: includeCancelled
          in: query
          description: |-
            Include cancelled groups. By
            default, cancelled groups are excluded.
          required: false
          schema:
            type: boolean
        - name: membershipChanges
          in: query
          description: |-
            Include groups whose members have
            changed. By default, changes to group memberships are not taken into
            consideration.
          required: false
          schema:
            type: boolean
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The modified groups (in groupid order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      groups:
                        type: array
                        items:
                          $ref: '#/components/schemas/Group'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/search':
    get:
      tags:
        - group
      summary: Search for groups using a free text query string.
      description: |-
        Search for groups using a free text query string. This is the same
        search function that is used in the Lookup web application.
        
        By default, only a few basic details about each group are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references.
        
        NOTE: If the query string starts with the prefix `"group:"`, it
        is treated as an [LQL query](/lql), allowing
        more advanced searches. An LQL query will ignore the
        `approxMatches` parameter, but it will respect the value of
        `includeCancelled`. In addition, an LQL query will ignore
        the `orderBy` parameter, since LQL queries always return
        results in ID order.
      operationId: Group_search
      parameters:
        - name: query
          in: query
          description: The search string.
          required: true
          schema:
            type: string
        - name: approxMatches
          in: query
          description: |-
            Flag to enable more approximate
            matching in the search, causing more results to be returned. Defaults
            to `false`. This is ignored for LQL queries.
          required: false
          schema:
            type: boolean
        - name: includeCancelled
          in: query
          description: |-
            Flag to allow cancelled groups to
            be included. Defaults to `false`.
          required: false
          schema:
            type: boolean
        - name: offset
          in: query
          description: |-
            The number of results to skip at the start
            of the search. Defaults to 0.
          required: false
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: |-
            The maximum number of results to return.
            Defaults to 100.
          required: false
          schema:
            type: integer
            format: int32
        - name: orderBy
          in: query
          description: |-
            The order in which to list the results.
            This may be `"groupid"`, `"name"` (the default for non-LQL
            queries) or `"title"`. This is ignored for LQL queries, which
            always return results in groupid order.
          required: false
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: The matching groups.
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      groups:
                        type: array
                        items:
                          $ref: '#/components/schemas/Group'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/search-count':
    get:
      tags:
        - group
      summary: |-
        Count the number of groups that would be returned by a search using
        a free text query string.
      description: |-
        Count the number of groups that would be returned by a search using
        a free text query string.
        
        NOTE: If the query string starts with the prefix `"group:"`, it
        is treated as an [LQL query](/lql), allowing
        more advanced searches. An LQL query will ignore the
        `approxMatches` parameter, but it will respect the value of
        `includeCancelled`.
      operationId: Group_searchCount
      parameters:
        - name: query
          in: query
          description: The search string.
          required: true
          schema:
            type: string
        - name: approxMatches
          in: query
          description: |-
            Flag to enable more approximate
            matching in the search, causing more results to be returned. Defaults
            to `false`. This is ignored for LQL queries.
          required: false
          schema:
            type: boolean
        - name: includeCancelled
          in: query
          description: |-
            Flag to allow cancelled groups to
            be included. Defaults to `false`.
          required: false
          schema:
            type: boolean
      responses:
        200:
          description: |-
            The number of matching groups.
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      value:
                        type: integer
                        format: int32
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/{groupid}':
    get:
      tags:
        - group
      summary: Get the group with the specified ID or name.
      description: |-
        Get the group with the specified ID or name.
        
        By default, only a few basic details about the group are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references of the group.
        
        NOTE: The group returned may be a cancelled group. It is the caller's
        responsibility to check its cancelled flag.
      operationId: Group_getGroup
      parameters:
        - name: groupid
          in: path
          description: |-
            The ID or name of the group to fetch. This
            may be either the numeric ID or the short hyphenated group name (for
            example `"100656"` or `"cs-editors"`).
          required: true
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The requested group or `null` if it was not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      group:
                        $ref: '#/components/schemas/Group'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/{groupid}/cancelled-members':
    get:
      tags:
        - group
      summary: |-
        Get all the cancelled members of the specified group, including
        cancelled members of groups included by the group, and groups included
        by those groups, and so on.
      description: |-
        Get all the cancelled members of the specified group, including
        cancelled members of groups included by the group, and groups included
        by those groups, and so on.
        
        By default, only a few basic details about each member are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references of each person.
        
        NOTE: This method returns only cancelled people. It does not include
        people who were removed from the group. Cancelled people are no longer
        considered to be current staff, students or accredited visitors, and
        are no longer regarded as belonging to any groups or institutions. The
        list returned here reflects their group memberships just before they
        were cancelled, and so is out-of-date data that should be used with
        caution.
      operationId: Group_getCancelledMembers
      parameters:
        - name: groupid
          in: path
          description: |-
            The ID or name of the group.
          required: true
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch for each person.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The group's cancelled members (in identifier order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      people:
                        type: array
                        items:
                          $ref: '#/components/schemas/Person'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/{groupid}/direct-members':
    get:
      tags:
        - group
      summary: |-
        Get the direct members of the specified group, not including members
        included via groups included by the group.
      description: |-
        Get the direct members of the specified group, not including members
        included via groups included by the group.
        
        By default, only a few basic details about each member are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references of each person.
        
        NOTE: This method will not include cancelled people.
      operationId: Group_getDirectMembers
      parameters:
        - name: groupid
          in: path
          description: |-
            The ID or name of the group.
          required: true
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch for each person.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The group's direct members (in identifier order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      people:
                        type: array
                        items:
                          $ref: '#/components/schemas/Person'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/{groupid}/members':
    get:
      tags:
        - group
      summary: |-
        Get all the members of the specified group, including members of
        groups included by the group, and groups included by those groups,
        and so on.
      description: |-
        Get all the members of the specified group, including members of
        groups included by the group, and groups included by those groups,
        and so on.
        
        By default, only a few basic details about each member are returned,
        but the optional `fetch` parameter may be used to fetch
        additional attributes or references of each person.
        
        NOTE: This method will not include cancelled people.
      operationId: Group_getMembers
      parameters:
        - name: groupid
          in: path
          description: |-
            The ID or name of the group.
          required: true
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch for each person.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The group's members (in identifier order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      people:
                        type: array
                        items:
                          $ref: '#/components/schemas/Person'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/group/{groupid}/token':
    get:
      tags:
        - group
      summary: |-
        Get a signed JSON Web Token (JWT) with the group as subject and
        specified audience, only if authorized user/group has permission to edit
        the group.
      description: |-
        Get a signed JSON Web Token (JWT) with the group as subject and
        specified audience, only if authorized user/group has permission to edit
        the group.
      operationId: Group_getToken
      parameters:
        - name: groupid
          in: path
          description: The ID of the group.
          required: true
          schema:
            type: string
        - name: aud
          in: query
          description: |-
            Audience for the signed JWT.
          required: true
          schema:
            type: string
      responses:
        200:
          description: The serialized JWT
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      value:
                        type: string
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/inst/all-attr-schemes':
    get:
      tags:
        - institution
      summary: Return a list of all the institution attribute schemes available.
      description: |-
        Return a list of all the institution attribute schemes available.
        The `schemeid` values of these schemes may be used in the
        `fetch` parameter of other methods that return institutions.
      operationId: Institution_allAttributeSchemes
      responses:
        200:
          description: |-
            All the available institution attribute schemes (in precedence
            order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      attributeSchemes:
                        type: array
                        items:
                          $ref: '#/components/schemas/AttributeScheme'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/inst/all-insts':
    get:
      tags:
        - institution
      summary: Return a list of all institutions.
      description: |-
        Return a list of all institutions.
        
        By default, only a few basic details about each institution are
        returned, but the optional `fetch` parameter may be used
        to fetch additional attributes or references.
      operationId: Institution_allInsts
      parameters:
        - name: includeCancelled
          in: query
          description: |-
            Whether or not to include cancelled
            institutions. By default, only live institutions are returned.
          required: false
          schema:
            type: boolean
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The requested institutions (in instid order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      institutions:
                        type: array
                        items:
                          $ref: '#/components/schemas/Institution'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/inst/list':
    get:
      tags:
        - institution
      summary: Get the institutions with the specified IDs.
      description: |-
        Get the institutions with the specified IDs.
        
        By default, only a few basic details about each institution are
        returned, but the optional `fetch` parameter may be used
        to fetch additional attributes or references.
        
        The results are sorted by ID.
        
        NOTE: The URL path length is limited to around 8000 characters, and
        an instid is up to 8 characters long. Allowing for comma separators
        and URL encoding, this limits the number of institutions that this
        method may fetch to around 700.
        
        NOTE: The institutions returned may include cancelled institutions.
        It is the caller's responsibility to check their cancelled flags.
      operationId: Institution_listInsts
      parameters:
        - name: instids
          in: query
          description: |-
            A comma-separated list of instids.
          required: true
          schema:
            type: string
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The requested institutions (in instid order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      institutions:
                        type: array
                        items:
                          $ref: '#/components/schemas/Institution'
                    description: |-
                      Class representing the top-level container for all XML and JSON results.
                      This may be just a simple textual value or it may contain more complex
                      entities such as people, institutions, groups, attributes, etc.
        default:
          $ref: '#/components/responses/ServerError'
  '/inst/modified-insts':
    get:
      tags:
        - institution
      summary: |-
        Find all institutions modified between the specified pair of
        transactions.
      description: |-
        Find all institutions modified between the specified pair of
        transactions.
        
        The transaction IDs specified should be the IDs from two different
        requests for the last (most recent) transaction ID, made at different
        times, that returned different values, indicating that some Lookup
        data was modified in the period between the two requests. This method
        then determines which (if any) institutions were affected.
        
        By default, only a few basic details about each institution are
        returned, but the optional `fetch` parameter may be used
        to fetch additional attributes or references.
        
        NOTE: All data returned reflects the latest available data about each
        institution. It is not possible to query for old data, or more
        detailed information about the specific changes made.
      operationId: Institution_modifiedInsts
      parameters:
        - name: minTxId
          in: query
          description: |-
            Include modifications made in transactions
            after (but not including) this one.
          required: true
          schema:
            type: integer
            format: int64
        - name: maxTxId
          in: query
          description: |-
            Include modifications made in transactions
            up to and including this one.
          required: true
          schema:
            type: integer
            format: int64
        - name: instids
          in: query
          description: |-
            Only include institutions with instids in
            this list. By default, all modified institutions will be included.
          required: false
          schema:
            type: string
        - name: includeCancelled
          in: query
          description: |-
            Include cancelled institutions. By
            default, cancelled institutions are excluded.
          required: false
          schema:
            type: boolean
        - name: contactRowChanges
          in: query
          description: |-
            Include institutions whose contact
            rows have changed. By default, changes to institution contact rows are
            not taken into consideration.
          required: false
          schema:
            type: boolean
        - name: membershipChanges
          in: query
          description: |-
            Include institutions whose members
            have changed. By default, changes to institutional memberships are not
            taken into consideration.
          required: false
          schema:
            type: boolean
        - name: fetch
          in: query
          description: |-
            A comma-separated list of any additional
            attributes or references to fetch.
          required: false
          schema:
            type: string
      responses:
        200:
          description: |-
            The modified institutions (in instid order).
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
          

# --- truncated at 32 KB (123 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-cambridge/refs/heads/main/openapi/university-of-cambridge-lookup.yaml