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

# Outline

> How to integrate Outline with Admina using an API key. Admina retrieves data such as user names, email addresses, and roles and supports account creation, deactivation, and deletion.

export const IntegrationCapabilities = ({lang = "ja", modes = "", plan = "", lifecycle = "", automation = "", fetch = "", capabilities = "", memo = ""}) => {
  const TEXT = ({
    ja: {
      rows: {
        mode: "連携モード",
        plan: "連携確認プラン",
        lifecycle: "アカウントライフサイクル",
        automation: "自動化",
        fetch: "取得データ",
        capabilities: "対応機能",
        memo: "備考"
      },
      empty: "-",
      more: "各項目の意味は[連携可能SaaS・機能対応一覧](/integrations/supported-saas)をご覧ください。",
      mode: {
        "API Key": "APIキー"
      },
      lifecycle: {
        provisioning: "アカウント作成",
        deactivate: "アカウント無効化",
        delete: "アカウント削除"
      },
      automation: {
        provisioning: "アカウント作成",
        deactivate: "アカウント無効化",
        delete: "アカウント削除"
      },
      fetch: {
        User: "ユーザー名",
        Mail: "メールアドレス",
        Role: "ロール",
        Status: "ステータス",
        "2FA": "二要素認証",
        LastActivity: "最終利用日",
        Licenses: "ライセンス"
      },
      capabilities: {
        "employee-master": "従業員マスター連携",
        "identity-provider": "IDプロバイダー連携",
        "cost-aggregation": "コスト管理",
        "file-aggregation": "ファイル管理",
        "file-permissions": "ファイル権限管理",
        "device-aggregation": "MDM連携"
      }
    },
    en: {
      rows: {
        mode: "Integration mode",
        plan: "Verified plan",
        lifecycle: "Account lifecycle",
        automation: "Automation",
        fetch: "Fetched data",
        capabilities: "Capabilities",
        memo: "Notes"
      },
      empty: "-",
      more: "See [Supported SaaS and Capabilities](/en/integrations/supported-saas) for what each item means.",
      mode: {},
      lifecycle: {
        provisioning: "Account creation",
        deactivate: "Account deactivation",
        delete: "Account deletion"
      },
      automation: {
        provisioning: "Account creation",
        deactivate: "Account deactivation",
        delete: "Account deletion"
      },
      fetch: {
        LastActivity: "Last Activity"
      },
      capabilities: {
        "employee-master": "HR master",
        "identity-provider": "Identity provider",
        "cost-aggregation": "Cost management",
        "file-aggregation": "File management",
        "file-permissions": "File permissions",
        "device-aggregation": "MDM integration"
      }
    }
  })[lang === "en" ? "en" : "ja"];
  const BADGE_COLORS = {
    "ID/Password": "yellow",
    "API Key": "cyan",
    OAuth: "red",
    App: "purple",
    User: "blue",
    Mail: "cyan",
    Role: "orange",
    Status: "teal",
    "2FA": "pink",
    LastActivity: "green",
    Licenses: "purple",
    provisioning: "green",
    delete: "red",
    deactivate: "yellow",
    "employee-master": "blue",
    "identity-provider": "teal",
    "cost-aggregation": "yellow",
    "file-aggregation": "cyan",
    "file-permissions": "orange",
    "device-aggregation": "purple"
  };
  const list = value => String(value || "").split(",").map(item => item.trim()).filter(Boolean);
  const badges = (source, labels) => {
    const values = list(source);
    if (values.length === 0) {
      return <span className="integration-capabilities-empty">{TEXT.empty}</span>;
    }
    return values.map(value => <span key={value} className={"integration-catalog-badge integration-catalog-badge--" + (BADGE_COLORS[value] || "gray")}>
        {labels?.[value] ?? value}
      </span>);
  };
  const text = value => value || <span className="integration-capabilities-empty">{TEXT.empty}</span>;
  const linkify = value => {
    if (!value) return null;
    const parts = [];
    let rest = String(value);
    let key = 0;
    for (; ; ) {
      const mid = rest.indexOf("](");
      if (mid < 0) break;
      const open = rest.lastIndexOf("[", mid);
      const close = rest.indexOf(")", mid);
      if (close < 0) break;
      if (open < 0) {
        parts.push(rest.slice(0, mid + 2));
        rest = rest.slice(mid + 2);
        continue;
      }
      if (open > 0) parts.push(rest.slice(0, open));
      parts.push(<a key={key++} href={rest.slice(mid + 2, close)} target="_blank" rel="noopener noreferrer">
          {rest.slice(open + 1, mid)}
        </a>);
      rest = rest.slice(close + 1);
    }
    if (rest) parts.push(rest);
    return parts;
  };
  const ROWS = [["mode", badges(modes, TEXT.mode)], ["plan", text(plan)], ["lifecycle", badges(lifecycle, TEXT.lifecycle)], ["automation", badges(automation, TEXT.automation)], ["fetch", badges(fetch, TEXT.fetch)], ["capabilities", badges(capabilities, TEXT.capabilities)], ["memo", text(linkify(memo))]];
  return <div className="integration-capabilities">
      <dl className="integration-capabilities-list">
        {ROWS.map(([key, value]) => <div className="integration-capabilities-row" key={key}>
            <dt>{TEXT.rows[key]}</dt>
            <dd>{value}</dd>
          </div>)}
      </dl>
    </div>;
};

## Integration Specifications

<IntegrationCapabilities lang="en" modes="API Key" lifecycle="provisioning, deactivate, delete" fetch="User, Mail, Role, Status, LastActivity" />

## Prerequisites

### Getting an API key

1. Log in to your Outline workspace, click your profile in the bottom-left corner, and select **Preferences**.

   <img src="https://mintcdn.com/moneyforwardi/sQZT8mFyuKrrQ9Km/images/integrations/outline/outline-preferences-menu.png?fit=max&auto=format&n=sQZT8mFyuKrrQ9Km&q=85&s=a65b07c00e0da902db8bbd655da4b08a" alt="The profile menu in Outline with Preferences selected" width="1920" height="915" data-path="images/integrations/outline/outline-preferences-menu.png" />

2. Under **Account**, select **API & Access**, then click **New API key...** in the top-right corner.

   <img src="https://mintcdn.com/moneyforwardi/sQZT8mFyuKrrQ9Km/images/integrations/outline/outline-api-and-access.png?fit=max&auto=format&n=sQZT8mFyuKrrQ9Km&q=85&s=7c08515aa1eea4e899914b4cdcde25ff" alt="The API & Access page in Outline with the New API key... button shown" width="1920" height="907" data-path="images/integrations/outline/outline-api-and-access.png" />

3. Enter a **Name**, select an **Expiration**, then click **Create**.

   <img src="https://mintcdn.com/moneyforwardi/sQZT8mFyuKrrQ9Km/images/integrations/outline/outline-new-api-key-modal.png?fit=max&auto=format&n=sQZT8mFyuKrrQ9Km&q=85&s=968d5e9f90c744b755fb708157aa1a73" alt="The New API key modal in Outline for setting the key name and expiration" width="1920" height="908" data-path="images/integrations/outline/outline-new-api-key-modal.png" />

4. Copy the created API key and save it.

## Setting up the integration

1. Search for **Outline** on the integrations screen.

2. Enter the **API key** you obtained in the previous step, then click **Integrate**.

   <img src="https://mintcdn.com/moneyforwardi/sQZT8mFyuKrrQ9Km/images/integrations/outline/admina-outline-setup.png?fit=max&auto=format&n=sQZT8mFyuKrrQ9Km&q=85&s=9a01dc693feea6d45b2b0b918a558b17" alt="The Outline integration screen with the API key field" width="792" height="770" data-path="images/integrations/outline/admina-outline-setup.png" />

3. Once the integration with Outline succeeds, registered user information appears in the account list. If it doesn't complete successfully, first try the steps in [Troubleshooting failed SaaS integrations](/en/it-management/saas-management/93nahw45is-trouble). If that doesn't resolve it, check [Information to provide](/en/it-management/saas-management/93nahw45is-trouble#info-to-provide) and contact [support](/en/contact-support).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.