openapi: 3.0.0 info: title: 'Link Example' version: 1.0.0 paths: '/2.0/repositories/{username}': get: operationId: getRepositoriesByOwner parameters: - name: username in: path required: true schema: type: string responses: '200': description: 'repositories owned by the supplied user' content: application/json: schema: type: array items: $ref: '#/components/schemas/repository' links: userRepository: $ref: '#/components/links/UserRepository' '/2.0/repositories/{username}/{slug}': get: operationId: getRepository parameters: - name: username in: path required: true schema: type: string - name: slug in: path required: true schema: type: string responses: '200': description: 'The repository' content: application/json: schema: $ref: '#/components/schemas/repository' links: repositoryPullRequests: $ref: '#/components/links/RepositoryPullRequests' '/2.0/repositories/{username}/{slug}/pullrequests': get: operationId: getPullRequestsByRepository parameters: - name: username in: path required: true schema: type: string - name: slug in: path required: true schema: type: string - name: state in: query schema: type: string enum: - open - merged - declined responses: '200': description: 'an array of pull request objects' content: application/json: schema: type: array items: $ref: '#/components/schemas/pullrequest' '/2.0/repositories/{username}/{slug}/pullrequests/{pid}': get: operationId: getPullRequestsById parameters: - name: username in: path required: true schema: type: string - name: slug in: path required: true schema: type: string - name: pid in: path required: true schema: type: string responses: '200': description: 'a pull request object' content: application/json: schema: $ref: '#/components/schemas/pullrequest' links: pullRequestMerge: $ref: '#/components/links/PullRequestMerge' '/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge': post: operationId: mergePullRequest parameters: - name: username in: path required: true schema: type: string - name: slug in: path required: true schema: type: string - name: pid in: path required: true schema: type: string responses: '204': description: 'the PR was successfully merged' '/2.0/users/{username}': get: operationId: getUserByName parameters: - name: username in: path required: true schema: type: string responses: '200': description: 'The User' content: application/json: schema: $ref: '#/components/schemas/user' links: userRepositories: $ref: '#/components/links/UserRepositories' components: schemas: pullrequest: properties: id: type: integer title: type: string repository: $ref: '#/components/schemas/repository' author: $ref: '#/components/schemas/user' type: object repository: properties: slug: type: string owner: $ref: '#/components/schemas/user' type: object user: properties: username: type: string uuid: type: string type: object links: UserRepositories: operationId: getRepositoriesByOwner parameters: username: '$response.body#/username' UserRepository: operationId: getRepository parameters: username: '$response.body#/owner/username' slug: '$response.body#/slug' RepositoryPullRequests: operationId: getPullRequestsByRepository parameters: username: '$response.body#/owner/username' slug: '$response.body#/slug' PullRequestMerge: operationId: mergePullRequest parameters: username: '$response.body#/author/username' slug: '$response.body#/repository/slug' pid: '$response.body#/id'