openapi: 3.0.3 info: title: Gemfury Developer Accounts Members API description: 'REST API for managing packages, versions, accounts, members, and tokens hosted on Gemfury. Supports GET, POST, PATCH, PUT, and DELETE methods over HTTPS with JSON payloads. ' version: '1' contact: name: Gemfury Support url: https://gemfury.com/help/ license: name: Proprietary url: https://gemfury.com servers: - url: https://api.fury.io/1 description: Gemfury API v1 security: - bearerAuth: [] tags: - name: Members description: Manage collaborators and members paths: /collaborations: get: operationId: listCollaborations summary: List Collaborations description: Retrieve all accounts where the authenticated user is a collaborator. tags: - Members parameters: - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' responses: '200': description: List of collaborations content: application/json: schema: type: object properties: collaborations: type: array items: $ref: '#/components/schemas/Account' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' /members: get: operationId: listMembers summary: List Members description: Retrieve a list of members (collaborators) for the account. tags: - Members parameters: - $ref: '#/components/parameters/asParam' - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' responses: '200': description: List of members content: application/json: schema: type: object properties: members: type: array items: $ref: '#/components/schemas/Member' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' /members/{id}: put: operationId: upsertMember summary: Invite or Update Member description: 'Update a membership or send an invitation email if the user is not already a member. ' tags: - Members parameters: - name: id in: path description: Email address or username of the invitee or existing member required: true schema: type: string example: name@example.com - name: role in: query description: 'Permission level: pull, push, or owner' required: true schema: type: string enum: - pull - push - owner - $ref: '#/components/parameters/asParam' responses: '200': description: Member updated or invitation sent content: application/json: schema: $ref: '#/components/schemas/Member' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteMember summary: Remove Member description: Remove a member from the account. tags: - Members parameters: - name: id in: path description: Unique identifier or username of the member required: true schema: type: string example: collab-name - $ref: '#/components/parameters/asParam' responses: '204': description: Member removed successfully '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' components: schemas: Member: type: object description: A collaborator member on an account properties: id: type: string description: Unique member identifier example: acct_eb3c12 username: type: string description: Member's username example: collab-name name: type: string description: Member's display name example: Jane Doe email: type: string format: email description: Member's email address example: jane@example.com role: type: string description: Member's permission level enum: - pull - push - owner example: push Error: type: object description: Error response properties: error: type: object properties: message: type: string description: Human-readable error message example: Package not found type: type: string description: Error class categorization example: InputException Account: type: object description: A Gemfury account (user, organization, or Heroku app) properties: id: type: string description: Unique account identifier example: acct_eb3c12 username: type: string description: Unique username example: nickfury name: type: string description: Display name example: Nick Fury type_key: type: string description: Account type enum: - user - org - heroku_app example: user parameters: perPageParam: name: per_page in: query description: Number of items per page required: false schema: type: integer minimum: 1 maximum: 100 default: 20 pageParam: name: page in: query description: Page number for pagination required: false schema: type: integer minimum: 1 default: 1 asParam: name: as in: query description: Account context override (username or account ID) required: false schema: type: string example: nickfury responses: Unauthorized: description: Authentication required content: application/json: schema: $ref: '#/components/schemas/Error' example: error: message: Authentication required type: AuthException BadRequest: description: Bad request, usually an input error content: application/json: schema: $ref: '#/components/schemas/Error' example: error: message: Invalid kind_key value type: InputException NotFound: description: Referenced object not found content: application/json: schema: $ref: '#/components/schemas/Error' example: error: message: Package not found type: NotFoundException Forbidden: description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/Error' example: error: message: Insufficient permissions for this request type: ForbiddenException securitySchemes: bearerAuth: type: http scheme: bearer description: API token obtained from the Gemfury dashboard