Artifact Hub Organizations API
Organizations and memberships
Organizations and memberships
openapi: 3.0.3
info:
title: Artifact Hub Organizations API
description: Find, install and publish Cloud Native packages
version: 1.22.0
contact:
name: Artifact Hub support
url: https://cloud-native.slack.com/channels/artifact-hub
servers:
- url: https://artifacthub.io/api/v1
description: Artifact Hub production API
x-evidence:
source: https://artifacthub.io/docs/api/openapi.yaml
source_title: Artifact Hub
source_version: 1.22.0
harvested: '2026-08-01'
harvest_status: HTTP 200
server_verified: https://artifacthub.io/api/v1/stats -> HTTP 200 (2026-08-01)
note: Harvested from the provider. Replaces a reconstructed spec that shared no paths with this document
and carried no schemas.
tags:
- name: Organizations
description: ''
paths:
/orgs:
post:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Register new organization
description: Register new organization
operationId: addOrganization
requestBody:
description: ''
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationSummary'
responses:
'201':
$ref: '#/components/responses/Created'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/user:
get:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get organizations the user belongs to
description: Get organizations the user belongs to
operationId: getUserOrganizations
parameters:
- $ref: '#/components/parameters/OffsetParam'
- $ref: '#/components/parameters/LimitParam'
responses:
'200':
description: ''
headers:
Pagination-Total-Count:
schema:
type: string
description: Total number of organizations
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Organization'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/{orgName}:
get:
tags:
- Organizations
summary: Get organization profile
description: Get organization profile
operationId: getOrganizationProfile
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationSummary'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Updates organization profile
description: Updates organization profile
operationId: updateOrganizationProfile
parameters:
- $ref: '#/components/parameters/OrgNameParam'
requestBody:
description: ''
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationSummary'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Delete organization
description: Delete organization
operationId: deleteOrganization
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'204':
$ref: '#/components/responses/NoContent'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/{orgName}/authorization-policy:
get:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get organization's authorization policy
description: Get organization's authorization policy
operationId: getOrganizationAuthPolicy
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorizationPolicy'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Update organization's authorization policy
description: Update organization's authorization policy
operationId: updateOrganizationAuthPolicy
parameters:
- $ref: '#/components/parameters/OrgNameParam'
requestBody:
description: ''
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorizationPolicy'
responses:
'204':
$ref: '#/components/responses/NoContent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/{orgName}/members:
get:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get organization members
description: Get organization members
operationId: getOrganizationMembers
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Member'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/{orgName}/member/{userAlias}:
post:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Add a new member to the organization
description: Add a new member to the organization
operationId: addOrganizationMember
parameters:
- $ref: '#/components/parameters/OrgNameParam'
- $ref: '#/components/parameters/UserAliasParam'
responses:
'201':
$ref: '#/components/responses/Created'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Delete a member from the organization
description: Delete a member from the organization
operationId: deleteOrganizationMember
parameters:
- $ref: '#/components/parameters/OrgNameParam'
- $ref: '#/components/parameters/UserAliasParam'
responses:
'204':
$ref: '#/components/responses/NoContent'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/{orgName}/accept-invitation:
get:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Confirm user's membership to an organization
description: Confirm user's membership to an organization
operationId: acceptOrganizationInvitation
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'204':
$ref: '#/components/responses/NoContent'
'401':
$ref: '#/components/responses/UnauthorizedError'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/orgs/{orgName}/user-allowed-actions:
get:
tags:
- Organizations
security:
- ApiKeyId: []
ApiKeySecret: []
summary: Get actions which user is allowed to perform in the provided organization
description: Get actions which user is allowed to perform in the provided organization
operationId: getAllowedActions
parameters:
- $ref: '#/components/parameters/OrgNameParam'
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AuthorizerAction'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
Error:
type: object
properties:
message:
type: string
example: error details
OrganizationSummary:
type: object
required:
- name
properties:
name:
type: string
nullable: false
example: org1
display_name:
type: string
nullable: false
example: Organization 1
description:
type: string
nullable: false
example: description
home_url:
type: string
format: uri
nullable: false
example: http://url
logo_image_id:
type: string
nullable: false
example: 12345abcde
AuthorizationPolicy:
type: object
required:
- authorization_enabled
properties:
authorization_enabled:
type: boolean
nullable: false
predefined_policy:
type: string
nullable: false
example: rbac.v1
custom_policy:
type: string
nullable: false
example: "package artifacthub.authz\n\n# By default, deny requests\ndefault allow = false\n\n\
# Allow the action if the user is allowed to perform it\nallow {\n # If user's role is owner\n\
\ data.roles.owner.users[_] == input.user\n}\nallow {\n # If user's role is allowed to perform\
\ this action\n allowed_actions[_] == input.action\n}\n\n# Get user allowed actions\nallowed_actions[action]\
\ {\n user_roles[_] == \"owner\"\n action := \"all\"\n}\nallowed_actions[action] {\n action\
\ := data.roles[role].allowed_actions[_]\n user_roles[_] == role\n}\n\n# Get user roles\n\
user_roles[role] {\n data.roles[role].users[_] == input.user\n}\n"
policy_data:
type: string
nullable: false
example: "{\n \"roles\": {\n \"owner\": {\n \"users\": [\"user1\"]\n },\n \"\
customRole1\": {\n \"users\": [\"member1\", \"member2\"],\n \"allowed_actions\"\
: [\"addOrganizationMember\", \"addOrganizationRepository\"]\n }\n }\n}\n"
Organization:
allOf:
- $ref: '#/components/schemas/OrganizationSummary'
- type: object
required:
- members_count
- confirmed
properties:
members_count:
type: integer
nullable: false
confirmed:
type: boolean
nullable: false
Member:
type: object
required:
- alias
- confirmed
properties:
alias:
type: string
nullable: false
example: jdoe
first_name:
type: string
nullable: false
example: John
last_name:
type: string
nullable: false
example: Doe
confirmed:
type: boolean
nullable: false
example: true
AuthorizerAction:
type: string
enum:
- all
- addOrganizationMember
- addOrganizationRepository
- deleteOrganization
- deleteOrganizationMember
- deleteOrganizationRepository
- getAuthorizationPolicy
- transferOrganizationRepository
- updateAuthorizationPolicy
- updateOrganization
- updateOrganizationRepository
description: 'Authorization policy action:
* `all` - All actions
* `addOrganizationMember` - Add member to organization
* `addOrganizationRepository` - Add repository to organization
* `deleteOrganization` - Delete organization
* `deleteOrganizationMember` - Delete member from organization
* `deleteOrganizationRepository` - Delete repository from organization
* `getAuthorizationPolicy` - Get authorization policy
* `transferOrganizationRepository` - Transfer repository from organization
* `updateAuthorizationPolicy` - Update authorization policy
* `updateOrganization` - Update organization
* `updateOrganizationRepository` - Update repository from organization
'
parameters:
OrgNameParam:
in: path
name: orgName
schema:
type: string
example: org1
required: true
description: Organization name
UserAliasParam:
in: path
name: userAlias
schema:
type: string
example: alias
required: true
description: User alias
LimitParam:
in: query
name: limit
schema:
type: integer
default: 20
maximum: 60
required: false
description: The number of items to return
OffsetParam:
in: query
name: offset
schema:
type: integer
minimum: 0
default: 0
required: false
description: The number of items to skip before starting to collect the result set
responses:
Created:
description: The request has succeeded and has led to the creation of a resource
BadRequest:
description: The request sent was not valid
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
TooManyRequests:
description: The user has sent too many requests in a given amount of time
InternalServerError:
description: The server encountered an unexpected condition that prevented it from fulfilling the
request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NoContent:
description: The request has succeeded, no content returned
Forbidden:
description: The user does not have permission to perform the requested operation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
UnauthorizedError:
description: Valid authentication credentials not provided
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
ApiKeyId:
type: apiKey
in: header
name: X-API-KEY-ID
ApiKeySecret:
type: apiKey
in: header
name: X-API-KEY-SECRET