ayhire-com Workspaces API

One workspace per company you hire for, shared with that company's team.

Operations 11

GET /api/workspaces Your workspaces #
POST /api/workspaces Create a workspace and make it your current one #
PUT /api/workspaces/current Switch to one of your workspaces #
PATCH /api/workspaces/{id} Change a workspace you own #
POST /api/workspaces/{id}/invites Invite someone into a workspace you own #
DELETE /api/workspaces/{id}/invites/{inviteId} Cancel an open invite #
GET /api/workspaces/{id}/members Who is in a workspace #
DELETE /api/workspaces/{id}/members/{userId} Remove someone, or leave #
POST /api/workspaces/{id}/requests/{userId} Approve or decline a request to join #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ayhire-com:ayhire-com-workspaces-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ayhire-com-workspaces-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ayhire Com Workspaces API
  version: 1.0.0
  contact:
    name: AyHire
    url: https://ayhire.com
  description: 'Operations tagged Workspaces across 2 of this provider''s published API definitions: ayhire-com-openapi.json, ayhire-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://ayhire.com
security:
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Workspaces
  description: One workspace per company you hire for, shared with that company's team.
paths:
  /api/workspaces:
    get:
      operationId: listWorkspaces
      summary: Your workspaces
      description: With the current one marked, and the workspaces you asked to join.
      tags:
      - Workspaces
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  workspaces:
                    type: array
                    items:
                      $ref: '#/components/schemas/Workspace'
                  current:
                    oneOf:
                    - $ref: '#/components/schemas/Workspace'
                    - type: 'null'
                  my_join_requests:
                    type: array
                    items:
                      type: object
                      properties: {}
                required:
                - workspaces
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createWorkspace
      summary: Create a workspace and make it your current one
      tags:
      - Workspaces
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 60
                use_email_domain:
                  type: boolean
                  description: Record your proven work email domain on it (joining stays off)
              required:
              - name
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  workspace:
                    $ref: '#/components/schemas/Workspace'
                required:
                - workspace
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/current:
    put:
      operationId: switchWorkspace
      summary: Switch to one of your workspaces
      description: The web app and your agent both use the current workspace.
      tags:
      - Workspaces
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                workspace:
                  type: string
                  description: Its id or name
                  minLength: 1
                  maxLength: 100
              required:
              - workspace
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  workspace:
                    $ref: '#/components/schemas/Workspace'
                required:
                - workspace
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}:
    patch:
      operationId: updateWorkspace
      summary: Change a workspace you own
      description: name renames it; domain_join is who can find it by the company's email domain; logo goes back to the company's icon or shows the initial.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 60
                domain_join:
                  type: string
                  enum:
                  - 'off'
                  - request
                  - auto
                logo:
                  type: string
                  enum:
                  - domain
                  - none
              minProperties: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  workspace:
                    $ref: '#/components/schemas/Workspace'
                  reading_icon:
                    type: boolean
                    description: AyHire is reading the company's icon now
                required:
                - workspace
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}/invites:
    post:
      operationId: inviteToWorkspace
      summary: Invite someone into a workspace you own
      description: Emails the join link unless send is false, and returns it. The link is shown this once.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  minLength: 3
                  maxLength: 254
                role:
                  type: string
                  enum:
                  - member
                  - owner
                send:
                  type: boolean
                  description: Email the link (default true)
              required:
              - email
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                    - invited
                    - already_member
                  email:
                    type: string
                  workspace:
                    type: string
                  role:
                    type: string
                    enum:
                    - owner
                    - member
                  link:
                    type:
                    - string
                    - 'null'
                  expires_at:
                    type:
                    - string
                    - 'null'
                  email_sent:
                    type:
                    - object
                    - 'null'
                required:
                - status
                - email
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}/invites/{inviteId}:
    delete:
      operationId: cancelInvite
      summary: Cancel an open invite
      description: Owners only. Its link stops working.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      - name: inviteId
        in: path
        required: true
        description: The invite's id (a UUID)
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  cancelled:
                    type: string
                    format: uuid
                required:
                - cancelled
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}/logo:
    get:
      operationId: getWorkspaceLogo
      summary: The workspace's logo image
      description: Members only. Everyone else, and a workspace without a logo, gets the same 404.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            image/png:
              schema: {}
            image/jpeg:
              schema: {}
            image/webp:
              schema: {}
            image/x-icon:
              schema: {}
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    put:
      operationId: uploadWorkspaceLogo
      summary: Upload the workspace's logo
      description: 'Owners only. The raw image is the body: PNG, JPEG, WebP or ICO (checked by its bytes), up to 200 KB.'
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      requestBody:
        required: true
        content:
          image/png:
            schema: {}
          image/jpeg:
            schema: {}
          image/webp:
            schema: {}
          image/x-icon:
            schema: {}
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  workspace:
                    $ref: '#/components/schemas/Workspace'
                required:
                - workspace
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}/members:
    get:
      operationId: listWorkspaceMembers
      summary: Who is in a workspace
      description: Owners also see its open invites and requests to join.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  workspace:
                    $ref: '#/components/schemas/Workspace'
                  members:
                    type: array
                    items:
                      type: object
                      properties:
                        user_id:
                          type: string
                          format: uuid
                        email:
                          type: string
                        name:
                          type:
                          - string
                          - 'null'
                        role:
                          type: string
                          enum:
                          - owner
                          - member
                        joined_at:
                          type: string
                          format: date-time
                        you:
                          type: boolean
                  invites:
                    type: array
                    items:
                      type: object
                      properties: {}
                  requests:
                    type: array
                    items:
                      type: object
                      properties: {}
                required:
                - workspace
                - members
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}/members/{userId}:
    delete:
      operationId: removeWorkspaceMember
      summary: Remove someone, or leave
      description: Owners remove members; anyone leaves with their own id. A workspace always keeps one owner.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      - name: userId
        in: path
        required: true
        description: A member's user id (a UUID)
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  removed:
                    type: string
                    format: uuid
                  left:
                    type: boolean
                required:
                - removed
                - left
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
  /api/workspaces/{id}/requests/{userId}:
    post:
      operationId: answerJoinRequest
      summary: Approve or decline a request to join
      description: Approving adds them as a member and emails them; declining sends nothing.
      tags:
      - Workspaces
      parameters:
      - name: id
        in: path
        required: true
        description: The workspace's id (a UUID)
        schema:
          type: string
      - name: userId
        in: path
        required: true
        description: A member's user id (a UUID)
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                decision:
                  type: string
                  enum:
                  - approve
                  - decline
              required:
              - decision
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                  email:
                    type:
                    - string
                    - 'null'
                required:
                - status
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
    servers:
    - url: https://ayhire.com
components:
  responses:
    NotFound:
      description: Nothing with that id, or not on your account (code not_found)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: No API key, or a revoked one (code unauthorized)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request is not valid (code validation_error)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: An hourly or per-minute limit is spent; the message says when it resets (code rate_limited or github_rate_limited)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Not allowed for this caller, e.g. a workspace member where an owner is needed (code forbidden)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Something failed on AyHire's side (code internal_error)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: What went wrong, in a sentence
        code:
          type: string
          description: Stable code to branch on
          enum:
          - unauthorized
          - forbidden
          - not_found
          - payment_required
          - rate_limited
          - github_rate_limited
          - validation_error
          - internal_error
        hint:
          type: string
          description: What to do about it, when there is something
      required:
      - error
      - code
    Workspace:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        personal:
          type: boolean
        role:
          type: string
          description: Your role in it
          enum:
          - owner
          - member
        current:
          type: boolean
          description: The one the web app and your agent are working in
        logo_url:
          type:
          - string
          - 'null'
        domain:
          type:
          - string
          - 'null'
          description: The company email domain it belongs to
        domain_join:
          type: string
          enum:
          - 'off'
          - request
          - auto
        logo_source:
          type: string
          enum:
          - domain
          - custom
          - none
      required:
      - id
      - name
      - personal
      - role
      - current
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: ayh_ API key
      description: 'An AyHire API key: Authorization: Bearer ayh_...'
    apiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: The same AyHire API key, in x-api-key
externalDocs:
  description: AyHire for agents
  url: https://ayhire.com/agents.md
x-refined-from:
- ayhire-com-openapi.json
- ayhire-com-openapi.yml