{
  "service": "roam",
  "displayName": "Roam HQ",
  "categories": [
    "Communication",
    "Productivity"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "ROAM_API_KEY",
      "description": "Roam HQ API key sent as a Bearer token. Create an API key in Roam Administration > Developer: https://ro.am/s/."
    }
  ],
  "homepageUrl": "https://ro.am",
  "actions": [
    {
      "id": "roam.get_magicast",
      "service": "roam",
      "name": "get_magicast",
      "description": "Retrieve a Roam HQ magicast by ID.",
      "requiredScopes": [
        "magicast:read"
      ],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The magicast ID.",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "required": [
          "id"
        ],
        "description": "Input parameters for retrieving a Roam HQ magicast."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "magicast": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The unique magicast ID.",
                "format": "uuid"
              },
              "name": {
                "type": "string",
                "description": "The magicast display name."
              },
              "createdAt": {
                "type": "string",
                "description": "The timestamp when the magicast was created.",
                "format": "date-time"
              },
              "ownerId": {
                "type": "string",
                "description": "The address ID of the magicast owner.",
                "format": "uuid"
              },
              "coverImageUrl": {
                "type": "string",
                "description": "The magicast cover image thumbnail URL.",
                "format": "uri"
              }
            },
            "additionalProperties": true,
            "description": "A Roam HQ magicast."
          },
          "raw": {
            "description": "The raw JSON payload returned by Roam HQ."
          }
        },
        "additionalProperties": false,
        "required": [
          "magicast",
          "raw"
        ],
        "description": "The normalized Roam HQ magicast response."
      }
    },
    {
      "id": "roam.list_groups",
      "service": "roam",
      "name": "list_groups",
      "description": "List public, non-archived groups in the authenticated Roam HQ organization.",
      "requiredScopes": [
        "groups:read"
      ],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "No input parameters are required for this action."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "groups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "addressId": {
                  "type": "string",
                  "description": "The Roam group address ID."
                },
                "roamId": {
                  "type": "integer",
                  "description": "The numeric Roam ID."
                },
                "accountId": {
                  "type": "integer",
                  "description": "The numeric account ID."
                },
                "groupType": {
                  "type": "string",
                  "description": "The group type reported by Roam HQ."
                },
                "name": {
                  "type": "string",
                  "description": "The group display name."
                },
                "accessMode": {
                  "type": "string",
                  "description": "The group access mode."
                },
                "groupManagement": {
                  "type": "string",
                  "description": "The group management setting."
                },
                "enforceThreadedMode": {
                  "type": "boolean",
                  "description": "Whether threaded mode is enforced for the group."
                },
                "dateCreated": {
                  "type": "string",
                  "description": "The timestamp when the group was created."
                },
                "imageUrl": {
                  "type": "string",
                  "description": "The group image URL.",
                  "format": "uri"
                }
              },
              "additionalProperties": true,
              "description": "A public, non-archived Roam HQ group."
            },
            "description": "The groups returned by Roam HQ."
          },
          "raw": {
            "description": "The raw JSON payload returned by Roam HQ."
          }
        },
        "additionalProperties": false,
        "required": [
          "groups",
          "raw"
        ],
        "description": "The normalized Roam HQ group list response."
      }
    },
    {
      "id": "roam.list_magicasts",
      "service": "roam",
      "name": "list_magicasts",
      "description": "List Roam HQ magicasts in reverse chronological order.",
      "requiredScopes": [
        "magicast:read"
      ],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The maximum number of items to request."
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "The opaque pagination cursor returned by a previous response."
          }
        },
        "additionalProperties": false,
        "description": "Input pagination parameters for Roam HQ list actions."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "magicasts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The unique magicast ID.",
                  "format": "uuid"
                },
                "name": {
                  "type": "string",
                  "description": "The magicast display name."
                },
                "createdAt": {
                  "type": "string",
                  "description": "The timestamp when the magicast was created.",
                  "format": "date-time"
                },
                "ownerId": {
                  "type": "string",
                  "description": "The address ID of the magicast owner.",
                  "format": "uuid"
                },
                "coverImageUrl": {
                  "type": "string",
                  "description": "The magicast cover image thumbnail URL.",
                  "format": "uri"
                }
              },
              "additionalProperties": true,
              "description": "A Roam HQ magicast."
            },
            "description": "The magicasts returned by Roam HQ."
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string",
                "description": "The cursor for the next page of magicasts."
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "description": "The raw JSON payload returned by Roam HQ."
          }
        },
        "additionalProperties": false,
        "required": [
          "magicasts",
          "nextCursor",
          "raw"
        ],
        "description": "The normalized Roam HQ magicast list response."
      }
    },
    {
      "id": "roam.list_recordings",
      "service": "roam",
      "name": "list_recordings",
      "description": "List Roam HQ meeting recordings with optional date filtering and pagination.",
      "requiredScopes": [
        "recordings:read"
      ],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "after": {
            "type": "string",
            "minLength": 1,
            "description": "The UTC date or RFC 3339 datetime to begin listing recordings."
          },
          "before": {
            "type": "string",
            "minLength": 1,
            "description": "The UTC date or RFC 3339 datetime until which to list recordings."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The maximum number of recordings to request."
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "The opaque pagination cursor returned by a previous response."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for listing Roam HQ meeting recordings."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "recordings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "recordingId": {
                  "type": "string",
                  "description": "The unique recording ID.",
                  "format": "uuid"
                },
                "location": {
                  "type": "string",
                  "description": "The Roam room where the recording took place."
                },
                "startTime": {
                  "type": "string",
                  "description": "The timestamp when the recording began.",
                  "format": "date-time"
                },
                "endTime": {
                  "type": "string",
                  "description": "The timestamp when the recording ended.",
                  "format": "date-time"
                },
                "videoUrl": {
                  "type": "string",
                  "description": "The downloadable video URL for the recording.",
                  "format": "uri"
                }
              },
              "additionalProperties": true,
              "description": "A Roam HQ meeting recording."
            },
            "description": "The recordings returned by Roam HQ."
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string",
                "description": "The cursor for the next page of recordings."
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "description": "The raw JSON payload returned by Roam HQ."
          }
        },
        "additionalProperties": false,
        "required": [
          "recordings",
          "nextCursor",
          "raw"
        ],
        "description": "The normalized Roam HQ recording list response."
      }
    },
    {
      "id": "roam.send_message",
      "service": "roam",
      "name": "send_message",
      "description": "Send a message to a single Roam HQ group as a bot.",
      "requiredScopes": [
        "chat:send_message"
      ],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "groupId": {
            "type": "string",
            "description": "The Roam HQ group address ID to send the message to.",
            "format": "uuid"
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "description": "The message text to send."
          },
          "markdown": {
            "type": "boolean",
            "description": "Whether Roam HQ should interpret the text as Markdown."
          },
          "sender": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 16,
                "description": "The internal bot sender ID."
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "The user-visible bot sender name."
              },
              "imageUrl": {
                "type": "string",
                "description": "The bot sender image URL.",
                "format": "uri"
              }
            },
            "additionalProperties": false,
            "required": [
              "id"
            ],
            "description": "Optional bot sender identity for a Roam HQ message."
          }
        },
        "additionalProperties": false,
        "required": [
          "groupId",
          "text"
        ],
        "description": "Input payload for sending a Roam HQ group message."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "chatId": {
            "type": "string",
            "description": "The chat ID returned by Roam HQ."
          },
          "status": {
            "type": "string",
            "description": "The send status returned by Roam HQ."
          },
          "raw": {
            "description": "The raw JSON payload returned by Roam HQ."
          }
        },
        "additionalProperties": false,
        "required": [
          "chatId",
          "status",
          "raw"
        ],
        "description": "The normalized Roam HQ send-message response."
      }
    }
  ]
}
