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:

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

Получить подробные метрики ежедневного использования для вашей команды в пределах диапазона дат. Предоставляет информацию о редактировании кода, использовании ИИ-помощи и коэффициентах принятия.
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Строки, добавленные из принятых предложений ИИ
acceptedLinesDeletedСтроки, удаленные из принятых предложений ИИ
totalAppliesОперации применения
totalAcceptsПринятые предложения
totalRejectsОтклоненные предложения
totalTabsShownПоказанные автодополнения по Tab
totalTabsAcceptedПринятые автодополнения по Tab
composerRequestsЗапросы Composer
chatRequestsЗапросы чата
agentRequestsЗапросы агента
cmdkUsagesИспользования командной палитры (Cmd+K)
subscriptionIncludedReqsЗапросы по подписке
apiKeyReqsЗапросы по API-ключу
usageBasedReqsЗапросы с оплатой за использование
bugbotUsagesИспользования обнаружения ошибок
mostUsedModelНаиболее часто используемая модель ИИ
applyMostUsedExtensionНаиболее используемое расширение файлов для применений
tabMostUsedExtensionНаиболее используемое расширение файлов для табов
clientVersionВерсия Cursor
emailEmail пользователя

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

{
  "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Начало цикла подписки (миллисекунды эпохи)
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НетДата начала в миллисекундах эпохи
endDatenumberНетДата окончания в миллисекундах эпохи
userIdnumberНетФильтр по конкретному ID пользователя
pagenumberНетНомер страницы (начиная с 1). По умолчанию: 1
pageSizenumberНетКоличество результатов на странице. По умолчанию: 10
emailstringНетФильтр по email адресу пользователя

Ответ

{
  totalUsageEventsCount: number;
  pagination: {
    numPages: number;
    currentPage: number;
    pageSize: number;
    hasNextPage: boolean;
    hasPreviousPage: boolean;
  };
  usageEvents: {
    timestamp: string;
    model: string;
    kindLabel: 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Временная метка события в миллисекундах эпохи
modelAI модель, используемая для запроса
kindLabelКатегория использования (например, “Usage-based”, “Included in Business”)
maxModeБыл ли включен максимальный режим
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",
      "kindLabel": "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",
      "kindLabel": "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",
      "kindLabel": "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
  }'

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:

Обновить списки блокировки репозиториев

Заменить существующие списки блокировки репозиториев для предоставленных репозиториев. Примечание: Эта конечная точка будет перезаписывать только шаблоны для предоставленных репозиториев. Все остальные репозитории останутся без изменений.
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 - Блокировать конкретный файл