OpenAPI Specification
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