外部連携API(GraphQL)設定ガイド

概要

DRIVE SFA は外部システム向けに GraphQL API を提供しています。取引先・取引先担当者・案件・営業活動のデータを外部プログラムから読み取り・書き込みすることができます。

NOTE

この機能は開発者向けです。利用にはサービスアカウントの発行が必要です。

項目内容
エンドポイントhttps://api.drivesfa.biz/graphql
プロトコルGraphQL over HTTP(POST)
認証方式PAT(Personal Access Token)
レート制限1,000リクエスト / 時間 / PAT

このAPIでできること

操作取引先取引先担当者案件営業活動
一覧取得・検索
詳細取得
新規作成
更新
削除(論理)

活用事例

📥 他システムからDRIVE SFAへデータを取り込む

  • 名刺管理サービス:名刺読み取り後に取引先・担当者を自動登録
  • MAツール連携:フォーム入力された見込み客を取引先担当者として登録し、案件を自動生成
  • CTIシステム連携:通話終了後に createActivity(type: CALL) で電話活動を自動記録

📤 DRIVE SFAのデータを外部システムへ連携する

  • 社内BI / レポートツール連携:案件・営業活動データを定期的に取得してダッシュボードに反映
  • 基幹システム同期:成約した案件(contractStatusId: 1)を取得して成約処理へ連携
  • SFAデータ一括エクスポート:updatedSince で差分取得してデータウェアハウスへ同期

🔄 双方向連携

  • CRM / ERPとの双方向同期:externalId(外部連携ID)フィールドを利用して各システム間でレコードを関連付け

サービスアカウントを作成する

APIを利用するには、まずサービスアカウント(外部システム用のアカウント)を作成します。

  1. 設定 → 「その他設定」 → 「サービスアカウント設定」
  2. 「+ 新規作成」
  3. 各項目を入力して 「保存」
設定項目必須説明
サービスアカウント名用途がわかる名前(例:「CRM連携用」)
説明用途・担当チームなどのメモ
権限セット必要最小限の権限を付与(「閲覧のみ」を推奨)
所属組織アクセスできるデータ範囲を組織スコープで制限

PAT(パーソナルアクセストークン)を発行する

  1. サービスアカウント詳細 → 「PAT管理」
  2. 「+ トークンを発行」
  3. トークンの説明・有効期限を設定して 「発行」

IMPORTANT

PATは発行直後にしか全文表示されません。必ず安全な場所にコピーして保管してください。一度閉じると再表示できません。


認証

発行したPATを Authorization ヘッダーに付与して POST リクエストを送信します。

curl -X POST https://api.drivesfa.biz/graphql \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ accounts(first: 10) { edges { node { id name } } } }"}'
項目内容
ヘッダー名Authorization
形式Bearer <token>
有効期限PAT発行時に設定(未設定の場合は無期限)

ページネーション

一覧取得クエリはすべてカーソルベースのページネーション(Relay Cursor Connections)を採用しています。

引数説明
firstInt先頭からn件取得(最大100、デフォルト10)
afterStringfirst と組み合わせる開始カーソル
lastInt末尾からn件取得(最大100、デフォルト10)
beforeStringlast と組み合わせる終了カーソル

NOTE

firstlast を同時に指定することはできません。


Query(データ取得)

accounts — 取引先一覧を取得

絞り込み引数

引数説明
nameString取引先名(部分一致)
externalIdString外部連携ID(完全一致)
updatedSinceString指定日時以降に更新されたもの(ISO8601形式)
first / after / last / beforeページネーション引数

レスポンスフィールド

フィールド説明
id取引先ID
name / nameKana会社名 / フリガナ
tel / email / webSite電話番号 / メール / Webサイト
zipCode / prefectureKindId / city / address住所情報
representativeContact代表担当者名
externalId外部連携ID
createdAt / updatedAt / lastActionDate日時情報
propertiesカスタム項目(name / value
contacts / deals / activities関連データ(ページネーション対応)
{
  accounts(name: "株式会社", updatedSince: "2026-01-01T00:00:00", first: 20) {
    edges {
      cursor
      node {
        id
        name
        externalId
        updatedAt
        contacts(first: 5) { edges { node { id name } } }
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}

account — 取引先の詳細を取得

引数必須説明
idString取引先ID
{ account(id: "123") { id name tel email webSite properties { name value } } }

contacts — 取引先担当者の一覧を取得

絞り込み引数

引数説明
accountIdString取引先IDで絞り込み
emailStringメールアドレス(部分一致)
externalIdString外部連携ID(完全一致)
first / after / last / beforeページネーション引数

レスポンスフィールド

フィールド説明
id担当者ID
accountId所属する取引先ID
name / nameKana氏名 / フリガナ
department / position部署 / 役職
phoneNumber / email電話番号 / メール
isKeyPersonキーパーソンフラグ
externalId外部連携ID
propertiesカスタム項目
{
  contacts(accountId: "123", first: 10) {
    edges { node { id name email department position externalId } }
    pageInfo { hasNextPage endCursor }
  }
}

contact — 取引先担当者の詳細を取得

引数必須説明
idString担当者ID
{ contact(id: "456") { id name email department position isKeyPerson } }

deals — 案件の一覧を取得

絞り込み引数

引数説明
accountIdString取引先IDで絞り込み
stageLong契約ステータスID(1: 成約 / 2: 失注 / 3: 進行中)
ownerUserIdLong担当ユーザーIDで絞り込み
updatedSinceString指定日時以降に更新されたもの(ISO8601形式)
externalIdString外部連携ID(完全一致)
first / after / last / beforeページネーション引数

レスポンスフィールド

フィールド説明
id案件ID
accountId取引先ID
name案件名
estimatedAmount売上見込金額
startDate / scheduledDate開始日 / 案件完了予定日
contractStatusKey契約ステータスキー(進行中 / 成約 / 失注)
contractSignedDate成約日
projectFlowName / projectStepName案件フロー名 / ステップ名
externalId外部連携ID
propertiesカスタム項目
activities関連する営業活動(ページネーション対応)
{
  deals(stage: 1, updatedSince: "2026-01-01T00:00:00", first: 50) {
    edges {
      node {
        id name accountId estimatedAmount contractStatusKey scheduledDate externalId
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}

deal — 案件の詳細を取得

引数必須説明
idString案件ID
{ deal(id: "789") { id name estimatedAmount contractStatusKey scheduledDate } }

activities — 営業活動の一覧を取得

絞り込み引数

引数説明
accountIdString取引先IDで絞り込み
dealIdString案件IDで絞り込み
typeActivityType活動タイプで絞り込み(下記参照)
sinceString指定日時以降の活動(ISO8601形式)
first / after / last / beforeページネーション引数

レスポンスフィールド

フィールド説明
id活動ID
type活動タイプ(ActivityType)
accountId / dealId / contactId関連先ID
occurredAt活動発生日時
summary / detail概要 / 詳細
propertiesカスタム項目

ActivityType の値

説明
MEETING会議
NEGOTIATION商談
CALL電話
EMAILメール
OTHERその他(タスク等)
{
  activities(accountId: "123", type: CALL, since: "2026-01-01T00:00:00", first: 20) {
    edges { node { id type occurredAt summary dealId } }
    pageInfo { hasNextPage endCursor }
  }
}

Mutation(データ書き込み)

createAccount — 取引先を作成

フィールド必須説明
nameString会社名
nameKanaStringフリガナ
telString電話番号
emailStringメールアドレス
representativeContactString代表担当者名
webSiteStringWebサイトURL
zipCodeString郵便番号
prefectureKindIdLong都道府県ID
city / addressString市区町村 / 番地
properties[PropertyInput]カスタム項目
mutation {
  createAccount(input: {
    name: "株式会社サンプル"
    tel: "03-0000-0000"
    webSite: "https://example.com"
    externalId: "crm-account-001"
  }) {
    id name createdAt
  }
}

updateAccount — 取引先を更新

フィールド必須説明
idString更新する取引先ID
その他フィールド未指定の場合は既存値を維持
mutation {
  updateAccount(input: { id: "123", tel: "03-1111-1111" }) { id name tel }
}

deleteAccount — 取引先を削除(論理削除)

引数必須説明
idString削除する取引先ID

IMPORTANT

取引先を削除すると、紐づく全案件も自動的に論理削除されます。実行前に必ず確認してください。

mutation { deleteAccount(id: "123") }  # 削除された取引先IDが返される

createContact — 取引先担当者を作成

フィールド必須説明
accountIdString所属させる取引先ID
nameString氏名
nameKanaStringフリガナ
department / positionString部署 / 役職
phoneNumber / emailString電話番号 / メール
dateOfBirthString生年月日(ISO8601形式)
isKeyPersonBooleanキーパーソンフラグ
noteString備考
properties[PropertyInput]カスタム項目
mutation {
  createContact(input: {
    accountId: "123"
    name: "田中 太郎"
    email: "tanaka@example.com"
    position: "部長"
  }) {
    id name email
  }
}

updateContact — 取引先担当者を更新

フィールド必須説明
idString更新する担当者ID
その他フィールド未指定の場合は既存値を維持
mutation {
  updateContact(input: { id: "456", position: "本部長" }) { id name position }
}

deleteContact — 取引先担当者を削除(論理削除)

mutation { deleteContact(id: "456") }

createDeal — 案件を作成

フィールド必須説明
accountIdString取引先ID
nameString案件名
projectFlowNameString案件フロー名
projectStepNameString案件ステップ名
contractStatusKeyString契約ステータスキー(成約 / 失注 / 進行中
estimatedAmountLong売上見込金額
startDate / scheduledDateString開始日 / 案件完了予定日(ISO8601形式)
noteString備考
userIds[Long]担当ユーザーIDリスト
contactIds[Long]関連担当者IDリスト
productIds[Long]商品IDリスト
properties[PropertyInput]カスタム項目
mutation {
  createDeal(input: {
    accountId: "123"
    name: "DRIVE SFA 導入提案"
    projectFlowName: "標準フロー"
    projectStepName: "提案"
    contractStatusKey: "進行中"
    estimatedAmount: 500000
    scheduledDate: "2026-06-30"
  }) {
    id name contractStatusKey
  }
}

updateDeal — 案件を更新

フィールド必須説明
idString更新する案件ID
その他フィールド未指定の場合は既存値を維持
mutation {
  updateDeal(input: { id: "789", contractStatusKey: "成約", contractSignedDate: "2026-03-11" }) {
    id name contractStatusKey
  }
}

deleteDeal — 案件を削除(論理削除)

mutation { deleteDeal(id: "789") }

createActivity — 営業活動を作成

フィールド必須説明
accountIdString取引先ID
typeActivityType活動タイプ(MEETING / NEGOTIATION / CALL / EMAIL / OTHER)
occurredAtString活動発生日時(ISO8601形式)
idempotencyKeyString重複登録防止キー(同一キーで再送した場合は既存を返す)
dealIdString案件ID
contactIdString担当者ID
summaryString概要
detailString詳細
properties[PropertyInput]カスタム項目

NOTE

更新・削除はGraphQL APIでは未提供です。

mutation {
  createActivity(input: {
    accountId: "123"
    type: CALL
    occurredAt: "2026-03-11T10:00:00"
    idempotencyKey: "cti-call-20260311-001"
    dealId: "789"
    summary: "初回ヒアリング電話"
  }) {
    id type occurredAt summary
  }
}

カスタム項目(PropertyInput)

各 Mutation の properties 引数でカスタム項目の値を設定・更新できます。

フィールド必須説明
nameStringカスタム項目の物理名
valueString設定する値

物理名の確認方法:設定 → カスタム項目設定 → 対象の項目の「物理名」列を参照してください。

NOTE

properties を省略した場合、既存のカスタム項目値は変更されません。

mutation {
  updateAccount(input: {
    id: "123"
    properties: [
      { name: "industry", value: "製造業" },
      { name: "annual_revenue", value: "1000000000" }
    ]
  }) { id }
}

レート制限

PATごとに 1,000リクエスト / 時間 の上限が設定されています。各レスポンスのヘッダーで現在の残数を確認できます。

ヘッダー内容
X-RateLimit-Limit上限リクエスト数(1000)
X-RateLimit-Remaining残りリクエスト数
X-RateLimit-Reset制限リセット時刻(UNIXタイムスタンプ)
Retry-After次にリクエスト可能になるまでの秒数(超過時のみ)

NOTE

制限を超過してもHTTPステータスは 200 で返ります。エラー内容はレスポンスボディの errors フィールドで確認してください。


関連記事

この記事は役に立ちましたか?

解決しない場合はサポートへお問い合わせください