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: 'владелец' | 'участник' | 'владелец бесплатного тарифа';
  }[];
}

Пример отклика

{
  "teamMembers": [
    {
      "name": "Alex",
      "email": "developer@company.com",
      "role": "участник"
    },
    {
      "name": "Sam",
      "email": "admin@company.com",
      "role": "владелец"
    }
  ]
}

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

curl -X GET https://api.cursor.com/teams/members \
  -u ТВОЙ_API_KEY:

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

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

Тело запроса

ПараметрТипОбязательныйОписание
startDatenumberДаДата начала в миллисекундах эпохи Unix
endDatenumberДаДата окончания в миллисекундах эпохи Unix
Диапазон дат не может превышать 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;
  };
}

Поля ответа

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

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

{
  "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НетПоиск по именам пользователей и адресам email
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Имя участника
emailEmail участника
roleРоль в команде
hardLimitOverrideDollarsПользовательское переопределение лимита трат
subscriptionCycleStartНачало расчетного периода подписки (миллисекунды Unix Epoch)
totalMembersОбщее число участников команды
totalPagesОбщее число страниц

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

{
  "teamMemberSpend": [
    {
      "spendCents": 2450,
      "fastPremiumRequests": 1250,
      "name": "Alex",
      "email": "developer@company.com",
      "role": "участник",
      "hardLimitOverrideDollars": 100
    },
    {
      "spendCents": 1875,
      "fastPremiumRequests": 980,
      "name": "Sam",
      "email": "admin@company.com",
      "role": "владелец"
      "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;
  };
}

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

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

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

{
  "totalUsageEventsCount": 113,
  "pagination": {
    "numPages": 12,
    "currentPage": 1,
    "pageSize": 10,
    "hasNextPage": true,
    "hasPreviousPage": false
  },
  "usageEvents": [
    {
      "timestamp": "1750979225854",
      "model": "claude-4-opus",
      "kind": "Оплата по использованию",
      "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": "Оплата по использованию",
      "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": "Включено в 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 ТВОЙ_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userId": 12345,
    "page": 2,
    "pageSize": 50
  }'

Установить лимит расходов пользователя

Настрой лимиты расходов для отдельных участников команды. Это позволит контролировать, сколько каждый пользователь может тратить на использование ИИ в твоей команде.
POST /teams/user-spend-limit
Лимит запросов: 60 запросов в минуту на команду

Тело запроса

ПараметрТипОбязательныйОписание
userEmailstringДаEmail участника команды
spendLimitDollarsnumberДаЛимит расходов в долларах (только целое число, без дробных значений).
  • Пользователь уже должен быть участником твоей команды
  • Принимаются только целые числа (без дробных сумм)
  • Если установить spendLimitDollars в 0, лимит будет $0

Ответ

Возвращает унифицированный ответ об успехе или неудаче:
{
  outcome: 'success' | 'error';
  message: string;
}

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

Лимит успешно задан:
{
  "outcome": "success",
  "message": "Лимит расходов установлен в $100 для пользователя developer@company.com"
}
Сообщение об ошибке:
{
  "outcome": "error",
  "message": "Недопустимый формат e-mail"
}

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

Задать лимит расходов:
curl -X POST https://api.cursor.com/teams/user-spend-limit \
  -u ТВОЙ_API_KEY: \
  -H "Content-Type: application/json" \
  -d '{
    "userEmail": "developer@company.com",
    "spendLimitDollars": 100
  }'

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 ТВОЙ_API_KEY:

Обновить/создать блок-листы репозиториев

Заменяет существующие блок-листы для указанных репозиториев. Примечание: этот эндпоинт перезапишет шаблоны только для указанных репозиториев. Все остальные репозитории останутся без изменений.
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 ТВОЙ_API_КЛЮЧ:

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

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