> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# BambooHR

> 100 actions available for BambooHR through StackOne. Use via Actions RPC, Toolset SDK, MCP, or A2A.

export const GettingStarted = ({connector}) => {
  const linkStyle = {
    textDecoration: 'none'
  };
  const authConfigGuides = connector?.authentication?.filter(a => a?.setupGuide) ?? [];
  const linkAccountGuides = connector?.authentication?.filter(a => a?.configGuide) ?? [];
  return <div style={{
    marginTop: '32px',
    paddingTop: '24px'
  }} className="getting-started-section">
      <div style={{
    fontSize: '20px',
    fontWeight: '600',
    marginBottom: '12px'
  }}>Getting Started</div>
      <Steps>
        <Step title="Create or Select a Project">
          Set up a new project or select an existing one. See the <a href="/guides/managing-projects" style={linkStyle}>Projects Guide</a>.
        </Step>
        <Step title="Configure the Connector">
          <>
            Enable the connector and set up auth configuration in your project. See <a href="/guides/explore-connectors" style={linkStyle}>Managing Connectors</a>.
            {authConfigGuides.length > 0 && <>
              <Columns cols={2}>
                {authConfigGuides.map(auth => <Card title="Auth Config" href={`/${auth.setupGuide}`} icon={connector.icon} horizontal>
                    {connector.name} - {auth.label}
                  </Card>)}
              </Columns> 
              </>}
          </>
        </Step>
        <Step title="Link an Account">
          <>
            Connect an account using <a href="/guides/embedding-stackone-hub" style={linkStyle}>StackOne Hub</a> or <a href="/guides/auth-link" style={linkStyle}>Auth Link</a>.
            {linkAccountGuides.length > 0 && <>
                <Columns cols={2}>
                  {linkAccountGuides.map(auth => <Card title="Link Account" href={`/${auth.configGuide}`} icon={connector.icon} horizontal>
                      {connector.name} - {auth.label}
                    </Card>)}
                </Columns>
              </>}
          </>
        </Step>
        <Step title="Use Actions">
          <>
            Invoke actions using one of the methods below:
            <ul style={{
    marginTop: '8px',
    paddingLeft: '20px'
  }}>
              <li style={{
    marginBottom: '4px'
  }}><a href="/mcp/quickstart" style={linkStyle}>MCP</a> – Model Context Protocol for AI assistants</li>
              <li style={{
    marginBottom: '4px'
  }}><a href="/a2a/quickstart" style={linkStyle}>A2A</a> – Agent-to-Agent protocol</li>
              <li style={{
    marginBottom: '4px'
  }}><a href="/agents/typescript/introduction" style={linkStyle}>AI Toolset (TypeScript)</a> – TypeScript SDK for AI agents</li>
              <li style={{
    marginBottom: '4px'
  }}><a href="/agents/python/introduction" style={linkStyle}>AI Toolset (Python)</a> – Python SDK for AI agents</li>
              <li style={{
    marginBottom: '4px'
  }}><a href="/platform/api-reference/actions/make-an-rpc-call-to-an-action" style={linkStyle}>Actions RPC</a> – Direct API calls</li>
              <li style={{
    marginBottom: '4px'
  }}><a href="/guides/playground" style={linkStyle}>Playground</a> – Test actions in the dashboard</li>
            </ul>
          </>
        </Step>
      </Steps>
    </div>;
};

export const ActionsLibrary = ({search, setSearch, filtered, sharedStyles = {}, KeyCell, ScopesCell, availableScopes, selectedScopes, setSelectedScopes}) => {
  const libraryStyles = {
    section: {
      marginTop: '24px',
      marginBottom: '16px'
    },
    sectionTitle: {
      fontSize: '18px',
      fontWeight: '600',
      marginBottom: '12px'
    },
    filterRow: {
      display: 'flex',
      gap: '12px',
      marginBottom: '12px',
      alignItems: 'stretch'
    },
    count: {
      fontSize: '12px',
      marginBottom: '8px'
    },
    tableContainer: {
      maxHeight: '500px',
      overflowY: 'auto',
      overflowX: 'auto',
      borderRadius: '8px',
      fontSize: '13px'
    },
    gridTable: {
      display: 'grid',
      minWidth: '600px',
      gridTemplateColumns: '200px 1fr'
    },
    gridTableWithScopes: {
      gridTemplateColumns: '200px 1fr 150px'
    },
    gridHeader: {
      display: 'contents'
    },
    gridHeaderCell: {
      position: 'sticky',
      top: 0,
      padding: '10px 12px',
      fontWeight: '600',
      zIndex: 1
    },
    gridRow: {
      display: 'contents'
    },
    gridCellAction: {
      padding: '10px 12px',
      fontWeight: '500'
    },
    gridCellKey: {
      padding: '10px 12px'
    },
    gridCellScopes: {
      padding: '10px 12px',
      fontSize: '12px'
    },
    gridCellDescription: {
      padding: '10px 12px'
    }
  };
  const styles = {
    ...libraryStyles,
    ...sharedStyles
  };
  const safeAvailableScopes = Array.isArray(availableScopes) ? availableScopes : [];
  const safeSelectedScopes = Array.isArray(selectedScopes) ? selectedScopes : [];
  const hasScopesColumn = safeAvailableScopes.length > 0;
  const hasScopeFilter = safeAvailableScopes.length > 0 && typeof setSelectedScopes === 'function';
  const ScopesCellComponent = ScopesCell || (() => null);
  return <div style={styles.section}>
      <div style={styles.sectionTitle}>Actions</div>
      <div style={styles.filterRow}>
        <SearchBar value={search} onChange={setSearch} placeholder="Search actions" />
        {hasScopeFilter && <FilterDropdown label="Scopes" items={safeAvailableScopes} selectedItems={safeSelectedScopes} onChange={setSelectedScopes} searchPlaceholder="Search scopes..." emptyLabel="No scopes found" />}
      </div>
      <div style={styles.count} className="actions-library-count">
        {filtered.length === 0 ? '0 actions found' : `${filtered.length} action${filtered.length !== 1 ? 's' : ''}`}
      </div>
      {}
      <div className="not-prose actions-library-table-container" style={styles.tableContainer}>
        <div style={{
    ...hasScopesColumn ? {
      ...styles.gridTable,
      ...styles.gridTableWithScopes
    } : styles.gridTable
  }}>
          {}
          <div style={styles.gridHeader}>
            <div style={styles.gridHeaderCell} className="actions-library-grid-header-cell">Action</div>
            <div style={styles.gridHeaderCell} className="actions-library-grid-header-cell">Description</div>
            {hasScopesColumn && <div style={styles.gridHeaderCell} className="actions-library-grid-header-cell">Required scopes</div>}
          </div>
          {}
          {filtered.map(a => <div key={a.id} style={styles.gridRow}>
              <div style={styles.gridCellAction} className="actions-library-grid-cell">
                <div>{a.label}</div>
                <div style={{
    marginTop: '4px'
  }}>
                  <KeyCell id={a.id} />
                </div>
              </div>
              <div style={styles.gridCellDescription} className="actions-library-grid-cell actions-library-grid-cell--description">{a.description}</div>
              {hasScopesColumn && <div style={styles.gridCellScopes} className="actions-library-grid-cell actions-library-grid-cell--scopes">
                  <ScopesCellComponent scopes={a.requiredScopes} actionId={a.id} />
                </div>}
            </div>)}
        </div>
      </div>
    </div>;
};

export const FilterDropdown = ({label, items, selectedItems, onChange, searchPlaceholder = 'Search...', emptyLabel = 'No items found', formatLabel}) => {
  const [dropdownOpen, setDropdownOpen] = React.useState(false);
  const [search, setSearch] = React.useState('');
  const [hoveredItem, setHoveredItem] = React.useState(null);
  const dropdownRef = React.useRef(null);
  const styles = {
    dropdownContainer: {
      position: 'relative'
    },
    dropdownTrigger: {
      display: 'flex',
      alignItems: 'center',
      gap: '8px',
      padding: '10px 14px',
      borderRadius: '8px',
      fontSize: '14px',
      cursor: 'pointer',
      whiteSpace: 'nowrap',
      minWidth: '160px',
      justifyContent: 'space-between'
    },
    dropdownMenu: {
      position: 'absolute',
      top: '100%',
      right: 0,
      marginTop: '4px',
      borderRadius: '8px',
      zIndex: 50,
      minWidth: '220px',
      maxHeight: '320px',
      display: 'flex',
      flexDirection: 'column'
    },
    dropdownHeader: {
      padding: '8px 12px'
    },
    selectActions: {
      display: 'flex',
      alignItems: 'center',
      gap: '8px',
      marginTop: '6px',
      fontSize: '12px'
    },
    selectActionBtn: {
      background: 'none',
      border: 'none',
      cursor: 'pointer',
      padding: '2px 4px',
      fontSize: '12px'
    },
    dropdownSearchInput: {
      width: '100%',
      padding: '8px 10px',
      borderRadius: '6px',
      fontSize: '13px',
      outline: 'none'
    },
    dropdownList: {
      overflowY: 'auto',
      maxHeight: '220px',
      padding: '4px 0'
    },
    dropdownItem: {
      display: 'flex',
      alignItems: 'center',
      gap: '10px',
      padding: '8px 12px',
      cursor: 'pointer',
      fontSize: '13px',
      transition: 'background-color 0.1s'
    },
    checkbox: {
      width: '16px',
      height: '16px',
      borderRadius: '4px',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      flexShrink: 0
    },
    checkmark: {
      color: 'white',
      fontSize: '10px',
      fontWeight: 'bold'
    },
    dropdownFooter: {
      padding: '8px 12px',
      display: 'flex',
      justifyContent: 'space-between',
      alignItems: 'center'
    },
    clearButton: {
      fontSize: '12px',
      cursor: 'pointer',
      padding: '4px 8px',
      borderRadius: '4px',
      border: 'none',
      background: 'none'
    },
    badge: {
      fontSize: '11px',
      fontWeight: '600',
      padding: '2px 6px',
      borderRadius: '10px',
      marginLeft: '4px'
    },
    chevron: {
      fontSize: '10px',
      transition: 'transform 0.15s'
    },
    noResults: {
      padding: '12px',
      textAlign: 'center',
      fontSize: '13px'
    }
  };
  const safeSelected = Array.isArray(selectedItems) ? selectedItems : [];
  const formatItemLabel = item => {
    if (typeof formatLabel === 'function') {
      return formatLabel(item);
    }
    return item;
  };
  const filteredItems = React.useMemo(() => {
    if (!search) return items;
    const searchLower = search.toLowerCase();
    return items.filter(item => {
      const labelText = formatItemLabel(item);
      return labelText.toLowerCase().includes(searchLower);
    });
  }, [items, search, formatLabel]);
  const isSelected = item => safeSelected.includes(item);
  const toggleItem = item => {
    const next = isSelected(item) ? safeSelected.filter(v => v !== item) : [...safeSelected, item];
    onChange(next);
  };
  const clearFilters = () => {
    onChange([]);
  };
  const selectAll = () => {
    onChange(items);
  };
  React.useEffect(() => {
    const handleClickOutside = e => {
      if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
        setDropdownOpen(false);
        setSearch('');
        setHoveredItem(null);
      }
    };
    document.addEventListener('mousedown', handleClickOutside);
    return () => document.removeEventListener('mousedown', handleClickOutside);
  }, []);
  return <div style={styles.dropdownContainer} ref={dropdownRef}>
      <button type="button" onClick={() => setDropdownOpen(!dropdownOpen)} style={styles.dropdownTrigger} className={`filter-dropdown__trigger${safeSelected.length > 0 ? ' filter-dropdown__trigger--active' : ''}`}>
        <span>
          {label}
          {safeSelected.length > 0 && <span style={styles.badge} className="filter-dropdown__badge">{safeSelected.length}</span>}
        </span>
        <span style={{
    ...styles.chevron,
    transform: dropdownOpen ? 'rotate(180deg)' : 'rotate(0deg)'
  }} className="filter-dropdown__chevron">
          ▼
        </span>
      </button>
      {dropdownOpen && <div style={styles.dropdownMenu} className="filter-dropdown__menu">
          <div style={styles.dropdownHeader} className="filter-dropdown__header">
            <input type="text" placeholder={searchPlaceholder} value={search} onChange={e => setSearch(e.target.value)} style={styles.dropdownSearchInput} className="filter-dropdown__search" autoFocus />
            <div style={styles.selectActions}>
              <button type="button" onClick={selectAll} style={styles.selectActionBtn} className="filter-dropdown__action-btn">
                Select all
              </button>
              <span className="filter-dropdown__separator">|</span>
              <button type="button" onClick={clearFilters} style={styles.selectActionBtn} className="filter-dropdown__action-btn">
                Clear
              </button>
            </div>
          </div>
          <div style={styles.dropdownList}>
            {filteredItems.length === 0 ? <div style={styles.noResults} className="filter-dropdown__no-results">{emptyLabel}</div> : filteredItems.map(item => {
    const itemClass = ['filter-dropdown__item', hoveredItem === item ? 'filter-dropdown__item--hovered' : '', isSelected(item) ? 'filter-dropdown__item--selected' : ''].filter(Boolean).join(' ');
    const checkboxClass = `filter-dropdown__checkbox${isSelected(item) ? ' filter-dropdown__checkbox--checked' : ''}`;
    return <div key={item} onClick={() => toggleItem(item)} onMouseEnter={() => setHoveredItem(item)} onMouseLeave={() => setHoveredItem(null)} style={styles.dropdownItem} className={itemClass}>
                    <div style={styles.checkbox} className={checkboxClass}>
                      {isSelected(item) && <span style={styles.checkmark}>✓</span>}
                    </div>
                    <span>{formatItemLabel(item)}</span>
                  </div>;
  })}
          </div>
        </div>}
    </div>;
};

export const SearchBar = ({value, onChange, placeholder = 'Search...'}) => {
  const baseStyle = {
    padding: '10px 14px',
    borderRadius: '8px',
    fontSize: '14px',
    outline: 'none',
    flex: 1,
    minWidth: 0
  };
  return <input type="text" placeholder={placeholder} value={value} onChange={e => onChange(e.target.value)} style={baseStyle} className="search-bar" />;
};

export const ConnectorPage = ({connector}) => {
  const styles = {
    header: {
      display: 'flex',
      alignItems: 'center',
      gap: '12px',
      marginBottom: '24px'
    },
    tagsRow: {
      display: 'flex',
      flexWrap: 'wrap',
      gap: '6px',
      marginTop: '8px'
    },
    releaseTag: {
      display: 'inline-block',
      padding: '2px 8px',
      borderRadius: '4px',
      fontSize: '11px',
      fontWeight: '500'
    },
    categoryTag: {
      display: 'inline-block',
      padding: '2px 8px',
      borderRadius: '4px',
      fontSize: '11px',
      fontWeight: '500'
    },
    icon: {
      width: '48px',
      height: '48px',
      borderRadius: '10px',
      padding: '2px'
    },
    title: {
      fontSize: '24px',
      fontWeight: '600'
    },
    subtitle: {
      fontSize: '14px'
    },
    authDescription: {
      fontSize: '14px',
      marginTop: 0
    },
    sectionTitle: {
      fontSize: '18px',
      fontWeight: '600',
      marginBottom: '12px'
    },
    codeWrapper: {
      position: 'relative',
      display: 'inline-flex',
      alignItems: 'center',
      maxWidth: '100%',
      cursor: 'pointer',
      overflowX: 'auto',
      overflowY: 'hidden',
      msOverflowStyle: 'none',
      scrollbarWidth: 'none'
    },
    code: {
      padding: '4px 8px',
      borderRadius: '4px',
      fontSize: '11px',
      display: 'inline-block',
      whiteSpace: 'nowrap',
      transition: 'background-color 0.15s'
    },
    tooltip: {
      position: 'absolute',
      top: '100%',
      left: '50%',
      transform: 'translateX(-50%)',
      padding: '6px 10px',
      borderRadius: '6px',
      fontSize: '11px',
      whiteSpace: 'nowrap',
      marginTop: '6px',
      zIndex: 50,
      maxWidth: '300px',
      wordBreak: 'break-all'
    },
    tooltipArrow: {
      position: 'absolute',
      bottom: '100%',
      left: '50%',
      transform: 'translateX(-50%)',
      borderWidth: '5px',
      borderStyle: 'solid',
      zIndex: 50
    }
  };
  const [search, setSearch] = React.useState('');
  const [copiedId, setCopiedId] = React.useState(null);
  const [selectedScopes, setSelectedScopes] = React.useState([]);
  const availableScopes = React.useMemo(() => {
    const set = new Set();
    connector.actions.forEach(a => {
      if (Array.isArray(a.requiredScopes)) {
        a.requiredScopes.forEach(s => {
          if (s) set.add(s);
        });
      }
    });
    return Array.from(set).sort();
  }, [connector.actions]);
  const filtered = React.useMemo(() => {
    const searchLower = search.toLowerCase();
    return connector.actions.filter(a => {
      const matchesSearch = a.label.toLowerCase().includes(searchLower) || a.description.toLowerCase().includes(searchLower) || a.id.toLowerCase().includes(searchLower);
      if (!matchesSearch) return false;
      if (selectedScopes.length === 0) return true;
      const scopes = Array.isArray(a.requiredScopes) ? a.requiredScopes : [];
      if (scopes.length === 0) return false;
      return selectedScopes.some(scope => scopes.includes(scope));
    });
  }, [connector.actions, search, selectedScopes]);
  const handleImageError = e => {
    e.target.style.display = 'none';
  };
  const formatCategoryLabel = cat => {
    const acronyms = ['ai', 'ats', 'crm', 'hris', 'iam', 'lms'];
    if (acronyms.includes(cat.toLowerCase())) {
      return cat.toUpperCase();
    }
    return cat.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
  };
  const ReleaseTag = () => {
    if (!connector.releaseStage || connector.releaseStage === 'ga') return null;
    const variantClass = connector.releaseStage === 'beta' ? 'connector-page-tag-beta' : 'connector-page-tag-preview';
    return <span style={styles.releaseTag} className={variantClass}>
        {connector.releaseStage.charAt(0).toUpperCase() + connector.releaseStage.slice(1)}
      </span>;
  };
  const CategoryTags = () => {
    if (!connector.categories || connector.categories.length === 0) return null;
    return <>
        {connector.categories.map(cat => <span key={cat} style={styles.categoryTag} className="connector-page-category-tag">
            {formatCategoryLabel(cat)}
          </span>)}
      </>;
  };
  const copyToClipboard = async (text, id) => {
    try {
      await navigator.clipboard.writeText(text);
      setCopiedId(id);
      setTimeout(() => setCopiedId(null), 1500);
    } catch (err) {
      console.error('Failed to copy:', err);
    }
  };
  const CopyChip = ({text, copyId}) => {
    const [isHovered, setIsHovered] = React.useState(false);
    const isCopied = copiedId === copyId;
    if (!text) {
      return null;
    }
    const codeClassName = `connector-page-code${isCopied ? ' connector-page-code--copied' : ''}`;
    return <div style={styles.codeWrapper} onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} onClick={() => copyToClipboard(text, copyId)} title="">
        {(isHovered || isCopied) && <div style={styles.tooltip} className="connector-page-tooltip">
            {isCopied ? '✓ Copied!' : 'Click to copy'}
            <div style={styles.tooltipArrow} className="connector-page-tooltip-arrow" />
          </div>}
        <code style={styles.code} className={codeClassName}>
          {text}
        </code>
      </div>;
  };
  const KeyCell = ({id}) => <CopyChip text={id} copyId={id} />;
  const ScopesCell = ({scopes, actionId}) => {
    const scopeList = Array.isArray(scopes) ? scopes.filter(Boolean) : [];
    if (scopeList.length === 0) return null;
    return <div style={{
      display: 'flex',
      flexWrap: 'wrap',
      gap: '6px'
    }}>
        {scopeList.map(scope => <CopyChip key={scope} text={scope} copyId={`scopes:${actionId}:${scope}`} />)}
      </div>;
  };
  return <div>
      {}
      <div style={styles.header}>
        <img src={connector.icon} alt={connector.name} style={styles.icon} className="connector-page-icon" onError={handleImageError} />
        <div>
          <div style={styles.title}>{connector.name}</div>
          <div style={styles.subtitle} className="connector-page-subtitle">
            {connector.actions.length} actions · {connector.authentication.length} auth method{connector.authentication.length !== 1 ? 's' : ''}
          </div>
          {connector.releaseStage && connector.releaseStage !== 'ga' || connector.categories && connector.categories.length > 0 ? <div style={styles.tagsRow}>
              <ReleaseTag />
              <CategoryTags />
            </div> : null}
        </div>
      </div>

      {}
      <div style={styles.sectionTitle}>Authentication</div>
      <Columns cols={2}>        
        {connector.authentication.length > 0 ? connector.authentication.map(auth => {
    const authLabel = auth?.label || '';
    const authDescription = auth?.description;
    const configGuide = auth?.configGuide;
    const setupGuide = auth?.setupGuide;
    const hasConfigGuide = !!configGuide;
    const hasSetupGuide = !!setupGuide;
    const hasAnyGuide = hasConfigGuide || hasSetupGuide;
    return <Card key={authLabel} title={authLabel}>
                {authDescription && <p style={{
      ...styles.authDescription,
      marginBottom: hasAnyGuide ? '8px' : 0
    }} className="connector-page-auth-description">
                    {authDescription}
                  </p>}
                {hasAnyGuide && <span style={{
      fontSize: '14px'
    }}>
                    Guides: {hasSetupGuide && <a href={`/${setupGuide}`} style={{
      textDecoration: 'none'
    }}>Auth Config</a>}
                    {hasConfigGuide && hasSetupGuide && ', '}
                    {hasConfigGuide && <a href={`/${configGuide}`} style={{
      textDecoration: 'none'
    }}>Link Account</a>}
                  </span>}
              </Card>;
  }) : <>
            Contact StackOne for authentication details.
          </>}
      </Columns>

      <ActionsLibrary search={search} setSearch={setSearch} filtered={filtered} sharedStyles={{
    sectionTitle: styles.sectionTitle
  }} KeyCell={KeyCell} ScopesCell={ScopesCell} availableScopes={availableScopes} selectedScopes={selectedScopes} setSelectedScopes={setSelectedScopes} />

      <GettingStarted connector={connector} />

      {connector.documentation?.references?.length > 0 && <>
          <div style={styles.sectionTitle}>References</div>
          <Columns cols={2}>
            {connector.documentation.references.map(ref => {
    let safeHref;
    try {
      const parsed = new URL(ref.url);
      safeHref = parsed.protocol === 'http:' || parsed.protocol === 'https:' ? ref.url : undefined;
    } catch {
      safeHref = undefined;
    }
    return <Card key={`${ref.title}-${ref.url}`} title={ref.title} href={safeHref}>
                  {ref.description}
                </Card>;
  })}
          </Columns>
        </>}

    </div>;
};

export const connector = {
  "key": "bamboohr",
  "name": "BambooHR",
  "icon": "https://stackone-logos.com/api/bamboohr/filled/png",
  "authentication": [{
    "label": "OAuth 2.0",
    "description": "Provides granular scope control over employee, compensation, time-off, and other data categories.",
    "configGuide": "connectors/bamboohr/guides/link-account/oauth-2-0",
    "setupGuide": "connectors/bamboohr/guides/auth-config/oauth-2-0"
  }, {
    "label": "API Key",
    "description": "Inherits the full permissions of the generating user. Simpler to set up but no granular scope control.",
    "configGuide": "connectors/bamboohr/guides/link-account/api-key",
    "setupGuide": "connectors/bamboohr/guides/auth-config/api-key"
  }],
  "actions": [{
    "id": "bamboohr_list_employees",
    "label": "List Employees",
    "description": "Get all employees from BambooHR with comprehensive employee data. This is the primary endpoint for retrieving the comple...",
    "requiredScopes": ["employee"]
  }, {
    "id": "bamboohr_list_employees_directory",
    "label": "List Employees Directory",
    "description": "Get employee directory with basic employee information",
    "requiredScopes": ["employee_directory"]
  }, {
    "id": "bamboohr_get_changed_employees",
    "label": "Get Changed Employees",
    "description": "Get a list of employee IDs that have changed since a specific timestamp. Requires admin-level permissions or special OAu...",
    "requiredScopes": ["employee"]
  }, {
    "id": "bamboohr_get_employee",
    "label": "Get Employee",
    "description": "Get detailed information for a specific employee by ID",
    "requiredScopes": ["employee"]
  }, {
    "id": "bamboohr_create_employee",
    "label": "Create Employee",
    "description": "Create a new employee record in BambooHR",
    "requiredScopes": ["employee.write"]
  }, {
    "id": "bamboohr_update_employee",
    "label": "Update Employee",
    "description": "Update an existing employee record",
    "requiredScopes": ["employee.write"]
  }, {
    "id": "bamboohr_get_employee_photo",
    "label": "Get Employee Photo",
    "description": "Get an employee's profile photo. Requires appropriate permissions to access employee photos.",
    "requiredScopes": ["employee:photo"]
  }, {
    "id": "bamboohr_list_employee_files",
    "label": "List Employee Files",
    "description": "Get a list of files for a specific employee",
    "requiredScopes": ["employee:file"]
  }, {
    "id": "bamboohr_get_employee_file_categories",
    "label": "Get Employee File Categories",
    "description": "Get available file categories for a specific employee. Note - BambooHR returns categories as part of the file listing en...",
    "requiredScopes": ["employee:file"]
  }, {
    "id": "bamboohr_upload_employee_file",
    "label": "Upload Employee File",
    "description": "Upload a file to a specific employee's record in BambooHR"
  }, {
    "id": "bamboohr_upload_employee_photo",
    "label": "Upload Employee Photo",
    "description": "Upload a photo for a specific employee. Photo must be square (min 150x150 pixels, max 20MB) in JPEG, PNG, or BMP format",
    "requiredScopes": ["employee:photo.write"]
  }, {
    "id": "bamboohr_list_employee_dependents",
    "label": "List Employee Dependents",
    "description": "Get a list of dependents for a specific employee. Requires appropriate permissions to access employee dependent informat...",
    "requiredScopes": ["employee:dependent"]
  }, {
    "id": "bamboohr_create_employee_dependent",
    "label": "Create Employee Dependent",
    "description": "Create a new dependent for an employee",
    "requiredScopes": ["employee:dependent.write"]
  }, {
    "id": "bamboohr_update_employee_dependent",
    "label": "Update Employee Dependent",
    "description": "Update an existing employee dependent record",
    "requiredScopes": ["employee:dependent.write"]
  }, {
    "id": "bamboohr_get_whos_out",
    "label": "Get Whos Out",
    "description": "Get a list of who is out on a given date or date range",
    "requiredScopes": ["time_off"]
  }, {
    "id": "bamboohr_list_time_off_requests",
    "label": "List Time Off Requests",
    "description": "Get a list of time off requests with filtering options",
    "requiredScopes": ["time_off"]
  }, {
    "id": "bamboohr_create_time_off_request",
    "label": "Create Time Off Request",
    "description": "Create a new time off request for an employee",
    "requiredScopes": ["time_off.write"]
  }, {
    "id": "bamboohr_update_time_off_request_status",
    "label": "Update Time Off Request Status",
    "description": "Update the status of a time off request",
    "requiredScopes": ["time_off.write"]
  }, {
    "id": "bamboohr_create_time_off_history_item",
    "label": "Create Time Off History Item",
    "description": "Add a time off history item for an employee",
    "requiredScopes": ["time_off.write"]
  }, {
    "id": "bamboohr_list_time_off_types",
    "label": "List Time Off Types",
    "description": "Get a list of available time off types",
    "requiredScopes": ["time_off"]
  }, {
    "id": "bamboohr_list_time_off_policies",
    "label": "List Time Off Policies",
    "description": "Get a list of time off policies",
    "requiredScopes": ["time_off"]
  }, {
    "id": "bamboohr_get_employee_time_off_policies",
    "label": "Get Employee Time Off Policies",
    "description": "Get time off policies assigned to a specific employee",
    "requiredScopes": ["time_off"]
  }, {
    "id": "bamboohr_assign_time_off_policies",
    "label": "Assign Time Off Policies",
    "description": "Assign time off policies to an employee",
    "requiredScopes": ["time_off.write"]
  }, {
    "id": "bamboohr_update_time_off_balance",
    "label": "Update Time Off Balance",
    "description": "Update an employee's time off balance adjustment",
    "requiredScopes": ["time_off.write"]
  }, {
    "id": "bamboohr_estimate_future_time_off_balances",
    "label": "Estimate Future Time Off Balances",
    "description": "Estimate future time off balances for an employee",
    "requiredScopes": ["time_off"]
  }, {
    "id": "bamboohr_list_benefit_coverages",
    "label": "List Benefit Coverages",
    "description": "Get benefit coverage information for employees",
    "requiredScopes": ["benefit"]
  }, {
    "id": "bamboohr_get_benefit_deduction_types",
    "label": "Get Benefit Deduction Types",
    "description": "Get available benefit deduction types",
    "requiredScopes": ["benefit"]
  }, {
    "id": "bamboohr_get_member_benefit_events",
    "label": "Get Member Benefit Events",
    "description": "Get member benefit events for tracking benefit enrollments and changes",
    "requiredScopes": ["benefit"]
  }, {
    "id": "bamboohr_list_goals",
    "label": "List Goals",
    "description": "Get a list of goals for a specific employee. Requires Goals module to be enabled and appropriate permissions.",
    "requiredScopes": ["goal"]
  }, {
    "id": "bamboohr_create_goal",
    "label": "Create Goal",
    "description": "Create a new goal for an employee. Requires Goals module to be enabled.",
    "requiredScopes": ["goal.write"]
  }, {
    "id": "bamboohr_update_goal",
    "label": "Update Goal",
    "description": "Update an existing goal with all fields. Requires Goals module to be enabled.",
    "requiredScopes": ["goal.write"]
  }, {
    "id": "bamboohr_delete_goal",
    "label": "Delete Goal",
    "description": "Delete a goal by its ID. Requires Goals module to be enabled.",
    "requiredScopes": ["goal.write"]
  }, {
    "id": "bamboohr_create_goal_comment",
    "label": "Create Goal Comment",
    "description": "Add a comment to a goal. Requires Goals module to be enabled.",
    "requiredScopes": ["goal.write"]
  }, {
    "id": "bamboohr_close_goal",
    "label": "Close Goal",
    "description": "Close a goal and mark it as complete. Requires Goals module to be enabled.",
    "requiredScopes": ["goal"]
  }, {
    "id": "bamboohr_reopen_goal",
    "label": "Reopen Goal",
    "description": "Reopen a closed goal. Requires Goals module to be enabled.",
    "requiredScopes": ["goal"]
  }, {
    "id": "bamboohr_list_timesheet_entries",
    "label": "List Timesheet Entries",
    "description": "Get all timesheet entries for a given period of time. Requires time tracking module to be enabled and appropriate permis...",
    "requiredScopes": ["time_tracking"]
  }, {
    "id": "bamboohr_clock_in_employee",
    "label": "Clock In Employee",
    "description": "Clock in an employee for time tracking",
    "requiredScopes": ["time_tracking"]
  }, {
    "id": "bamboohr_clock_out_employee",
    "label": "Clock Out Employee",
    "description": "Clock out an employee for time tracking",
    "requiredScopes": ["time_tracking"]
  }, {
    "id": "bamboohr_create_or_update_clock_entries",
    "label": "Create Or Update Clock Entries",
    "description": "Add or edit timesheet clock entries in bulk",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_delete_clock_entries",
    "label": "Delete Clock Entries",
    "description": "Delete timesheet clock entries by their IDs",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_create_or_update_hour_entries",
    "label": "Create Or Update Hour Entries",
    "description": "Add or edit timesheet hour entries in bulk",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_delete_hour_entries",
    "label": "Delete Hour Entries",
    "description": "Delete timesheet hour entries by their IDs",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_create_time_tracking_project",
    "label": "Create Time Tracking Project",
    "description": "Create a time tracking project with optional tasks",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_add_hour_record",
    "label": "Add Hour Record",
    "description": "Add hours worked for an employee (legacy endpoint). Requires time tracking module to be enabled with proper project and...",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_get_hour_record",
    "label": "Get Hour Record",
    "description": "Get a specific hour record by ID (legacy endpoint)",
    "requiredScopes": ["time_tracking"]
  }, {
    "id": "bamboohr_update_hour_record",
    "label": "Update Hour Record",
    "description": "Update a specific hour record (legacy endpoint)",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_delete_hour_record",
    "label": "Delete Hour Record",
    "description": "Delete a specific hour record (legacy endpoint)",
    "requiredScopes": ["time_tracking.write"]
  }, {
    "id": "bamboohr_list_company_files",
    "label": "List Company Files",
    "description": "Get a list of company files and categories",
    "requiredScopes": ["company_file"]
  }, {
    "id": "bamboohr_get_company_file",
    "label": "Get Company File",
    "description": "Get a specific company file by ID. Returns binary file data. Requires appropriate permissions to download company files.",
    "requiredScopes": ["company_file"]
  }, {
    "id": "bamboohr_upload_company_file",
    "label": "Upload Company File",
    "description": "Upload a file to a company file category in BambooHR",
    "requiredScopes": ["company_file.write"]
  }, {
    "id": "bamboohr_update_company_file",
    "label": "Update Company File",
    "description": "Update an existing company file",
    "requiredScopes": ["company_file.write"]
  }, {
    "id": "bamboohr_delete_company_file",
    "label": "Delete Company File",
    "description": "Delete a company file by its ID",
    "requiredScopes": ["company_file.write"]
  }, {
    "id": "bamboohr_create_company_file_category",
    "label": "Create Company File Category",
    "description": "Create a new company file category",
    "requiredScopes": ["company_file.write"]
  }, {
    "id": "bamboohr_create_employee_file_category",
    "label": "Create Employee File Category",
    "description": "Create a new employee file category",
    "requiredScopes": ["company_file.write"]
  }, {
    "id": "bamboohr_list_employee_trainings",
    "label": "List Employee Trainings",
    "description": "Get a list of training records for a specific employee",
    "requiredScopes": ["training"]
  }, {
    "id": "bamboohr_create_employee_training_record",
    "label": "Create Employee Training Record",
    "description": "Create a new training record for an employee",
    "requiredScopes": ["training.write"]
  }, {
    "id": "bamboohr_update_employee_training_record",
    "label": "Update Employee Training Record",
    "description": "Update an existing employee training record",
    "requiredScopes": ["training.write"]
  }, {
    "id": "bamboohr_delete_employee_training_record",
    "label": "Delete Employee Training Record",
    "description": "Delete an employee training record",
    "requiredScopes": ["training.write"]
  }, {
    "id": "bamboohr_list_training_types",
    "label": "List Training Types",
    "description": "Get a list of available training types",
    "requiredScopes": ["training"]
  }, {
    "id": "bamboohr_create_training_type",
    "label": "Create Training Type",
    "description": "Create a new training type",
    "requiredScopes": ["training.write"]
  }, {
    "id": "bamboohr_delete_training_type",
    "label": "Delete Training Type",
    "description": "Delete a training type by its ID",
    "requiredScopes": ["training.write"]
  }, {
    "id": "bamboohr_list_training_categories",
    "label": "List Training Categories",
    "description": "Get a list of available training categories",
    "requiredScopes": ["training"]
  }, {
    "id": "bamboohr_create_training_category",
    "label": "Create Training Category",
    "description": "Create a new training category",
    "requiredScopes": ["training.write"]
  }, {
    "id": "bamboohr_list_job_summaries",
    "label": "List Job Summaries",
    "description": "Get a list of job openings with summary information. Requires Applicant Tracking System (ATS) module to be enabled and a...",
    "requiredScopes": ["application"]
  }, {
    "id": "bamboohr_create_job_opening",
    "label": "Create Job Opening",
    "description": "Create a new job opening in the applicant tracking system",
    "requiredScopes": ["application.write"]
  }, {
    "id": "bamboohr_list_job_applications",
    "label": "List Job Applications",
    "description": "Get a list of job applications with filtering options. Requires Applicant Tracking System (ATS) module to be enabled and...",
    "requiredScopes": ["application"]
  }, {
    "id": "bamboohr_get_job_application_details",
    "label": "Get Job Application Details",
    "description": "Get detailed information for a specific job application",
    "requiredScopes": ["application"]
  }, {
    "id": "bamboohr_create_candidate",
    "label": "Create Candidate",
    "description": "Create a new candidate in the applicant tracking system",
    "requiredScopes": ["application.write"]
  }, {
    "id": "bamboohr_list_applicant_statuses",
    "label": "List Applicant Statuses",
    "description": "Get a list of available applicant statuses. Requires Applicant Tracking System (ATS) module to be enabled and appropriat...",
    "requiredScopes": ["application"]
  }, {
    "id": "bamboohr_update_applicant_status",
    "label": "Update Applicant Status",
    "description": "Update the status of a job application",
    "requiredScopes": ["application.write"]
  }, {
    "id": "bamboohr_create_application_comment",
    "label": "Create Application Comment",
    "description": "Add a comment to a job application",
    "requiredScopes": ["application.write"]
  }, {
    "id": "bamboohr_list_company_locations",
    "label": "List Company Locations",
    "description": "Get a list of company locations for job postings. Requires Applicant Tracking System (ATS) module to be enabled and appr...",
    "requiredScopes": ["application"]
  }, {
    "id": "bamboohr_list_hiring_leads",
    "label": "List Hiring Leads",
    "description": "Get a list of employees who can be hiring leads. Requires Applicant Tracking System (ATS) module to be enabled and appro...",
    "requiredScopes": ["application"]
  }, {
    "id": "bamboohr_get_company_information",
    "label": "Get Company Information",
    "description": "Get basic company information and settings. Requires company admin permissions to access this endpoint.",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_list_users",
    "label": "List Users",
    "description": "Get a list of users who can access BambooHR",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_list_fields",
    "label": "List Fields",
    "description": "Get a list of all available fields in BambooHR",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_get_field_options",
    "label": "Get Field Options",
    "description": "Get available options for dataset fields",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_list_countries",
    "label": "List Countries",
    "description": "Get a list of available countries for address fields. Requires admin-level permissions or special OAuth scope.",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_get_states_by_country",
    "label": "Get States By Country",
    "description": "Get states/provinces for a specific country. Requires admin-level permissions or special OAuth scope.",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_get_list_field_details",
    "label": "Get List Field Details",
    "description": "Get details for all list fields including available options and their IDs. Use this to retrieve dropdown/select field op...",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_create_or_update_list_values",
    "label": "Create Or Update List Values",
    "description": "Create or update values for a list field",
    "requiredScopes": ["field.write"]
  }, {
    "id": "bamboohr_list_tabular_fields",
    "label": "List Tabular Fields",
    "description": "Get available tabular fields (tables) for employee data. Requires appropriate permissions to access metadata.",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_get_employee_table_rows",
    "label": "Get Employee Table Rows",
    "description": "Get rows from an employee's tabular data",
    "requiredScopes": ["company:info"]
  }, {
    "id": "bamboohr_create_table_row",
    "label": "Create Table Row",
    "description": "Add a new row to an employee's tabular data",
    "requiredScopes": ["employee.write"]
  }, {
    "id": "bamboohr_update_table_row",
    "label": "Update Table Row",
    "description": "Update a row in an employee's tabular data",
    "requiredScopes": ["employee.write"]
  }, {
    "id": "bamboohr_delete_table_row",
    "label": "Delete Table Row",
    "description": "Delete a row from an employee's tabular data",
    "requiredScopes": ["employee.write"]
  }, {
    "id": "bamboohr_list_reports",
    "label": "List Reports",
    "description": "Get a list of available custom reports. Requires appropriate permissions to access reporting functionality.",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_get_report",
    "label": "Get Report",
    "description": "Get details of a specific custom report",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_request_custom_report",
    "label": "Request Custom Report",
    "description": "Request a custom report with specified fields and filters",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_get_company_report",
    "label": "Get Company Report",
    "description": "Get a company report with basic employee information. Requires appropriate permissions to access reporting functionality...",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_list_datasets",
    "label": "List Datasets",
    "description": "Get a list of available datasets for reporting. Requires appropriate permissions to access reporting functionality.",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_get_dataset_fields",
    "label": "Get Dataset Fields",
    "description": "Get fields available in a specific dataset",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_get_dataset_data",
    "label": "Get Dataset Data",
    "description": "Query data from a specific dataset with filtering, sorting, and aggregation capabilities. Supports complex queries with...",
    "requiredScopes": ["report"]
  }, {
    "id": "bamboohr_list_webhooks",
    "label": "List Webhooks",
    "description": "Get a list of webhooks configured for the API key. Requires webhooks feature to be enabled and appropriate permissions.",
    "requiredScopes": ["webhooks"]
  }, {
    "id": "bamboohr_get_webhook",
    "label": "Get Webhook",
    "description": "Get detailed information for a specific webhook",
    "requiredScopes": ["webhooks"]
  }, {
    "id": "bamboohr_create_webhook",
    "label": "Create Webhook",
    "description": "Create a new webhook to receive BambooHR events",
    "requiredScopes": ["webhooks.write"]
  }, {
    "id": "bamboohr_update_webhook",
    "label": "Update Webhook",
    "description": "Update an existing webhook configuration",
    "requiredScopes": ["webhooks.write"]
  }, {
    "id": "bamboohr_delete_webhook",
    "label": "Delete Webhook",
    "description": "Delete a webhook by its ID",
    "requiredScopes": ["webhooks.write"]
  }, {
    "id": "bamboohr_get_webhook_logs",
    "label": "Get Webhook Logs",
    "description": "Get logs for a specific webhook to debug delivery issues",
    "requiredScopes": ["webhooks"]
  }, {
    "id": "bamboohr_get_monitor_fields",
    "label": "Get Monitor Fields",
    "description": "Get a list of fields that can be monitored by webhooks. Requires webhooks feature to be enabled and appropriate permissi...",
    "requiredScopes": ["webhooks"]
  }],
  "releaseStage": "ga",
  "categories": ["hris"],
  "scopeDefinitions": [{
    "name": "openid",
    "description": "Required for OAuth authentication. Provides access to user identity information."
  }, {
    "name": "offline_access",
    "description": "Enables refresh token generation for long-term API access without re-authentication."
  }, {
    "name": "email",
    "description": "Access to user email address for authentication purposes."
  }, {
    "name": "employee",
    "description": "Read access to core employee information including name, email, department, job title, hire date, and status."
  }, {
    "name": "employee.write",
    "description": "Create and update employee records including personal information and employment details.",
    "includes": ["employee"]
  }, {
    "name": "employee_directory",
    "description": "Read access to employee directory with basic employee information for organizational visibility."
  }, {
    "name": "employee:assets",
    "description": "Read access to employee assets including company equipment, laptops, phones, and other assigned resources.",
    "includes": ["employee"]
  }, {
    "name": "employee:assets.write",
    "description": "Create, update, and manage employee asset assignments and tracking.",
    "includes": ["employee:assets"]
  }, {
    "name": "employee:compensation",
    "description": "Read access to employee compensation data including salary, pay rate, pay type, and compensation history.",
    "includes": ["employee"]
  }, {
    "name": "employee:compensation.write",
    "description": "Create and update employee compensation information.",
    "includes": ["employee:compensation"]
  }, {
    "name": "employee:contact",
    "description": "Read access to employee contact information including home address, personal phone, and personal email.",
    "includes": ["employee"]
  }, {
    "name": "employee:contact.write",
    "description": "Update employee contact details.",
    "includes": ["employee:contact"]
  }, {
    "name": "employee:custom_fields",
    "description": "Read access to employee custom field values and custom data.",
    "includes": ["employee"]
  }, {
    "name": "employee:custom_fields.write",
    "description": "Update employee custom field values.",
    "includes": ["employee:custom_fields"]
  }, {
    "name": "employee:custom_fields_encrypted",
    "description": "Read access to encrypted employee custom fields containing sensitive data.",
    "includes": ["employee"]
  }, {
    "name": "employee:custom_fields_encrypted.write",
    "description": "Update encrypted employee custom field values.",
    "includes": ["employee:custom_fields_encrypted"]
  }, {
    "name": "employee:demographic",
    "description": "Read access to employee demographic information including gender, ethnicity, marital status, and veteran status.",
    "includes": ["employee"]
  }, {
    "name": "employee:demographic.write",
    "description": "Update employee demographic data.",
    "includes": ["employee:demographic"]
  }, {
    "name": "employee:dependent",
    "description": "Read access to employee dependent information including names, relationships, and dates of birth.",
    "includes": ["employee"]
  }, {
    "name": "employee:dependent.write",
    "description": "Add, update, and remove employee dependents.",
    "includes": ["employee:dependent"]
  }, {
    "name": "employee:dependent:ssn",
    "description": "Read access to employee dependent Social Security Numbers (highly sensitive data).",
    "includes": ["employee:dependent"]
  }, {
    "name": "employee:dependent:ssn.write",
    "description": "Update employee dependent Social Security Numbers.",
    "includes": ["employee:dependent:ssn"]
  }, {
    "name": "employee:education",
    "description": "Read access to employee education history including degrees, schools, and certifications.",
    "includes": ["employee"]
  }, {
    "name": "employee:education.write",
    "description": "Add, update, and manage employee education records.",
    "includes": ["employee:education"]
  }, {
    "name": "employee:emergency_contacts",
    "description": "Read access to employee emergency contact information.",
    "includes": ["employee"]
  }, {
    "name": "employee:emergency_contacts.write",
    "description": "Add, update, and remove employee emergency contacts.",
    "includes": ["employee:emergency_contacts"]
  }, {
    "name": "employee:file",
    "description": "Read access to employee files and documents stored in BambooHR.",
    "includes": ["employee"]
  }, {
    "name": "employee:file.write",
    "description": "Upload, update, and manage employee files and documents.",
    "includes": ["employee:file"]
  }, {
    "name": "employee:identification",
    "description": "Read access to employee identification documents including passport, driver license, and ID numbers.",
    "includes": ["employee"]
  }, {
    "name": "employee:identification.write",
    "description": "Add and update employee identification documents.",
    "includes": ["employee:identification"]
  }, {
    "name": "employee:job",
    "description": "Read access to employee job information including job title, department, division, location, and employment status.",
    "includes": ["employee"]
  }, {
    "name": "employee:job.write",
    "description": "Update employee job details and employment information.",
    "includes": ["employee:job"]
  }, {
    "name": "employee:management",
    "description": "Read access to employee management hierarchy including manager relationships and reporting structure.",
    "includes": ["employee"]
  }, {
    "name": "employee:management.write",
    "description": "Update employee management hierarchy and reporting relationships.",
    "includes": ["employee:management"]
  }, {
    "name": "employee:name",
    "description": "Read access to employee name information including legal name and preferred name.",
    "includes": ["employee"]
  }, {
    "name": "employee:name.write",
    "description": "Update employee name information.",
    "includes": ["employee:name"]
  }, {
    "name": "employee:payroll",
    "description": "Read access to employee payroll information including deductions, taxes, and direct deposit details.",
    "includes": ["employee"]
  }, {
    "name": "employee:payroll.write",
    "description": "Update employee payroll settings and configurations.",
    "includes": ["employee:payroll"]
  }, {
    "name": "employee:photo",
    "description": "Read access to employee photos and profile pictures.",
    "includes": ["employee"]
  }, {
    "name": "employee:photo.write",
    "description": "Upload and update employee photos.",
    "includes": ["employee:photo"]
  }, {
    "name": "employee:providers",
    "description": "Read access to employee provider information including insurance providers and benefit providers.",
    "includes": ["employee"]
  }, {
    "name": "employee:providers.write",
    "description": "Update employee provider information.",
    "includes": ["employee:providers"]
  }, {
    "name": "employee:providers:payroll",
    "description": "Read access to employee payroll provider information.",
    "includes": ["employee:providers"]
  }, {
    "name": "employee:providers:payroll.write",
    "description": "Update employee payroll provider settings.",
    "includes": ["employee:providers:payroll"]
  }, {
    "name": "employee:vaccination",
    "description": "Read access to employee vaccination records and status.",
    "includes": ["employee"]
  }, {
    "name": "employee:vaccination.write",
    "description": "Add and update employee vaccination records.",
    "includes": ["employee:vaccination"]
  }, {
    "name": "sensitive_employee:address",
    "description": "Read access to sensitive employee address information with enhanced privacy controls.",
    "includes": ["employee"]
  }, {
    "name": "sensitive_employee:address.write",
    "description": "Update sensitive employee address data.",
    "includes": ["sensitive_employee:address"]
  }, {
    "name": "sensitive_employee:creditcards",
    "description": "Read access to employee credit card information (highly restricted).",
    "includes": ["employee"]
  }, {
    "name": "sensitive_employee:creditcards.write",
    "description": "Update employee credit card information.",
    "includes": ["sensitive_employee:creditcards"]
  }, {
    "name": "sensitive_employee:protected_info",
    "description": "Read access to protected employee information subject to privacy regulations.",
    "includes": ["employee"]
  }, {
    "name": "sensitive_employee:protected_info.write",
    "description": "Update protected employee information.",
    "includes": ["sensitive_employee:protected_info"]
  }, {
    "name": "time_off",
    "description": "Read access to employee time-off requests, balances, policies, and time-off history."
  }, {
    "name": "time_off.write",
    "description": "Create, update, and manage time-off requests and approve/deny time-off.",
    "includes": ["time_off"]
  }, {
    "name": "time_tracking",
    "description": "Read access to employee time tracking entries, timesheets, and hours worked."
  }, {
    "name": "time_tracking.write",
    "description": "Create, update, and delete time tracking entries and timesheets.",
    "includes": ["time_tracking"]
  }, {
    "name": "time_tracking:breaks",
    "description": "Read access to employee break time entries.",
    "includes": ["time_tracking"]
  }, {
    "name": "time_tracking:breaks.write",
    "description": "Create, update, and delete break time entries.",
    "includes": ["time_tracking:breaks"]
  }, {
    "name": "scheduling:employee_schedule",
    "description": "Read access to individual employee schedules and shift assignments."
  }, {
    "name": "scheduling:schedules",
    "description": "Read access to all organizational schedules and shift planning."
  }, {
    "name": "scheduling:schedules.write",
    "description": "Create, update, and manage organizational schedules.",
    "includes": ["scheduling:schedules"]
  }, {
    "name": "scheduling:shifts",
    "description": "Read access to shift definitions and shift templates."
  }, {
    "name": "scheduling:shifts.write",
    "description": "Create, update, and delete shift definitions.",
    "includes": ["scheduling:shifts"]
  }, {
    "name": "goal",
    "description": "Read access to employee goals, objectives, and goal progress tracking."
  }, {
    "name": "goal.write",
    "description": "Create, update, and manage employee goals and performance objectives.",
    "includes": ["goal"]
  }, {
    "name": "training",
    "description": "Read access to employee training records, courses, and certifications."
  }, {
    "name": "training.write",
    "description": "Create, update, and manage employee training records and course assignments.",
    "includes": ["training"]
  }, {
    "name": "benefit",
    "description": "Read access to employee benefits enrollments, plans, and benefit configurations."
  }, {
    "name": "benefit.write",
    "description": "Manage employee benefits enrollments and benefit plan assignments.",
    "includes": ["benefit"]
  }, {
    "name": "company_file",
    "description": "Read access to company-wide files and shared documents."
  }, {
    "name": "company_file.write",
    "description": "Upload, update, and manage company files and documents.",
    "includes": ["company_file"]
  }, {
    "name": "company:info",
    "description": "Read access to company information including company name, address, and organizational settings."
  }, {
    "name": "company:administration",
    "description": "Read access to company administration settings and configurations.",
    "includes": ["company:info"]
  }, {
    "name": "company:administration.write",
    "description": "Update company administration settings and manage organizational configurations.",
    "includes": ["company:administration"]
  }, {
    "name": "user",
    "description": "Read access to user accounts and user information."
  }, {
    "name": "user:management",
    "description": "Manage user accounts including user roles and permissions.",
    "includes": ["user"]
  }, {
    "name": "user:management.write",
    "description": "Create, update, and delete user accounts and modify user access levels.",
    "includes": ["user:management"]
  }, {
    "name": "application",
    "description": "Read access to job applications, applicant data, and application status."
  }, {
    "name": "application.write",
    "description": "Create, update, and manage job applications and applicant information.",
    "includes": ["application"]
  }, {
    "name": "job_opening",
    "description": "Read access to job openings, job postings, and job requisitions."
  }, {
    "name": "job_opening.write",
    "description": "Create, update, and manage job openings and job postings.",
    "includes": ["job_opening"]
  }, {
    "name": "tasks",
    "description": "Read access to employee tasks, onboarding tasks, and task assignments."
  }, {
    "name": "tasks.write",
    "description": "Create, update, and manage employee tasks and task workflows.",
    "includes": ["tasks"]
  }, {
    "name": "webhooks",
    "description": "Read access to configured webhooks and webhook event logs."
  }, {
    "name": "webhooks.write",
    "description": "Create, update, and delete webhook configurations.",
    "includes": ["webhooks"]
  }, {
    "name": "report",
    "description": "Access to BambooHR reports including standard and custom reports with employee data."
  }, {
    "name": "payroll",
    "description": "Read access to payroll data, payroll runs, and payroll reports."
  }, {
    "name": "payroll.write",
    "description": "Process payroll, update payroll data, and manage payroll configurations.",
    "includes": ["payroll"]
  }, {
    "name": "payroll:legal_entities",
    "description": "Read access to payroll legal entities and corporate structures for payroll processing.",
    "includes": ["payroll"]
  }, {
    "name": "payroll:retirements",
    "description": "Read access to employee retirement plan information and retirement contributions.",
    "includes": ["payroll"]
  }, {
    "name": "field",
    "description": "Read access to custom field definitions and custom field values."
  }, {
    "name": "field.write",
    "description": "Create, update, and delete custom field definitions.",
    "includes": ["field"]
  }, {
    "name": "access_level",
    "description": "Read access to user access levels and permission settings."
  }, {
    "name": "benchmarking:compensation",
    "description": "Access to compensation benchmarking data and market salary comparisons."
  }, {
    "name": "data_cleaner",
    "description": "Access to data cleaning tools and data quality management features."
  }, {
    "name": "error_management",
    "description": "Access to error logs and error management for integrations and API operations."
  }, {
    "name": "gridlets",
    "description": "Access to gridlets feature for custom data tables and structured data management."
  }, {
    "name": "public.integration",
    "description": "Access for public integrations and third-party application connections."
  }, {
    "name": "public.user",
    "description": "Access to public user data for external integrations."
  }]
};

<ConnectorPage connector={connector} />
