Admin API позволяет программно получать данные твоей команды, включая информацию об участниках, метрики использования и детали расходов. Собирай кастомные дашборды, инструменты мониторинга или интегрируйся с текущими процессами.
Это первый релиз API. Мы расширяем возможности на основе фидбэка — напиши, какие эндпоинты тебе нужны!

Аутентификация

Все запросы к API требуют аутентификации с использованием API-ключа. Создавать и управлять API-ключами могут только администраторы команды. API-ключи привязаны к организации, видны всем администраторам и не зависят от статуса учетной записи первоначального создателя.

Создание API-ключа

  1. Перейди в cursor.com/dashboard → вкладка SettingsCursor Admin API Keys
  2. Нажми Create New API Key
  3. Дай ключу понятное имя (например, «Usage Dashboard Integration»)
  4. Сразу скопируй сгенерированный ключ — потом ты его не увидишь
Формат: key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Использование твоего API-ключа

Используй свой API-ключ как имя пользователя в базовой аутентификации: Использование curl с базовой аутентификацией:
curl https://api.cursor.com/{route} -u API_KEY:
Или укажи заголовок Authorization напрямую:
Authorization: Basic {base64_encode('API_KEY:')}

Базовый URL

Все эндпоинты API используют:
https://api.cursor.com

Эндпоинты

Получить участников команды

Получить всех участников команды и их данные.
GET /teams/members

Ответ

Возвращает массив объектов участников команды:
{
  teamMembers: {
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
  }[];
}

Пример ответа

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner"
    }
  ]
}

Пример запроса

curl -X GET https://api.cursor.com/teams/members \
  -u YOUR_API_KEY:

Получить данные о ежедневном использовании

Получить подробные метрики ежедневного использования для твоей команды за указанный диапазон дат. Даст инсайты по правкам кода, использованию AI-помощи и коэффициентам принятия.
POST /teams/daily-usage-data

Тело запроса

ПараметрТипОбязательноОписание
startDatenumberДаДата начала в миллисекундах эпохи
endDatenumberДаДата окончания в миллисекундах эпохи
Диапазон дат не может превышать 90 дней. Для более длительных периодов сделай несколько запросов.

Ответ

{
  data: {
    date: number;
    isActive: boolean;
    totalLinesAdded: number;
    totalLinesDeleted: number;
    acceptedLinesAdded: number;
    acceptedLinesDeleted: number;
    totalApplies: number;
    totalAccepts: number;
    totalRejects: number;
    totalTabsShown: number;
    totalTabsAccepted: number;
    composerRequests: number;
    chatRequests: number;
    agentRequests: number;
    cmdkUsages: number;
    subscriptionIncludedReqs: number;
    apiKeyReqs: number;
    usageBasedReqs: number;
    bugbotUsages: number;
    mostUsedModel: string;
    applyMostUsedExtension?: string;
    tabMostUsedExtension?: string;
    clientVersion?: string;
    email?: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

Поля ответа

ПолеОписание
dateДата в миллисекундах эпохи
isActiveПользователь активен в этот день
totalLinesAddedДобавленные строки кода
totalLinesDeletedУдалённые строки кода
acceptedLinesAddedСтроки, добавленные из принятых AI-подсказок
acceptedLinesDeletedСтроки, удалённые из принятых AI-подсказок
totalAppliesОперации применения
totalAcceptsПринятые подсказки
totalRejectsОтклонённые подсказки
totalTabsShownПоказанные автодополнения (tab)
totalTabsAcceptedПринятые автодополнения (tab)
composerRequestsЗапросы Composer
chatRequestsЗапросы чата
agentRequestsЗапросы агента
cmdkUsagesИспользования палитры команд (Cmd+K)
subscriptionIncludedReqsЗапросы, включённые в подписку
apiKeyReqsЗапросы по API-ключу
usageBasedReqsЗапросы с оплатой по факту использования
bugbotUsagesИспользования детектора багов
mostUsedModelСамая часто используемая AI‑модель
applyMostUsedExtensionСамое частое расширение файлов для applies
tabMostUsedExtensionСамое частое расширение файлов для tabs
clientVersionВерсия Cursor
emailE‑mail пользователя

Пример ответа

{
  "data": [
    {
      "date": 1710720000000,
      "isActive": true,
      "totalLinesAdded": 1543,
      "totalLinesDeleted": 892,
      "acceptedLinesAdded": 1102,
      "acceptedLinesDeleted": 645,
      "totalApplies": 87,
      "totalAccepts": 73,
      "totalRejects": 14,
      "totalTabsShown": 342,
      "totalTabsAccepted": 289,
      "composerRequests": 45,
      "chatRequests": 128,
      "agentRequests": 12,
      "cmdkUsages": 67,
      "subscriptionIncludedReqs": 180,
      "apiKeyReqs": 0,
      "usageBasedReqs": 5,
      "bugbotUsages": 3,
      "mostUsedModel": "gpt-4",
      "applyMostUsedExtension": ".tsx",
      "tabMostUsedExtension": ".ts",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    },
    {
      "date": 1710806400000,
      "isActive": true,
      "totalLinesAdded": 2104,
      "totalLinesDeleted": 1203,
      "acceptedLinesAdded": 1876,
      "acceptedLinesDeleted": 987,
      "totalApplies": 102,
      "totalAccepts": 91,
      "totalRejects": 11,
      "totalTabsShown": 456,
      "totalTabsAccepted": 398,
      "composerRequests": 67,
      "chatRequests": 156,
      "agentRequests": 23,
      "cmdkUsages": 89,
      "subscriptionIncludedReqs": 320,
      "apiKeyReqs": 15,
      "usageBasedReqs": 0,
      "bugbotUsages": 5,
      "mostUsedModel": "claude-3-opus",
      "applyMostUsedExtension": ".py",
      "tabMostUsedExtension": ".py",
      "clientVersion": "0.25.1",
      "email": "developer@company.com"
    }
  ],
  "period": {
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }
}

Пример запроса

curl -X POST https://api.cursor.com/teams/daily-usage-data \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1710720000000,
    "endDate": 1710892800000
  }'

Получить данные о расходах

Получить информацию о расходах за текущий календарный месяц с поиском, сортировкой и пагинацией.
POST /teams/spend

Тело запроса

ПараметрТипОбязательныйОписание
searchTermstringНетПоиск по именам пользователей и e-mail
sortBystringНетСортировать по: amount, date, user. По умолчанию — date
sortDirectionstringНетНаправление сортировки: asc, desc. По умолчанию — desc
pagenumberНетНомер страницы (с 1). По умолчанию — 1
pageSizenumberНетКоличество результатов на странице

Ответ

{
  teamMemberSpend: {
    spendCents: number;
    fastPremiumRequests: number;
    name: string;
    email: string;
    role: 'owner' | 'member' | 'free-owner';
    hardLimitOverrideDollars: number;
  }[];
  subscriptionCycleStart: number;
  totalMembers: number;
  totalPages: number;
}

Поля ответа

ПолеОписание
spendCentsОбщая сумма расходов в центах
fastPremiumRequestsЗапросы к быстрому премиум‑моделю
nameИмя участника
emailE-mail участника
roleРоль в команде
hardLimitOverrideDollarsПереопределение пользовательского лимита расходов
subscriptionCycleStartНачало биллингового цикла (миллисекунды epoch)
totalMembersОбщее число участников команды
totalPagesОбщее число страниц

Пример ответа

{
  "teamMemberSpend": [
    {
      "spendCents": 2450,
      "fastPremiumRequests": 1250,
      "name": "Alex",
      "email": "developer@company.com",
      "role": "member",
      "hardLimitOverrideDollars": 100
    },
    {
      "spendCents": 1875,
      "fastPremiumRequests": 980,
      "name": "Sam",
      "email": "admin@company.com",
      "role": "owner",
      "hardLimitOverrideDollars": 0
    },
  ],
  "subscriptionCycleStart": 1708992000000,
  "totalMembers": 15,
  "totalPages": 1
}

Примеры запросов

Базовые данные по расходам:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Поиск конкретного пользователя с пагинацией:
curl -X POST https://api.cursor.com/teams/spend \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerm": "alex@company.com",
    "page": 2,
    "pageSize": 25
  }'

Получить данные о событиях использования

Получай детализированные события использования для своей команды с гибкой фильтрацией, поиском и параметрами пагинации. Этот эндпойнт даёт точные данные по отдельным вызовам API, использованию моделей, потреблению токенов и стоимости.
POST /teams/filtered-usage-events

Тело запроса

ПараметрТипОбязательныйОписание
startDatenumberНетДата начала в миллисекундах Unix-эпохи
endDatenumberНетДата окончания в миллисекундах Unix-эпохи
userIdnumberНетФильтр по конкретному ID пользователя
pagenumberНетНомер страницы (с 1). По умолчанию: 1
pageSizenumberНетКоличество результатов на странице. По умолчанию: 10
emailstringНетФильтр по адресу электронной почты пользователя

Ответ

{
  totalUsageEventsCount: number;
  pagination: {
    numPages: number;
    currentPage: number;
    pageSize: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
  };
  usageEvents: {
    timestamp: string;
    model: string;
    kind: string;
    maxMode: boolean;
    requestsCosts: number;
    isTokenBasedCall: boolean;
    tokenUsage?: {
      inputTokens: number;
      outputTokens: number;
      cacheWriteTokens: number;
      cacheReadTokens: number;
      totalCents: number;
    };
    isFreeBugbot: boolean;
    userEmail: string;
  }[];
  period: {
    startDate: number;
    endDate: number;
  };
}

Пояснение полей ответа

ПолеОписание
totalUsageEventsCountОбщее количество событий использования, соответствующих запросу
paginationМетаданные пагинации для навигации по результатам
timestampВременная метка события в миллисекундах Unix-эпохи
modelМодель ИИ, использованная для запроса
kindКатегория использования (например, «Usage-based», «Included in Business»)
maxModeВключён ли max mode
requestsCostsСтоимость в единицах запросов
isTokenBasedCallИстина, если событие тарифицируется по модели usage-based
tokenUsageДетальное потребление токенов (доступно, если isTokenBasedCall равно true)
isFreeBugbotБыло ли это бесплатное использование Bugbot
userEmailАдрес электронной почты пользователя, который сделал запрос
periodДиапазон дат запрошенных данных

Пример ответа

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kind": "Usage-based",
      "maxMode": true,
      "requestsCosts": 5,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 126,
        "outputTokens": 450,
        "cacheWriteTokens": 6112,
        "cacheReadTokens": 11964,
        "totalCents": 20.18232
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750979173824",
      "model": "claude-4-opus",
      "kind": "Usage-based",
      "maxMode": true,
      "requestsCosts": 10,
      "isTokenBasedCall": true,
      "tokenUsage": {
        "inputTokens": 5805,
        "outputTokens": 311,
        "cacheWriteTokens": 11964,
        "cacheReadTokens": 0,
        "totalCents": 40.16699999999999
      },
      "isFreeBugbot": false,
      "userEmail": "developer@company.com"
    },
    {
      "timestamp": "1750978339901",
      "model": "claude-4-sonnet-thinking",
      "kind": "Included in Business",
      "maxMode": true,
      "requestsCosts": 1.4,
      "isTokenBasedCall": false,
      "isFreeBugbot": false,
      "userEmail": "admin@company.com"
    }
  ],
  "period": {
    "startDate": 1748411762359,
    "endDate": 1751003762359
  }
}

Примеры запросов

Получить все события использования с пагинацией по умолчанию:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{}'
Фильтр по диапазону дат и конкретному пользователю:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": 1748411762359,
    "endDate": 1751003762359,
    "email": "developer@company.com",
    "page": 1,
    "pageSize": 25
  }'
Получить события использования для конкретного пользователя с настраиваемой пагинацией:
curl -X POST https://api.cursor.com/teams/filtered-usage-events \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 12345,
    "page": 2,
    "pageSize": 50
  }'

Repo Blocklists API

Добавь репозитории и шаблоны, чтобы не индексировать отдельные файлы или директории и не использовать их как контекст для твоей команды.

Получить блоклисты репозиториев команды

Вернуть все блоклисты репозиториев, настроенные для твоей команды.
GET /settings/repo-blocklists/repos
Ответ
Возвращает массив объектов блоклистов репозиториев:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Пример ответа
{
  "repos": [
    {
      "id": "repo_123",
      "url": "https://github.com/company/sensitive-repo",
      "patterns": ["*.env", "config/*", "secrets/**"]
    },
    {
      "id": "repo_456",
      "url": "https://github.com/company/internal-tools",
      "patterns": ["*"]
    }
  ]
}
Пример запроса
curl -X GET https://api.cursor.com/settings/repo-blocklists/repos \
  -u YOUR_API_KEY:

Upsert Repo Blocklists

Заменить существующие блоклисты репозиториев для переданных репозиториев. Примечание: этот эндпоинт перезапишет только шаблоны для указанных репозиториев. Все остальные репозитории не изменятся.
POST /settings/repo-blocklists/repos/upsert
Тело запроса
ПараметрТипОбязательныйОписание
reposarrayДаМассив объектов блок-листа репозиториев
Каждый объект репозитория должен содержать:
ПолеТипОбязательныйОписание
urlstringДаURL репозитория для добавления в блок-лист
patternsstring[]ДаМассив шаблонов файлов для блокировки (поддерживаются glob-шаблоны)
Ответ
Возвращает обновленный список блок-листов репозиториев:
{
  repos: {
    id: string;
    url: string;
    patterns: string[];
  }[];
}
Пример запроса
curl -X POST https://api.cursor.com/settings/repo-blocklists/repos/upsert \
  -u YOUR_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "repos": [
      {
        "url": "https://github.com/company/sensitive-repo",
        "patterns": ["*.env", "config/*", "secrets/**"]
      },
      {
        "url": "https://github.com/company/internal-tools", 
        "patterns": ["*"]
      }
    ]
  }'

Удалить блок-лист репозитория

Удалить конкретный репозиторий из блок-листа.
DELETE /settings/repo-blocklists/repos/:repoId
Параметры
ПараметрТипОбязательныйОписание
repoIdstringДаID блок-листа репозитория для удаления
Ответ
Возвращает 204 No Content при успешном удалении.
Пример запроса
curl -X DELETE https://api.cursor.com/settings/repo-blocklists/repos/repo_123 \
  -u YOUR_API_KEY:

Примеры шаблонов

Распространенные шаблоны блок-листа:
  • * — Заблокировать весь репозиторий
  • *.env — Заблокировать все файлы .env
  • config/* — Заблокировать все файлы в директории config
  • **/*.secret — Заблокировать все файлы .secret в любых поддиректориях
  • src/api/keys.ts — Заблокировать конкретный файл