Skip to main content

Command Palette

Search for a command to run...

API

API Origin

Origin é a plataforma de desenvolvimento de código do Cherri Code. Sua API REST pública permite que apps e ferramentas trabalhem com repositórios, commits, verificações, pull requests e instalações de apps do Origin.

Visão geral

Os apps do Origin usam um modelo de consentimento de instalação semelhante ao OAuth e de autenticação semelhante ao de um app do GitHub:

  1. O app assina um JWT EdDSA de curta duração com sua chave privada Ed25519.
  2. O app troca esse JWT e um ID de instalação por um token de acesso da instalação de curta duração (oit_…).
  3. O token de instalação chama APIs de repositório e autentica o Git via HTTPS dentro dos repositórios e escopos aprovados para a instalação.
  4. O Origin envia entregas de webhook assinadas para o URL de webhook registrado do app.

URL base

https://api.cursor.com/v1/origin

Os caminhos dos endpoints na referência incluem o prefixo completo /v1/origin.

Convenções de protocolo

Solicitações e respostas usam application/json. Os nomes dos campos JSON usam camelCase. Os registros de data e hora são strings RFC 3339. Inteiros Protobuf de 64 bits, incluindo números de pull request e de versão, são codificados como strings JSON.

As respostas incluem os campos que estão em seu valor padrão em vez de descartá-los, portanto um boolean false, um number 0, uma string vazia e uma matriz vazia aparecem todos no corpo. Leia o próprio valor em vez de tratar uma chave ausente como o padrão. Campos documentados como ausentes ou omitidos são opcionais no contrato e ficam fora do corpo quando não estão definidos.

Prévia

Parte da API é publicada em prévia. Ela aparece nesta referência e na especificação, mas sua estrutura pode mudar antes da disponibilidade geral. A especificação OpenAPI a marca com x-cursor-visibility: PREVIEW. O marcador pode estar em uma operação, um parâmetro, um schema ou um único campo, então uma operação estável pode, mesmo assim, retornar um campo em prévia. Endpoints em prévia exibem um badge Prévia nesta referência. Trate campos em prévia como opcionais e não crie uma dependência rígida da estrutura deles.

Primeiros passos

Acesso ao Origin

CLI do Origin

Instale a CLI do Origin e faça login:

curl -fsSL https://downloads.cursor.com/origin/install.sh | shorigin auth login

Clone um repositório existente:

origin repo clone '{ownerSlug}/{repoName}'# ou use o git diretamentegit clone 'https://origin.cursor.com/{ownerSlug}/{repoName}.git'

Os apps clonam usando a autenticação do Git via HTTPS com um token de acesso de instalação, e não um login de usuário.

Instalação

Envie o administrador do espaço de trabalho do cliente para:

/codebase/apps/install  ?client_id=APP_ID  &scope=SPACE_SEPARATED_SCOPES  &redirect_uri=REGISTERED_CALLBACK  &state=RANDOM_ANTI_FORGERY_VALUE  &summary=SHORT_REASON_FOR_ACCESS  &include_granted_scopes=true
ParâmetroObrigatórioDescrição
client_idSimID do app Origin.
scopeSimEscopos separados por espaços. repository:metadata:read é adicionado automaticamente.
redirect_uriSim para instalações iniciadas pelo parceiroURI exata de callback registrada.
stateAltamente recomendadoValor aleatório antifalsificação reproduzido como a declaração state do recibo de instalação. Gere-o antes de redirecionar e verifique a declaração no callback.
summaryNãoBreve explicação exibida durante o consentimento.
include_granted_scopesNãoQuando true, mantém as permissões existentes e solicita apenas adições.

O administrador do espaço de trabalho escolhe o proprietário de destino, os escopos aprovados e todos os repositórios ou apenas os selecionados. O cliente, e não o app, controla o acesso ao repositório.

Após a aprovação, o Origin redireciona para o callback registrado:

https://ci.example.com/origin/callback?installation_receipt=RECEIPT_JWT

Verifique o recibo de instalação e armazene o ID da instalação presente na declaração sub. Você precisará dele sempre que emitir um token de acesso da instalação.

As instalações usam um de dois modos de seleção de repositórios:

  • all: a instalação pode acessar todos os repositórios pertencentes ao destino selecionado.
  • selected: a instalação pode acessar apenas os repositórios selecionados pelo administrador do espaço de trabalho.

Ambos os modos abrangem repositórios espelhados e repositórios Origin nativos, portanto um espelho aparece em GET /installation/repos e pode ser selecionado. Um espelho é somente leitura até se tornar um espelho de saída estável: consulte Repositórios espelhados.

Use GET /installation/repos com um token de instalação para descobrir os repositórios disponíveis para ela. Os endpoints JWT do app podem listar, inspecionar e excluir as instalações do app. Excluir uma instalação impede a emissão de novos tokens.

Recibo de instalação

installation_receipt é um JWT compacto de curta duração assinado pela Origin. Ele comprova que a aprovação da instalação veio da Origin, e não de um redirecionamento forjado, e contém tudo de que o callback precisa. O Cherri Code não redireciona sem ele; portanto, callbacks externos sempre o incluem.

Cabeçalho JOSE:

{  "alg": "EdDSA",  "kid": "origin-key-id",  "typ": "origin-installation-receipt+jwt"}

Declarações:

{  "iss": "https://api.cursor.com/v1/origin",  "aud": "app_01...",  "sub": "i_01...",  "namespace_id": "ns_01...",  "iat": 1786465200,  "exp": 1786465500,  "jti": "RECEIPT_UUID",  "installedBy": {    "id": "user_01...",    "email": "[email protected]",    "displayName": "Jane Doe"  },  "state": "ORIGINAL_VALUE"}
  • aud é o ID do seu app, e sub é o ID da instalação a ser usado ao emitir tokens de acesso da instalação.
  • namespace_id é o ID estável do namespace no qual o app foi instalado.
  • installedBy identifica o usuário que realizou esta instalação ou novo consentimento. Ele descreve a ação atual; portanto, em um novo consentimento, pode ser diferente do installedBy durável em Get App Installation. Ele inclui displayName quando a conta tem um nome e nunca inclui handle; em vez disso, leia o handle de uma resposta REST ou de um payload de webhook.
  • Os recibos expiram cinco minutos após a emissão. jti é único para cada recibo.
  • state só está presente quando a URL de instalação contém um state não vazio e reproduz esse valor. Compare-o ao valor antifalsificação que você gerou antes de redirecionar.

Verifique o recibo antes de confiar no callback: obtenha a chave de assinatura no JWKS pelo cabeçalho kid, exija alg EdDSA e typ origin-installation-receipt+jwt e valide a assinatura, iss, aud e exp. Rejeite o callback se a verificação falhar.

O recibo não é um token de acesso da instalação. Nunca o envie como credencial Bearer; emita tokens de instalação por meio de Criar token de acesso da instalação.

Autenticação

Envie credenciais REST com o esquema Bearer. Os badges Auth de cada endpoint listam os tipos de credencial que ele aceita:

curl --request GET \  --url https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME \  --header "Authorization: Bearer $ORIGIN_BEARER_TOKEN"

Gere uma chave de assinatura do app

Os Apps Origin se autenticam com um par de chaves Ed25519. Gere o par localmente e registre apenas a chave pública em cursor.com/codebase/settings/apps. Um app pode ter até 10 chaves de assinatura ativas.

Crie uma chave privada PKCS#8 e uma chave pública PEM SPKI com o OpenSSL:

openssl genpkey -algorithm ED25519 -out origin-app-private.pemopenssl pkey -in origin-app-private.pem -pubout -out origin-app-public.pem

O arquivo de chave pública começa com -----BEGIN PUBLIC KEY-----. Cole esse PEM ao adicionar uma chave de assinatura. Use a chave privada correspondente apenas para assinar JWTs de app.

JWT do app

Assine um JWT de curta duração usando a chave privada Ed25519 associada a uma das chaves de assinatura ativas do app. Gere esse par conforme descrito em Gerar uma chave de assinatura do app.

Cabeçalho JOSE:

{  "alg": "EdDSA",  "kid": "app_01...",  "typ": "JWT"}

Declarações:

{  "iss": "app_01...",  "aud": "origin-apps",  "iat": 1782928800,  "exp": 1782929100}

Defina iss e kid como o ID do app. Use uma validade de aproximadamente cinco minutos.

Authorization: Bearer APP_JWT

Use um JWT de app para operações no nível do app, como ler metadados do app, gerenciar instalações, emitir tokens de instalação e recuperar entregas de webhooks.

Token de acesso da instalação

Faça uma chamada a POST /app/installations/{installationId}/access_tokens com um JWT do app. Os tokens de acesso da instalação começam com oit_.

Authorization: Bearer oit_...

A resposta inclui expiresAt. Emita tokens conforme necessário, renove-os antes da expiração, trate-os como senhas e nunca os registre em logs.

Um token expira no máximo 15 minutos após a criação, e nunca depois do JWT do app que o solicitou, então o JWT de cinco minutos recomendado acima gera um token de no máximo cinco minutos. Leia expiresAt e emita um novo token quando esse horário passar, em vez de presumir uma duração: os tokens do Origin têm vida mais curta que os tokens de acesso da instalação do GitHub App, e uma integração que reutiliza um token seguindo a periodicidade do GitHub falha assim que o token expira. Assine o JWT com um exp mais longo quando um job precisar dos 15 minutos completos, como faz a receita de CI do CloneKit.

Remover a instalação ou excluir o app invalida seus tokens de acesso da instalação antes de expiresAt. A API REST e o Git via HTTPS rejeitam o token com 401. Não tente novamente com o mesmo token; o app deve ser reinstalado antes de poder emitir um token funcional.

Um token de acesso da instalação não pode exceder os escopos aprovados nem o acesso ao repositório da instalação. Você pode restringir um token a menos scopes ou repositoryIds. Matrizes vazias ou omitidas herdam a concessão completa da instalação.

Use tokens de acesso da instalação para operações com escopo de repositório, incluindo pull requests, gravações de check runs e Git via HTTPS.

Para agir como membro do namespace da instalação em vez de como o app, emita um token de usuário da instalação. Consulte Agindo em nome de usuários.

Autenticação do Git via HTTPS

Tokens de acesso da instalação autenticam o Git via HTTPS. O endpoint do Git usa autenticação HTTP Basic: a senha é o token de instalação, e o nome de usuário é x-access-token. As credenciais Bearer devem ser usadas na API REST; o Git via HTTPS as rejeita.

Emita um token em Criar token de acesso da instalação imediatamente antes da operação do Git. Os tokens expiram em até 15 minutos.

Clone, consultar e pull exigem repository:contents:read. Push exige repository:contents:write. O token deve incluir o repositório de destino em sua concessão.

O push também exige que o proprietário do repositório tenha permissão de gravação no Origin, o mesmo requisito exigido por Criar repositório. Se o proprietário for um usuário, ele deverá estar em um plano Pro, Pro Student, Pro+, Ultra ou Start. Se o proprietário for uma equipe, ela deverá ter um plano de equipe pago ativo, não estar no Privacy Mode (Legado) e não ter o Origin desativado por um administrador da equipe. Um push para um repositório cujo proprietário não seja elegível retorna 403. Clone, consultar e pull não têm esse requisito.

Consulte cloneUrl em Obter repositório ou List App Installation Repositories. Tanto o caminho no formato do GitHub (https://origin.cursor.com/OWNER_SLUG/REPO_NAME.git) quanto o caminho legado /git/ permitem clonar.

git clone "https://x-access-token:${INSTALLATION_TOKEN}@origin.cursor.com/OWNER_SLUG/REPO_NAME.git"

Incluir o token na URL faz com que ele seja armazenado em .git/config. Após clonar o repositório com sucesso, reescreva o remoto para que comandos posteriores não reutilizem um segredo expirado:

git remote set-url origin "https://origin.cursor.com/OWNER_SLUG/REPO_NAME.git"

Para não incluir o token na URL remota, forneça-o pelo auxiliar de credenciais do Git:

git -c credential.helper="!f() { echo username=x-access-token; echo password=${INSTALLATION_TOKEN}; }; f" \  clone "https://origin.cursor.com/OWNER_SLUG/REPO_NAME.git"

O auxiliar de credenciais da CLI do Origin é destinado ao login de usuários. As integrações de apps enviam o token de instalação, como mostrado aqui. Trate o token como uma senha, nunca o registre em logs e emita um novo antes de expiresAt se um job ainda precisar de acesso ao Git.

O Git via HTTPS tem seu próprio orçamento, separado do orçamento da REST em Limites de taxa. Uma resposta do Git cobrada inclui os mesmos cabeçalhos X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Used, com X-RateLimit-Resource definido como git em vez de core. Solicitações do Git que excedem o orçamento retornam 429 com Retry-After e X-RateLimit-Reset. Leia os cabeçalhos para controlar o ritmo de um job, em vez de presumir um número; solicitações não tarifadas não incluem cabeçalhos de limite de taxa.

Em um repositório espelhado, um token de instalação permite clonar, consultar e fazer pull, e o Origin rejeita git push com 403 até que o espelho se torne um espelho de saída estável. Consulte Repositórios espelhados.

Solicitações da CLI autenticadas pelo usuário

Use origin api para solicitações autenticadas pelo usuário. Para uma sessão interativa, faça login pelo navegador:

origin auth loginorigin api /repos/OWNER_SLUG/REPO_NAME/pulls

Para uma sessão não interativa, forneça uma chave de API de usuário pessoal em Cherri Code Dashboard → API Keys:

export CURSOR_API_KEY="YOUR_PERSONAL_USER_API_KEY"origin api /repos/OWNER_SLUG/REPO_NAME/pulls

A CLI troca a personal API key por um user access token de curta duração e envia esse token no header Authorization. Não envie a própria API key para um endpoint do Origin. integrações de apps devem usar JWTs dos apps e tokens de acesso da instalação.

Descoberta e chaves de assinatura

O Origin disponibiliza metadados de descoberta não autenticados e suas chaves de assinatura ativas. As mesmas chaves assinam entregas de webhook e recibos de instalação.

Os metadados de descoberta identificam o emissor e o jwks_uri:

curl https://api.cursor.com/v1/origin/.well-known/openid-configuration
{  "issuer": "https://api.cursor.com/v1/origin",  "jwks_uri": "https://api.cursor.com/v1/origin/keys",  "response_types_supported": ["id_token"],  "subject_types_supported": ["public"],  "id_token_signing_alg_values_supported": ["EdDSA"]}

/keys retorna JWKs Ed25519 ativos:

curl https://api.cursor.com/v1/origin/keys
{  "keys": [    {      "kty": "OKP",      "crv": "Ed25519",      "use": "sig",      "alg": "EdDSA",      "kid": "origin-key-id",      "x": "PUBLIC_KEY_MATERIAL"    }  ]}

Mantenha o JWKS em cache. /keys envia Cache-Control: public, max-age=600, stale-if-error=600; reutilize uma resposta em cache por 10 minutos e depois atualize-a. Se a atualização falhar, mantenha as últimas chaves válidas por no máximo mais 10 minutos antes de a verificação falhar. Atualize também quando uma assinatura não for verificada por nenhuma chave, o que remove um ID de chave desativado. As chaves são rotacionadas semanalmente.

As assinaturas de webhook não incluem um ID de chave, portanto a verificação deve tentar cada chave Ed25519 ativa. Os recibos de instalação incluem o kid da chave de assinatura no cabeçalho JOSE, portanto a verificação dos recibos pode localizar a chave diretamente.

Escopos

Solicite apenas os escopos mínimos necessários para seu app. repository:metadata:read e o acesso aos metadados do app ou da instalação são concedidos automaticamente e não devem ser adicionados separadamente às URLs de instalação.

EscopoPermite
repository:metadata:readLer metadados do repositório. Adicionado automaticamente.
repository:contents:readLer commits, branches, conteúdos, arquivos de comparação e objetos Git de baixo nível. Pesquisar o texto de arquivos. Baixar um arquivo compactado do repositório. Clonar, consultar e fazer pull por Git via HTTPS. Sincronizar um repositório espelhado a partir de sua fonte upstream.
repository:contents:writeFazer push por Git via HTTPS. Mergear pull requests. Criar branches e fazer commit de alterações em arquivos pelos endpoints de dados do Git. Solicitar novamente uma execução de verificação.
repository:pull_requests:readLer pull requests, arquivos alterados, commits de pull requests, rótulos atribuídos e elegibilidade para merge.
repository:pull_requests:writeCriar e atualizar pull requests. Atribuir e remover rótulos de pull requests.
repository:pull_requests:reviews:readLer comentários de pull requests, threads de comentários, revisões enviadas e revisores solicitados.
repository:pull_requests:reviews:writeCriar e atualizar comentários; resolver e reabrir threads de comentários; criar, atualizar e descartar revisões; solicitar e remover revisores.
repository:checks:readLer suítes de verificações, execuções e anotações de execução de verificação.
repository:checks:writeCriar e atualizar suítes de verificações e execuções. Anexar anotações de execução de verificação.
repository:labels:readLer as definições de rótulos que pertencem ao repositório.
repository:labels:writeCriar, atualizar e excluir definições de rótulos do repositório.
repository:rulesets:readLer conjuntos de regras do repositório.
repository:rulesets:writeCriar, atualizar e excluir conjuntos de regras do repositório.
repository:settings:readLer as concessões mantidas diretamente em um repositório.
repository:settings:writeAtualizar configurações do repositório: a branch padrão, a visibilidade, os métodos de merge e a exclusão automática da branch de origem. Fazer upsert e excluir concessões em um repositório.
namespace:settings:readLer as concessões mantidas diretamente em um proprietário. Ler as autoridades certificadoras SSH em que um proprietário confia e se ele exige certificados.
namespace:settings:writeFazer upsert e excluir concessões em um proprietário. Adicionar e remover autoridades certificadoras SSH e definir se o proprietário exige certificados; essas gravações são fornecidas por uma credencial de usuário do Cherri Code.
namespace:user_tokens:writeEmitir tokens de usuário da instalação que atuam como membro do namespace da instalação. Um token não pode incluir este escopo. Consulte Atuando em nome de usuários.

Solicitar um escopo :write também concede o escopo :read correspondente, então repository:labels:write cobre repository:labels:read e você não precisa listar os dois. O contrário não vale: um escopo de leitura nunca concede gravação.

O token de instalação só pode restringir essas concessões. Ele não pode adicionar um escopo ou repositório que o administrador do espaço de trabalho não aprovou.

Alterações de estado do espelhamento ficam fora desta tabela. Fazer transição do espelhamento do repositório, Forçar transição do espelhamento do repositório e Desvincular espelho do repositório usam repository:mirror:write ou repository:mirror:delete, que um app não pode solicitar na instalação: eles são fornecidos por uma credencial de usuário do Cherri Code, e quem chama também deve administrar o repositório na fonte upstream do espelho.

O gerenciamento de instalações também fica fora dela. Adicionar repositórios à instalação do app usa namespace:installations:write, que um app não pode solicitar na instalação: um administrador do namespace o mantém em uma credencial de usuário do Cherri Code, e o mesmo tipo de credencial que consentiu com a instalação é o que pode estendê-la.

O gerenciamento de apps fica fora dela pelo mesmo motivo. Criar app usa namespace:apps:create, Listar apps do namespace e Obter app usam namespace:apps:read, e Atualizar app, Adicionar chave de assinatura do app e Revogar chave de assinatura do app usam app:settings:write. Um publicador mantém essas concessões em uma credencial de usuário do Cursor; um app não pode solicitá-las para si mesmo.

A tabela abrange os escopos que um app solicita na instalação. Para consultar o escopo exigido por uma única operação, leia sua extensão x-origin-scopes na especificação OpenAPI. Essa extensão abrange todas as operações, incluindo os escopos app, installation e namespace, que acompanham a própria credencial, em vez de serem concedidos por uma instalação. Uma operação cujos escopos vêm todos com a credencial marca sua extensão como ambient: true: não há nada a solicitar para ela, e basta apresentar a credencial correta.

Repositórios espelhados

Uma instalação usa todos os escopos que possui em um repositório Origin nativo e em um espelho de saída estável. Em um repositório em qualquer outro estado de espelhamento, apenas dois escopos se aplicam:

  • repository:metadata:read
  • repository:contents:read

Todos os outros escopos retornam 403 nesse repositório, independentemente do que o administrador do espaço de trabalho tenha aprovado. Pela API REST, a leitura de repositórios e conteúdos, a comparação de commits e Sincronizar espelho continuam funcionando, e o Origin rejeita pull requests, revisões, comentários, verificações, conjuntos de regras e qualquer operação de gravação. Pelo Git via HTTPS, clone, consultar, pull e download de LFS continuam funcionando, e o Origin rejeita push e upload de LFS.

Tirar um repositório desse estado é uma operação que requer credenciais de usuário, e não algo que uma instalação possa fazer: Fazer transição do espelhamento do repositório avança a direção do espelho, Forçar transição do espelhamento do repositório faz a transição para a fonte upstream sem enviar referências divergentes de volta, e Desvincular espelho do repositório desconecta o espelho definitivamente.

O objeto mirror de um repositório não informa se operações de gravação são permitidas. Um espelho em transição pode informar mirror.status como outbound e ainda ser somente leitura; portanto, considere o 403 como definitivo, em vez de tomar decisões com base em mirror.status.

Limites de taxa

A API Origin usa um orçamento de pontos compartilhado por principal, redefinido em uma janela móvel de um minuto. Cada tipo de principal autenticado tem seu próprio orçamento:

PrincipalOrçamento padrão
Token de acesso da instalação3.000 pontos/minuto
JWT do app6.000 pontos/minuto
Usuário do Cherri Code ou conta de serviço600 pontos/minuto

Cada endpoint consome um custo fixo desse orçamento antes da execução do manipulador. Falhas de autenticação e autorização não consomem pontos.

O Cherri Code pode aumentar os orçamentos por minuto de cada app para parceiros de design. Entre em contato com o Cherri Code se sua integração precisar de um limite maior.

Cabeçalhos de resposta

As respostas cobradas e Consultar limite de taxa incluem:

CabeçalhoDescrição
X-RateLimit-LimitPontos disponíveis na janela atual para esta principal
X-RateLimit-RemainingPontos restantes na janela atual
X-RateLimit-UsedPontos consumidos na janela atual
X-RateLimit-ResetTimestamp Unix (segundos em UTC) em que a janela é redefinida
X-RateLimit-ResourceSempre core para o orçamento compartilhado da API pública

X-RateLimit-Reset informa uma janela completa de 60 segundos a partir do momento da resposta. A janela do contador começa com a primeira solicitação cobrada em uma sequência, e não no início de um minuto do calendário.

Limite excedido

Quando uma solicitação exceder o orçamento, a API retornará HTTP 429 com:

  • Retry-After: número de segundos a aguardar antes de tentar novamente (60)
  • Os mesmos cabeçalhos X-RateLimit-*, com X-RateLimit-Remaining definido como 0
{  "code": 8,  "message": "Rate limit exceeded: 3000 points per minute for this installation. Retry after 60s.",  "details": []}

Aguarde Retry-After ou até X-RateLimit-Reset antes de tentar novamente. Use backoff com jitter quando chamadores simultâneos compartilham o mesmo token de instalação.

Verificar a cota restante

Chame Consultar limite de taxa para consultar o orçamento atual sem consumir pontos. O corpo da resposta reflete os cabeçalhos X-RateLimit-* do recurso compartilhado core.

Convenções gerais

Paginação

Endpoints paginados aceitam:

  • pageSize: o valor padrão é 30, com limite máximo de 100.
  • pageToken: token opaco retornado pela página anterior. Não o inspecione nem o construa.

As respostas usam um campo de coleção específico do resource e nextPageToken. Ele fica vazio quando não existe uma próxima página. As respostas públicas de lista não incluem contagens totais. Os tokens de página são vinculados ao resource de origem e aos filtros. Reinicie a paginação quando os filtros forem alterados. Tokens não vazios inválidos ou incompatíveis retornam 400.

Envie o mesmo pageSize em todas as solicitações de uma sequência, incluindo as continuações. Na maioria dos endpoints de listagem, um pageSize enviado com um token de página se aplica a essa página, e o tamanho de página anterior é mantido quando ele é omitido; as entradas de pageToken desses endpoints indicam isso. Nos demais, o que um token de página guarda varia, portanto um pageSize constante garante o mesmo tamanho de página em todos os endpoints.

Erros

Os erros usam um corpo no estilo RPC do Google:

{  "code": 5,  "message": "resource not found",  "details": []}

Os status HTTP mais comuns são 400, 401, 403, 404, 429, 500 e 503. Algumas operações do banco de dados do Git também retornam 409 em caso de conflitos no estado do repositório. Consulte Limites de taxa para ver os cabeçalhos e o comportamento de nova tentativa de 429.

Use o status HTTP e o code para diferenciar os erros. Trate message como texto voltado para desenvolvedores.

Um 404 nunca diferencia um recurso que não existe de um ao qual seu app não consegue acessar. Interprete-o como "não disponível para esta instalação", em vez de considerá-lo uma prova de que o recurso está ausente.

details contém entradas tipadas: violações de campo google.rpc.BadRequest em caso de argumento inválido e uma entrada google.rpc.RequestInfo em todos os erros. Origin pode adicionar tipos de detalhe a qualquer momento; portanto, ignore entradas que sua integração não reconhece.

Cada resposta de erro inclui o ID da solicitação duas vezes: em um cabeçalho de resposta X-Request-ID e como uma entrada google.rpc.RequestInfo em details. Origin repete o x-request-id que você enviou ou gera um quando você não envia nenhum. A entrada RequestInfo está presente mesmo quando message é um erro interno opaco; portanto, informe o ID da solicitação ao entrar em contato com o Cherri Code sobre uma chamada com falha.

Caminhos sem correspondência em /v1/origin e solicitações que usam o método incorreto em um caminho conhecido retornam esse mesmo corpo em vez de um erro genérico do roteador. A mensagem informa o método e o caminho e nunca repete a string de consulta.

IDs

Os IDs de resource são strings opacas com um prefixo de tipo, como app_… para um app e i_… para uma instalação. Armazene e compare esses IDs como strings completas. Não faça parsing deles, não tente extrair significado dos seus caracteres nem dependa da ordem de classificação deles.

Um ID permanece o mesmo durante toda a vida útil do seu resource, enquanto nomes e slugs podem mudar. Um repositório mantém o mesmo ID mesmo quando é renomeado. Por isso, use o ID como chave dos dados em cache, em vez de {ownerSlug}/{repoName}, e referencie o repositório pelo ID, conforme descrito em Caminhos de repositório.

Caminhos de repositório

Caminhos no escopo do repositório usam o slug do proprietário e o nome do repositório no formato {ownerSlug}/{repoName}. Ambos os segmentos são resolvidos sem distinção entre maiúsculas e minúsculas, portanto qualquer combinação de maiúsculas e minúsculas acessa o repositório. As respostas retornam o nome e o slug armazenados, em vez da capitalização enviada, e as URLs Git HTTPS são resolvidas da mesma forma. Compare nomes de repositórios sem distinguir maiúsculas de minúsculas e consulte a capitalização canônica em Obter repositório.

Todo caminho no escopo do repositório também aceita o ID estável do repositório no lugar do par: envie _ como o slug do proprietário e o ID como o nome do repositório, como em GET /v1/origin/repos/_/REPO_ID. Consulte o ID no campo id em Obter repositório. O marcador _ não pode ser usado como slug de proprietário, portanto as duas formas nunca entram em conflito. Em uma solicitação Connect ou JSON, defina ownerSlug como _ e name como o ID.

A forma com ID permanece válida após uma renomeação, o que a torna uma forma estável de identificar um repositório. Ela não concede nada por si só: depois que o Origin resolve o ID para um repositório, seu app ainda precisa ter o mesmo escopo nesse repositório. Um ID ao qual seu app não consegue acessar retorna o mesmo corpo 404 de um ID inexistente, portanto uma resposta nunca confirma a existência de um repositório. Um ID malformado retorna 400. Create Repo aceita apenas um slug de proprietário e rejeita _.

Referências de recursos

Os snapshots de recursos contêm os campos atuais do recurso. O contexto do contêiner usa referências compactas em vez de duplicar recursos completos:

  • RepositoryReference identifica um repositório.
  • PullRequestReference identifica uma pull request e inclui a referência ao repositório.
  • ThreadReference identifica a thread que contém um comentário de pull request.
  • OriginActor identifica um ator público como user, app ou serviceAccount. Exatamente uma variante está presente; leia a identidade dessa variante.

Execuções de verificação

Os Apps relatam resultados de CI como suítes de verificações e execuções de verificação associadas a um commit por meio de Post Check Run e Batch Upsert Check Runs, e os consultam de volta pelos endpoints de Checks. Esta seção define os termos comuns a esses endpoints: qual tentativa é a atual, como o Origin ordena e relata gravações e como se comportam timestamps e prazos.

Tentativas e a tentativa atual

Cada (actor, key, externalId) relatado em um commit é uma tentativa de suíte, e cada (suite, key, externalId) dentro dela é uma tentativa de execução. Reutilizar um externalId atualiza essa tentativa no próprio lugar; um novo externalId inicia uma nova tentativa e mantém a anterior como histórico. Tentativas substituídas continuam acessíveis para leitura por id em Obter suíte de verificações e Obter execução de verificação.

Onde a API mostra as verificações atuais de um commit — em Listar suítes de verificações de um commit, Listar execuções de verificação de um commit e no estado de CI e nas verificações obrigatórias do pull request —, o Origin consolida as tentativas em duas etapas:

  1. A tentativa de suíte atual por (actor, key) é aquela cujas execuções atuais, conforme selecionadas pela segunda etapa, têm o externalUpdatedAt mais recente; uma suíte sem execuções é classificada por seu createdAt. Empates são resolvidos pelo createdAt da suíte e depois por seu id, do mais recente para o mais antigo.
  2. Dentro dessa tentativa de suíte, a execução atual de uma key é a que tem o externalUpdatedAt mais recente. Empates são resolvidos por createdAt e depois por id, do mais recente para o mais antigo.

Listar execuções de verificação de uma suíte aplica a segunda etapa à suíte que você indicar. Uma execução só é a atual do commit quando sua suíte é a tentativa de suíte atual desse commit. Como a primeira etapa classifica tentativas de suíte inteiras, uma execução publicada sob uma tentativa de suíte substituída fica fora das verificações do commit enquanto outra tentativa mantiver um externalUpdatedAt mais recente; assim que seu timestamp passar a ser o mais recente, sua tentativa de suíte se torna a atual e passam a ficar ocultas as execuções da outra tentativa.

Uma tentativa cancelada não substitui uma que passou. Em qualquer uma das etapas, uma tentativa cancelada fica abaixo das outras tentativas de sua key quando a tentativa mais recente dessa key que não foi cancelada passou. Uma execução passou quando está completed com a conclusão success, neutral ou skipped. Uma tentativa de suíte passou quando todas as suas execuções atuais passaram e é considerada cancelada quando todas as suas execuções atuais estão completed, pelo menos uma com a conclusão cancelled e as demais tendo passado. Quando a reexecução da tentativa que passou é solicitada, as tentativas canceladas cujo externalUpdatedAt é igual ou posterior à solicitação voltam a ser classificadas por seus timestamps. Uma tentativa de suíte cancelada mais recente ainda substitui uma mais antiga que não passou por completo.

Uma execução cuja reexecução foi solicitada mantém seu lugar como a tentativa atual de sua key e aparece como pendente até que o app responsável responda: veja Solicitar novamente a execução de verificação.

Ordenação de gravações

O Origin ordena os posts destinados a uma mesma execução — ou seja, o mesmo externalId e key dentro da suíte — por checkRun.externalUpdatedAt, com precisão de milissegundos. Um post só é aplicado quando seu valor é igual ou posterior ao externalUpdatedAt armazenado da execução, elevado a rerequestedAt enquanto houver uma nova solicitação pendente. Valores iguais são aplicados, então o post mais recente prevalece, com duas exceções que também são tratadas como obsoletas: um post queued ou in_progress não pode reabrir uma execução completed no mesmo timestamp, e um post exatamente no timestamp armazenado é ignorado enquanto rerequestedAt estiver definido. Um valor mais recente é aplicado, inclusive para reabrir uma execução completed, com uma exceção tratada como obsoleta independentemente do timestamp: um post completed com conclusão cancelled não pode substituir uma execução completed cuja conclusão seja success, neutral ou skipped.

Um post obsoleto ainda assim é bem-sucedido. A resposta é HTTP 200 com a suíte e a execução armazenadas, e não com os valores enviados, e o updatedAt da execução não avança. Cada execução enviada retorna como um par: checkRun, a execução armazenada após a chamada, e outcome, o que a gravação fez com ela. Post execução de verificação retorna o par no nível superior da resposta, ao lado de checkSuite. Batch Upsert execuções de verificação retorna um par por execução enviada em results[], na ordem da solicitação, de modo que um elemento do batch carrega o mesmo resultado por execução que a chamada única traz inline. Leia outcome, ou cada results[].outcome, para saber o que a gravação fez:

outcomeSignificado
createdNão existia execução para (externalId, key) na suíte; uma foi criada.
updatedUma execução existente foi substituída pelos valores enviados.
unchangedOs valores enviados, incluindo externalUpdatedAt, são iguais aos da execução armazenada; nada foi gravado.
ignored_staleO post foi ignorado por estar obsoleto; checkRun carrega a execução armazenada, não os valores enviados.

O updatedAt não avança em um post unchanged nem em um ignored_stale, portanto não serve para distinguir um do outro; somente outcome serve. Trate um valor não reconhecido como "a execução armazenada está na resposta; não se sabe se houve gravação". Em um batch, o Origin aplica a regra a cada execução separadamente: uma execução obsoleta não faz o batch falhar, e results[] traz a execução armazenada na posição correspondente, com outcome ignored_stale.

Em Batch Upsert execuções de verificação, o checkRuns[] de nível superior está descontinuado em favor de results[]. Ele continua sendo preenchido com as mesmas execuções armazenadas, na mesma ordem, mas não carrega outcomes; leia results[] em vez dele. Isso se aplica apenas ao batch: em Post execução de verificação, checkRun e outcome são os campos de nível superior a serem lidos.

Timestamps e prazos

Um post cujo externalUpdatedAt, startedAt ou completedAt esteja mais de 60 segundos no futuro retorna InvalidArgument (HTTP 400). completedAt não pode ser anterior a startedAt quando ambos estão no mesmo post. deadlineAt não pode estar mais de 24 horas no futuro.

Somente um run in_progress expira. Depois que seu deadlineAt passa, uma varredura periódica o conclui com a conclusão timed_out, define completedAt caso o run ainda não tenha um, limpa deadlineAt e entrega repository.check_run.completed. A expiração ocorre alguns minutos depois do prazo, e não exatamente nele: por padrão, a varredura roda mais ou menos a cada 30 minutos, uma configuração operacional que pode mudar, portanto não dependa desse intervalo. Um run queued nunca expira, assim como um run sem deadlineAt. Um post completed limpa o prazo. O Origin não altera externalUpdatedAt ao expirar um run, de modo que um post posterior com um externalUpdatedAt mais recente ainda se aplica a um run expirado.

Limitações atuais

  • A listagem de repositórios em todo o namespace e a criação de repositórios não fazem parte da API de parceiros. Descubra os repositórios pela instalação.
  • A comparação de commits retorna dados de resumo, e não uma lista de commits incorporada. Os arquivos alterados têm seu próprio endpoint paginado, Listar arquivos de comparação.
  • As threads podem ser acessadas apenas para resolução. Não há um endpoint que liste threads diretamente; leia-as nos comentários que contêm.
  • Webhooks de push não incluem uma lista completa de commits.
  • O merge de pull request oferece suporte a repositórios Origin nativos. Repositórios espelhados são rejeitados.
  • Um repositório espelhado é somente leitura para uma instalação até se tornar um espelho de saída estável. Consulte Repositórios espelhados.

Checklist de implementação

  • Armazene a chave privada Ed25519 em um gerenciador de segredos e rotacione as chaves de forma planejada. Veja Gerar uma chave de assinatura do app.
  • Verifique o recibo de instalação em callbacks de instalação e leia o ID de instalação e state nas claims dele.
  • Use JWTs de curta duração do app e emita tokens de instalação no momento necessário.
  • Use tokens de instalação, não JWTs do app, para APIs com escopo de repositório, gravações de execuções de verificação e Git HTTPS.
  • Solicite os escopos mínimos e o acesso mínimo ao repositório.
  • Trate os tokens de página como opacos e reinicie a paginação quando os filtros mudarem.
  • Mantenha os valores de key de verificações estáveis e legíveis. Use um novo externalId imutável para cada tentativa e valores crescentes de externalUpdatedAt para atualizações.
  • Leia outcome em cada resposta de Post Check Run e cada results[].outcome em cada resposta de Batch Upsert Check Runs; um post obsoleto retorna 200 com a execução armazenada. Veja Execuções de verificação.
  • Verifique as assinaturas de webhook em relação ao corpo bruto da solicitação antes de analisá-lo.
  • Elimine entregas duplicadas usando webhook-id e processe-as de forma assíncrona após retornar 2xx.
  • Ignore campos JSON desconhecidos para manter a compatibilidade futura.
  • Respeite os cabeçalhos Retry-After e X-RateLimit-*. Use Consultar limite de taxa para monitorar os pontos restantes sem consumi-los.

Referência de endpoints

Baixe a especificação OpenAPI para consultar os schemas completos dos componentes. O documento declara https://api.cursor.com como seu servidor e um esquema de segurança HTTP bearer bearerAuth, e cada operação lista os códigos de resposta que ela pode retornar, além de um exemplo de solicitação e de resposta. Cada operação também traz uma extensão x-origin-scopes: scopes contém o escopo exigido pela operação e tokenTypes contém os tipos de credencial que ela aceita. Cada schema de payload de webhook traz uma extensão x-origin-webhook-events que lista os eventos que o entregam, e as superfícies em prévia trazem x-cursor-visibility: PREVIEW. Os parâmetros de caminho têm os mesmos nomes usados pelas URLs: ownerSlug e repoName. Cada operação traz um operationId único; quando uma mesma operação atende a dois formatos de URL, o id do segundo formato recebe o sufixo _2, como em OriginService_GetRepoTarball_2.

Os snippets JSON mostram valores de placeholder compatíveis com o schema. As descrições dos campos de resposta refletem o schema OpenAPI e o contrato atual da plataforma.

Apps e instalações

Consultar limite de taxa

GET/v1/origin/rate_limit
AuthApp JWTInstallation tokenUser access token

Retorna o status atual do limite de taxa da API pública do principal autenticado.

O acesso a este endpoint não consome pontos do limite de taxa. A resposta abrange o orçamento compartilhado de pontos por minuto usado por outros endpoints da API pública desse principal. Consulte Limites de taxa.

Campos da resposta

resources object

Recursos de limite de taxa do principal autenticado.

resources.core object

Orçamento compartilhado de pontos por minuto para endpoints da API pública.

resources.core.limit integer

Máximo de pontos disponíveis na janela atual.

resources.core.remaining integer

Pontos restantes na janela atual.

resources.core.reset integer

Timestamp Unix (em segundos UTC) em que a janela atual é redefinida.

resources.core.used integer

Pontos consumidos na janela atual.

rate object

Alias de resources.core. Prefira resources.core em novos clientes.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/rate_limit' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "resources": {    "core": {      "limit": 6000,      "remaining": 5994,      "reset": 1785682800,      "used": 6    }  },  "rate": {    "limit": 6000,    "remaining": 5994,    "reset": 1785682800,    "used": 6  }}

Obter app autenticado

GET/v1/origin/app
AuthApp JWT

Retorna os metadados do app autenticado.

Campos da resposta

id string

Identificador do app Origin usado como emissor JWT e ID da chave.

displayName string

Nome de exibição do app legível para humanos.

webhookUrl string

URL HTTPS registrada que recebe as entregas de webhook do app.

events matriz

Assinaturas de eventos de webhook configuradas para o app. Os eventos installation.* são sempre entregues e nunca aparecem aqui.

createdAt string

Timestamp RFC 3339 da criação do app.

updatedAt string

Timestamp RFC 3339 da atualização mais recente dos metadados do app.

installationRedirectUris matriz

URIs de callback de instalação registradas; callbacks não locais devem corresponder exatamente e usar HTTPS.

namespaceSlug string

Slug do namespace ao qual o app pertence.

description string

Descrição do app fornecida pelo publisher. Vazia quando não definida.

websiteUrl string

Site do publisher. Vazio quando não definido.

defaultScopes matriz

Scopes padrão oferecidos quando o app é instalado, como strings de scope do catálogo.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "app_01k2ja2000e0080000000000a1",  "displayName": "CI Status Bot",  "webhookUrl": "https://ci.acme.dev/webhooks/origin",  "events": [    "pull_request.created",    "pull_request.merged"  ],  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "installationRedirectUris": [    "https://ci.acme.dev/origin/setup"  ],  "namespaceSlug": "acme",  "description": "Posts CI status on pull requests.",  "websiteUrl": "https://ci.acme.dev",  "defaultScopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}

Listar instalações do app

GET/v1/origin/app/installations
AuthApp JWT

Lista as instalações do app autenticado.

Parâmetros de consulta

pageSize integer

Número máximo de instalações a retornar. O padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página.

Campos da resposta

installations matriz

Página de instalações pertencentes ao aplicativo autenticado.

installations[].id string

Identificador da instalação que o app armazena e usa para criar tokens de acesso da instalação.

installations[].appId string

Identificador do aplicativo instalado.

installations[].target object

Proprietário selecionado pelo cliente para esta instalação.

installations[].target.slug string

Slug do proprietário visível na URL usado junto ao ID do proprietário para identificar o dono do repositório.

installations[].target.id string

Identificador do proprietário de origem.

installations[].target.type string

Tipo de namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

installations[].createdAt string

Timestamp de criação da instalação em RFC 3339.

installations[].updatedAt string

Timestamp RFC 3339 da atualização mais recente da instalação.

installations[].repoSelectionMode string

Modo de concessão do repositório; exatamente "all" ou "selected".

installations[].scopes matriz

Escopos aprovados para a instalação.

installations[].installedBy object

O usuário que instalou o aplicativo originalmente, não o ator do reconsentimento mais recente. Somente saída. Ausente quando o registro desse usuário não puder mais ser lido.

installations[].installedBy.id string

Identificador público do usuário, com o prefixo user_.

installations[].installedBy.email string

Endereço de e-mail do usuário.

installations[].installedBy.displayName string

Nome de exibição do usuário: o nome e o sobrenome da conta unidos por um espaço, o mesmo nome que o produto renderiza. Omitido quando a conta não tem nome.

installations[].installedBy.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

installations[].suspendedAt string

Timestamp RFC 3339 definido enquanto a instalação está suspensa. Omitido enquanto a instalação está ativa.

installations[].deletedAt string

Timestamp RFC 3339 da exclusão da instalação. Presente apenas no snapshot do webhook installation.deleted; uma instalação excluída não é mais resolvida pela API, portanto este endpoint nunca a retorna.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app/installations' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "installations": [    {      "id": "inst_01k2ja2000e0080000000000b2",      "appId": "app_01k2ja2000e0080000000000a1",      "target": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      },      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "repoSelectionMode": "selected",      "scopes": [        "repository:contents:read",        "repository:pull_requests:read"      ]    }  ]}

Obter instalação do app

GET/v1/origin/app/installations/{installationId}
AuthApp JWT

Retorna uma instalação do app autenticado.

repoSelectionMode é all ou selected.

Parâmetros de caminho

installationId string Obrigatório

Identificador da instalação.

Campos da resposta

id string

Identificador da instalação que o app armazena e usa para emitir tokens de acesso da instalação.

appId string

Identificador do app instalado.

target object

Proprietário selecionado pelo cliente para esta instalação.

target.slug string

Slug do proprietário usado na URL, junto com o ID do proprietário, para identificar o proprietário do repositório.

target.id string

Identificador do proprietário do Origin.

target.type string

Tipo de namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

createdAt string

Timestamp RFC 3339 de criação da instalação.

updatedAt string

Timestamp RFC 3339 da atualização mais recente da instalação.

repoSelectionMode string

Modo de concessão do repositório; exatamente "all" ou "selected".

scopes matriz

Escopos aprovados para a instalação.

installedBy object

O usuário que instalou originalmente o app, não o ator do consentimento mais recente. Disponível apenas na saída. Ausente quando o registro desse usuário não puder mais ser lido.

installedBy.id string

Identificador público do usuário, com o prefixo user_.

installedBy.email string

Endereço de email do usuário.

installedBy.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

installedBy.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; caso contrário, é omitido.

suspendedAt string

Timestamp RFC 3339 definido enquanto a instalação está suspensa. Omitido enquanto a instalação está ativa.

deletedAt string

Timestamp RFC 3339 da exclusão da instalação. Presente apenas no snapshot do webhook installation.deleted; uma instalação excluída não é mais resolvida pela API, portanto este endpoint nunca a retorna.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app/installations/INSTALLATION_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

formato de resposta:

{  "id": "inst_01k2ja2000e0080000000000b2",  "appId": "app_01k2ja2000e0080000000000a1",  "target": {    "slug": "acme",    "id": "ns_01k2ja2000e0080000000000p3",    "type": "team"  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "repoSelectionMode": "selected",  "scopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}

Excluir instalação do app

DELETE/v1/origin/app/installations/{installationId}
AuthApp JWT

Exclui uma instalação pertencente ao app autenticado e impede a emissão de novos tokens de instalação. Tokens de curta duração já emitidos podem permanecer válidos até expirarem (por no máximo 15 minutos). O corpo da resposta está vazio.

Parâmetros de caminho

installationId string Obrigatório

O identificador exclusivo da instalação a ser excluída. É extraído do caminho da URL; a instalação deve pertencer ao app autenticado.

Campos da resposta

Solicitações bem-sucedidas não retornam corpo de resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/app/installations/INSTALLATION_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Criar token de acesso da instalação

POST/v1/origin/app/installations/{installationId}/access_tokens
AuthApp JWT

Cria um token de acesso da instalação para o app autenticado.

Requer autenticação com JWT de assinatura de app, como em GetAuthenticatedApp. O token é limitado à instalação especificada, que deve pertencer ao app autenticado. Os chamadores podem restringir o token a um subconjunto dos escopos aceitos e dos repositórios acessíveis da instalação.

repositoryIds pode indicar um repositório espelhado. O token resultante tem os escopos da instalação, e o Origin ainda aplica o limite de espelhamento a cada solicitação: consulte Repositórios espelhados.

Parâmetros de caminho

installationId string Obrigatório

O identificador exclusivo da instalação à qual o token será limitado. É extraído do caminho da URL; a instalação deve pertencer ao app autenticado.

Corpo da solicitação

scopes matriz

Strings de escopo a serem concedidas ao token. Os valores devem ser exclusivos e estar incluídos nos escopos aceitos da instalação. Se vazio ou omitido, herda a concessão completa de escopos.

repositoryIds matriz

IDs de repositórios aos quais conceder acesso ao token. Os valores devem ser exclusivos, acessíveis pela instalação e conter no máximo 50 entradas. Se vazio ou omitido, herda todos os repositórios acessíveis.

Campos de resposta

token string

Credencial de instalação de curta duração com o prefixo oit_.

expiresAt string

Data de expiração no formato RFC 3339; o token expira após no máximo 15 minutos e nunca permanece válido além do JWT do app usado para emiti-lo.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/app/installations/INSTALLATION_ID/access_tokens' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "scopes": [    "repository:contents:read",    "repository:pull_requests:read"  ],  "repositoryIds": [    "repo_01k2ja2000e0080000000000q4"  ]}'

Formato de resposta:

{  "token": "oit_2v8xkq4m1c7p9t3w5y0z6r4b",  "expiresAt": "2026-08-01T10:30:00Z"}

Criar token de usuário da instalação

POST/v1/origin/app/installations/{installationId}/user_access_tokens
Installation scopenamespace:user_tokens:writeAuthApp JWT

Cria um token de usuário da instalação que atua em nome de um membro do namespace da instalação.

A instalação deve pertencer ao app autenticado e ter aceitado namespace:user_tokens:write. Identifique o usuário com exatamente um entre userId ou userEmail. Um usuário desconhecido, ambíguo ou não elegível recebe PermissionDenied (HTTP 403), sem que seja revelado qual condição falhou.

O acesso do token é limitado às permissões que tanto a instalação quanto o usuário possuem. Quando scopes e repositoryIds estão definidos, cada escopo deve ser permitido em todos os repositórios listados para ambos os principals; caso contrário, a solicitação recebe PermissionDenied (HTTP 403). Consulte Atuando em nome de usuários para ver o fluxo completo.

Parâmetros de caminho

installationId string Obrigatório

O identificador exclusivo da instalação à qual o token será restrito. Extraído do caminho da URL; a instalação deve pertencer ao app autenticado.

Corpo da solicitação

userId string

O ID user_… do usuário, conforme retornado nos payloads de ator. Defina exatamente um entre userId ou userEmail.

userEmail string

O email da conta do usuário. Deve corresponder a exatamente um membro elegível do namespace.

scopes matriz

Strings de escopo que limitam o token. Os valores devem ser únicos e estar incluídos nos escopos aceitos da instalação. Solicitar namespace:user_tokens:write retorna InvalidArgument (HTTP 400); esse escopo autoriza a emissão e não pode ser delegado ao token. Se vazio ou omitido, nenhum limite de escopo é aplicado.

repositoryIds matriz

IDs de repositório que limitam o token. Os valores devem ser únicos e acessíveis à instalação, com no máximo 50 entradas. Se vazio ou omitido, nenhum limite de repositório é aplicado.

Campos de resposta

token string

Token de curta duração do usuário da instalação. Trate-o como um segredo e não o registre em logs.

expiresAt string

Horário de expiração no formato RFC 3339; o token expira em no máximo 15 minutos e nunca dura mais que o JWT do app usado para emiti-lo.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/app/installations/INSTALLATION_ID/user_access_tokens' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "userId": "user_01k2ja2000e0080000000000c3",  "scopes": [    "repository:pull_requests:reviews:write"  ],  "repositoryIds": [    "repo_01k2ja2000e0080000000000q4"  ]}'

Formato de resposta:

{  "token": "YOUR_INSTALLATION_USER_TOKEN",  "expiresAt": "2026-08-01T10:30:00Z"}

Listar repositórios da instalação do app

GET/v1/origin/installation/repos
AuthInstallation token

Lista os repositórios acessíveis à instalação do aplicativo autenticada.

Requer um token de acesso de instalação (oit_) emitido por CreateInstallationAccessToken.

Os parceiros descobrem seus repositórios por meio deste endpoint. As entradas da lista são resumos sucintos dos repositórios; use Obter repositório para ver os carimbos de data/hora completos. Obter repositório inclui o cloneUrl, somente na saída.

Os resultados incluem repositórios espelhados. Um espelho é somente leitura até se tornar um espelho outbound estável: consulte Repositórios espelhados.

Parâmetros de consulta

pageSize integer

Número máximo de repositórios a retornar. O padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página. O mesmo filtro deve ser usado ao solicitar as páginas seguintes. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

filter string

Filtro opcional de substring, sem diferenciar maiúsculas de minúsculas, aplicado aos nomes dos repositórios e aos namespaces dos proprietários. Um valor owner/repo com uma única barra compara cada metade com o campo correspondente. Espaços em branco no início e no fim são ignorados; um valor vazio não aplica nenhum filtro.

Campos de resposta

repositories matriz

Resumos parciais dos repositórios; use get-repository para obter carimbos de data/hora completos.

repositories[].id string

Identificador do repositório de origem.

repositories[].name string

Nome do repositório dentro do seu proprietário.

repositories[].fullName string

Nome combinado do proprietário e do repositório, como acme/api.

repositories[].owner object

Referência do proprietário para o repositório.

repositories[].owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o proprietário do repositório.

repositories[].owner.id string

Identificador do proprietário da origin.

repositories[].owner.type string

Tipo de namespace do proprietário. Disponível apenas na saída. Valores permitidos: team, user. Omitido quando desconhecido.

repositories[].defaultBranch string

Nome do branch padrão do repositório.

repositories[].mirror objeto

Metadados do espelho. Ausentes para um repositório nativo e antes da sincronização inicial do espelho estar pronta.

repositories[].mirror.source string

Origem do espelho. Valor permitido: github.

repositories[].mirror.sourceId string

Identificador opaco do repositório atribuído pela origem.

repositories[].mirror.status string

Direção efetiva do espelhamento durante uma transição, até a conclusão do cutover. Valores permitidos: inbound, outbound.

repositories[].visibility string

Visibilidade do repositório. Valores permitidos: internal, private.

repositories[].allowMergeCommit boolean

Se os pull requests podem ser integrados como merge commits.

repositories[].allowSquashMerge boolean

Se os pull requests podem ser integrados como squash merges.

repositories[].deleteBranchOnMerge boolean

Se o head branch é excluído automaticamente ao mergear.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.

repoSelectionMode string

Informa se a instalação concede acesso a todos os repositórios ou apenas aos selecionados.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/installation/repos' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "repositories": [    {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "fullName": "acme/rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      },      "defaultBranch": "main",      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "pushedAt": "2026-08-02T14:45:00Z",      "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git"    }  ],  "repoSelectionMode": "selected"}

Listar entregas do webhook

GET/v1/origin/app/webhook/deliveries
AuthApp JWT

Lista as entregas de webhook do aplicativo autenticado, da mais recente para a mais antiga.

Uma entrega é um único evento devido a um app; seu id é o valor do cabeçalho webhook-id que o receptor vê. delivered=false é o predicado de recuperação: seleciona toda entrega que nunca recebeu um 2xx, incluindo entregas cuja sequência de tentativas se esgotou durante uma interrupção.

As entregas podem ser listadas por sete dias após serem criadas e somente enquanto seu aplicativo tiver uma instalação ativa no namespace da entrega. Eventos de ciclo de vida direcionados ao aplicativo, como installation.deleted, permanecem visíveis após a desinstalação que descrevem.

Parâmetros de consulta

delivered boolean

Compara com delivered_at. delivered=false é o predicado de recuperação: ele é avaliado no servidor, portanto não pode deixar passar uma entrega cuja escada de tentativas se esgotou durante uma interrupção, como uma janela de tempo fornecida pelo chamador faz silenciosamente.

eventType string

Tipo exato do evento, por exemplo, pull_request.created.

installationId string

Restringir a uma instalação (WebhookDelivery.installation.id).

createdAfter string

Limite a data e hora de criação da entrega. Para navegação, não para recuperação.

createdBefore string

pageSize integer

Padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página.

Campos da resposta

deliveries matriz

Entregas de webhook para o aplicativo autenticado, ordenadas da mais nova para a mais antiga. Cada ID de entrega é o "webhook-id" visto pelo destinatário.

deliveries[].id string

Identificador estável da entrega e o valor webhook-id que o destinatário vê; use-o como chave de idempotência.

deliveries[].event object

O evento que esta entrega traz.

deliveries[].event.id string

Identificador do evento Origin subjacente. Também pode estar presente junto ao ID de entrega estável, mas não é a chave de idempotência.

deliveries[].event.type string

Slug do evento incluído na entrega para roteamento.

deliveries[].installation object

A instalação à qual esta entrega pertence. id é a instalação ativa atual do proprietário alvo; fica indefinida quando nenhuma existe (possível apenas para eventos do ciclo de vida direcionados ao app após uma desinstalação).

deliveries[].installation.id string

Identificador da instalação associado a um item da lista de entregas do webhook.

deliveries[].installation.target objeto

Proprietário alvo da instalação.

deliveries[].installation.target.slug string

Slug do proprietário exibido na URL, usado junto com o ID do proprietário para identificar o dono do repositório.

deliveries[].installation.target.id string

Identificador do proprietário de origem.

deliveries[].installation.target.type string

Tipo do namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

deliveries[].createdAt string

Registro de data e hora de criação da entrega usado pelos filtros de navegação createdAfter e createdBefore.

deliveries[].deliveredAt string

Ausência corresponde a delivered=false: o destinatário nunca reconheceu esta entrega com uma resposta 2xx.

deliveries[].lastAttempt objeto

A tentativa HTTP mais recente, quando existir: seu código de status de resposta, latência, erro de transporte, gatilho e horário.

deliveries[].lastAttempt.id string

Identificador da tentativa de entrega do webhook.

deliveries[].lastAttempt.deliveryId string

Identificador estável de entrega associado a esta tentativa.

deliveries[].lastAttempt.trigger string

Motivo pelo qual esta tentativa de entrega foi enviada. Valores permitidos: automatic, manual.

deliveries[].lastAttempt.responseStatusCode integer

Não definido quando o POST não produziu resposta HTTP (erro de transporte, tempo esgotado).

deliveries[].lastAttempt.latencyMs integer

Latência da tentativa de entrega em milissegundos.

deliveries[].lastAttempt.errorMessage string

Detalhes do erro de transporte quando não houve resposta HTTP; vazio caso contrário.

deliveries[].lastAttempt.attemptedAt string

Timestamp RFC 3339 desta tentativa de entrega.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app/webhook/deliveries' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "deliveries": [    {      "id": "whd_01k2ja2000e0080000000000j9",      "event": {        "id": "evt_01k2ja2000e0080000000000r5",        "type": "pull_request.created"      },      "installation": {        "id": "inst_01k2ja2000e0080000000000b2",        "target": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      },      "createdAt": "2026-08-01T09:30:00Z",      "deliveredAt": "2026-08-02T14:45:05Z",      "lastAttempt": {        "id": "wha_01k2ja2000e0080000000000k0",        "deliveryId": "whd_01k2ja2000e0080000000000j9",        "trigger": "automatic",        "responseStatusCode": 200,        "latencyMs": 182,        "attemptedAt": "2026-08-02T14:45:05Z"      }    }  ]}

Reentregar entregas de webhook em lote

POST/v1/origin/app/webhook/deliveries:batchRedeliver
AuthApp JWT

Solicita ao Origin que reenvie as entregas.

A solicitação significa "garanta que haja um envio em andamento para cada uma delas", não "adicione outro envio". Retorna um resultado para cada entrada única, em vez de falhar o lote por causa de uma entrada inválida. Desse modo, um único ID expirado não bloqueia o restante de uma página de recuperação. Um 202 significa que os envios estão na fila; a entrega em si é assíncrona, portanto, consulte List Webhook Deliveries para verificar os resultados.

Corpo da solicitação

deliveryIds matriz Obrigatório

Entregas a serem reenviadas. No máximo 100 entradas únicas, correspondendo ao limite de pageSize em List Webhook Deliveries. Duplicatas são removidas, mantendo a ordem da primeira ocorrência. Uma lista vazia ou mais de 100 entradas únicas retorna InvalidArgument (HTTP 400).

Campos de resposta

results matriz

Resultados de reentrega assíncrona aceitos, um por ID de entrega único, com os status queued, already_in_flight ou not_found.

results[].deliveryId string

ID de entrega estável solicitado correspondente a este resultado do lote.

results[].outcome string

Status da reentrega: queued quando um envio foi criado, already_in_flight quando um envio já estava em andamento e not_found caso contrário. already_in_flight é um sucesso, não um erro. not_found abrange IDs desconhecidos, IDs mais antigos que a janela de retenção de sete dias e namespaces nos quais seu app não está mais instalado.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/app/webhook/deliveries:batchRedeliver' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "deliveryIds": [    "whd_01k2ja2000e0080000000000j9"  ]}'

Formato de resposta:

{  "results": [    {      "deliveryId": "whd_01k2ja2000e0080000000000j9",      "outcome": "queued"    }  ]}

Ping do webhook

POST/v1/origin/app/webhook/pings
AuthApp JWT

Envia uma entrega de teste para o URL do webhook do app autenticado e informa a resposta do destinatário.

Use-o para verificar um destinatário enquanto configura um app, em vez de esperar por um evento real. Requer autenticação com JWT de assinatura de app, como em Obter app autenticado.

O destinatário vê a estrutura de produção: os mesmos cabeçalhos e a assinatura v1ed, que pode ser verificada com as chaves de assinatura, com webhook-event-type definido como ping e um payload que identifica o app. Um ping não pertence a nenhuma instalação; portanto, tanto o cabeçalho webhook-installation-id quanto o installationId do envelope estão ausentes.

O Origin envia o ping uma única vez, de forma síncrona, e informa o resultado na resposta. Não há novas tentativas, e um ping não é um evento de domínio: ele nunca aparece em List Webhook Deliveries e não pode ser reenviado. Uma falha do destinatário é informada na resposta, e não como um erro. Um app sem URL de webhook configurado retorna FailedPrecondition (HTTP 400).

Corpo da solicitação

A solicitação não aceita campos. Envie um objeto JSON vazio.

Campos de resposta

deliveryId string

O webhook-id da entrega de teste, correspondente ao cabeçalho recebido pelo destinatário.

eventId string

ID do evento no envelope assinado, com o mesmo valor de event.id.

delivered boolean

Verdadeiro quando o destinatário responde com um status 2xx antes do tempo limite de entrega. Sempre presente.

responseStatusCode integer

Status HTTP retornado pelo destinatário ou 0 quando nenhuma resposta é recebida porque a conexão falhou ou excedeu o tempo limite. Sempre presente.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/app/webhook/pings' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{}'

formato de resposta:

{  "deliveryId": "whd_01k2ja2000e0080000000000j9",  "eventId": "evt_01k2ja2000e0080000000000r5",  "delivered": true,  "responseStatusCode": 200}

Get App

GET/v1/origin/apps/{appId}
Scopenamespace:apps:readAuthUser access token

Retorna um único app pelo seu identificador. Esta é a leitura de gerenciamento para publishers de apps; Get Authenticated App é a autoleitura equivalente para a credencial JWT do próprio app.

Parâmetros de caminho

appId string Obrigatório

Identificador do app, com o prefixo app_.

Campos de resposta

id string

Identificador do app globalmente único, com o prefixo app_.

displayName string

Nome do app visível ao usuário.

webhookUrl string

URL HTTPS registrada que recebe as entregas de webhook do app. Vazio quando o app não recebe entregas.

events array

Assinaturas de eventos de webhook configuradas para o app. Os eventos installation.* são sempre entregues e nunca aparecem aqui.

createdAt string

Timestamp RFC 3339 da criação do app.

updatedAt string

Timestamp RFC 3339 da atualização mais recente dos metadados do app.

installationRedirectUris array

Lista de permissão de callback de instalação OAuth: URIs de redirecionamento para os quais uma instalação iniciada pelo app pode retornar, comparados exatamente no momento da autorização.

namespaceSlug string

Slug do namespace dono do app.

description string

Descrição do app fornecida pelo publisher. Vazio quando não definida.

websiteUrl string

Site do publisher. Vazio quando não definido.

defaultScopes array

Scopes padrão oferecidos na instalação do app, como strings de scope do catálogo.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/apps/{appId}' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "id": "app_01k2ja2000e0080000000000a1",  "displayName": "CI Status Bot",  "webhookUrl": "https://ci.acme.dev/webhooks/origin",  "events": [    "pull_request.created",    "pull_request.merged"  ],  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "installationRedirectUris": [    "https://ci.acme.dev/origin/setup"  ],  "namespaceSlug": "acme",  "description": "Posts CI status on pull requests.",  "websiteUrl": "https://ci.acme.dev",  "defaultScopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}

Atualizar app

PATCH/v1/origin/apps/{appId}
Scopeapp:settings:writeAuthUser access token

Atualiza as configurações de um app. Os campos omitidos permanecem inalterados, e é necessário informar pelo menos um campo definível. Limpar webhookUrl enviando uma string vazia desativa a entrega outbound de webhooks e cancela as entregas pendentes do app; definir uma URL novamente não recupera as entregas canceladas.

Parâmetros de caminho

appId string Obrigatório

Identificador do app, com o prefixo app_.

Corpo da solicitação

displayName string

Novo nome do app visível ao usuário. Não pode estar vazio quando informado.

webhookUrl string

Nova URL de entrega do webhook de saída, uma URL HTTPS absoluta. Uma string vazia desativa a entrega de webhooks e cancela as entregas pendentes do app.

events object

Substituição completa das assinaturas de webhook event. Omita para mantê-las inalteradas.

events.events matriz

O novo conjunto completo de assinaturas de eventos de webhook do app. Uma lista vazia remove as assinaturas de repositório; os eventos installation.* são sempre entregues e não podem ser listados aqui.

description string

Nova descrição do app. Omita para mantê-la inalterada; uma string vazia a remove.

websiteUrl string

Novo site do publicador. Omita para mantê-lo inalterado; uma string vazia o limpa.

installationRedirectUris object

Substituição completa da lista de permissão de callbacks de instalação do OAuth. Omita para mantê-la inalterada.

installationRedirectUris.installationRedirectUris vetor

A nova lista completa de permissões permitidas. Uma lista vazia a limpa.

defaultScopes object

Substituição completa dos scopes de instalação padrão do app. Omita para mantê-los inalterados.

defaultScopes.scopes vetor

O novo conjunto completo de escopos de instalação padrão. Uma lista vazia os remove.

Campos de resposta

id string

Identificador globalmente único do app, com o prefixo app_.

displayName string

Nome do app visível ao usuário.

webhookUrl string

URL HTTPS registrada que recebe as entregas de webhook do app. Fica vazia quando o app não recebe nenhuma entrega.

events matriz

Assinaturas de eventos de webhook configuradas para o app. Os eventos installation.* são sempre entregues e nunca aparecem aqui.

createdAt string

Carimbo de data/hora RFC 3339 da criação do app.

updatedAt string

Timestamp RFC 3339 da atualização mais recente dos metadados do app.

installationRedirectUris lista

Lista de permissão de callbacks de instalação OAuth: URIs de redirecionamento para as quais uma instalação iniciada pelo app pode retornar, comparadas de forma exata no momento da autorização.

namespaceSlug string

Slug do namespace ao qual o app pertence.

description string

Descrição do app fornecida pelo publisher. Vazia quando não definida.

websiteUrl string

Site do publisher. Vazio quando não definido.

defaultScopes vetor

Scopes padrão oferecidos na instalação do app, como strings de scope do catálogo.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/apps/APP_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "webhookUrl": "https://ci.acme.dev/webhooks/origin-v2",  "events": {    "events": [      "pull_request.created",      "pull_request.merged",      "repository.pushed"    ]  }}'

Formato de resposta:

{  "id": "app_01k2ja2000e0080000000000a1",  "displayName": "CI Status Bot",  "webhookUrl": "https://ci.acme.dev/webhooks/origin-v2",  "events": [    "pull_request.created",    "pull_request.merged",    "repository.pushed"  ],  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "installationRedirectUris": [    "https://ci.acme.dev/origin/setup"  ],  "namespaceSlug": "acme",  "description": "Posts CI status on pull requests.",  "websiteUrl": "https://ci.acme.dev",  "defaultScopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}

Adicionar chave de assinatura do app

POST/v1/origin/apps/{appId}/signing_keys
Scopeapp:settings:writeAuthUser access token

Adiciona uma chave de assinatura a um app. Cada app mantém um conjunto limitado de chaves de assinatura ativas; adicionar uma chave acima desse limite retorna FailedPrecondition (HTTP 400) até que outra chave seja revogada. Uma chave já registrada retorna AlreadyExists (HTTP 409 Conflict).

Parâmetros de caminho

appId string Obrigatório

Identificador do app, com o prefixo app_.

Corpo da solicitação

publicKey string Obrigatório

Chave pública Ed25519 em PEM SPKI a ser adicionada ao conjunto de chaves de assinatura do app.

Campos de resposta

kid string

ID de chave: o digest SHA-256 codificado em base64url da codificação SPKI DER da chave. Use-o como header kid do JWT e para revogar a chave.

createdAt string

Timestamp em RFC 3339 de quando a chave foi registrada.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/apps/APP_ID/signing_keys' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "publicKey": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAq9zTf3hL6wXe1cVj0bYs5mKR8uDnG2oAaPp4NiEkKlM=\n-----END PUBLIC KEY-----"}'

Formato de resposta:

{  "kid": "3q2xW9dK5fJm8vB1nY6cT0aZrQpLh4eGkVsN7uMxOdI",  "createdAt": "2026-08-02T14:45:00Z"}

Revogar chave de assinatura do app

DELETE/v1/origin/apps/{appId}/signing_keys/{kid}
Scopeapp:settings:writeAuthUser access token

Revoga uma chave de assinatura do app pelo respectivo ID de chave. JWTs do app assinados com uma chave revogada deixam de autenticar. A última chave de assinatura ativa não pode ser revogada; nesse caso, a solicitação retorna FailedPrecondition (HTTP 400). O corpo da resposta fica vazio.

Parâmetros de caminho

appId string Obrigatório

Identificador do app, com o prefixo app_.

kid string Obrigatório

ID da chave de assinatura a ser revogada.

Campos de resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/apps/{appId}/signing_keys/{kid}' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Listar apps do namespace

GET/v1/origin/namespaces/{namespaceSlug}/apps
Scopenamespace:apps:readAuthUser access token

Lista os apps pertencentes a um namespace, do mais recente para o mais antigo. As respostas trazem apenas metadata de exibição; para ler a configuração de webhook de um app, use Get App.

Parâmetros de caminho

namespaceSlug string Obrigatório

Slug do namespace cujos apps serão listados.

Parâmetros de consulta

pageSize integer

Número máximo de apps a retornar. O padrão é 30 quando não definido ou igual a 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página.

Campos de resposta

apps matriz

Página de apps pertencentes ao namespace.

apps[].id string

Identificador do app, único globalmente, com o prefixo app_.

apps[].displayName string

Nome do app visível ao usuário.

apps[].description string

Descrição fornecida pelo publisher. Vazia quando não definida.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não há mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/namespaces/{namespaceSlug}/apps' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "apps": [    {      "id": "app_01k2ja2000e0080000000000a1",      "displayName": "CI Status Bot",      "description": "Posts CI status on pull requests."    },    {      "id": "app_01k2ja2000e0080000000000a2",      "displayName": "Deploy Bot",      "description": ""    }  ],  "nextPageToken": ""}

Criar app

POST/v1/origin/namespaces/{namespaceSlug}/apps
Scopenamespace:apps:createAuthUser access token

Cria um app pertencente a um namespace. Os apps são criados como privados. Gere o par de chaves Ed25519 localmente e envie apenas a chave pública; o Origin a armazena para verificar os JWTs do app. URLs de webhook, tipos de evento, URIs de redirecionamento ou escopos inválidos retornam InvalidArgument (HTTP 400).

O proprietário do namespace precisa estar qualificado para gravar no Origin no momento da solicitação, assim como exigido em Criar repositório. O proprietário, se for um usuário, precisa estar em um plano Pro, Pro Student, Pro+, Ultra ou Start. Se for uma equipe, o proprietário precisa ter um plano de equipe pago e ativo, não pode usar o Privacy Mode (Legacy) e não pode ter o Origin desativado por um administrador da equipe. Um proprietário que não atenda aos requisitos retorna FailedPrecondition (HTTP 400). O Origin verifica a elegibilidade do proprietário do namespace, não a do usuário que faz a chamada.

Parâmetros de caminho

namespaceSlug string Obrigatório

Slug do namespace que será dono do app.

Corpo da solicitação

displayName string Obrigatório

Nome do app visível ao usuário. Não pode ficar vazio.

publicKey string Obrigatório

Chave pública Ed25519 em formato PEM SPKI do par de chaves de assinatura do app. Consulte Gerar uma chave de assinatura do app.

webhookUrl string

URL de entrega do webhook de saída, uma URL HTTPS absoluta. Se estiver vazia, o app não recebe nenhuma entrega de webhook.

events matriz

Assinaturas de eventos de webhook, usando slugs de eventos de Events. Tipos de evento desconhecidos são rejeitados. Uma lista vazia não inscreve o app em nenhum evento; assim, ele recebe apenas os eventos installation.*, que são sempre entregues e não podem ser listados aqui.

description string

Breve descrição do app.

websiteUrl string

Site do publisher, uma URL HTTPS absoluta.

installationRedirectUris matriz

Lista de permissões de callbacks de instalação do OAuth: URIs HTTPS absolutas sem fragmento, correspondência exata no momento da autorização.

defaultScopes lista

Scopes padrão oferecidos quando o app é instalado, na forma de strings de scope do catálogo, como repository:contents:read. As instalações continuam aceitando scopes explicitamente.

Campos de resposta

id string

Identificador globalmente único do app, com o prefixo app_.

displayName string

Nome do app visível ao usuário.

webhookUrl string

URL HTTPS registrada que recebe as entregas de webhook do app. Fica vazia quando o app não recebe entregas.

events vetor

Assinaturas de eventos de webhook configuradas para o app. Os eventos installation.* são sempre entregues e nunca aparecem aqui.

createdAt string

Timestamp RFC 3339 da criação do app.

updatedAt string

Timestamp RFC 3339 da atualização mais recente dos metadados do app.

installationRedirectUris array

Lista de permissão de callbacks de instalação OAuth: URIs de redirecionamento para os quais uma instalação iniciada pelo app pode retornar, comparadas exatamente no momento da autorização.

namespaceSlug string

Slug do namespace que é dono do app.

description string

Descrição do app fornecida pelo publisher. Vazia quando não definida.

websiteUrl string

Site do publisher. Vazio quando não definido.

defaultScopes array

Escopos padrão oferecidos quando o app é instalado, como strings de escopo do catálogo.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/namespaces/NAMESPACE_SLUG/apps' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "displayName": "CI Status Bot",  "publicKey": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAv7wFoV1bC9yKq3nZ8dQmXh5uJb2tR4sEwG6aP0iN8kY=\n-----END PUBLIC KEY-----",  "webhookUrl": "https://ci.acme.dev/webhooks/origin",  "events": [    "pull_request.created",    "pull_request.merged"  ],  "description": "Posts CI status on pull requests.",  "websiteUrl": "https://ci.acme.dev",  "installationRedirectUris": [    "https://ci.acme.dev/origin/setup"  ],  "defaultScopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}'

Formato de resposta:

{  "id": "app_01k2ja2000e0080000000000a1",  "displayName": "CI Status Bot",  "webhookUrl": "https://ci.acme.dev/webhooks/origin",  "events": [    "pull_request.created",    "pull_request.merged"  ],  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-01T09:30:00Z",  "installationRedirectUris": [    "https://ci.acme.dev/origin/setup"  ],  "namespaceSlug": "acme",  "description": "Posts CI status on pull requests.",  "websiteUrl": "https://ci.acme.dev",  "defaultScopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}

Adicionar repositórios à instalação do app

POST/v1/origin/namespaces/{namespaceSlug}/installations/{installationId}/repos
Scopenamespace:installations:writeAuthUser access token

Adiciona repositórios à seleção de repositórios de uma instalação e retorna a instalação atualizada. A gravação é cumulativa: os repositórios listados são adicionados à seleção atual, uma solicitação cujos repositórios já têm acesso concedido é bem-sucedida sem alterar nada, e os escopos da instalação nunca mudam.

Todos os repositórios listados devem pertencer ao namespace de destino, caso contrário a solicitação retorna FailedPrecondition (HTTP 400) e não concede nada. O mesmo erro abrange uma instalação que já contém todos os repositórios do namespace (repoSelectionMode é all), uma que está suspensa e uma que é anterior aos escopos por instalação. Uma instalação que não existe ou que pertence a outro namespace retorna 404; a mensagem indica a página de consentimento a ser aberta quando o app nunca foi instalado no namespace, pois este endpoint não pode realizar a primeira instalação.

O chamador deve ser uma credencial de usuário do Cherri Code com acesso ao gerenciamento de instalações no namespace. Tokens de app, tokens de acesso da instalação e contas de serviço não podem alterar os repositórios de uma instalação.

Parâmetros de caminho

namespaceSlug string Obrigatório

Slug do namespace ao qual a instalação pertence.

installationId string Obrigatório

Identificador da instalação.

Corpo da solicitação

repoIds matriz Obrigatório

IDs de repositórios a serem adicionados à seleção da instalação. É necessário informar pelo menos um; os valores duplicados são removidos, e repositórios que já fazem parte da seleção são aceitos sem alterações. Todos os repositórios listados devem pertencer ao namespace; caso contrário, a solicitação falhará e nenhuma concessão será concedida.

Campos de resposta

id string

Identificador da instalação que o app armazena e usa para emitir tokens de acesso da instalação.

appId string

Identificador do app instalado.

target objeto

Owner selecionado pelo cliente para esta instalação.

target.slug string

Slug do proprietário visível na URL, usado com o ID do proprietário para identificar o proprietário do repositório.

target.id string

Identificador do proprietário da origin.

target.type string

Tipo do namespace do proprietário. Apenas saída. Valores permitidos: team, user. Omitido quando desconhecido.

createdAt string

Timestamp de criação da instalação no formato RFC 3339.

updatedAt string

Timestamp RFC 3339 da atualização mais recente da instalação.

repoSelectionMode string

Modo de concessão do repositório: exatamente todos ou selecionados.

scopes matriz

Escopos aprovados para a instalação.

installedBy object

O usuário que instalou o aplicativo originalmente, não o ator que deu o reconsentimento mais recentemente. Somente leitura. Ausente quando não for mais possível ler o registro desse usuário.

installedBy.id string

Identificador público do usuário, com o prefixo user_.

installedBy.email string

Endereço de email do usuário.

installedBy.displayName string

Nome de exibição do usuário: o nome e o sobrenome da conta, separados por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

installedBy.handle string

O identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

suspendedAt string

Timestamp RFC 3339 definido enquanto a instalação está suspensa. Omitido enquanto a instalação está ativa.

deletedAt string

Timestamp RFC 3339 da exclusão da instalação. Incluído apenas no snapshot do webhook installation.deleted; uma instalação excluída deixa de ser resolvida pela API, portanto este endpoint nunca a retorna.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/namespaces/NAMESPACE_SLUG/installations/INSTALLATION_ID/repos' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "repoIds": [    "repo_01k2ja2000e0080000000000q4",    "repo_01k2ja2000e0080000000000q5"  ]}'

Formato de resposta:

{  "id": "inst_01k2ja2000e0080000000000b2",  "appId": "app_01k2ja2000e0080000000000a1",  "target": {    "slug": "acme",    "id": "ns_01k2ja2000e0080000000000p3",    "type": "team"  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "repoSelectionMode": "selected",  "scopes": [    "repository:contents:read",    "repository:pull_requests:read",    "repository:metadata:read"  ]}

Repositórios

cloneUrl é uma URL HTTPS de clonagem disponível apenas na saída. Obter repositório inclui cloneUrl.

Os parceiros encontram seus repositórios por meio de Listar repositórios da instalação do app. A listagem e a criação de repositórios em todo o namespace não fazem parte da API de parceiros.

Listar namespaces

GET/v1/origin/namespaces
AuthUser access token

Lista os namespaces nos quais você pode listar repositórios, ordenados por slug.

Os candidatos são os namespaces das suas equipes, seu namespace pessoal e os namespaces que contêm repositórios aos quais você recebeu acesso. Somente aqueles em que você tem namespace:repositories:read são retornados; portanto, cada resultado é um ownerSlug válido para Listar repositórios.

O chamador deve ser uma credencial de usuário do Cursor; a chamada não exige nenhum escopo próprio. Tokens de app, tokens de acesso da instalação e contas de serviço recebem PermissionDenied (HTTP 403).

Parâmetros de consulta

pageSize integer

Número máximo de namespaces a retornar. O valor padrão é 30 quando não definido ou igual a 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco obtido do next_page_token de uma resposta anterior. Vazio na primeira página. Em uma solicitação de acompanhamento, o pageSize se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

namespaces array

Namespaces nos quais você pode listar repositórios, ordenados por slug.

namespaces[].namespace object

Referência ao proprietário do namespace.

namespaces[].namespace.slug string

Slug do proprietário usado em URLs. Use-o como ownerSlug em Listar repositórios.

namespaces[].namespace.id string

Identificador do proprietário no Origin.

namespaces[].namespace.type string

Tipo do namespace do proprietário. Disponível apenas na saída. Valores permitidos: team, user. Omitido quando desconhecido.

namespaces[].viewerCanCreateRepositories boolean

Indica se, para você, Criar repositório neste namespace seria aprovado na autorização e nas verificações de plano e configurações do proprietário.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não há mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/namespaces' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "namespaces": [    {      "namespace": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      },      "viewerCanCreateRepositories": true    },    {      "namespace": {        "slug": "jane",        "id": "ns_01k2ja2000e0080000000000p4",        "type": "user"      },      "viewerCanCreateRepositories": false    }  ]}

Listar repositórios

GET/v1/origin/repos/{ownerSlug}
Scopenamespace:repositories:readAuthUser access token

Lista os repositórios de uma entidade proprietária.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug da entidade proprietária pai.

Parâmetros de consulta

pageSize integer

Número máximo de repositórios a retornar. O padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio para a primeira página. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

filter string

Filtro opcional por substring sem diferenciar maiúsculas e minúsculas.

Campos da resposta

repositories matriz

Repositórios pertencentes ao proprietário solicitado.

repositories[].id string

Identificador do repositório de origem.

repositories[].name string

Nome do repositório dentro do seu proprietário.

repositories[].fullName string

Nome combinado do proprietário e do repositório, como acme/api.

repositories[].owner objeto

Referência do proprietário do repositório.

repositories[].owner.slug string

Slug do proprietário visível na URL, usado com o ID do proprietário para identificar o dono do repositório.

repositories[].owner.id string

Identificador do proprietário de origem.

repositories[].owner.type string

Tipo do namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

repositories[].defaultBranch string

Nome do branch padrão do repositório.

repositories[].createdAt string

Registro de data e hora de criação do repositório no formato RFC 3339.

repositories[].updatedAt string

Marca de tempo de atualização do repositório no formato RFC 3339.

repositories[].pushedAt string

Carimbo de data/hora RFC 3339 do push mais recente exibido pela resposta completa do repositório.

repositories[].cloneUrl string

URL HTTPS de clonagem somente de saída; a resposta de get-repository a inclui.

repositories[].mirror objeto

Metadados do espelho. Ausentes para um repositório nativo e antes que a sincronização inicial do espelho esteja pronta.

repositories[].mirror.source string

Origem do espelho. Valor permitido: github.

repositories[].mirror.sourceId string

Identificador opaco do repositório atribuído pela origem.

repositories[].mirror.status string

Direção efetiva do espelhamento durante uma transição, até a conclusão do cutover. Valores permitidos: inbound, outbound.

repositories[].visibility string

Visibilidade do repositório. Valores permitidos: internal, private.

repositories[].allowMergeCommit boolean

Se os pull requests podem ser integrados como merge commits.

repositories[].allowSquashMerge boolean

Se pull requests podem ser integrados como squash merges.

repositories[].deleteBranchOnMerge boolean

Se o head branch é excluído automaticamente ao mergear.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "repositories": [    {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "fullName": "acme/rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      },      "defaultBranch": "main",      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "pushedAt": "2026-08-02T14:45:00Z",      "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git"    }  ]}

Obter repositório

GET/v1/origin/repos/{ownerSlug}/{repoName}
Scoperepository:metadata:readAuthInstallation tokenUser access token

Retorna um único repositório pelo seu identificador (owner_id, name).

cloneUrl é uma URL HTTPS de clonagem apenas de saída. O método Get repository inclui cloneUrl.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

Campos da resposta

id string

Identificador do repositório de origem.

name string

Nome do repositório dentro do proprietário.

fullName string

Nome combinado do proprietário e do repositório, como acme/api.

owner object

Referência do proprietário para o repositório.

owner.slug string

Slug do proprietário visível na URL usado juntamente com o ID do proprietário para identificar o dono do repositório.

owner.id string

Identificador do proprietário de origem.

owner.type string

Tipo de namespace do proprietário. Somente leitura. Valores permitidos: team, user. Omitido quando desconhecido.

defaultBranch string

Nome do branch padrão do repositório.

createdAt string

Carimbo de data/hora de criação do repositório em RFC 3339.

updatedAt string

Timestamp de atualização do repositório no formato RFC 3339.

pushedAt string

Timestamp RFC 3339 do push mais recente exibido pela resposta completa do repositório.

cloneUrl string

URL HTTPS de clonagem apenas de saída; a resposta get-repository a inclui.

mirror object

Metadados do espelho. Ausentes para um repositório nativo e antes da sincronização inicial do espelho estar pronta.

mirror.source string

Fonte de espelhamento. Valor permitido: github.

mirror.sourceId string

Identificador opaco de repositório atribuído pela origem.

mirror.status string

Direção efetiva do espelhamento durante uma transição, até a conclusão do cutover. Valores permitidos: inbound, outbound.

visibility string

Visibilidade do repositório. Valores permitidos: internal, private.

allowMergeCommit boolean

Se os pull requests podem ser integrados como merge commits.

allowSquashMerge boolean

Se pull requests podem ser integrados como squash merges.

deleteBranchOnMerge boolean

Indica se o head branch é excluído automaticamente ao fazer merge.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "repo_01k2ja2000e0080000000000q4",  "name": "rocket",  "fullName": "acme/rocket",  "owner": {    "slug": "acme",    "id": "ns_01k2ja2000e0080000000000p3",    "type": "team"  },  "defaultBranch": "main",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "pushedAt": "2026-08-02T14:45:00Z",  "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git"}

Atualizar repositório

PATCH/v1/origin/repos/{ownerSlug}/{repoName}
Scoperepository:settings:writeAuthInstallation tokenUser access token

Atualiza as configurações do repositório. Os campos omitidos permanecem inalterados, e é necessário informar pelo menos um campo configurável.

As configurações são aplicadas em grupos independentes, numa ordem fixa: branch padrão, exclusão automática da branch de head, visibilidade e, por último, métodos de merge. A atualização não é atômica entre os grupos. Quando um grupo é rejeitado, os grupos anteriores a ele nessa ordem já foram aplicados e permanecem aplicados; então faça um retry com o grupo rejeitado corrigido para convergir no estado solicitado. A resposta retorna o repositório no estado do último grupo aplicado.

Uma solicitação que não define nenhum campo retorna InvalidArgument (HTTP 400). Uma alteração simultânea na branch padrão retorna 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

Corpo da solicitação

defaultBranch string

Nova branch padrão. Deve indicar uma branch existente. Compatível apenas com repositórios que não fazem pull de uma origem upstream nem push para ela; outros repositórios retornam FailedPrecondition (HTTP 400).

allowMergeCommit boolean

Indica se as pull requests podem ser integradas como commits de merge. Deve ser enviado junto com allowSquashMerge, e pelo menos um dos dois deve ser true. Enviar um sem o outro retorna InvalidArgument (HTTP 400).

allowSquashMerge boolean

Indica se os pull requests podem ser integrados como squash merges. Deve ser enviado junto com allowMergeCommit, e pelo menos um dos dois deve ser true. Enviar um sem o outro retorna InvalidArgument (HTTP 400).

deleteBranchOnMerge boolean

Indica se a branch head é excluída automaticamente ao fazer merge. Compatível apenas com repositórios cujos pull requests vivem nesta API; um repositório que faz pull de uma fonte upstream retorna FailedPrecondition (HTTP 400).

visibility string

Nova visibilidade do repositório. Valores permitidos: internal, private. Omita este campo para manter a visibilidade inalterada.

Campos da resposta

id string

Identificador do repositório de origem.

name string

Nome do repositório dentro do proprietário.

fullName string

Nome combinado do proprietário e do repositório, como acme/api.

owner object

Referência do owner do repositório.

owner.slug string

Slug do proprietário voltado para URL usado com o ID do proprietário para identificar o proprietário do repositório.

owner.id string

Identificador do proprietário da origem.

owner.type string

Tipo do namespace do owner. Disponível apenas na saída. Valores permitidos: team, user. Omitido quando desconhecido.

defaultBranch string

Nome do branch padrão do repositório.

createdAt string

Registro de data e hora da criação do repositório no formato RFC 3339.

updatedAt string

Carimbo de data/hora da atualização do repositório no formato RFC 3339.

pushedAt string

Registro de data e hora RFC 3339 do push mais recente exibido pela resposta completa do repositório.

cloneUrl string

URL HTTPS de clonagem disponível apenas na saída; a resposta de get-repository a inclui.

mirror object

Metadados do espelho. Ausente para repositórios nativos e antes que o sync inicial do espelho esteja pronto.

mirror.source string

Fonte a espelhar. Valor permitido: github.

mirror.sourceId string

Identificador opaco do repositório atribuído pela origem.

mirror.status string

Direção efetiva do espelhamento durante uma transição, até a conclusão do cutover. Valores permitidos: inbound, outbound.

visibility string

Visibilidade do repositório. Valores permitidos: internal, private.

allowMergeCommit boolean

Se os pull requests podem ser integrados como commits de merge.

allowSquashMerge boolean

Se os pull requests podem ser integrados como squash merges.

deleteBranchOnMerge boolean

Indica se a branch de origem é excluída automaticamente ao fazer merge.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "defaultBranch": "main",  "allowMergeCommit": false,  "allowSquashMerge": true,  "deleteBranchOnMerge": true,  "visibility": "private"}'

Formato da resposta:

{  "id": "repo_01k2ja2000e0080000000000q4",  "name": "rocket",  "fullName": "acme/rocket",  "owner": {    "slug": "acme",    "id": "ns_01k2ja2000e0080000000000p3",    "type": "team"  },  "defaultBranch": "main",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "pushedAt": "2026-08-02T14:45:00Z",  "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git",  "visibility": "private",  "allowMergeCommit": false,  "allowSquashMerge": true,  "deleteBranchOnMerge": true}

Criar repositório

POST/v1/origin/repos/{ownerSlug}
Scopenamespace:repositories:createAuthUser access token

Cria um repositório pertencente a um proprietário.

O proprietário deve estar apto a gravar no Origin no momento da solicitação. Um proprietário usuário deve estar em um plano Pro, Pro Student, Pro+, Ultra ou Start. Um proprietário de equipe deve ter um plano de equipe pago ativo, não pode estar no Privacy Mode (Legacy) e não pode ter o Origin desativado por um administrador da equipe. Um proprietário inelegível retorna FailedPrecondition (HTTP 400). A leitura de repositórios existentes não exige esse requisito.

Os nomes de repositório são reivindicados sem diferenciar maiúsculas de minúsculas. Um nome que difira apenas no uso de maiúsculas e minúsculas de um repositório que o proprietário já possui é rejeitado, portanto widgets e Widgets não podem coexistir em um mesmo namespace. O nome que você envia é armazenado exatamente como enviado.

O primeiro push para um novo repositório pode alterar o branch padrão. Quando esse push apenas cria branches e nenhum deles é o branch padrão armazenado do repositório, o Origin define o branch criado como branch padrão ou usa main ou master quando o push cria vários branches e um desses nomes está entre eles. Fora isso, o branch padrão permanece inalterado. Consulte o valor atual em Obter repositório.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug da entidade proprietária pai.

Corpo da solicitação

name string Obrigatório

Nome do repositório, exclusivo do proprietário. Obrigatório ao criar.

defaultBranch string

Nome do branch padrão. Sempre definido nas respostas. Ao criar, omitir este campo ou deixá-lo vazio define "main" por padrão.

Campos de resposta

id string

Identificador do repositório de origem.

name string

Nome do repositório dentro do proprietário.

fullName string

Nome combinado do proprietário e do repositório, como acme/api.

owner object

Referência do proprietário para o repositório.

owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o dono do repositório.

owner.id string

Identificador do proprietário de origem.

owner.type string

Tipo de namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

defaultBranch string

Nome do branch padrão do repositório.

createdAt string

Timestamp de criação do repositório em RFC 3339.

updatedAt string

Carimbo de data/hora de atualização do repositório em RFC 3339.

pushedAt string

Timestamp RFC 3339 do push mais recente exibido na resposta completa do repositório.

cloneUrl string

URL HTTPS de clonagem somente de saída; a resposta de get-repository a inclui.

mirror object

Metadados do espelho. Ausentes para um repositório nativo e antes de a sincronização inicial do espelho estar pronta.

mirror.source string

Origem do espelhamento. Valor permitido: github.

mirror.sourceId string

Identificador opaco do repositório atribuído pela origem.

mirror.status string

Direção efetiva do espelhamento durante uma transição, até a conclusão do cutover. Valores permitidos: inbound, outbound.

visibility string

Visibilidade do repositório. Valores permitidos: internal, private.

allowMergeCommit boolean

Se pull requests podem ser integrados como merge commits.

allowSquashMerge boolean

Se pull requests podem ser integrados como squash merges.

deleteBranchOnMerge boolean

Define se o head branch é excluído automaticamente ao mergear.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "name": "rocket",  "defaultBranch": "main"}'

Formato da resposta:

{  "id": "repo_01k2ja2000e0080000000000q4",  "name": "rocket",  "fullName": "acme/rocket",  "owner": {    "slug": "acme",    "id": "ns_01k2ja2000e0080000000000p3",    "type": "team"  },  "defaultBranch": "main",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "pushedAt": "2026-08-02T14:45:00Z",  "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git"}

Listar branches

GET/v1/origin/repos/{ownerSlug}/{repoName}/branches
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista as branches do repositório e seus commits mais recentes em ordem alfabética, com paginação por page_size e page_token.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

Parâmetros de consulta

pageSize integer

Número máximo de branches retornadas. O valor padrão é 30 quando não definido ou igual a 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Deixe vazio para a primeira página. Codifica a posição de retomada. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

branches matriz

Registros paginados de branches contendo o nome da branch e o SHA do commit de ponta.

branches[].name string

Nome da branch.

branches[].commit object

O commit na ponta da branch.

branches[].commit.sha string

SHA hexadecimal completo do commit na ponta da branch.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não há mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/branches' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "branches": [    {      "name": "main",      "commit": {        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"      }    }  ]}

Obter tarball do repositório

GET/v1/origin/repos/{ownerSlug}/{repoName}/tarball/{ref}
Scoperepository:contents:readAuthInstallation tokenUser access token

Baixa um tar compactado com gzip da árvore do repositório em ref.

O Origin indexa o arquivo pelo repositório e pelo commit para o qual ref é resolvida. A primeira solicitação para um determinado commit responde 200 com Content-Type: application/gzip e transmite o arquivo como corpo da resposta. Solicitações posteriores para o mesmo commit respondem 302 com corpo vazio e uma URL de download assinada em Location, válida por 15 minutos; siga o redirecionamento para baixar os bytes. O arquivo contém um único diretório de nível superior chamado {ownerSlug}-{repoName}-{shortSha}/, em que shortSha são os 7 primeiros caracteres hexadecimais do commit resolvido, correspondendo ao layout do endpoint de tarball do GitHub. Um repositório vazio retorna ABORTED (HTTP 409 Conflict), e uma referência do Git que não é resolvida retorna 404.

Envie a referência do Git como parâmetro de consulta, em vez de segmento de caminho, para especificar uma referência do Git que contenha "/": GET /v1/origin/repos/{ownerSlug}/{repoName}/tarball?ref=refs/heads/main. Omita-a para arquivar a branch padrão do repositório.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

ref string Obrigatório

SHA do commit (hex completo ou abreviado), nome simples de branch ou tag, refs/heads/... ou refs/tags/... totalmente qualificado, ou HEAD simbólico. Não é um glob nem revspec, portanto <rev>~3 é rejeitado. Vazio usa a branch padrão do repositório.

Campos de resposta

sha string

ID do objeto de commit resolvido: hexadecimal de 40 ou 64 caracteres. Retornado para chamadores Connect e JSON; em REST, consulte-o no nome do arquivo ou na URL assinada.

downloadUrl string

URL de download assinada de curta duração, válida por 15 minutos. Vazia quando a resposta transmite o arquivo inline, ou seja, na primeira solicitação para este repositório e commit. Em REST, a mesma URL é enviada no cabeçalho Location da resposta 302.
curl --request GET --location --output repo.tar.gz \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/tarball/HEAD' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "downloadUrl": "https://artifacts.origin.cursor.com/tarballs/0192f7a4-6c1e-7b3a-9f21-3d54c9a7e6b0/9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4.tar.gz?Expires=1767225600&Signature=EXAMPLE&Key-Pair-Id=KEXAMPLE123",  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"}

Sincronizar espelhamento

POST/v1/origin/repos/{ownerSlug}/{repoName}:syncMirror
Scoperepository:contents:readAuthInstallation tokenUser access token

Sincroniza uma referência de um repositório espelhado com sua fonte upstream. Retorna HTTP 200 quando o destino de sincronização é alcançado ou HTTP 202 quando a sincronização ainda está pendente. wait=false (o padrão) agenda a sincronização e geralmente retorna 202; retorna 200 imediatamente quando sha já pode ser alcançado a partir de ref. wait=true bloqueia até que o destino seja alcançado ou o tempo máximo de espera (~2 minutos) expire; nesse caso, ainda retorna 202, e a sincronização continua em segundo plano. Repositórios que não fazem pull de uma fonte upstream são rejeitados.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária

Corpo da solicitação

ref string Obrigatório

Nome completo da referência do Git a consultar. Deve começar com refs/ e especificar uma referência após esse prefixo, por exemplo, refs/heads/main ou refs/tags/v1. Nomes curtos, como main, são rejeitados com INVALID_ARGUMENT.

wait boolean

Quando verdadeiro, bloqueia até a sincronização ser concluída ou o tempo máximo de espera expirar. O padrão é falso.

sha string

ID completo opcional do objeto de commit: hexadecimal de 40 ou 64 caracteres. Omita ou deixe vazio para aguardar a ponta de ref. Quando definido e acessível a partir de ref, a chamada retorna antecipadamente sem aguardar a conclusão de outras tarefas de espelhamento. Outros valores são rejeitados com INVALID_ARGUMENT.

campo de resposta

synced boolean

Verdadeiro quando se sabe que o destino de sincronização foi alcançado, falso enquanto a sincronização ainda está pendente. Sempre presente, refletindo o status HTTP: 200 quando verdadeiro, 202 quando falso.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME:syncMirror' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "ref": "refs/heads/main",  "wait": true}'

Formato de resposta:

{  "synced": true}

Os endpoints de transição de espelhamento estão documentados na Origin Migration API. Sincronizar espelhamento permanece nesta página.

Desvincular espelho do repositório

Consulte Desvincular espelho do repositório.

Obter job de transição de espelhamento

Consulte Obter job de transição de espelhamento.

Obter job de transição de espelhamento ativo

Veja Obter job de transição de espelhamento ativo.

Forçar transição do espelhamento do repositório

Consulte Forçar transição do espelhamento do repositório.

Fazer transição do espelhamento do repositório

Consulte Fazer transição do espelhamento do repositório.

Verificações

  • O primeiro upsert de execução cria automaticamente a suíte correspondente.
  • As verificações obrigatórias são associadas ao app instalador, à key da suíte e, opcionalmente, à key de uma execução. name serve apenas para exibição e não é usado na associação.
  • Mantenha os valores de key estáveis entre as tentativas e legíveis para os usuários, pois a configuração de verificações obrigatórias é baseada neles.
  • Reutilize externalId para atualizar uma tentativa, o que descarta o resultado anterior dessa tentativa; use um novo externalId ao tentar novamente, para que a tentativa anterior permaneça no histórico.
  • Use checkRun.output para resultados legíveis por humanos:
    • title: título curto do resultado, com até 255 caracteres.
    • summary: resumo principal em Markdown, com até 65.535 bytes UTF-8.
    • text: detalhes estendidos em Markdown, com até 65.535 bytes UTF-8.
  • Use detailsUrl para criar um link para a página de resultados externos do provedor.

Execuções de verificação define qual tentativa é a atual, como externalUpdatedAt ordena as gravações e o que outcome relata, além das regras de timestamp e prazo compartilhadas por esses endpoints.

Publicar execução de verificação

POST/v1/origin/repos/{ownerSlug}/{repoName}/check-runs
Scoperepository:checks:writeAuthInstallation token

Cria ou atualiza uma suíte de verificações + uma execução de verificação usando um token de acesso da instalação com repository:checks:write. A gravação é atribuída ao app que possui a instalação autenticada. Uma chamada repetida com os mesmos (repo, head_sha, suite.key, check.key) atualiza a execução de verificação existente, em vez de criar uma duplicata.

O endpoint resolve ou cria atomicamente a tentativa da suíte e faz upsert de uma tentativa de execução. externalUpdatedAt ordena as atualizações para a mesma identidade de execução; tentativas obsoletas não podem sobrescrever um estado mais recente, e uma conclusão cancelled não pode substituir um resultado de aprovação já armazenado; consulte Ordenação de gravações. Uma publicação ignorada por estar obsoleta e uma publicação que repete os valores armazenados ainda retornam 200 com a suíte e a execução armazenadas; portanto, leia outcome para distinguir ignored_stale e unchanged de created e updated. updatedAt não se altera em nenhum dos dois casos, portanto não pode distingui-los.

Dentro de uma suíte, a tentativa atual para uma chave de execução key é a execução com o externalUpdatedAt mais recente, desempatando por createdAt e depois por id, do mais recente para o mais antigo. Cada (actor, key, externalId) informado para um commit corresponde a uma tentativa de suíte, e a tentativa atual para cada (actor, key) é aquela cujas execuções têm o externalUpdatedAt mais recente; uma suíte sem execuções é classificada pelo seu próprio createdAt. Uma execução só é atual para o seu commit enquanto a suíte for a tentativa atual do commit; assim, uma execução publicada com um externalId de suíte mais antigo permanece oculta nas listagens com escopo no commit enquanto outra tentativa dessa suíte tiver atividade mais recente. Em ambos os níveis, uma tentativa cancelada não substitui uma aprovada; Tentativas e a tentativa atual explica a regra. Tentativas substituídas continuam acessíveis por id.

deadlineAt registra um prazo opcional para a execução. O Origin o armazena, o retorna nas leituras e o limpa quando a execução atinge completed. Um prazo com mais de 24 horas no futuro é rejeitado com InvalidArgument (HTTP 400) em vez de ser limitado.

Quando o prazo passa para uma execução ainda in_progress, o Origin conclui a execução por conta própria com a conclusão timed_out, definindo completedAt caso a execução ainda não o tenha, e envia repository.check_run.completed. A expiração ocorre como uma varredura periódica em vez de um temporizador por execução, portanto a expiração acontece alguns minutos após o prazo, e não no exato momento dele. Por padrão, a varredura é executada aproximadamente a cada 30 minutos, uma configuração operacional que pode mudar. Uma execução queued nunca expira, assim como não expira uma execução que não tenha deadlineAt. Concluir a execução você mesmo antes do prazo a limpa. O Origin deixa o externalUpdatedAt da execução inalterado quando a encerra por tempo esgotado, então uma conclusão posterior do seu provedor ainda pode sobrescrever a conclusão timed_out.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

Corpo da solicitação

headSha string Obrigatório

SHA do commit HEAD contra o qual a execução da verificação é reportada (hexadecimal de 40 ou 64 caracteres).

checkSuite objeto Obrigatório

A suíte à qual o check run pertence; inserida ou atualizada juntamente com o check run.

checkSuite.key string Obrigatório

Chave estável, escolhida pelo aplicativo, que identifica a suíte lógica entre as tentativas.

checkSuite.name string Obrigatório

Nome da suíte voltada para o usuário.

checkSuite.detailsUrl string

Link opcional para mais detalhes sobre a suíte como um todo.

checkSuite.externalId string Obrigatório

Identidade imutável atribuída pelo provedor para esta tentativa de suíte.

checkRun objeto Obrigatório

O check run a ser criado ou atualizado (upsert).

checkRun.key string Obrigatório

Chave estável, escolhida pelo app, que identifica a verificação lógica entre tentativas.

checkRun.name string Obrigatório

Nome do check-run voltado para humanos.

checkRun.status string Obrigatório

Valores configuráveis: CHECK_RUN_LIFECYCLE_STATUS_UNSPECIFIED, queued, in_progress, completed. O esquema também lista rerequested, que somente o Origin define ao solicitar novamente; uma solicitação que contenha esse valor retorna InvalidArgument (HTTP 400).

checkRun.conclusion string

Obrigatório se e somente se status == completed. Valores permitidos: CHECK_RUN_CONCLUSION_UNSPECIFIED, success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRun.externalUpdatedAt string Obrigatório

Horário da última atualização do sistema externo. Usado para ordenar atualizações concorrentes, para que uma tentativa antiga não possa sobrescrever um estado mais recente.

checkRun.startedAt string

Quando a execução da verificação começou. Um valor mais de 60 segundos no futuro retorna InvalidArgument (HTTP 400).

checkRun.completedAt string

Quando a execução da verificação é concluída. Um valor com mais de 60 segundos no futuro retorna InvalidArgument (HTTP 400), assim como um valor anterior a startedAt quando ambos são enviados juntos.

checkRun.detailsUrl string

Link opcional para mais detalhes sobre esta execução específica de verificação (por exemplo, a URL de job/build do provedor).

checkRun.externalId string Obrigatório

Identidade imutável atribuída pelo provedor para esta tentativa de verificação.

checkRun.output object

Saída legível por humanos desta execução de verificação.

checkRun.output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRun.output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.deadlineAt string

Prazo para a execução da verificação, como um carimbo de data/hora RFC 3339. Valores com mais de 24 horas no futuro são rejeitados com InvalidArgument (HTTP 400), em vez de terem seu valor limitado. Omita-o ao criar para registrar que não há prazo; omita-o ao atualizar para manter inalterado o prazo armazenado.

checkRun.isRerequestable boolean

Declara que a execução pode ser executada novamente mediante solicitação. Defini-la como true obriga seu app a assinar repository.check_run.rerequested e a responder a cada entrega publicando uma nova execução para o mesmo head SHA e key: ou uma nova execução com um novo externalId, que mantém a tentativa anterior como histórico, ou uma atualização da execução re-solicitada com o mesmo externalId, que a atualiza no lugar. Até que essa nova publicação chegue, a execução re-solicitada aparece como pendente no estado de verificação mais recente do commit; portanto, uma verificação obrigatória bloqueia a mesclagem e o pull request mostra a execução como aguardando sua reexecução. Declarar a re-solicitabilidade sem responder deixa a verificação sem atendimento. O Origin não verifica a assinatura quando você publica. Omita-o para manter o valor armazenado, que é false em uma nova execução; envie false para retirar a declaração.

Campos de resposta

checkSuite objeto

A suíte de verificação upsertada.

checkSuite.id string

Identificador da suíte de verificação atribuído pelo servidor.

checkSuite.repository objeto

Referência do repositório para a suíte.

checkSuite.repository.id string

Identificador do repositório em uma referência de contêiner.

checkSuite.repository.name string

Nome do repositório em uma referência de contêiner.

checkSuite.repository.owner objeto

Referência do proprietário do repositório.

checkSuite.repository.owner.slug string

Slug do proprietário visível na URL usado juntamente com o ID do proprietário para identificar o proprietário do repositório.

checkSuite.repository.owner.id string

Identificador do proprietário da Origin.

checkSuite.repository.owner.type string

Tipo de namespace do proprietário. Disponível apenas na saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkSuite.sha string

SHA do commit ao qual a suíte está vinculada.

checkSuite.key string

Identidade estável de verificação obrigatória escolhida pelo app. As verificações obrigatórias correspondem ao app e a esta chave, não ao nome.

checkSuite.name string

Nome da suíte apenas para exibição; não é usado para correspondência de verificações obrigatórias.

checkSuite.detailsUrl string

Link opcional para os resultados em nível de suíte do provedor.

checkSuite.createdAt string

Timestamp de criação da suíte no formato RFC 3339.

checkSuite.updatedAt string

Timestamp RFC 3339 para a atualização mais recente da suíte.

checkSuite.externalId string

Identidade do provedor para esta tentativa de suíte.

checkSuite.actor objeto

Agente público que produziu a suíte.

checkSuite.actor.user objeto

Variante de usuário do ator. Definida quando um usuário executou a ação.

checkSuite.actor.user.id string

Identificador público do usuário.

checkSuite.actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

checkSuite.actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

checkSuite.actor.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

checkSuite.actor.app objeto

Variante de app do ator. Definida quando um app executou a ação.

checkSuite.actor.app.id string

Identificador público do app.

checkSuite.actor.app.displayName string

O nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

checkSuite.actor.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkSuite.actor.serviceAccount.id string

Identificador público da conta de serviço.

checkRun objeto

A execução de verificação criada ou atualizada (upsert).

checkRun.id string

Identificador da execução de verificação atribuído pelo servidor.

checkRun.repository objeto

Referência do repositório para a execução.

checkRun.repository.id string

Identificador do repositório em uma referência de contêiner.

checkRun.repository.name string

Nome do repositório em uma referência de contêiner.

checkRun.repository.owner objeto

Referência do proprietário do repositório.

checkRun.repository.owner.slug string

Slug do proprietário visível na URL usado juntamente com o ID do proprietário para identificar o proprietário do repositório.

checkRun.repository.owner.id string

Identificador do proprietário da Origin.

checkRun.repository.owner.type string

Tipo de namespace do proprietário. Disponível apenas na saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkRun.checkSuite objeto

Referência à suíte de verificação que a contém.

checkRun.checkSuite.id string

Identificador atribuído pelo servidor da suíte de verificação que contém esta execução.

checkRun.sha string

SHA do commit ao qual a execução está vinculada.

checkRun.key string

Identidade lógica estável escolhida pelo app; as verificações obrigatórias podem corresponder ao app, à chave da suíte e a esta chave.

checkRun.name string

Nome da execução apenas para exibição; não é usado para correspondência de verificações obrigatórias.

checkRun.status string

Status do ciclo de vida: enfileirado, em_progresso, concluído ou re-solicitado. Uma execução re-solicitada é uma execução concluída cuja reexecução foi solicitada e cujo aplicativo proprietário ainda não respondeu: trate-a como pendente e exiba-a como enfileirada.

checkRun.conclusion string

Presente para uma execução concluída ou re-solicitada; success, failure, neutral, cancelled, skipped, timed_out, action_required ou stale. Em uma execução re-solicitada, é o veredito da tentativa substituída, portanto, leia-o somente quando status for completed.

checkRun.detailsUrl string

Link separado para a página completa de resultados do provedor.

checkRun.externalUpdatedAt string

Timestamp externo de atualização usado para ordenar as atualizações, para que tentativas de reenvio obsoletas não possam substituir um estado mais recente.

checkRun.startedAt string

Horário de início em RFC 3339 informado pelo provedor, quando fornecido.

checkRun.completedAt string

Horário de conclusão em RFC 3339 informado pelo provedor, quando fornecido.

checkRun.createdAt string

Carimbo de data e hora RFC 3339 da criação da execução.

checkRun.updatedAt string

Timestamp RFC 3339 da atualização mais recente da execução persistida.

checkRun.externalId string

Identidade do provedor para uma tentativa. Reutilize-a para atualizar essa tentativa e use um novo valor para uma nova tentativa.

checkRun.actor object

Agente público que gerou a execução. Sempre o actor da suíte de verificações proprietária.

checkRun.actor.user objeto

Variante de usuário do ator. Definida quando um usuário executou a ação.

checkRun.actor.user.id string

Identificador público do usuário.

checkRun.actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

checkRun.actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

checkRun.actor.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

checkRun.actor.app objeto

Variante de app do ator. Definida quando um app executou a ação.

checkRun.actor.app.id string

Identificador público do app.

checkRun.actor.app.displayName string

O nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

checkRun.actor.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkRun.actor.serviceAccount.id string

Identificador público da conta de serviço.

checkRun.output object

Objeto de resultado legível por humanos contendo título, resumo e texto mais longo quando fornecido.

checkRun.output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRun.output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.deadlineAt string

Prazo registrado para a execução da verificação, como um carimbo de data/hora RFC 3339. Ausente quando a execução não tem prazo, inclusive após sua conclusão.

checkRun.isRerequestable boolean

Se o aplicativo de relatórios declarou esta execução como passível de nova solicitação.

checkRun.rerequestedAt string

Timestamp RFC 3339 da re-solicitação pendente. Ausente quando não há re-solicitação pendente, e limpo quando o app que possui a execução publica novamente. Enquanto estiver definido, status é rerequested e a execução permanece no estado de verificação mais recente do commit e aparece como pendente, com conclusion e os tempos ainda contendo o resultado substituído, portanto uma verificação obrigatória bloqueia a mesclagem até que o app responda.

checkRun.rerequestedBy objeto

Principal que solicitou a reexecução, contendo as mesmas variantes de ator que actor. Presente sempre que rerequestedAt estiver definido e removido juntamente com ele.

outcome string

O que esta chamada fez ao checkRun. Valores permitidos: created, updated, unchanged, ignored_stale. Uma verificação que foi ignorada por estar obsoleta e uma verificação que repetiu os valores armazenados retornam ambas a execução armazenada; portanto, este campo é a única maneira de distingui-las.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-runs' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "checkSuite": {    "key": "ci-8842",    "name": "CI",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "externalId": "build-8842"  },  "checkRun": {    "key": "ci-8842-unit-tests",    "name": "unit-tests",    "status": "completed",    "conclusion": "success",    "externalUpdatedAt": "2026-08-02T14:44:30Z",    "startedAt": "2026-08-02T14:40:00Z",    "completedAt": "2026-08-02T14:44:30Z",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "externalId": "run-8842",    "output": {      "title": "Unit tests",      "summary": "128 tests passed.",      "text": "All suites green."    }  }}'

Estrutura da resposta:

{  "checkSuite": {    "id": "crg_01k2ja2000e0080000000000h8",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842",    "name": "CI",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "externalId": "build-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    }  },  "checkRun": {    "id": "cr_01k2ja2000e0080000000000g7",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "checkSuite": {      "id": "crg_01k2ja2000e0080000000000h8"    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842-unit-tests",    "name": "unit-tests",    "status": "completed",    "conclusion": "success",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "externalUpdatedAt": "2026-08-02T14:44:30Z",    "startedAt": "2026-08-02T14:40:00Z",    "completedAt": "2026-08-02T14:44:30Z",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "externalId": "run-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "output": {      "title": "Unit tests",      "summary": "128 tests passed.",      "text": "All suites green."    }  },  "outcome": "created"}

Upsert em lote de check runs

POST/v1/origin/repos/{ownerSlug}/{repoName}/check-runs:batchUpsert
Scoperepository:checks:writeAuthInstallation token

Realiza upserts atômicos de várias check runs pertencentes a uma única suíte. A solicitação aceita no máximo 10 runs e rejeita identidades duplicadas (external_id, key). Todas as runs são confirmadas ou toda a solicitação é revertida.

Cada execução aceita o mesmo deadlineAt opcional que Post Check Run.

Origin aplica a regra de ordenação externalUpdatedAt a cada execução separadamente. Uma execução ignorada por estar obsoleta não faz o lote falhar: a resposta traz a execução armazenada em seu lugar, e results[].outcome informa o veredito de cada execução na ordem da requisição.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

Corpo da solicitação

headSha string Obrigatório

SHA do commit HEAD contra o qual os check runs são reportados (hexadecimal de 40 ou 64 caracteres).

checkSuite objeto Obrigatório

A suíte compartilhada por cada execução de verificação nesta requisição.

checkSuite.key string Obrigatório

Chave estável, escolhida pelo app, que identifica a suíte lógica entre tentativas.

checkSuite.name string Obrigatório

Nome da suíte voltada para o usuário.

checkSuite.detailsUrl string

Link opcional para mais detalhes sobre a suíte como um todo.

checkSuite.externalId string Obrigatório

Identidade imutável atribuída pelo provedor para esta tentativa de suíte.

checkRuns matriz Obrigatório

Execuções de verificação para inserir ou atualizar, na ordem de resposta. Deve conter de 1 a 10 entradas com identidades únicas (external_id, key).

checkRuns[0].key string Obrigatório

Chave estável escolhida pelo aplicativo que identifica a verificação lógica entre tentativas.

checkRuns[0].name string Obrigatório

Nome do check run visível ao usuário.

checkRuns[0].status string Obrigatório

Valores definíveis: CHECK_RUN_LIFECYCLE_STATUS_UNSPECIFIED, queued, in_progress, completed. O esquema também lista rerequested, que somente a Origin define ao reencaminhar a solicitação; uma solicitação que o contenha retorna InvalidArgument (HTTP 400).

checkRuns[0].conclusion string

Obrigatório se e somente se status == completed. Valores permitidos: CHECK_RUN_CONCLUSION_UNSPECIFIED, success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRuns[0].externalUpdatedAt string Obrigatório

Horário da última atualização do sistema externo. Usado para ordenar atualizações concorrentes, de modo que uma tentativa de reenvio desatualizada não possa sobrescrever um estado mais recente.

checkRuns[0].startedAt string

Quando a execução da verificação foi iniciada. Um valor com mais de 60 segundos no futuro retorna InvalidArgument (HTTP 400).

checkRuns[0].completedAt string

Quando a execução da verificação foi concluída. Um valor com mais de 60 segundos no futuro retorna InvalidArgument (HTTP 400), assim como um valor anterior a startedAt quando ambos são publicados juntos.

checkRuns[0].detailsUrl string

Link opcional para mais detalhes sobre esta execução de verificação específica (por exemplo, a URL de job/build do provedor).

checkRuns[0].externalId string Obrigatório

Identidade imutável atribuída pelo provedor para esta tentativa de verificação.

checkRuns[0].output object

Saída legível para humanos para esta execução de verificação.

checkRuns[0].output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRuns[0].output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[0].output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[0].deadlineAt string

Prazo para a execução da verificação, como um carimbo de data/hora RFC 3339. Valores com mais de 24 horas no futuro são rejeitados com InvalidArgument (HTTP 400) em vez de serem ajustados. Omitir ao criar para não registrar nenhum prazo; omitir ao atualizar para deixar o prazo armazenado inalterado.

checkRuns[0].isRerequestable boolean

Declara que a execução pode ser solicitada novamente. Definir como true compromete seu app a assinar repository.check_run.rerequested e a responder a cada entrega publicando uma nova execução para o mesmo head SHA e key: ou uma nova execução com um novo externalId, que mantém a tentativa anterior como histórico, ou uma atualização da execução re-solicitada com o mesmo externalId, que a atualiza no lugar. Até que essa nova publicação chegue, a execução re-solicitada aparece como pendente no estado de verificação mais recente do commit, de modo que uma verificação obrigatória bloqueia a mesclagem e o pull request mostra a execução aguardando sua reexecução; declarar re-solicitabilidade sem responder deixa a verificação sem atendimento. A Origin não verifica a inscrição quando você publica. Omita para manter o valor armazenado, que é false em uma nova execução; envie false para retirar a declaração.

Campos da resposta

checkSuite objeto

A suíte persistida compartilhada por todas as execuções de verificação retornadas.

checkSuite.id cadeia de caracteres

Identificador da suíte de verificação atribuído pelo servidor.

checkSuite.repository objeto

Referência do repositório da suíte.

checkSuite.repository.id string

Identificador do repositório em uma referência de contêiner.

checkSuite.repository.name string

Nome do repositório em uma referência de container.

checkSuite.repository.owner objeto

Referência do proprietário do repositório.

checkSuite.repository.owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o proprietário do repositório.

checkSuite.repository.owner.id string

Identificador do proprietário da Origin.

checkSuite.repository.owner.type string

Tipo de namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkSuite.sha string

SHA do commit ao qual a suíte está associada.

checkSuite.key string

Identidade estável de verificação obrigatória escolhida pelo app. As verificações obrigatórias correspondem ao app e a esta chave, não ao nome.

checkSuite.name string

Nome da suíte apenas para exibição; não é usado para correspondência de verificações obrigatórias.

checkSuite.detailsUrl string

Link opcional para os resultados em nível de suíte do provedor.

checkSuite.createdAt string

Registro de data e hora da criação da suíte no padrão RFC 3339.

checkSuite.updatedAt string

Carimbo de data/hora RFC 3339 da última atualização da suíte.

checkSuite.externalId string

Identidade do provedor para esta tentativa de suíte.

checkSuite.actor objeto

Agente público que produziu a suíte.

checkSuite.actor.user objeto

Variante de usuário do ator. Definida quando um usuário realizou a ação.

checkSuite.actor.user.id string

Identificador público do usuário.

checkSuite.actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

checkSuite.actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto renderiza. Omitido quando a conta não tem nome.

checkSuite.actor.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

checkSuite.actor.app objeto

Variante de app do ator. Definida quando um app executou a ação.

checkSuite.actor.app.id string

Identificador público do app.

checkSuite.actor.app.displayName string

O nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira‑parte da Cherri Code.

checkSuite.actor.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkSuite.actor.serviceAccount.id string

Identificador público da conta de serviço.

checkRuns matriz

Obsoleto: leia results[].checkRun em vez disso. Ainda preenchido, na ordem da solicitação.

checkRuns[].id cadeia de caracteres

Identificador da execução de verificação atribuído pelo servidor.

checkRuns[].repository object

Referência do repositório para a execução.

checkRuns[].repository.id string

Identificador do repositório em uma referência de contêiner.

checkRuns[].repository.name string

Nome do repositório em uma referência de container.

checkRuns[].repository.owner objeto

Referência do proprietário do repositório.

checkRuns[].repository.owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o proprietário do repositório.

checkRuns[].repository.owner.id string

Identificador do proprietário da origem.

checkRuns[].repository.owner.type string

Tipo de namespace do proprietário. Somente para saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkRuns[].checkSuite objeto

Referência à suíte de verificação que a contém.

checkRuns[].checkSuite.id string

Identificador atribuído pelo servidor da suíte de verificação que a contém.

checkRuns[].sha string

SHA do commit ao qual a execução está vinculada.

checkRuns[].key string

Identidade lógica estável escolhida pelo aplicativo; as verificações obrigatórias podem corresponder ao app, à chave da suíte e a esta chave.

checkRuns[].name string

Nome da execução apenas para exibição; não é usado para correspondência de verificações obrigatórias.

checkRuns[].status string

Status do ciclo de vida: em fila (queued), em_progress (in_progress), concluído (completed) ou re-solicitado (rerequested). Uma execução re-solicitada é uma execução concluída cuja reexecução foi solicitada e cujo app proprietário ainda não respondeu: trate-a como pendente e exiba-a como em fila.

checkRuns[].conclusion string

Presente em uma execução concluída ou re-solicitada; success, failure, neutral, cancelled, skipped, timed_out, action_required ou stale. Em uma execução re-solicitada, é o veredito da tentativa substituída, portanto leia-o apenas quando status for completed.

checkRuns[].detailsUrl string

Link separado para a página completa de resultados do provedor.

checkRuns[].externalUpdatedAt string

Timestamp externo da atualização usado para ordenar as atualizações, para que tentativas antigas não substituam um estado mais recente.

checkRuns[].startedAt string

Horário de início em RFC 3339 informado pelo provedor, quando fornecido.

checkRuns[].completedAt string

Horário de conclusão em RFC 3339 informado pelo provedor, quando fornecido.

checkRuns[].createdAt string

Timestamp de criação da execução no formato RFC 3339.

checkRuns[].updatedAt string

Timestamp RFC 3339 da última atualização da execução persistida.

checkRuns[].externalId string

Identidade do provedor para uma tentativa. Reutilize-a para atualizar essa tentativa e use um novo valor para uma tentativa de nova tentativa.

checkRuns[].actor object

Agente público que produziu a execução. Sempre o actor da suíte de verificações proprietária.

checkRuns[].actor.user objeto

Variante de usuário do ator. Definida quando um usuário realizou a ação.

checkRuns[].actor.user.id string

Identificador público do usuário.

checkRuns[].actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

checkRuns[].actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto renderiza. Omitido quando a conta não possui nome.

checkRuns[].actor.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

checkRuns[].actor.app object

Variante de app do ator. Definida quando um app executou a ação.

checkRuns[].actor.app.id string

Identificador público do app.

checkRuns[].actor.app.displayName string

O nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

checkRuns[].actor.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkRuns[].actor.serviceAccount.id string

Identificador público da conta de serviço.

checkRuns[].output object

Objeto de resultado legível por humanos contendo título, resumo e texto mais longo quando fornecido.

checkRuns[].output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRuns[].output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[].output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[].deadlineAt string

Prazo registrado para a execução da verificação, como carimbo de data/hora no formato RFC 3339. Ausente quando a execução não tiver prazo, inclusive após sua conclusão.

checkRuns[].isRerequestable boolean

Se o aplicativo de relatórios declarou esta execução como passível de nova solicitação.

checkRuns[].rerequestedAt string

Timestamp RFC 3339 da re-solicitação pendente. Ausente quando não há re-solicitação pendente, e limpo quando o app que possui a execução publica novamente. Enquanto estiver definido, status é rerequested e a execução permanece no estado de verificação mais recente do commit e é considerada pendente, com conclusion e os tempos ainda refletindo o resultado substituído, de modo que uma verificação obrigatória bloqueia o merge até que o app responda.

checkRuns[].rerequestedBy object

Entidade principal que solicitou a nova execução, com as mesmas variantes de ator que actor. Presente sempre que rerequestedAt estiver definido, e removida junto com ele.

results matriz

Um resultado por execução postada, na ordem das solicitações.

results[].checkRun objeto

A execução de verificação armazenada após esta chamada: os valores publicados quando outcome é created ou updated, e a execução como já estava nos demais casos. Contém os mesmos campos que checkRuns[].

results[].outcome string

O que esta chamada fez com results[].checkRun. Valores permitidos: created, updated, unchanged, ignored_stale. Tanto uma execução ignorada por estar obsoleta quanto uma execução que repetiu os valores armazenados retornam a execução armazenada, portanto este campo é a única forma de distingui-las.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-runs:batchUpsert' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "checkSuite": {    "key": "ci-8842",    "name": "CI",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "externalId": "build-8842"  },  "checkRuns": [    {      "key": "ci-8842-unit-tests",      "name": "unit-tests",      "status": "completed",      "conclusion": "success",      "externalUpdatedAt": "2026-08-02T14:44:30Z",      "startedAt": "2026-08-02T14:40:00Z",      "completedAt": "2026-08-02T14:44:30Z",      "detailsUrl": "https://ci.acme.dev/runs/8842",      "externalId": "run-8842",      "output": {        "title": "Unit tests",        "summary": "128 tests passed.",        "text": "All suites green."      }    }  ]}'

Formato da resposta:

{  "checkSuite": {    "id": "crg_01k2ja2000e0080000000000h8",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842",    "name": "CI",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "externalId": "build-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    }  },  "checkRuns": [    {      "id": "cr_01k2ja2000e0080000000000g7",      "repository": {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      },      "checkSuite": {        "id": "crg_01k2ja2000e0080000000000h8"      },      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "key": "ci-8842-unit-tests",      "name": "unit-tests",      "status": "completed",      "conclusion": "success",      "detailsUrl": "https://ci.acme.dev/runs/8842",      "externalUpdatedAt": "2026-08-02T14:44:30Z",      "startedAt": "2026-08-02T14:40:00Z",      "completedAt": "2026-08-02T14:44:30Z",      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "externalId": "run-8842",      "actor": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      },      "output": {        "title": "Unit tests",        "summary": "128 tests passed.",        "text": "All suites green."      }    }  ],  "results": [    {      "checkRun": {        "id": "cr_01k2ja2000e0080000000000g7",        "repository": {          "id": "repo_01k2ja2000e0080000000000q4",          "name": "rocket",          "owner": {            "slug": "acme",            "id": "ns_01k2ja2000e0080000000000p3",            "type": "team"          }        },        "checkSuite": {          "id": "crg_01k2ja2000e0080000000000h8"        },        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "key": "ci-8842-unit-tests",        "name": "unit-tests",        "status": "completed",        "conclusion": "success",        "detailsUrl": "https://ci.acme.dev/runs/8842",        "externalUpdatedAt": "2026-08-02T14:44:30Z",        "startedAt": "2026-08-02T14:40:00Z",        "completedAt": "2026-08-02T14:44:30Z",        "createdAt": "2026-08-01T09:30:00Z",        "updatedAt": "2026-08-02T14:45:00Z",        "externalId": "run-8842",        "actor": {          "user": {            "id": "user_01k2ja2000e0080000000000c3",            "email": "[email protected]"          }        },        "output": {          "title": "Unit tests",          "summary": "128 tests passed.",          "text": "All suites green."        }      },      "outcome": "created"    }  ]}

Obter execução de verificação

GET/v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}
Scoperepository:checks:readAuthInstallation tokenUser access token

Retorna uma única execução de verificação pelo id atribuído pelo servidor (cr_...).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

checkRunId string Obrigatório

ID do check-run atribuído pelo servidor (cr_...).

Campos da resposta

id string

Identificador da execução de verificação atribuído pelo servidor.

repository objeto

Referência do repositório para a execução.

repository.id string

Identificador do repositório em uma referência de contêiner.

repository.name string

Nome do repositório em uma referência de contêiner.

repository.owner object

Referência do proprietário do repositório.

repository.owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o dono do repositório.

repository.owner.id string

Identificador do proprietário de origem.

repository.owner.type string

Tipo do namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkSuite objeto

Referência à suíte de verificação que o contém.

checkSuite.id string

Identificador atribuído pelo servidor da suíte de verificação que contém este item.

sha string

SHA do commit ao qual a execução está vinculada.

key string

Identidade lógica estável escolhida pelo app; as verificações obrigatórias podem corresponder ao app, à chave da suíte e a esta chave.

name string

Nome da execução apenas para exibição; não é usado para corresponder às verificações obrigatórias.

status string

Status do ciclo de vida: enfileirado, em_andamento, concluído ou re-solicitado. Uma execução re-solicitada é uma execução concluída cuja reexecução foi solicitada e cujo aplicativo responsável ainda não respondeu: trate-a como pendente e renderize-a como enfileirada.

conclusion string

Presente para uma execução concluída ou re-solicitada; success, failure, neutral, cancelled, skipped, timed_out, action_required ou stale. Em uma execução re-solicitada, é o veredito da tentativa substituída; portanto, leia-o apenas quando status for completed.

detailsUrl string

Link separado para a página completa de resultados do provedor.

externalUpdatedAt string

Timestamp de atualização externa usado para ordenar as atualizações, para que reenvios obsoletos não substituam um estado mais recente.

startedAt string

Horário de início em RFC 3339 fornecido pelo provedor, quando fornecido.

completedAt string

Horário de conclusão em RFC 3339 informado pelo provedor, quando fornecido.

createdAt string

Timestamp de criação da execução no formato RFC 3339.

updatedAt string

Timestamp RFC 3339 da atualização mais recente da execução persistida.

externalId string

Identidade do provedor para uma tentativa. Reutilize-a para atualizar essa tentativa e use um novo valor para uma nova tentativa.

actor object

Agente público que produziu a execução. Sempre o actor da suíte de verificações proprietária.

actor.user object

Variante de usuário do ator. Definida quando um usuário executou a ação.

actor.user.id string

Identificador público do usuário.

actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante "user" estiver presente.

actor.user.displayName string

Nome exibido do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto renderiza. Omitido quando a conta não tem nome.

actor.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

actor.app object

Variante do app do ator. Definida quando um app executou a ação.

actor.app.id string

Identificador público do app.

actor.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

actor.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço realizou a ação.

actor.serviceAccount.id string

Identificador público da conta de serviço.

output object

Objeto de resultado legível por humanos contendo título, resumo e texto mais longo, quando fornecido.

output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

deadlineAt string

Prazo registrado para a execução da verificação, como um carimbo de data/hora no formato RFC 3339. Ausente quando a execução não tem prazo, inclusive após a sua conclusão.

isRerequestable boolean

Indica se o app que reportou declarou que esta execução pode ser solicitada novamente.

rerequestedAt string

Timestamp RFC 3339 da re-solicitação pendente. Ausente quando não há re-solicitação pendente e removido quando o app que possui a execução publica novamente. Enquanto estiver definido, status é rerequested e a execução permanece no estado de verificação mais recente do commit e aparece como pendente, com conclusion e os horários ainda contendo o resultado substituído, então uma verificação obrigatória bloqueia a mesclagem até o app responder.

rerequestedBy objeto

Principal que solicitou a reexecução, carregando as mesmas variantes de ator que actor. Presente sempre que rerequestedAt estiver definido e removido juntamente com ele.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-runs/CHECK_RUN_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "cr_01k2ja2000e0080000000000g7",  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "checkSuite": {    "id": "crg_01k2ja2000e0080000000000h8"  },  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "key": "ci-8842-unit-tests",  "name": "unit-tests",  "status": "completed",  "conclusion": "success",  "detailsUrl": "https://ci.acme.dev/runs/8842",  "externalUpdatedAt": "2026-08-02T14:44:30Z",  "startedAt": "2026-08-02T14:40:00Z",  "completedAt": "2026-08-02T14:44:30Z",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "externalId": "run-8842",  "actor": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "output": {    "title": "Unit tests",    "summary": "128 tests passed.",    "text": "All suites green."  }}

Listar anotações de execuções de verificação

GET/v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/annotations
Scoperepository:checks:readAuthInstallation tokenUser access token

Lista as anotações de uma execução de verificação em ordem crescente de ID.

Os IDs de anotações são ordenáveis por tempo, então a ordem crescente dos IDs também é a ordem de criação. Um token de página fixa o escopo para o restante da sequência.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

checkRunId string Obrigatório

ID da execução de verificação atribuído pelo servidor.

Parâmetros de consulta

pageSize integer

Número máximo de anotações a retornar. O padrão é 30 quando omitido ou igual a zero; valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do nextPageToken de uma resposta anterior. Omita-o na primeira página. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos da resposta

annotations matriz

Página de anotações, em ordem crescente de ID.

annotations[].id string

ID estável da anotação do Origin. IDs são ordenáveis por tempo.

annotations[].checkRunId string

ID da execução de verificação à qual a anotação pertence.

annotations[].annotationLevel string

Severidade da anotação. Valores permitidos: notice, warning, failure.

annotations[].message string

Mensagem de anotação. Pode conter Markdown.

annotations[].title string

Título da anotação. Ausente quando a anotação não tem título.

annotations[].rawDetails string

Texto bruto de detalhes. Ausente quando a anotação não tem.

annotations[].createdAt string

Quando a anotação foi criada (RFC 3339).

annotations[].updatedAt string

Quando a anotação foi atualizada pela última vez (RFC 3339).

annotations[].location objeto

Local de origem. Ausente para uma anotação em nível de execução.

annotations[].location.path string

Caminho canônico do arquivo relativo ao repositório.

annotations[].location.startLine integer

Primeira linha do intervalo. Numeração a partir de 1 e inclusiva.

annotations[].location.endLine integer

Última linha do intervalo. A numeração começa em 1 e é inclusiva.

annotations[].location.columns objeto

Intervalo de colunas. Ausente, a menos que a anotação abranja uma única linha.

annotations[].location.columns.startColumn integer

Primeira coluna do intervalo. A numeração começa em 1 e é inclusiva.

annotations[].location.columns.endColumn integer

Última coluna do intervalo. Indexação iniciada em 1 e inclusiva.

nextPageToken string

Cherri Code opaco para a próxima página. Vazio quando não houver mais resultados.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-runs/CHECK_RUN_ID/annotations' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estrutura da resposta:

{  "annotations": [    {      "id": "cra_01k2ja2000e0080000000000v1",      "checkRunId": "cr_01k2ja2000e0080000000000g7",      "annotationLevel": "warning",      "message": "Deprecated API usage; migrate to the v2 client.",      "title": "Deprecated API",      "createdAt": "2026-08-02T14:45:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "location": {        "path": "src/telemetry.ts",        "startLine": 42,        "endLine": 42      }    }  ]}

Criar anotações de Check Run

POST/v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/annotations
Scoperepository:checks:writeAuthInstallation token

Adiciona de 1 a 25 anotações a uma execução de verificação em um único lote atômico.

Uma execução de verificação comporta no máximo 100 anotações. Um lote que ultrapasse esse limite é rejeitado com ResourceExhausted (HTTP 429) e nada é gravado; um lote fora do intervalo de 1 a 25 é rejeitado com InvalidArgument (HTTP 400). A operação é apenas de acréscimo e não é idempotente, portanto tentar novamente após uma falha de transporte ambígua pode adicionar duplicatas e consumir capacidade. Conteúdo idêntico é permitido.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

checkRunId string Obrigatório

ID do check run atribuído pelo servidor.

Corpo da solicitação

annotations matriz Obrigatório

O lote a ser anexado. Deve conter entre 1 e 25 entradas.

annotations[].annotationLevel string Obrigatório

Severidade da anotação. Valores permitidos: notice, warning, failure.

annotations[].message string Obrigatório

Mensagem de anotação. Pode conter Markdown. Deve ser não vazia. Máximo de 65.535 bytes em UTF-8.

annotations[].title string

Título da anotação. Tamanho máximo: 255 caracteres Unicode.

annotations[].rawDetails string

Texto de detalhe bruto. Máximo de 65.535 bytes em UTF-8.

annotations[].location object

Local de origem ao qual a anotação se refere. Omita para uma anotação de nível de execução que não esteja ligada a uma linha de código.

annotations[].location.path string Obrigatório

Caminho canônico do arquivo relativo ao repositório. Máximo de 4.096 bytes em UTF-8.

annotations[].location.startLine integer Obrigatório

Primeira linha do intervalo. A numeração começa em 1 e é inclusiva.

annotations[].location.endLine integer Obrigatório

Última linha do intervalo. Numeração iniciada em 1, inclusiva e igual ou posterior a startLine.

annotations[].location.columns object

Intervalo de colunas dentro da linha. Compatível somente quando startLine e endLine estiverem na mesma linha, e ambas as colunas devem ser enviadas juntas.

annotations[].location.columns.startColumn integer

Primeira coluna do intervalo. Numeração iniciando em 1 e inclusiva.

annotations[].location.columns.endColumn integer

Última coluna do intervalo. Indexada a partir de 1, inclusiva e igual ou posterior a startColumn.

Campos da resposta

annotations matriz

As anotações criadas por esta solicitação.

annotations[].id string

ID estável da anotação Origin. Os IDs são ordenáveis por tempo.

annotations[].checkRunId string

ID da execução da verificação à qual a anotação pertence.

annotations[].annotationLevel string

Severidade da anotação. Valores permitidos: notice, warning, failure.

annotations[].message string

Mensagem de anotação. Pode conter Markdown.

annotations[].title string

Título da anotação. Ausente quando a anotação não tem título.

annotations[].rawDetails string

Texto bruto de detalhes. Ausente quando a anotação não tem.

annotations[].createdAt string

Quando a anotação foi criada (RFC 3339).

annotations[].updatedAt string

Quando a anotação foi atualizada pela última vez (RFC 3339).

annotations[].location object

Localização no código-fonte. Ausente em anotações no nível de execução.

annotations[].location.path string

Caminho canônico do arquivo relativo ao repositório.

annotations[].location.startLine integer

Primeira linha do intervalo. A numeração começa em 1 e é inclusiva.

annotations[].location.endLine integer

Última linha do intervalo. A numeração começa em 1 e é inclusiva.

annotations[].location.columns object

Intervalo de colunas. Ausente, a menos que a anotação abranja uma única linha.

annotations[].location.columns.startColumn integer

Primeira coluna do intervalo. Indexado a partir de 1 e inclusivo.

annotations[].location.columns.endColumn integer

Última coluna do intervalo. Baseada em 1 e inclusiva.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-runs/CHECK_RUN_ID/annotations' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "annotations": [    {      "annotationLevel": "warning",      "message": "Deprecated API usage; migrate to the v2 client.",      "title": "Deprecated API",      "location": {        "path": "src/telemetry.ts",        "startLine": 42,        "endLine": 42      }    }  ]}'

Estrutura da resposta:

{  "annotations": [    {      "id": "cra_01k2ja2000e0080000000000v1",      "checkRunId": "cr_01k2ja2000e0080000000000g7",      "annotationLevel": "warning",      "message": "Deprecated API usage; migrate to the v2 client.",      "title": "Deprecated API",      "createdAt": "2026-08-02T14:45:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "location": {        "path": "src/telemetry.ts",        "startLine": 42,        "endLine": 42      }    }  ]}

Requisitar novamente a execução de verificação

POST/v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/rerequest
Scoperepository:contents:writeAuthInstallation tokenUser access token

Solicita ao app que reportou um check run que o execute novamente. O Origin registra a solicitação na execução como rerequestedAt e notifica o app proprietário com repository.check_run.rerequested. O app responde publicando uma nova execução para o mesmo head SHA e key, seja uma execução nova ou uma atualização desta, o que limpa rerequestedAt e armazena o status publicado. Enquanto a solicitação estiver pendente, o status da execução é rerequested; sua conclusion e os tempos continuam descrevendo a tentativa substituída. A chamada retorna a execução com rerequestedAt definido e status rerequested.

A execução deve estar completed, deve ter isRerequestable, deve ser a tentativa atual para sua key e deve estar no head atual de uma pull request aberta. Qualquer outra situação retorna FailedPrecondition (HTTP 400).

Uma re-solicitação pode ficar pendente por execução. Uma solicitação repetida enquanto rerequestedAt estiver definida retorna AlreadyExists (HTTP 409 Conflict), e a execução volta a poder ser re-solicitada assim que o app proprietário responder. Qualquer entidade com repository:contents:write pode re-solicitar qualquer execução re-solicitável, independentemente do app que a reportou. Um checkRunId desconhecido, ou que pertença a outro repositório, retorna 404.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

checkRunId string Obrigatório

ID do check-run atribuída pelo servidor (cr_...).

Corpo da solicitação

A solicitação não aceita campos. Envie um objeto JSON vazio.

Campos da resposta

id string

Identificador da execução de verificação atribuído pelo servidor.

repository objeto

Referência do repositório para a execução.

repository.id string

Identificador do repositório em uma referência de contêiner.

repository.name string

Nome do repositório em uma referência de contêiner.

repository.owner object

Referência do proprietário do repositório.

repository.owner.slug string

Slug do proprietário usado em URLs, combinado com o ID do proprietário para identificar o dono do repositório.

repository.owner.id string

Identificador do proprietário de origem.

repository.owner.type string

Tipo do namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkSuite objeto

Referência à suíte de verificação que a contém.

checkSuite.id string

Identificador da suíte de verificações que a contém, atribuído pelo servidor.

sha string

SHA do commit ao qual a execução está vinculada.

key string

Identidade lógica estável escolhida pelo aplicativo; as verificações obrigatórias podem corresponder ao app, à chave da suíte e a esta chave.

name string

Nome da execução apenas para exibição; não é usado para correspondência de verificações obrigatórias.

status string

Status do ciclo de vida: enfileirado, em_andamento, concluído ou rerequisitado. Uma execução rerequisitada é uma execução concluída cuja reexecução foi solicitada e o aplicativo proprietário ainda não respondeu: trate-a como pendente e renderize-a como enfileirada.

conclusion string

Presente para uma execução concluída ou re-solocitada; success, failure, neutral, cancelled, skipped, timed_out, action_required ou stale. Em uma execução re-solocitada, é o veredicto da tentativa suprimida, portanto leia-o apenas quando status for completed.

detailsUrl string

Link separado para a página completa de resultados do provedor.

externalUpdatedAt string

Timestamp de atualização externa usado para ordenar as atualizações, para que tentativas de reenvio obsoletas não possam substituir um estado mais recente.

startedAt string

Horário de início no formato RFC 3339 informado pelo provedor quando fornecido.

completedAt string

Hora de conclusão em RFC 3339 informada pelo provedor, quando fornecida.

createdAt string

Timestamp de criação da execução no formato RFC 3339.

updatedAt string

Timestamp RFC 3339 da atualização mais recente da execução persistida.

externalId string

Identidade do provedor para uma tentativa. Reutilize-a para atualizar essa tentativa e use um novo valor para uma nova tentativa.

actor object

Agente público que produziu a execução. Sempre o actor da suíte de verificações proprietária.

actor.user object

Variante de usuário do ator. Definida quando um usuário executou a ação.

actor.user.id string

Identificador público do usuário.

actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante "user" estiver presente.

actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

actor.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

actor.app object

Variante do app do ator. Definida quando um app executa a ação.

actor.app.id string

Identificador público do app.

actor.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira‑parte do Cherri Code.

actor.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

actor.serviceAccount.id string

Identificador público da conta de serviço.

output object

Objeto de resultado legível por humanos contendo título, resumo e texto mais longo, quando fornecido.

output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

deadlineAt string

Prazo registrado para a execução da verificação, como um carimbo de data/hora RFC 3339. Ausente quando a execução não tem prazo, inclusive após sua conclusão.

isRerequestable boolean

Se o aplicativo de relatórios declarou que esta execução pode ser solicitada novamente.

rerequestedAt string

Timestamp RFC 3339 da re-solicitação pendente. Ausente quando não há re-solicitação pendente e limpo quando o aplicativo que possui a execução publica novamente. Enquanto estiver definido, status é rerequested e a execução permanece no estado de verificação mais recente do commit e é exibida como pendente, com conclusion e os horários ainda contendo o resultado substituído; portanto, uma verificação obrigatória bloqueia a mesclagem até que o aplicativo responda.

rerequestedBy objeto

Principal que solicitou a reexecução, carregando as mesmas variantes do ator que actor. Presente sempre que rerequestedAt estiver definido e removido junto com ele.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-runs/CHECK_RUN_ID/rerequest' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{}'

Formato da resposta:

{  "id": "cr_01k2ja2000e0080000000000g7",  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "checkSuite": {    "id": "crg_01k2ja2000e0080000000000h8"  },  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "key": "ci-8842-unit-tests",  "name": "unit-tests",  "status": "rerequested",  "conclusion": "failure",  "detailsUrl": "https://ci.acme.dev/runs/8842",  "externalUpdatedAt": "2026-08-02T14:44:30Z",  "startedAt": "2026-08-02T14:40:00Z",  "completedAt": "2026-08-02T14:44:30Z",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T15:02:10Z",  "externalId": "run-8842",  "actor": {    "app": {      "id": "app_01k2ja2000e0080000000000a1",      "displayName": "Acme CI"    }  },  "output": {    "title": "Unit tests",    "summary": "3 of 128 tests failed."  },  "isRerequestable": true,  "rerequestedAt": "2026-08-02T15:02:10Z",  "rerequestedBy": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  }}

Obter suíte de verificação

GET/v1/origin/repos/{ownerSlug}/{repoName}/check-suites/{checkSuiteId}
Scoperepository:checks:readAuthInstallation tokenUser access token

Retorna os metadados da suíte de verificação pelo id atribuído pelo servidor (crg_...). Não incorpora as execuções de verificação; use ListCheckRunsForSuite para obter as execuções da suíte.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

checkSuiteId string Obrigatório

ID da suíte de verificação atribuída pelo servidor (crg_...).

Campos da resposta

id string

Identificador da suíte de verificação atribuído pelo servidor.

repository object

Referência do repositório para a suíte.

repository.id string

Identificador do repositório em uma referência de contêiner.

repository.name string

Nome do repositório em uma referência de container.

repository.owner object

Referência do proprietário do repositório.

repository.owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o dono do repositório.

repository.owner.id string

Identificador do proprietário de origem.

repository.owner.type string

Tipo de namespace do proprietário. Somente leitura. Valores permitidos: team, user. Omitido quando desconhecido.

sha string

SHA do commit ao qual a suíte está anexada.

key string

Identidade estável da verificação obrigatória escolhida pelo aplicativo. As verificações obrigatórias correspondem ao aplicativo mais esta chave, não ao nome.

name string

Nome da suíte somente para exibição; não é usado para correspondência de verificações obrigatórias.

detailsUrl string

Link opcional para os resultados em nível de suíte do provedor.

createdAt string

Timestamp de criação da suíte no formato RFC 3339.

updatedAt string

Carimbo de data/hora RFC 3339 da última atualização da suíte.

externalId string

Identidade do provedor para esta tentativa de suíte.

actor object

Agente público que produziu a suíte.

actor.user object

Variante de usuário do ator. Definida quando um usuário executou a ação.

actor.user.id string

Identificador público do usuário.

actor.user.email string

Endereço de e‑mail do usuário. Sempre definido quando a variante de usuário está presente.

actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

actor.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

actor.app object

Variante de app do ator. Definida quando um app executou a ação.

actor.app.id string

Identificador público do app.

actor.app.displayName string

Nome de exibição registrado do app. Omitido quando não for possível resolver o app e no ator gerenciado de primeira‑parte do Cherri Code.

actor.serviceAccount object

Variante do ator para conta de serviço. Definida quando uma conta de serviço executou a ação.

actor.serviceAccount.id string

Identificador público da conta de serviço.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-suites/CHECK_SUITE_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "crg_01k2ja2000e0080000000000h8",  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "key": "ci-8842",  "name": "CI",  "detailsUrl": "https://ci.acme.dev/runs/8842",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "externalId": "build-8842",  "actor": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  }}

Listar check runs de uma suite

GET/v1/origin/repos/{ownerSlug}/{repoName}/check-suites/{checkSuiteId}/check-runs
Scoperepository:checks:readAuthInstallation tokenUser access token

Lista as execuções de verificação atuais de uma suíte. Quando uma chave de execução foi informada mais de uma vez na suíte, apenas a tentativa mais recente para essa chave é retornada; tentativas substituídas são omitidas. Publicar execução de verificação define qual tentativa é a mais recente. Uma execução que foi requisitada novamente permanece na listagem e aparece como pendente, com status rerequested e rerequestedAt definidos, e sua conclusion e os tempos (timings) das tentativas substituídas inalterados, até que o app que a possui responda. Leia uma tentativa substituída pelo seu próprio id com Obter execução de verificação. Paginado.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

checkSuiteId string Obrigatório

ID da suíte de verificação atribuído pelo servidor (crg_...).

Parâmetros de consulta

pageSize integer

Número máximo de execuções de verificação a retornar. Padrão: 30 quando não definido ou 0. Valores acima de 100 são ajustados para 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página. Codifica o ID do último check-run visto no escopo desta suíte. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

checkRuns matriz

Execuções de verificação paginadas pertencentes à suíte nomeada.

checkRuns[].id string

Identificador da execução de verificação atribuído pelo servidor.

checkRuns[].repository objeto

Referência do repositório para a execução.

checkRuns[].repository.id string

Identificador do repositório em uma referência de contêiner.

checkRuns[].repository.name string

Nome do repositório em uma referência de container.

checkRuns[].repository.owner objeto

Referência do proprietário para o repositório.

checkRuns[].repository.owner.slug string

Slug do proprietário visível na URL usado com o ID do proprietário para identificar o dono do repositório.

checkRuns[].repository.owner.id string

Identificador do proprietário de origem.

checkRuns[].repository.owner.type string

Tipo de namespace do proprietário. Somente de saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkRuns[].checkSuite objeto

Referência à suíte de verificação que o contém.

checkRuns[].checkSuite.id string

Identificador atribuído pelo servidor da suíte de verificação que contém esta execução.

checkRuns[].sha string

SHA do commit ao qual a execução está vinculada.

checkRuns[].key string

Identidade lógica estável escolhida pelo app para a execução; as verificações obrigatórias podem corresponder ao app, à chave da suíte e a esta chave.

checkRuns[].name string

Nome da execução somente para exibição; não é usado para correspondência de verificações obrigatórias.

checkRuns[].status string

Status do ciclo de vida: enfileirado, em_andamento, concluído ou requisitado novamente. Uma execução requisitada novamente é uma execução concluída cuja reexecução foi solicitada e cujo aplicativo proprietário ainda não respondeu: trate-a como pendente e exiba-a como enfileirada.

checkRuns[].conclusion string

Presente para uma execução concluída ou requisitada novamente; success, failure, neutral, cancelled, skipped, timed_out, action_required ou stale. Em uma execução requisitada novamente, é o veredito da tentativa substituída, portanto leia-o apenas quando status for completed.

checkRuns[].detailsUrl string

Link separado para a página completa de resultados do provedor.

checkRuns[].externalUpdatedAt string

Carimbo de data/hora de atualização externa usado para ordenar atualizações, para que tentativas antigas não substituam um estado mais recente.

checkRuns[].startedAt string

Horário de início no formato RFC 3339 informado pelo provedor quando fornecido.

checkRuns[].completedAt string

Horário de conclusão em RFC 3339 informado pelo provedor, quando fornecido.

checkRuns[].createdAt string

Registro de data e hora RFC 3339 da criação da execução.

checkRuns[].updatedAt string

Timestamp RFC 3339 da atualização mais recente da execução persistida.

checkRuns[].externalId string

Identidade do provedor para uma tentativa. Reutilize-a para atualizar essa tentativa e use um novo valor para uma nova tentativa.

checkRuns[].actor objeto

Agente público que produziu a execução. Sempre o actor da suíte de verificação proprietária.

checkRuns[].actor.user objeto

Variante de usuário do ator. Definida quando um usuário executou a ação.

checkRuns[].actor.user.id string

Identificador público do usuário.

checkRuns[].actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

checkRuns[].actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

checkRuns[].actor.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

checkRuns[].actor.app objeto

Variante do app do ator. Definida quando um app executou a ação.

checkRuns[].actor.app.id string

Identificador público do aplicativo.

checkRuns[].actor.app.displayName string

Nome de exibição registrado do aplicativo. Omitido quando o aplicativo não puder ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

checkRuns[].actor.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkRuns[].actor.serviceAccount.id string

Identificador público da conta de serviço.

checkRuns[].output objeto

Objeto de resultado legível por humanos contendo título, resumo e texto mais longo quando fornecido.

checkRuns[].output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRuns[].output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[].output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[].deadlineAt string

Prazo registrado para a execução da verificação, como um carimbo de data/hora no formato RFC 3339. Ausente quando a execução não tiver prazo, inclusive após a conclusão da execução.

checkRuns[].isRerequestable boolean

Se o app de relatórios declarou que esta execução pode ser solicitada novamente.

checkRuns[].rerequestedAt string

Carimbo de data/hora RFC 3339 da re-solicitação pendente. Ausente quando não há re-solicitação pendente e limpo quando o aplicativo que possui a execução publica novamente. Enquanto estiver definido, status é rerequested e a execução permanece no estado de verificação mais recente do commit e é considerada pendente, com conclusion e os tempos ainda registrando o resultado suprimido, de modo que uma verificação obrigatória bloqueia a mesclagem até que o aplicativo responda.

checkRuns[].rerequestedBy objeto

Principal que solicitou a nova execução, carregando as mesmas variantes de ator que actor. Presente sempre que rerequestedAt estiver definido e removido junto com ele.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/check-suites/CHECK_SUITE_ID/check-runs' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "checkRuns": [    {      "id": "cr_01k2ja2000e0080000000000g7",      "repository": {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      },      "checkSuite": {        "id": "crg_01k2ja2000e0080000000000h8"      },      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "key": "ci-8842-unit-tests",      "name": "unit-tests",      "status": "completed",      "conclusion": "success",      "detailsUrl": "https://ci.acme.dev/runs/8842",      "externalUpdatedAt": "2026-08-02T14:44:30Z",      "startedAt": "2026-08-02T14:40:00Z",      "completedAt": "2026-08-02T14:44:30Z",      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "externalId": "run-8842",      "actor": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      },      "output": {        "title": "Unit tests",        "summary": "128 tests passed.",        "text": "All suites green."      }    }  ]}

Listar check runs de um commit

GET/v1/origin/repos/{ownerSlug}/{repoName}/commits/{sha}/check-runs
Scoperepository:checks:readAuthInstallation tokenUser access token

Lista as execuções de verificação atuais de um commit em todas as suítes: somente execuções pertencentes à tentativa mais recente de cada suíte e, dentro de cada suíte, somente a tentativa mais recente por chave de execução. Tentativas suprimidas são omitidas; Publicar execução de verificação define qual tentativa é a mais recente. Uma execução que foi requisitada novamente permanece na listagem e aparece como pendente, com status rerequested e rerequestedAt definidos, e sua conclusion e os tempos da tentativa suprimida inalterados, até que o app que a possui responda. Leia uma tentativa suprimida pelo seu próprio id com Obter execução de verificação. Opcionalmente filtrado por nome da verificação e por status. Paginado.

Os filtros se aplicam ao conjunto colapsado, portanto uma execução corresponde ao status de sua tentativa mais recente e um filtro nunca reexibe uma tentativa suprimida. Os tokens de página incorporam os filtros sob os quais foram emitidos, então um token reproduzido com filtros diferentes é rejeitado; reinicie a paginação quando um filtro mudar.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

sha string Obrigatório

SHA do commit (hex de 40 ou 64 caracteres) cujos check runs serão listados.

Parâmetros de consulta

pageSize integer

Número máximo de execuções de verificação a retornar. Padrão de 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página. Codifica o id do último check-run visto com escopo neste commit e nos filtros abaixo; reutilizar um token com filtros diferentes retorna InvalidArgument (HTTP 400). O pageSize em uma solicitação de acompanhamento se aplica apenas a essa página; omita-o para manter o tamanho de página anterior.

checkName string

Filtro opcional pelo nome exato do check-run, correspondente a checkRuns[].name. Omita para listar execuções com qualquer nome.

status string

Filtro de status opcional. Valores permitidos: queued, in_progress, completed, rerequested. Qualquer outro valor retorna InvalidArgument (HTTP 400). Omita para listar execuções em qualquer status.

Campos de resposta

checkRuns matriz

Check runs paginados vinculados ao SHA do commit resolvido.

checkRuns[].id string

Identificador da execução de verificação atribuído pelo servidor.

checkRuns[].repository object

Referência do repositório para a execução.

checkRuns[].repository.id string

Identificador do repositório em uma referência de contêiner.

checkRuns[].repository.name string

Nome do repositório em uma referência de container.

checkRuns[].repository.owner objeto

Referência do proprietário do repositório.

checkRuns[].repository.owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o proprietário do repositório.

checkRuns[].repository.owner.id string

Identificador do proprietário da Origin.

checkRuns[].repository.owner.type string

Tipo de namespace do proprietário. Somente leitura. Valores permitidos: team, user. Omitido quando desconhecido.

checkRuns[].checkSuite objeto

Referência à suíte de verificação que o contém.

checkRuns[].checkSuite.id string

Identificador atribuído pelo servidor da suíte de verificação que contém este item.

checkRuns[].sha string

SHA do commit ao qual a execução está vinculada.

checkRuns[].key string

Identidade lógica estável escolhida pelo app; as verificações obrigatórias podem corresponder ao app, à chave da suíte e a esta chave.

checkRuns[].name string

Nome da execução somente para exibição; não é usado para correspondência de verificações obrigatórias.

checkRuns[].status string

Status do ciclo de vida; queued, in_progress, completed ou rerequested. Uma execução rerequested é uma execução concluída cuja nova execução foi solicitada e cujo app proprietário ainda não respondeu: trate-a como pendente e exiba-a como queued.

checkRuns[].conclusion string

Presente para uma execução concluída ou solicitada novamente; success, failure, neutral, cancelled, skipped, timed_out, action_required ou stale. Em uma execução solicitada novamente, corresponde ao veredito da tentativa substituída, portanto leia-o apenas quando status for completed.

checkRuns[].detailsUrl string

Link separado para a página completa de resultados do provedor.

checkRuns[].externalUpdatedAt string

Timestamp externo de atualização usado para ordenar as atualizações, para que tentativas antigas não substituam um estado mais recente.

checkRuns[].startedAt string

Horário de início no formato RFC 3339 informado pelo provedor, quando fornecido.

checkRuns[].completedAt string

Horário de conclusão em RFC 3339 informado pelo provedor, quando fornecido.

checkRuns[].createdAt string

Timestamp de criação da execução no formato RFC 3339.

checkRuns[].updatedAt string

Timestamp RFC 3339 da atualização persistida mais recente da execução.

checkRuns[].externalId string

Identidade do provedor para uma tentativa. Reutilize-a para atualizar essa tentativa e use um novo valor para uma nova tentativa.

checkRuns[].actor object

Agente público que gerou a execução. Sempre o actor da suíte de verificação proprietária.

checkRuns[].actor.user objeto

Variante de usuário do ator. Definida quando um usuário executou a ação.

checkRuns[].actor.user.id string

Identificador público do usuário.

checkRuns[].actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante "user" estiver presente.

checkRuns[].actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

checkRuns[].actor.user.handle string

O identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; caso contrário, é omitido.

checkRuns[].actor.app object

Variante de app do ator. Definida quando um app executou a ação.

checkRuns[].actor.app.id string

Identificador público do app.

checkRuns[].actor.app.displayName string

Nome de exibição registrado do aplicativo. Omitido quando o aplicativo não puder ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

checkRuns[].actor.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkRuns[].actor.serviceAccount.id string

Identificador público da conta de serviço.

checkRuns[].output object

Objeto de resultado legível por humanos contendo título, resumo e texto mais longo quando fornecido.

checkRuns[].output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRuns[].output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRuns[].output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo (UTF-8): 65535 bytes.

checkRuns[].deadlineAt string

Prazo registrado para a execução do check run, como um carimbo de data/hora RFC 3339. Ausente quando a execução não tem prazo, inclusive após sua conclusão.

checkRuns[].isRerequestable boolean

Se o aplicativo de relatórios declarou esta execução como passível de nova solicitação.

checkRuns[].rerequestedAt string

Timestamp RFC 3339 da re-solicitação pendente. Ausente quando não há re-solicitação pendente e limpo quando o app que possui a execução publica novamente. Enquanto estiver definido, status é rerequested e a execução permanece no estado de verificação mais recente do commit e aparece como pendente, com conclusion e os horários ainda contendo o resultado substituído; assim, uma verificação obrigatória bloqueia a mesclagem até que o app responda.

checkRuns[].rerequestedBy object

Principal que solicitou a nova execução, carregando as mesmas variantes de ator que actor. Presente sempre que rerequestedAt estiver definido, e removido junto com ele.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits/SHA/check-runs' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "checkRuns": [    {      "id": "cr_01k2ja2000e0080000000000g7",      "repository": {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      },      "checkSuite": {        "id": "crg_01k2ja2000e0080000000000h8"      },      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "key": "ci-8842-unit-tests",      "name": "unit-tests",      "status": "completed",      "conclusion": "success",      "detailsUrl": "https://ci.acme.dev/runs/8842",      "externalUpdatedAt": "2026-08-02T14:44:30Z",      "startedAt": "2026-08-02T14:40:00Z",      "completedAt": "2026-08-02T14:44:30Z",      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "externalId": "run-8842",      "actor": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      },      "output": {        "title": "Unit tests",        "summary": "128 tests passed.",        "text": "All suites green."      }    }  ]}

Listar suítes de verificação para um commit

GET/v1/origin/repos/{ownerSlug}/{repoName}/commits/{sha}/check-suites
Scoperepository:checks:readAuthInstallation tokenUser access token

Lista as suítes de verificação relatadas para um commit. Retorna apenas a tentativa mais recente de cada suíte, por ator que reporta e chave da suíte; tentativas substituídas são omitidas, e Post Check Run define qual tentativa é a mais recente. Leia uma tentativa substituída pelo seu próprio id com Get Check Suite. Retorna apenas os metadados da suíte (sem execuções incorporadas). Paginado.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

sha string Obrigatório

SHA do commit (hex de 40 ou 64 caracteres) para listar suites.

Parâmetros de consulta

pageSize integer

Número máximo de suítes a retornar. Padrão: 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco de uma resposta anterior a partir do next_page_token. Vazio na primeira página. Codifica o ID da última check-suite vista no escopo deste commit. O pageSize em uma solicitação subsequente se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos da resposta

checkSuites matriz

Suites de verificação paginadas anexadas ao SHA do commit resolvido.

checkSuites[].id string

Identificador da suíte de verificação atribuído pelo servidor.

checkSuites[].repository objeto

Referência do repositório para a suíte.

checkSuites[].repository.id string

Identificador do repositório em uma referência de contêiner.

checkSuites[].repository.name string

Nome do repositório em uma referência de contêiner.

checkSuites[].repository.owner objeto

Referência do proprietário do repositório.

checkSuites[].repository.owner.slug string

Slug do proprietário visível na URL, usado junto com o ID do proprietário para identificar o dono do repositório.

checkSuites[].repository.owner.id string

Identificador do proprietário de origem.

checkSuites[].repository.owner.type string

Tipo de namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

checkSuites[].sha string

SHA do commit ao qual a suíte está associada.

checkSuites[].key string

Identidade estável de verificação obrigatória escolhida pelo app. As verificações obrigatórias correspondem ao app mais esta chave, não ao nome.

checkSuites[].name string

Nome da suíte apenas para exibição; não é usado para correspondência de verificações obrigatórias.

checkSuites[].detailsUrl string

Link opcional para os resultados em nível de suíte do provedor.

checkSuites[].createdAt string

Timestamp de criação da suíte no formato RFC 3339.

checkSuites[].updatedAt string

Timestamp RFC 3339 da atualização mais recente da suíte.

checkSuites[].externalId string

Identidade do provedor para esta tentativa de suíte.

checkSuites[].actor objeto

Agente público que produziu a suíte.

checkSuites[].actor.user objeto

Variante de usuário do ator. Definida quando um usuário realizou a ação.

checkSuites[].actor.user.id string

Identificador público do usuário.

checkSuites[].actor.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

checkSuites[].actor.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

checkSuites[].actor.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, omitido.

checkSuites[].actor.app objeto

Variante do app do ator. Definida quando um app executou a ação.

checkSuites[].actor.app.id string

Identificador público do app.

checkSuites[].actor.app.displayName string

O nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado primário do Cherri Code.

checkSuites[].actor.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

checkSuites[].actor.serviceAccount.id string

Identificador público da conta de serviço.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits/SHA/check-suites' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "checkSuites": [    {      "id": "crg_01k2ja2000e0080000000000h8",      "repository": {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      },      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "key": "ci-8842",      "name": "CI",      "detailsUrl": "https://ci.acme.dev/runs/8842",      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "externalId": "build-8842",      "actor": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      }    }  ]}

Commits e conteúdo

Um commit separa os metadados do objeto Git em commit dos relacionamentos de nível superior do repositório. As respostas de listagem omitem stats; Obter commit inclui stats agregadas de todo o commit. Os arquivos alterados são retornados apenas pela coleção paginada Listar arquivos do commit. author e committer são identidades Git registradas no commit, não objetos de usuário do Origin.

Uma comparação é apenas um resumo: nunca incorpora listas de commits ou diffs de arquivos. status é exatamente identical, ahead, behind ou diverged; aheadBy e behindBy são contagens de commits. baseCommit, headCommit e mergeBaseCommit usam a projeção esparsa do commit (sem stats ou arquivos).

Listar commits

GET/v1/origin/repos/{ownerSlug}/{repoName}/commits
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista os commits de um branch ou de uma ref inicial.

Os resultados da listagem omitem stats. Use Get Commit para obter os stats agregados e List Commit Files para o diff paginado dos arquivos.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

Parâmetros de consulta

sha string

SHA, branch, tag ou ref simbólica (por exemplo HEAD) a partir da qual iniciar a listagem. Vazio significa a branch padrão do repositório.

pageSize integer

Número máximo de commits a retornar. Usa 30 por padrão quando não definido ou igual a 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco de uma resposta anterior a partir de nextPageToken. Vazio na primeira página. Codifica o ref inicial, a posição de percurso e os filtros de e-mail; sha, pageSize, authorEmails e committerEmails são ignorados quando um token é fornecido. Uma página filtrada pode conter menos de pageSize commits, ou nenhum, mesmo que nextPageToken esteja definido. Continue paginando até que ele fique vazio.

authorEmails matriz

Filtro opcional por e-mail do autor no Git. Corresponde a qualquer e-mail da lista, sem diferenciar maiúsculas de minúsculas, após a remoção de espaços no início e no fim. Entradas vazias e duplicadas são ignoradas. No máximo 100 e-mails distintos; vazio significa sem filtro. Trata-se de e-mails de autor no Git, não de IDs de atores do Origin. Cada página verifica no máximo 1.000 commits em busca de correspondências.

committerEmails matriz

Filtro opcional por e-mail do committer do Git. Usa a mesma normalização e o mesmo limite de 100 e-mails de authorEmails; vazio significa sem filtro. Quando os dois filtros estão definidos, o commit precisa corresponder às duas listas. Cada página verifica no máximo 1.000 commits em busca de correspondências.

Campos da resposta

commits matriz

Commits esparsos sem estatísticas; os arquivos alterados não são incorporados.

commits[].sha string

SHA completo do commit.

commits[].commit object

Metadados de objetos Git aninhados separadamente das relações de repositório de nível superior.

commits[].commit.author object

Identidade do autor no Git registrada no commit, não um objeto de usuário do Origin.

commits[].commit.author.name string

Name registrado na identity do autor do Git.

commits[].commit.author.email string

Email registrado na identidade do autor no Git.

commits[].commit.author.date string

Data no formato RFC 3339 registrada na identidade do autor no Git.

commits[].commit.committer object

Identidade do committer do Git registrada no commit, não um objeto de usuário do Origin.

commits[].commit.committer.name string

Nome registrado na identidade do Git.

commits[].commit.committer.email string

Email registrado na identidade do Git.

commits[].commit.committer.date string

Timestamp ISO-8601 preservando o deslocamento de fuso horário original da assinatura do git (por exemplo, "2014-11-07T22:01:45+01:00").

commits[].commit.message string

Mensagem de commit.

commits[].commit.tree object

Árvore referenciada pelo commit.

commits[].commit.tree.sha string

SHA da árvore referenciada pelo commit.

commits[].parents matriz

Referências aos commits pai, cada uma contendo um SHA.

commits[].parents[].sha string

SHA do commit pai.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estrutura da resposta:

{  "commits": [    {      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "commit": {        "author": {          "name": "Jane Doe",          "email": "[email protected]",          "date": "2026-08-01T09:30:00Z"        },        "committer": {          "name": "Jane Doe",          "email": "[email protected]",          "date": "2026-08-01T09:30:00Z"        },        "message": "Add launch telemetry",        "tree": {          "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"        }      },      "parents": [        {          "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"        }      ],      "stats": {        "additions": 128,        "deletions": 46,        "total": 174      }    }  ]}

Consultar commit

GET/v1/origin/repos/{ownerSlug}/{repoName}/commits/{sha}
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna um único commit por SHA ou ref com as stats agregadas do commit inteiro. Não inclui arquivos alterados; use Listar arquivos do commit.

author e committer são identidades do git registradas no commit, não objetos de usuário do Origin.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

sha string Obrigatório

SHA, branch, tag ou referência simbólica (por exemplo, HEAD) do commit a ser buscado. Um SHA abreviado é resolvido da mesma forma que em Consultar commit do Git.

Campos da resposta

sha string

SHA completo do commit.

commit objeto

Metadados do objeto Git aninhados separadamente das relações de repositório de nível superior.

commit.author objeto

Identidade do autor do Git registrada no commit, não um objeto de usuário do Origin.

commit.author.name string

Nome registrado na identidade do autor do Git.

commit.author.email string

E-mail registrado na identidade do autor do Git.

commit.author.date string

Data no formato RFC 3339 registrada na identidade do autor do Git.

commit.committer objeto

Identidade do committer do Git registrada no commit, não um objeto de usuário do Origin.

commit.committer.name string

Nome registrado na identidade do Git.

commit.committer.email string

E-mail registrado na identidade do Git.

commit.committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do Git (ex.: "2014-11-07T22:01:45+01:00").

commit.message string

Mensagem do commit.

commit.tree objeto

Árvore referenciada pelo commit.

commit.tree.sha string

SHA da árvore referenciada pelo commit.

parents matriz

Referências a commits pai, cada uma contendo um SHA.

parents[].sha string

SHA do commit pai.

stats objeto

Adições agregadas, exclusões e total do commit completo; incluído por get-commit e omitido pelas projeções de list.

stats.additions integer

Total de linhas adicionadas no commit.

stats.deletions integer

Total de linhas removidas no commit.

stats.total integer

Total de adições mais exclusões para o commit.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

formato de resposta:

{  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "commit": {    "author": {      "name": "Jane Doe",      "email": "[email protected]",      "date": "2026-08-01T09:30:00Z"    },    "committer": {      "name": "Jane Doe",      "email": "[email protected]",      "date": "2026-08-01T09:30:00Z"    },    "message": "Add launch telemetry",    "tree": {      "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"    }  },  "parents": [    {      "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    }  ],  "stats": {    "additions": 128,    "deletions": 46,    "total": 174  }}

Listar arquivos de um commit

GET/v1/origin/repos/{ownerSlug}/{repoName}/commits/{sha}/files
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista os arquivos alterados por um commit.

sha pode ser um SHA de commit, branch, tag ou ref simbólica como HEAD. Por padrão, os resultados trazem 30 arquivos e são limitados a 100. Um token de página fixa o commit resolvido e o cursor de arquivo; em solicitações posteriores, sha deve corresponder ao token. Cada arquivo inclui filename, status, additions, deletions, changes, patch e previousFilename quando renomeado ou copiado. patch fica vazio para arquivos binários.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

sha string Obrigatório

SHA, branch, tag ou referência simbólica (por exemplo HEAD) do commit cujos arquivos devem ser listados. Um SHA abreviado é resolvido da mesma forma que em Obter commit do Git.

Parâmetros de consulta

pageSize integer

Número máximo de arquivos alterados a serem retornados. O padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página. O token fixa o commit resolvido e o cursor do arquivo, portanto sha em uma solicitação subsequente deve corresponder ao token. pageSize em uma solicitação subsequente se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

files matriz

Arquivos alterados paginados com nome do arquivo, status, contagem de linhas, patch e previousFilename para arquivos renomeados ou copiados. Patches binários ficam vazios.

files[].filename string

Caminho do arquivo alterado.

files[].status string

Status da alteração: adicionado, removido, modificado, renomeado ou copiado.

files[].additions integer

Número de linhas adicionadas ao arquivo.

files[].deletions integer

Número de linhas removidas do arquivo.

files[].changes integer

Número total de linhas alteradas no arquivo.

files[].patch string

Patch unificado; vazio para arquivos binários.

files[].previousFilename string

Caminho anterior quando o arquivo foi renomeado ou copiado.

nextPageToken string

O token fixa o commit resolvido e o cursor do arquivo; os valores subsequentes de sha devem corresponder a ele.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits/SHA/files' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "files": [    {      "filename": "src/telemetry.ts",      "status": "modified",      "additions": 6,      "deletions": 3,      "changes": 9,      "patch": "@@ -12,6 +12,9 @@\n import { ignite } from \"./ignition\";\n+import { emitLaunchTelemetry } from \"./telemetry\";\n"    }  ]}

Comparar commits

GET/v1/origin/repos/{ownerSlug}/{repoName}/compare/{basehead}
Scoperepository:contents:readAuthInstallation tokenUser access token

Compara commits, refs ou tags em relação à base de merge. basehead é "{base}...{head}"; refs que contêm "/" devem usar o SHA correspondente.

base e head podem ser, cada um, um SHA, branch, tag ou ref simbólica como HEAD. A resposta é um resumo não paginado: status é identical, ahead, behind ou diverged; os três objetos de commit são esparsos e omitem stats e arquivos. Nenhum campo totalCommits, commits embutidos ou files é retornado. Históricos não relacionados retornam 404.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

basehead string Obrigatório

"{base}...{head}", em que cada revisão pode ser um SHA, uma branch, uma tag ou uma referência simbólica como HEAD.

Campos da resposta

status string

Estado da comparação; exatamente idêntico, à frente, atrás ou divergente.

aheadBy integer

Número de commits pelos quais o branch principal está à frente.

behindBy integer

Número de commits que o branch principal está atrasado.

baseCommit object

Commit base resolvido em formato sparse, sem estatísticas nem arquivos.

baseCommit.sha string

SHA completo do commit.

baseCommit.commit object

Metadados de objeto Git aninhados separadamente das relações de repositório de nível superior.

baseCommit.commit.author object

Identidade do autor no Git registrada no commit, não um objeto de usuário do Origin.

baseCommit.commit.author.name string

Nome registrado na identidade do autor do Git.

baseCommit.commit.author.email string

Email registrado na identidade do autor no Git.

baseCommit.commit.author.date string

Data no formato RFC 3339 registrada na identidade do autor no Git.

baseCommit.commit.committer object

Identidade do committer do Git registrada no commit, não um objeto de usuário do Origin.

baseCommit.commit.committer.name string

Nome registrado na identidade do Git.

baseCommit.commit.committer.email string

Email registrado na identidade do Git.

baseCommit.commit.committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do git (por exemplo, "2014-11-07T22:01:45+01:00").

baseCommit.commit.message string

Mensagem de commit.

baseCommit.commit.tree object

Árvore referenciada pelo commit.

baseCommit.commit.tree.sha string

SHA da árvore referenciada pelo commit.

baseCommit.parents matriz

Referências aos commits parent, cada uma contendo um SHA.

baseCommit.parents[].sha string

SHA do commit pai.

headCommit object

Commit de head resolvido em formato sparse, sem stats nem arquivos.

headCommit.sha string

SHA completo do commit.

headCommit.commit object

Metadados do objeto Git aninhados separadamente das relações de repositório de nível superior.

headCommit.commit.author object

Identidade do autor do Git registrada no commit, não um objeto de usuário do Origin.

headCommit.commit.author.name string

Nome registrado na identidade do autor do Git.

headCommit.commit.author.email string

Email registrado na identidade do autor no Git.

headCommit.commit.author.date string

Data no formato RFC 3339 registrada na identidade do autor no Git.

headCommit.commit.committer object

Identidade do committer do Git registrada no commit, não um objeto de usuário do Origin.

headCommit.commit.committer.name string

Nome registrado na identidade do Git.

headCommit.commit.committer.email string

Email registrado na identidade do Git.

headCommit.commit.committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do git (por exemplo, "2014-11-07T22:01:45+01:00").

headCommit.commit.message string

Mensagem de commit.

headCommit.commit.tree object

Árvore referenciada pelo commit.

headCommit.commit.tree.sha string

SHA da árvore referenciada pelo commit.

headCommit.parents matriz

Referências a commits pai, cada uma contendo um SHA.

headCommit.parents[].sha string

SHA do commit pai.

mergeBaseCommit object

Commit de merge-base esparso, sem estatísticas nem arquivos.

mergeBaseCommit.sha string

SHA completo do commit.

mergeBaseCommit.commit object

Metadados de objetos Git aninhados separadamente das relações de repositório de nível superior.

mergeBaseCommit.commit.author object

Identidade do autor no Git registrada no commit, e não um objeto de usuário do Origin.

mergeBaseCommit.commit.author.name string

Nome registrado na identidade do autor do Git.

mergeBaseCommit.commit.author.email string

Email registrado na identidade do autor no Git.

mergeBaseCommit.commit.author.date string

Data no formato RFC 3339 registrada na identidade do autor no Git.

mergeBaseCommit.commit.committer object

Identidade do committer do Git registrada no commit, não um objeto de usuário do Origin.

mergeBaseCommit.commit.committer.name string

Nome registrado na identidade do Git.

mergeBaseCommit.commit.committer.email string

Email registrado na identidade do Git.

mergeBaseCommit.commit.committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do git (por exemplo, "2014-11-07T22:01:45+01:00").

mergeBaseCommit.commit.message string

Mensagem de commit.

mergeBaseCommit.commit.tree object

Árvore referenciada pelo commit.

mergeBaseCommit.commit.tree.sha string

SHA da árvore referenciada pelo commit.

mergeBaseCommit.parents matriz

Referências aos commits parent, cada uma contendo um SHA.

mergeBaseCommit.parents[].sha string

SHA do commit parent.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/compare/BASE...HEAD' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "status": "ahead",  "aheadBy": 2,  "behindBy": 0,  "baseCommit": {    "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",    "commit": {      "author": {        "name": "Jane Doe",        "email": "[email protected]",        "date": "2026-08-01T09:30:00Z"      },      "committer": {        "name": "Jane Doe",        "email": "[email protected]",        "date": "2026-08-01T09:30:00Z"      },      "message": "Add launch telemetry",      "tree": {        "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"      }    },    "parents": [      {        "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"      }    ],    "stats": {      "additions": 128,      "deletions": 46,      "total": 174    }  },  "headCommit": {    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "commit": {      "author": {        "name": "Jane Doe",        "email": "[email protected]",        "date": "2026-08-01T09:30:00Z"      },      "committer": {        "name": "Jane Doe",        "email": "[email protected]",        "date": "2026-08-01T09:30:00Z"      },      "message": "Add launch telemetry",      "tree": {        "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"      }    },    "parents": [      {        "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"      }    ],    "stats": {      "additions": 128,      "deletions": 46,      "total": 174    }  },  "mergeBaseCommit": {    "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",    "commit": {      "author": {        "name": "Jane Doe",        "email": "[email protected]",        "date": "2026-08-01T09:30:00Z"      },      "committer": {        "name": "Jane Doe",        "email": "[email protected]",        "date": "2026-08-01T09:30:00Z"      },      "message": "Add launch telemetry",      "tree": {        "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"      }    },    "parents": [      {        "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"      }    ],    "stats": {      "additions": 128,      "deletions": 46,      "total": 174    }  }}

Listar arquivos da comparação

GET/v1/origin/repos/{ownerSlug}/{repoName}/compare/{basehead}/files
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista os arquivos alterados por uma comparação: o diff de head em relação à base de merge entre base e head.

basehead é "{base}...{head}"; refs contendo "/" devem usar seu SHA. A lista de arquivos sempre corresponde ao resumo de Comparar commits, então uma comparação identical ou behind retorna uma lista vazia, e históricos não relacionados retornam 404. Os resultados padrão são 30 arquivos e são limitados a 100. Cada arquivo contém os mesmos campos de Listar arquivos de um commit.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

basehead string Obrigatório

"{base}...{head}", em que qualquer uma das revisões pode ser um SHA, branch, tag ou referência simbólica, como HEAD.

Parâmetros de consulta

pageSize integer

Número máximo de arquivos alterados a serem retornados. O padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página. O token está vinculado à comparação resolvida e ao cursor do arquivo, portanto basehead em uma solicitação subsequente deve corresponder ao token. O Origin resolve novamente a comparação em cada página; quando os commits dele tiverem avançado desde a emissão do token, a solicitação retorna InvalidArgument (HTTP 400) e a listagem deve ser reiniciada a partir da primeira página. pageSize em uma solicitação subsequente se aplica somente a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

files matriz

Arquivos alterados paginados com nome do arquivo, status, contagem de linhas, patch e previousFilename para arquivos renomeados ou copiados. Patches binários ficam vazios.

files[].filename string

Caminho do arquivo alterado.

files[].status string

Status da alteração: adicionado, removido, modificado, renomeado ou copiado.

files[].additions integer

Contagem de linhas adicionadas ao arquivo.

files[].deletions integer

Número de linhas removidas do arquivo.

files[].changes integer

Número total de linhas alteradas no arquivo.

files[].patch string

Patch unificado; vazio para arquivos binários.

files[].previousFilename string

Caminho anterior quando o arquivo foi renomeado ou copiado.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não há mais arquivos.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/compare/BASE...HEAD/files' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "files": [    {      "filename": "src/telemetry.ts",      "status": "modified",      "additions": 6,      "deletions": 3,      "changes": 9,      "patch": "@@ -12,6 +12,9 @@\n import { ignite } from \"./ignition\";\n+import { emitLaunchTelemetry } from \"./telemetry\";\n"    }  ]}

Obter conteúdo

GET/v1/origin/repos/{ownerSlug}/{repoName}/contents
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna o conteúdo de um arquivo ou diretório em uma ref. O caminho é informado pelo parâmetro de consulta path (com suporte a caminhos aninhados); omita-o ou deixe-o vazio para acessar o diretório raiz do repositório. Arquivos maiores que 1 MiB (decodificados) são rejeitados com FailedPrecondition (HTTP 400).

Arquivos contêm conteúdo em base64. Diretórios contêm filhos diretos em entries. As entradas de diretório são representações resumidas dos itens filhos e contêm type, name, path, sha e size; consulte o caminho de um filho para ler seu conteúdo.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo na entidade proprietária.

Parâmetros de consulta

path string

Caminho do arquivo ou diretório relativo à raiz do repositório. Se estiver vazio, retorna o diretório raiz.

ref string

Commit, branch, tag ou ref simbólica (por exemplo, HEAD) a ser lida. Se estiver vazio, usa a branch padrão do repositório.

Campos de resposta

type string

Tipo de conteúdo: arquivo ou diretório.

encoding string

Codificação do arquivo; respostas de arquivo usam base64.

size string

Tamanho do conteúdo decodificado em bytes, codificado como uma string JSON conforme a convenção de inteiro de 64 bits da API. Payloads de arquivo maiores que 1 MiB são rejeitados.

name string

Nome base do arquivo ou diretório.

path string

Caminho relativo à raiz do repositório.

sha string

SHA do blob para um arquivo ou SHA da árvore para um diretório.

content string

Corpo do arquivo codificado em base64; presente para um arquivo consultado.

entries matriz

Filhos diretos resumidos de um diretório. As entradas contêm tipo, nome, caminho, sha e tamanho; consulte o caminho de um filho para ler seu conteúdo.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/contents' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "type": "file",  "encoding": "base64",  "size": "312",  "name": "telemetry.ts",  "path": "src/telemetry.ts",  "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",  "content": "Y29uc29sZS5sb2coImxhdW5jaCIpOwo="}

Obter conteúdo em lote

POST/v1/origin/repos/{ownerSlug}/{repoName}/contents:batchGet
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna o conteúdo de vários caminhos explícitos em um ref em uma única solicitação. Cada caminho solicitado gera um resultado indicando se foi encontrado; um caminho encontrado possui a mesma estrutura Content do GetContents (arquivos em base64, diretórios com entries imediatas, links simbólicos como arquivos). Os caminhos são correspondidos exatamente, sem globs ou padrões, e no máximo 20 podem ser solicitados; duplicatas são removidas. Os resultados preservam a ordem da primeira ocorrência na solicitação. Um único arquivo maior que o limite de 1 MiB do Get Contents faz com que todo o lote falhe com FailedPrecondition (HTTP 400). Usa POST porque a lista de caminhos é enviada no corpo da requisição.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

Corpo da solicitação

paths matriz Obrigatório

Caminhos exatos a serem buscados, relativos à raiz do repositório (sem globs ou padrões). No máximo 20 entradas; duplicatas são removidas. Uma string vazia solicita o diretório raiz do repositório.

ref string

Commit, branch, tag ou ref simbólica (por exemplo HEAD) para leitura. Se estiver vazio, significa a branch padrão do repositório.

Campos de resposta

results matriz

Um resultado por caminho exato retornado, preservando a ordem das solicitações conforme aparecem pela primeira vez.

results[].path string

Caminho solicitado correspondente a este resultado.

results[].found boolean

Indica se o caminho solicitado existe no commit resolvido.

results[].content objeto

Valor do conteúdo quando encontrado é true; omitido quando encontrado é false.

results[].content.type string

Tipo de conteúdo: arquivo ou diretório.

results[].content.encoding string

Codificação do arquivo; respostas de arquivo usam base64.

results[].content.size string

Tamanho do conteúdo decodificado em bytes, codificado como uma string JSON segundo a convenção da API para inteiros de 64 bits. Cargas de arquivo maiores que 1 MiB são rejeitadas.

results[].content.name string

Nome base do arquivo ou diretório.

results[].content.path string

Caminho relativo à raiz do repositório.

results[].content.sha string

SHA do blob para um arquivo ou SHA da árvore para um diretório.

results[].content.content string

Corpo do arquivo codificado em Base64; presente para um arquivo recuperado.

results[].content.entries matriz

Filhos esparsos imediatos de um diretório. As entradas contêm tipo, nome, caminho, sha e tamanho; recupere o caminho de um filho para ler seu conteúdo.

resolvedCommitSha string

SHA do commit para o qual a ref solicitada foi resolvida.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/contents:batchGet' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "paths": [    "src/telemetry.ts"  ],  "ref": "main"}'

formato de resposta:

{  "results": [    {      "path": "src/telemetry.ts",      "found": true,      "content": {        "type": "file",        "encoding": "base64",        "size": "312",        "name": "telemetry.ts",        "path": "src/telemetry.ts",        "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",        "content": "Y29uc29sZS5sb2coImxhdW5jaCIpOwo="      }    }  ],  "resolvedCommitSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"}

Grep Contents

POST/v1/origin/repos/{ownerSlug}/{repoName}:grep
Scoperepository:contents:readAuthInstallation tokenUser access token

Pesquisa o texto dos arquivos do repositório em uma ref e retorna as linhas correspondentes, além das linhas de contexto ao redor que forem solicitadas. A busca é orientada a linhas: um pattern nunca corresponde através de uma quebra de linha, e cada entrada retornada é uma única linha. O repositório é escaneado a cada solicitação, portanto não há paginação nem cursor; a resposta só é completa quando limitHit é false. Um repositório vazio, sem referências do Git, não retorna correspondências e traz limitHit como false. Usa POST porque os parâmetros de busca trafegam no corpo da solicitação.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

Corpo da solicitação

ref string

Commit, branch, tag ou referência simbólica (por exemplo HEAD) para pesquisar. Vazio significa a branch padrão do repositório.

query string Obrigatório

O padrão a ser procurado. Por padrão, é uma expressão regular com suporte a classes de caracteres, quantificadores, alternância, grupos e âncoras; defina literal para procurar o texto exatamente. Espaços em branco são significativos e são pesquisados conforme fornecidos. Quando literal é false, a correspondência sem diferenciar maiúsculas de minúsculas é indicada por (?i) no início do padrão (por exemplo (?i)launch) e a correspondência de palavra inteira é \b ao redor dele (por exemplo \blaunch\b). Um padrão vazio retorna InvalidArgument (HTTP 400). Tamanho máximo em UTF-8: 4096 bytes.

literal boolean

Procure por query como texto exato, e não como expressão regular.

caseInsensitive boolean

Trata maiúsculas e minúsculas como equivalentes. Aplicável somente quando literal é true. Ignorado em buscas por expressão regular; escreva (?i) no início de query.

wholeWord boolean

Corresponder apenas a palavras completas. Aplicado somente quando literal é true. Ignorado em buscas por expressão regular; nesse caso, escreva \b ao redor do padrão.

contextBefore integer

Quantas linhas imediatamente anteriores a cada linha correspondente devem ser retornadas como contexto. Valores acima de 10 são reduzidos para 10.

contextAfter integer

Quantas linhas após cada linha correspondente serão retornadas como contexto. Valores acima de 10 são reduzidos a 10.

filterPath string

Restrinja a busca a este arquivo ou diretório, em relação à raiz do repositório. Se estiver vazio, a busca abrangerá todo o repositório. Tamanho máximo em UTF-8: 4096 bytes.

includes matriz

Glob patterns que indicam os caminhos a pesquisar. A correspondência não diferencia maiúsculas de minúsculas; um padrão sem / corresponde em qualquer depth, * corresponde dentro de um único segmento de caminho e ** corresponde entre segmentos. Quando há algum include, um caminho que não corresponda a nenhum deles não é pesquisado. No máximo 20 entries. Tamanho UTF-8 máximo por padrão: 4096 bytes.

excludes matriz

Glob patterns que indicam os caminhos a serem excluídos, na mesma sintaxe de includes. Um exclude prevalece sobre um include, e excluir um directory deixa de fora tudo o que está dentro dele. No máximo 20 entries. Tamanho UTF-8 máximo por pattern: 4096 bytes.

maxResults integer

O número máximo de ocorrências correspondentes a retornar. Zero solicita o padrão de 1000, e valores acima de 1000 são reduzidos para 1000. As linhas de contexto não contam para o limite.

Campos de resposta

matches matriz

As linhas correspondentes e as respectivas linhas de contexto. A ordem de exibição dos arquivos e das linhas não é especificada e pode variar entre solicitações idênticas.

matches[].path string

Caminho do arquivo, relativo à raiz do repositório.

matches[].lineNumber integer

Número desta linha no arquivo, começando em 1.

matches[].line string

O texto da linha, sem o terminador de linha no final.

matches[].kind string

Indica se esta linha contém correspondências ou foi retornada como contexto. Valores permitidos: match, context.

matches[].submatches matriz

Onde as correspondências ficam dentro de line. Sempre vazio em uma linha de contexto. Quando limitHit é true, a última linha que contém correspondência pode trazer apenas parte de suas correspondências. Intervalos que ficam totalmente além de line são omitidos, e intervalos que se estenderiam além de line são reduzidos aos bytes que restam.

matches[].submatches[].start integer

Deslocamento, em bytes, do primeiro byte da correspondência na linha.

matches[].submatches[].end integer

Deslocamento em bytes da posição imediatamente após o último byte da correspondência na linha.

limitHit boolean

Indica se a busca atingiu maxResults. Restrinja query, filterPath ou as listas de glob para pesquisar um conjunto menor de arquivos.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME:grep' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "ref": "main",  "query": "emitLaunchTelemetry\\(",  "contextBefore": 1,  "contextAfter": 1,  "includes": [    "*.ts"  ],  "excludes": [    "**/node_modules/**"  ],  "maxResults": 50}'
{  "matches": [    {      "path": "src/telemetry.ts",      "lineNumber": 11,      "line": "export function emitLaunchTelemetry(stage: string): void {",      "kind": "match",      "submatches": [        {          "start": 16,          "end": 37        }      ]    },    {      "path": "src/telemetry.ts",      "lineNumber": 12,      "line": "  console.log(\"launch\", stage);",      "kind": "context",      "submatches": []    }  ],  "limitHit": false}

Dados do Git

Objetos Git de baixo nível. Leituras exigem repository:contents:read, e um repositório vazio retorna 409. Create Commit From Files e Create referência do Git gravam objetos Git e exigem repository:contents:write.

Além de branches e tags, Get referência do Git lê a prévia de merge de um pull request em pull/{pullNumber}/merge (normalizado para refs/pull/{pullNumber}/merge): um commit que mergeia o head atual do pull request na ponta do seu base branch no momento da última atualização. O Origin a atualiza quando o pull request é criado, quando é feito push no seu head, quando ele é redirecionado para outro alvo e quando é reaberto, antes da publicação dos eventos de webhook pull_request.* correspondentes e dentro de um limite de tempo definido; uma atualização que não termina a tempo mantém a referência anterior, e os eventos são publicados mesmo assim. O Origin não a atualiza quando o base branch avança por conta própria, e exclui a referência quando o merge tem conflitos, então um 404 em um pull request aberto significa conflitos ou uma prévia ainda não preparada. Cada versão do pull request também informa seu próprio merge de teste em version.potentialMergeCommit, cujo state distingue esses dois casos; consulte Pull requests. O mergeCommitSha do pull request é um commit diferente, definido somente após ele ter sido mergeado.

Obter blob

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/blobs/{sha}
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna um objeto blob do Git pelo SHA. Por padrão, a resposta é um JSON com content em base64 encapsulado em MIME. Na interface REST, passe Accept: application/vnd.origin.raw+json (ou application/vnd.origin.raw) para receber os bytes brutos do blob. Blobs maiores que 4 MiB (decodificados) são rejeitados; para arquivos maiores, clone o repositório por Git HTTPS. Repositórios vazios retornam 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

sha string Obrigatório

SHA hexadecimal completo ou abreviado do objeto blob.

Campos de resposta

sha string

SHA do objeto blob do Git.

size integer

Tamanho do blob decodificado como um number JSON; blobs maiores que 4 MiB são rejeitados pelo endpoint JSON.

encoding string

As respostas JSON de blob usam codificação base64.

content string

Bytes do blob codificados em base64; os chamadores podem solicitar bytes brutos com Accept: application/vnd.origin.raw.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/blobs/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",  "size": 312,  "encoding": "base64",  "content": "Y29uc29sZS5sb2coImxhdW5jaCIpOwo="}

Obter commit do Git

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/commits/{sha}
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna um objeto de commit do Git pelo SHA (ou por uma revisão resolvível). Esta é a estrutura de commit de baixo nível do Git Database (author/message/tree planos), não o recurso de nível mais alto GetCommit em /commits/{sha}. sha aceita um SHA de commit, branch, tag ou referência simbólica como HEAD. Repositórios vazios retornam 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

sha string Obrigatório

SHA hexadecimal completo ou abreviado do objeto de commit, ou um branch, tag ou referência simbólica como HEAD. Uma abreviação precisa ter pelo menos 5 caracteres hexadecimais e é resolvida apenas entre objetos de commit; a resolução falha se nenhum commit ou mais de um commit corresponder a ela.

Campos da resposta

sha string

SHA completo do commit em hexadecimal.

author object

Assinatura do autor a partir do objeto git.

author.name string

Nome registrado na identidade do Git.

author.email string

Email registrado na identidade do Git.

author.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do git (por exemplo, "2014-11-07T22:01:45+01:00").

committer object

Assinatura do committer a partir do objeto git.

committer.name string

Nome registrado na identidade do Git.

committer.email string

Email registrado na identidade do Git.

committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do git (por exemplo, "2014-11-07T22:01:45+01:00").

message string

Mensagem de commit completa.

tree object

Árvore para a qual este commit aponta.

tree.sha string

SHA da árvore referenciada pelo commit.

parents matriz

SHAs dos commits pai (vazio para um commit raiz).

parents[].sha string

SHA do commit pai.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/commits/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "author": {    "name": "Jane Doe",    "email": "[email protected]",    "date": "2026-08-01T09:30:00Z"  },  "committer": {    "name": "Jane Doe",    "email": "[email protected]",    "date": "2026-08-01T09:30:00Z"  },  "message": "Add launch telemetry",  "tree": {    "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"  },  "parents": [    {      "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    }  ]}

Criar commit a partir de arquivos

POST/v1/origin/repos/{ownerSlug}/{repoName}/git/commits:createFromFiles
Scoperepository:contents:writeAuthInstallation tokenUser access token

Cria um commit em uma branch a partir de alterações inline de arquivos e avança a branch até ele.

As alterações são aplicadas à tree em expectedHeadSha, que se torna o parent do novo commit. Uma branch que tenha sido movida ou que não exista, um conjunto de alterações que deixe a tree inalterada, a exclusão de um path que a tree não contém, uma gravação bloqueada por um ruleset de push e um repositório cujo conteúdo é espelhado de outro host retornam, cada um, FailedPrecondition (HTTP 400).

Uma solicitação comporta no máximo 1.000 alterações de arquivo, 8 MiB por arquivo e 32 MiB de conteúdo no total. Exceder um limite, repetir um caminho ou enviar um campo malformado retorna InvalidArgument (HTTP 400), com violações de campo em google.rpc.BadRequest indicando a entrada files[i] problemática.

O branch já deve existir. Primeiro, crie-o com Create Git Ref e depois faça commit nele.

Parâmetros de path

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

Corpo da solicitação

targetBranch string Obrigatório

Branch que recebe o commit, no formato <branch>, heads/<branch> ou refs/heads/<branch>. O branch já deve existir. HEAD é rejeitado em qualquer grafia.

expectedHeadSha string Obrigatório

SHA hex completo para o qual a branch de destino deve estar apontando no momento. Ele se torna o parent do novo commit. O SHA formado apenas por zeros é rejeitado.

message string Obrigatório

Mensagem de commit.

author object Obrigatório

Autor do commit. Os timestamps são atribuídos pelo servidor.

author.name string Obrigatório

Nome registrado na identidade do Git.

author.email string Obrigatório

E-mail registrado na identidade do Git.

committer object

Committer do commit. Usa author como valor padrão quando omitido.

committer.name string

Nome registrado na identidade do Git. Obrigatório quando committer estiver presente.

committer.email string

Email registrado na identidade do Git. Obrigatório quando committer estiver presente.

files matriz Obrigatório

Alterações de arquivos aplicadas à árvore da ponta do branch. Pelo menos uma alteração é obrigatória, e os caminhos devem ser únicos dentro de uma solicitação.

files[].path string Obrigatório

Caminho relativo ao repositório, usando / como separador, por exemplo: docs/changelog.md.

files[].content string

Novo conteúdo do arquivo, codificado conforme files[].encoding. Cria o arquivo ou substitui seu conteúdo. Defina exatamente um entre files[].content e files[].delete.

files[].delete boolean

Remove o arquivo. Deve ser true quando definido. Defina exatamente um entre files[].content e files[].delete.

files[].encoding string

Codificação de files[].content. Valores permitidos: utf-8 (padrão), base64. Ignorado em exclusões.

files[].mode string

Modo de arquivo para files[].content. Valores permitidos: file (padrão), executable, symlink, em que o conteúdo é o destino do link. Ignorado em exclusões.

Campos da resposta

sha string

SHA do novo commit, agora a ponta do branch.

treeSha string

SHA da tree raiz do novo commit.

previousHeadSha string

Ponta do branch antes da gravação; o parent do novo commit.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/commits:createFromFiles' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "targetBranch": "feature/login",  "expectedHeadSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "message": "Add login telemetry",  "author": {    "name": "Jane Doe",    "email": "[email protected]"  },  "files": [    {      "path": "src/login/telemetry.ts",      "content": "export const LOGIN_EVENT = 1;"    },    {      "path": "assets/login.png",      "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",      "encoding": "base64"    },    {      "path": "src/login/legacy.ts",      "delete": true    }  ]}'

Formato da resposta:

{  "sha": "5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d",  "treeSha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8",  "previousHeadSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"}

Obter referência do Git

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/ref/{ref}
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna uma única referência do Git pelo nome. ref normalmente é heads/<branch> ou tags/<tag> (com ou sem refs/ no início), ou o HEAD simbólico. Apenas correspondências exatas; use ListMatchingGitRefs para prefixos. Repositórios vazios retornam 409 Conflict.

pull/<number>/merge é a prévia de merge de uma pull request: um commit que faz merge do head atual dela na ponta da ramificação base dela a partir da última atualização. Ela é um commit diferente de mergeCommitSha da pull request, que é definido apenas quando a pull request sofre merge. O version.potentialMergeCommit da pull request informa o merge de teste por versão: enquanto uma versão for a mais recente e seu state for prepared, seu sha será o commit para o qual esta referência do Git aponta.

O Origin atualiza a prévia quando uma pull request é criada, quando seu head recebe push, quando seu destino é alterado e quando ela é reaberta, antes da publicação dos eventos de webhook pull_request.* correspondentes e dentro de um limite de tempo definido. Uma atualização que não termina a tempo mantém a referência anterior, e os eventos ainda são publicados. O Origin não a atualiza apenas porque a ramificação base avançou e exclui a referência quando há conflitos de merge; portanto, um 404 em uma pull request aberta significa que há conflitos de merge ou que a prévia ainda não está preparada.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

ref string Obrigatório

Nome da referência do Git. Normalmente heads/<branch> ou tags/<tag>; refs/ no início é aceito e normalizado. O HEAD simbólico também é aceito (retornado como ref: "HEAD" com o commit de ponta), assim como pull/<number>/merge para a prévia de merge de uma pull request. Correspondência exata do nome completo da referência do Git.

Campos de resposta

ref string

Nome completo da referência do Git, por exemplo, "refs/heads/main".

object object

Objeto para o qual esta referência do Git aponta diretamente (sem desreferenciamento). Para tags anotadas, object.type é "tag" e object.sha é o SHA do objeto de tag.

object.sha string

SHA hexadecimal do objeto de destino.

object.type string

Um entre "commit", "tree", "blob" ou "tag".
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/ref/REF' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Response shape:

{  "ref": "refs/heads/main",  "object": {    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "type": "commit"  }}

Criar Git Ref

POST/v1/origin/repos/{ownerSlug}/{repoName}/git/refs
Scoperepository:contents:writeAuthInstallation tokenUser access token

Cria uma referência de branch apontando para um commit existente.

Somente referências de branch podem ser criadas. Uma tag ou qualquer outro namespace de referência, e um sha que não seja o hex SHA completo de um commit do repositório, retornam InvalidArgument (HTTP 400). Criar uma branch que já aponta para sha é bem-sucedido e retorna a referência existente; uma branch que existe em qualquer outro commit retorna AlreadyExists (HTTP 409 Conflict). Uma criação bloqueada por um ruleset de push, ou em um repositório cujo conteúdo é espelhado de outro host, retorna FailedPrecondition (HTTP 400).

Path Parameters

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

Request Body

ref string Obrigatório

Referência de branch a ser criada, no formato refs/heads/<branch> ou heads/<branch>.

sha string Obrigatório

Hex SHA completo de um commit existente para o qual a nova branch aponta.

Response Fields

ref string

Nome completo da referência do Git, por exemplo, "refs/heads/main".

object object

Objeto para o qual esta ref aponta diretamente (sem desreferenciamento). Para uma branch, object.type é "commit".

object.sha string

Hex SHA do objeto de destino.

object.type string

Um entre "commit", "tree", "blob" ou "tag".
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/refs' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "ref": "refs/heads/feature/login",  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"}'

Formato da resposta:

{  "ref": "refs/heads/feature/login",  "object": {    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "type": "commit"  }}

Excluir referência do Git

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/git/refs/{ref}
Scoperepository:contents:writeAuthInstallation tokenUser access token

Exclui uma referência de branch. O corpo da resposta fica vazio.

Somente referências de branch podem ser excluídas. Um branch inexistente retorna 404. O default branch do repositório, um branch protegido por uma regra de exclusão e um repositório cujo conteúdo é espelhado de outro host retornam FailedPrecondition (HTTP 400). Pull requests cujo head é o branch excluído são fechados, como ocorre após uma exclusão por push. Um branch cuja ponta muda enquanto a exclusão está em andamento falha com FailedPrecondition (HTTP 400) ou Aborted (HTTP 409 Conflict); repita a operação para excluir a nova ponta.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

ref string Obrigatório

Referência de branch a excluir, no formato refs/heads/<branch> ou heads/<branch>.

Campos de resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/refs/REF' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Listar referências do Git correspondentes

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/matching-refs
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista referências do Git cujos nomes começam com o prefixo fornecido. As respostas REST retornam diretamente uma matriz JSON (por meio de response_body). Uma barra no final de ref é preservada (heads/ → refs/heads/). O HEAD simbólico é correspondido exatamente (não está em refs/). Repositórios vazios retornam 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

Parâmetros de consulta

ref string

Prefixo para correspondência. Normalmente heads/<prefix> ou tags/<prefix>; refs/ no início é aceito e normalizado. Se vazio, lista todas as referências do Git (vinculação REST sem um segmento de caminho final).

Campos de resposta

A resposta é uma matriz. Cada item contém:

ref string

Nome completo da referência do Git, por exemplo, "refs/heads/main".

object object

Objeto para o qual esta referência do Git aponta diretamente (sem desreferenciamento). Para tags anotadas, object.type é "tag" e object.sha é o SHA do objeto de tag.

object.sha string

SHA hexadecimal do objeto de destino.

object.type string

Um entre "commit", "tree", "blob" ou "tag".
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/matching-refs' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "refs": [    {      "ref": "refs/heads/main",      "object": {        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "type": "commit"      }    }  ]}

Listar referências do Git correspondentes por caminho

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/matching-refs/{ref}
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista referências do Git cujos nomes começam com o prefixo informado. As respostas REST retornam diretamente uma matriz JSON (via response_body). Uma barra final em ref é preservada (heads/ → refs/heads/). O HEAD simbólico corresponde exatamente (não está em refs/). Repositórios vazios retornam 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

ref string Obrigatório

Prefixo para correspondência. Normalmente, heads/<prefix> ou tags/<prefix>; um refs/ inicial é aceito e normalizado. Vazio lista todas as referências do Git (vinculação REST sem segmento de caminho final).

Campos de resposta

A resposta é uma matriz. Cada item contém:

ref string

Nome completo da referência do Git, por exemplo, "refs/heads/main".

object object

Objeto para o qual esta referência do Git aponta diretamente (sem desreferenciamento). Para tags anotadas, object.type é "tag" e object.sha é o SHA do objeto de tag.

object.sha string

SHA hexadecimal do objeto de destino.

object.type string

Um de "commit", "tree", "blob" ou "tag".
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/matching-refs/REF' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

formato de resposta:

{  "refs": [    {      "ref": "refs/heads/main",      "object": {        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "type": "commit"      }    }  ]}

Obter tag

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/tags/{sha}
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna um objeto de tag anotada do Git pelo SHA. Tags leves não são objetos de tag e retornam NotFound. Repositórios vazios retornam 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

sha string Obrigatório

SHA hexadecimal completo ou abreviado do objeto de tag anotada.

Campos da resposta

sha string

SHA do objeto de tag (hexadecimal).

tag string

Nome da tag, por exemplo, "v1.0".

message string

Mensagem da tag.

tagger object

Assinatura do criador da tag no objeto de tag.

tagger.name string

Nome registrado na identidade Git.

tagger.email string

E-mail registrado na identidade Git.

tagger.date string

Carimbo de data/hora ISO-8601 que preserva o deslocamento de fuso horário original da assinatura git (por exemplo, "2014-11-07T22:01:45+01:00").

object object

Objeto para o qual esta tag aponta.

object.sha string

SHA hexadecimal do objeto de destino.

object.type string

Um entre "commit", "tree", "blob" ou "tag".
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/tags/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "sha": "e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2",  "tag": "v1.2.0",  "message": "Release v1.2.0",  "tagger": {    "name": "Jane Doe",    "email": "[email protected]",    "date": "2026-08-01T09:30:00Z"  },  "object": {    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "type": "commit"  }}

Obter árvore

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/trees/{sha}
Scoperepository:contents:readAuthInstallation tokenUser access token

Retorna um objeto tree do Git pelo SHA ou por uma revisão resolvível. sha aceita um SHA de tree, SHA de commit, branch, tag ou referência simbólica como HEAD. Defina recursive=true (ou 1) para percorrer toda a árvore; omitir o parâmetro ou passar qualquer outro valor lista apenas os filhos imediatos. Listagens recursivas são truncadas em 100.000 entradas ou 7 MiB e definem truncated=true. Repositórios vazios retornam 409 Conflict.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

sha string Obrigatório

SHA da árvore, SHA do commit, branch, tag ou referência simbólica como HEAD.

Parâmetros de consulta

recursive boolean

Quando verdadeiro, retorna a travessia recursiva completa da árvore. Os valores de consulta true e 1 ativam a recursão; omitir o parâmetro ou passar qualquer outro valor (incluindo false e 0) lista apenas os filhos imediatos.

Campos da resposta

sha string

SHA do objeto tree (hex).

tree matriz

Entradas sob esta árvore (filhos imediatos ou a caminhada recursiva completa).

tree[].path string

Caminho relativo à raiz da árvore solicitada.

tree[].mode string

Modo Git como uma string octal: "100644", "100755", "040000", "120000", "160000".

tree[].type string

Um de "blob", "tree" ou "commit" (gitlink/submódulo).

tree[].sha string

SHA do objeto (hex).

tree[].size integer

Tamanho do blob em bytes. Não definido para trees e gitlinks. int32 garante que o JSON REST emita um número; blobs individuais com mais de 2 GiB não podem ser representados.

truncated boolean

Pode ser verdadeiro quando uma listagem recursiva de árvore for truncada.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/trees/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8",  "tree": [    {      "path": "src/telemetry.ts",      "mode": "100644",      "type": "blob",      "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",      "size": 312    }  ],  "truncated": false}

Grants

Um grant vincula um principal a um repositório ou a um owner com uma permissão. Esses endpoints leem, definem e removem os grants mantidos diretamente em um resource, permitindo que alterações de acesso sejam automatizadas por script e revisadas como código. As gravações reutilizam as verificações por trás da Codebase permissions UI e registram os mesmos eventos de auditoria repository.access_changed e namespace.access_changed. Para conhecer os tipos de principal, as duas escalas de permissão e como os grants em nível de owner interagem com os de nível de repositório, leia API de grants do Origin.

Listar Concessões do Repositório

GET/v1/origin/repos/{ownerSlug}/{repoName}/grants
Scoperepository:settings:readAuthInstallation tokenUser access token

Lista os usuários, grupos e grupos da equipe proprietária que possuem uma permissão concedida diretamente em um repositório. Permissões herdadas do proprietário do repositório não estão incluídas.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo dentro da entidade proprietária.

Parâmetros de consulta

pageSize integer

Número máximo de grants a retornar. O valor padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco do next_page_token de uma resposta anterior. Vazio na primeira página. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

grants matriz

Concessões mantidas diretamente no repositório, ordenadas por tipo de principal (grupos, administradores da equipe proprietária, membros da equipe proprietária, usuários) e, em seguida, por id. Um principal que não corresponde mais a um usuário, grupo ou equipe proprietária ativos é omitido, portanto uma página pode conter menos concessões do que pageSize.

grants[].user object

Um principal de usuário. Exatamente um entre user, group ou teamGroup está presente.

grants[].user.id string

Identificador público do usuário, prefixado por user_.

grants[].user.email string

Endereço de email do usuário.

grants[].user.displayName string

Nome de exibição do usuário: o nome e o sobrenome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

grants[].user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

grants[].group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do owner ou um grupo na organização dessa equipe.

grants[].group.id string

Identificador público do grupo, com o prefixo grp_.

grants[].teamGroup objeto

Um dos grupos integrados da equipe proprietária, concedido no próprio repositório e distinto do que é herdado do proprietário.

grants[].teamGroup.kind string

Qual grupo integrado possui a concessão. Valores permitidos: members, admins.

grants[].permission string

Permissão que o principal tem no repositório. Valores permitidos: read, write, admin, custom. custom indica uma política personalizada, que o Upsert Repository Grant não aceita.

repository object

O repositório ao qual pertence cada grant desta resposta. Contém os mesmos campos de Obter repositório.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/{ownerSlug}/{repoName}/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "grants": [    {      "group": {        "id": "grp_01k2ja2000e0080000000000n2"      },      "permission": "admin"    },    {      "teamGroup": {        "kind": "admins"      },      "permission": "admin"    },    {      "teamGroup": {        "kind": "members"      },      "permission": "write"    },    {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      },      "permission": "read"    }  ],  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "nextPageToken": ""}

Upsert de concessão de repositório

POST/v1/origin/repos/{ownerSlug}/{repoName}/grants
Scoperepository:settings:writeAuthInstallation tokenUser access token

Define a permissão que um usuário, grupo ou grupo da equipe proprietária tem diretamente sobre um repositório, substituindo qualquer permissão concedida diretamente a esse principal anteriormente. Repetir uma concessão que o principal já possui é bem-sucedido e não gera alteração. O usuário precisa ser membro ativo da equipe ou organização do proprietário do repositório. O grupo precisa ser um grupo pertencente à equipe do proprietário ou um grupo ativo na organização dessa equipe; caso contrário, a solicitação retorna FailedPrecondition (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo dentro da entidade proprietária.

Corpo da solicitação

user object

Um principal de usuário. Exatamente um de user, group ou teamGroup está presente.

user.id string

Identificador público do usuário, com o prefixo user_.

user.email string

Endereço de email do usuário.

user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do proprietário ou um grupo na organização dessa equipe.

group.id string

Identificador público do grupo, com o prefixo grp_.

teamGroup object

Um dos grupos integrados da equipe proprietária, concedido no próprio repositório e distinto daquele herdado do proprietário.

teamGroup.kind string

Qual grupo integrado detém a concessão. Valores permitidos: members, admins.

permission string Obrigatório

Permissão a ser concedida. Valores permitidos: read, write, admin. custom retorna InvalidArgument (HTTP 400); políticas personalizadas estão fora do escopo desta API.

Campos de resposta

user object

Um principal de usuário. Apenas um entre user, group ou teamGroup está presente.

user.id string

Identificador público do usuário, com o prefixo user_.

user.email string

Endereço de email do usuário.

user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do proprietário ou um grupo na organização dessa equipe.

group.id string

Identificador público do grupo, com o prefixo grp_.

teamGroup object

Um dos grupos integrados da equipe proprietária, concedido no próprio repositório e distinto daquele herdado do proprietário.

teamGroup.kind string

Qual grupo integrado detém a concessão. Valores permitidos: members, admins.

permission string

Permissão que o principal agora tem sobre o repositório.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "user": {    "id": "user_01k2ja2000e0080000000000c3"  },  "permission": "write"}'

Formato de resposta:

{  "user": {    "id": "user_01k2ja2000e0080000000000c3",    "email": "[email protected]"  },  "permission": "write"}

Excluir Grant de Repositório

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/grants
Scoperepository:settings:writeAuthInstallation tokenUser access token

Remove a permissão que um usuário, grupo ou grupo da equipe proprietária tem diretamente sobre um repositório. As permissões herdadas do owner do repositório não são afetadas, de modo que o grupo da equipe proprietária volta ao default do nível de owner. Remover uma permissão que o principal não tem diretamente é bem-sucedido e não altera nada. O corpo da resposta vem vazio.

Path Parameters

ownerSlug string Obrigatório

Slug exclusivo da owning entity.

repoName string Obrigatório

Nome do repositório, exclusivo dentro da owner entity.

Request Body

user object

Um principal do tipo usuário. Exatamente um entre user, group ou teamGroup está presente.

user.id string

Identificador público do usuário, com o prefixo user_.

user.email string

Endereço de email do usuário.

user.displayName string

Display name do usuário: o nome e o sobrenome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

user.handle string

O handle de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; caso contrário, omitido.

group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do proprietário ou um grupo na organização dessa equipe.

group.id string

Identificador público do grupo, com o prefixo grp_.

teamGroup object

Um dos built-in groups da equipe proprietária, concedido no próprio repositório e distinto daquele herdado do owner.

teamGroup.kind string

Qual built-in group detém o grant. Valores permitidos: members, admins.

Campos de resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "group": {    "id": "grp_01k2ja2000e0080000000000n2"  }}'

Resposta:

204 No Content

Listar grants de namespace

GET/v1/origin/owners/{ownerSlug}/grants
Scopenamespace:settings:readAuthInstallation tokenUser access token

Lista quem recebeu acesso a um owner: usuários, grupos e os grupos admin e member integrados da equipe proprietária. Cada grant carrega a permissão que concede a todos os repositórios sob o owner. Grants feitos em repositórios individuais não estão incluídos; para lê-los, use List Repository Grants.

Parâmetros de path

ownerSlug string Obrigatório

Slug do proprietário cujas concessões serão listadas.

Parâmetros de consulta

pageSize integer

Número máximo de grants a retornar. O valor padrão é 30 quando não definido ou igual a 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco obtido do next_page_token de uma resposta anterior. Vazio na primeira página. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos de resposta

grants matriz

Grants desta página. Os grants de admin vêm primeiro; dentro de cada execução, os grants são ordenados por tipo de principal (grupos, administradores da equipe proprietária, membros da equipe proprietária, usuários) e, em seguida, por id. Um principal que não corresponde mais a um usuário, grupo ou equipe proprietária ativos é omitido, portanto uma página pode conter menos grants do que pageSize.

grants[].user object

Um principal de usuário. Apenas um entre user, group ou teamGroup está presente.

grants[].user.id string

Identificador público do usuário, com o prefixo user_.

grants[].user.email string

Endereço de email do usuário.

grants[].user.displayName string

Nome de exibição do usuário: o nome e o sobrenome da conta unidos por um espaço, o mesmo nome que o produto renderiza. Omitido quando a conta não tem nome.

grants[].user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

grants[].group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do owner ou um grupo na organização dessa equipe.

grants[].group.id string

Identificador público do grupo, com o prefixo grp_.

grants[].teamGroup objeto

Um dos grupos integrados da equipe proprietária: o acesso padrão da equipe ao owner.

grants[].teamGroup.kind string

Qual grupo integrado detém a concessão. Valores permitidos: members, admins.

grants[].permission string

Permissão que o principal tem em todos os repositórios sob o owner. Valores permitidos: PERMISSION_READ, PERMISSION_CONTRIBUTOR, PERMISSION_WRITE, PERMISSION_ADMIN, PERMISSION_CUSTOM. PERMISSION_CUSTOM indica uma custom policy, que o Upsert Namespace Grant não aceita.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/owners/{ownerSlug}/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "grants": [    {      "group": {        "id": "grp_01k2ja2000e0080000000000n2"      },      "permission": "PERMISSION_ADMIN"    },    {      "teamGroup": {        "kind": "admins"      },      "permission": "PERMISSION_ADMIN"    },    {      "teamGroup": {        "kind": "members"      },      "permission": "PERMISSION_CONTRIBUTOR"    },    {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      },      "permission": "PERMISSION_WRITE"    }  ],  "nextPageToken": ""}

Upsert de grant de namespace

POST/v1/origin/owners/{ownerSlug}/grants
Scopenamespace:settings:writeAuthInstallation tokenUser access token

Define a permissão que um usuário, grupo ou grupo da equipe proprietária detém diretamente sobre um owner, substituindo qualquer permissão concedida anteriormente de forma direta a esse principal. Repetir uma concessão que o principal já possui é bem-sucedido e não gera alteração. A solicitação retorna FailedPrecondition (HTTP 400) quando o usuário não é membro ativo da equipe proprietária ou de sua organização, quando o grupo não pertence a essa equipe nem é um grupo ativo em sua organização, ou quando a gravação deixaria o owner sem um admin.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug do owner.

Corpo da solicitação

user object

Um principal de usuário. Apenas um entre user, group ou teamGroup está presente.

user.id string

Identificador público do usuário, com o prefixo user_.

user.email string

Endereço de email do usuário.

user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do owner ou um grupo na organização dessa equipe.

group.id string

Identificador público do grupo, com o prefixo grp_.

teamGroup object

Um dos grupos integrados da equipe proprietária: o acesso padrão da equipe ao owner.

teamGroup.kind string

Qual grupo integrado detém o grant. Valores permitidos: members, admins.

permission string Obrigatório

Permissão a conceder. Valores permitidos: PERMISSION_READ, PERMISSION_CONTRIBUTOR, PERMISSION_WRITE, PERMISSION_ADMIN. PERMISSION_READ, PERMISSION_CONTRIBUTOR e PERMISSION_WRITE conferem esse nível nos repositórios internos do proprietário, e PERMISSION_ADMIN administra o próprio proprietário. PERMISSION_CUSTOM retorna InvalidArgument (HTTP 400).

Campos de resposta

user object

Um principal de usuário. Apenas um entre user, group ou teamGroup está presente.

user.id string

Identificador público do usuário, com o prefixo user_.

user.email string

Endereço de email do usuário.

user.displayName string

Nome de exibição do usuário: o nome e o sobrenome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

group object

Um principal de grupo do Cherri Code: um grupo pertencente à equipe do owner ou um grupo na organização dessa equipe.

group.id string

Identificador público do grupo, com o prefixo grp_.

teamGroup object

Um dos grupos integrados da equipe proprietária: o acesso padrão da equipe ao owner.

teamGroup.kind string

Qual grupo integrado detém a concessão. Valores permitidos: members, admins.

permission string

Permissão que a entidade principal detém atualmente em todos os repositórios do proprietário.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/owners/OWNER_SLUG/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "user": {    "id": "user_01k2ja2000e0080000000000c3"  },  "permission": "PERMISSION_WRITE"}'

Formato de resposta:

{  "user": {    "id": "user_01k2ja2000e0080000000000c3",    "email": "[email protected]"  },  "permission": "PERMISSION_WRITE"}

Excluir grant de namespace

DELETE/v1/origin/owners/{ownerSlug}/grants
Scopenamespace:settings:writeAuthInstallation tokenUser access token

Remove a permissão que um user, grupo ou grupo da equipe proprietária detém diretamente sobre um owner. Os grants por repositório não são afetados. Remover uma permissão que o principal não detém diretamente é bem-sucedido e não altera nada, e uma remoção que deixaria o owner sem um admin retorna FailedPrecondition (HTTP 400). O corpo da resposta é vazio.

Path Parameters

ownerSlug string Obrigatório

Slug do owner.

Corpo da solicitação

user object

Um principal do tipo user. Exatamente um entre user, group ou teamGroup está presente.

user.id string

Identificador público do user, com o prefixo user_.

user.email string

Endereço de email do user.

user.displayName string

Display name do user: o nome e o sobrenome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

user.handle string

O handle de profile reivindicado pelo user, sem o prefixo @. Presente apenas enquanto esse profile estiver visível publicamente; caso contrário, é omitido.

group object

Um principal de grupo do Cherri Code: um grupo que a equipe do owner possui ou um grupo na organização dessa equipe.

group.id string

Identificador público do grupo, com o prefixo grp_.

teamGroup object

Um dos grupos built-in da equipe proprietária: o acesso padrão da equipe ao owner.

teamGroup.kind string

Qual grupo built-in detém o grant. Valores permitidos: members, admins.

Campos de resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/owners/OWNER_SLUG/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "group": {    "id": "grp_01k2ja2000e0080000000000n2"  }}'

Resposta:

204 No Content

Rótulos

Uma definição de rótulo pertence a um repositório e é identificada pelo nome. A atribuição de rótulos a um pull request é uma funcionalidade separada; consulte Definir rótulos do pull request.

Listar rótulos

GET/v1/origin/repos/{ownerSlug}/{repoName}/labels
Scoperepository:labels:readAuthInstallation tokenUser access token

Lista os rótulos definidos em um repositório, ordenados por nome.

Os tokens de página estão vinculados ao repositório para o qual foram emitidos. Um token reutilizado em outro repositório, ou qualquer outro token malformado, retorna InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo na entidade proprietária.

Parâmetros de consulta

pageSize integer

Número máximo de rótulos a retornar. O padrão é 30 quando omitido ou igual a zero; valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco obtido do nextPageToken de uma resposta anterior. Omita-o na primeira página. Em uma solicitação de acompanhamento, o pageSize se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campo da resposta

labels matriz

Página de definições de rótulos, ordenadas por nome.

labels[].id string

Identificador público do rótulo.

labels[].name string

Nome do rótulo, exclusivo no repositório. Os nomes identificam o rótulo nos endpoints de leitura e gravação.

labels[].color string

Cor hexadecimal de seis caracteres, sem # no início.

labels[].description string

Descrição do rótulo. Ausente se o rótulo não tiver descrição.

nextPageToken string

Cherri Code opaco para a próxima página. Vazio quando não houver mais resultados.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Criar rótulo

POST/v1/origin/repos/{ownerSlug}/{repoName}/labels
Scoperepository:labels:writeAuthInstallation tokenUser access token

Cria um rótulo em um repositório.

Se o nome já estiver em uso por outro rótulo no repositório, retorna AlreadyExists (HTTP 409 Conflict). Se color não tiver seis caracteres hexadecimais, name tiver mais de 50 caracteres ou description tiver mais de 255 caracteres, retorna InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo dentro da entidade proprietária.

Corpo da solicitação

name string Obrigatório

Nome do rótulo. Espaços em branco no início e no fim são removidos. Comprimento máximo: 50 caracteres.

color string Obrigatório

Cor hexadecimal de seis caracteres, sem # no início. Valores em maiúsculas são armazenados em minúsculas.

description string

Descrição do rótulo. Comprimento máximo: 255 caracteres.

Campos de resposta

id string

Identificador público do rótulo.

name string

Nome do rótulo, exclusivo dentro do repositório. Os nomes identificam o rótulo nos endpoints de leitura e gravação.

color string

Cor hexadecimal de seis caracteres, sem # no início.

description string

Descrição do rótulo. Ausente caso o rótulo não tenha descrição.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "name": "bug",  "color": "d73a4a",  "description": "Something isn'\''t working"}'

Formato da resposta:

{  "id": "lbl_01k2ja2000e0080000000000m1",  "name": "bug",  "color": "d73a4a",  "description": "Something isn't working"}

Obter rótulo

GET/v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}
Scoperepository:labels:readAuthInstallation tokenUser access token

Retorna um rótulo específico do repositório pelo nome.

Um nome inexistente retorna 404. Um labelName vazio retorna InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

labelName string Obrigatório

Nome do rótulo. Os espaços em branco no início e no fim são removidos antes da consulta.

Campos de resposta

id string

Identificador público do rótulo.

name string

Nome do rótulo, exclusivo no repositório. Os nomes identificam o rótulo nos endpoints de leitura e gravação.

color string

Cor hexadecimal de seis caracteres, sem # inicial.

description string

Descrição do rótulo. Não é retornada quando o rótulo não tem descrição.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels/LABEL_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "lbl_01k2ja2000e0080000000000m1",  "name": "bug",  "color": "d73a4a",  "description": "Something isn't working"}

Excluir rótulo

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}
Scoperepository:labels:writeAuthInstallation tokenUser access token

Exclui um rótulo de um repositório pelo nome. A resposta não tem corpo.

Excluir um rótulo também o remove de todas as pull requests às quais foi atribuído. Um nome desconhecido retorna 404. Um labelName vazio retorna InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

labelName string Obrigatório

Nome do rótulo. Espaços em branco no início e no fim são removidos antes da busca.

Campo da resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels/LABEL_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Atualizar rótulo

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}
Scoperepository:labels:writeAuthInstallation tokenUser access token

Atualiza um rótulo de repositório identificado pelo nome atual.

Os campos omitidos permanecem inalterados. Uma solicitação que omite os três retorna o rótulo como está. Renomear para um nome já usado por outro rótulo retorna AlreadyExists (HTTP 409 Conflict). Um labelName desconhecido retorna 404.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

labelName string Obrigatório

Nome atual do rótulo. Os espaços em branco no início e no fim são removidos antes da busca.

Corpo da solicitação

name string

Novo nome do rótulo. Os espaços em branco no início e no fim são removidos. Comprimento máximo: 50 caracteres. Omita para não alterar.

color string

Cor hexadecimal de seis caracteres sem # inicial. Omita para não alterar.

description string

Descrição do rótulo. Comprimento máximo: 255 caracteres. Omita para não alterar.

Campo da resposta

id string

Identificador público do rótulo.

name string

Nome do rótulo, exclusivo no repositório. Os nomes identificam o rótulo nos endpoints de leitura e gravação.

color string

Cor hexadecimal de seis caracteres sem # inicial.

description string

Descrição do rótulo. Ausente quando o rótulo não tiver descrição.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels/LABEL_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "color": "b60205"}'

Formato da resposta:

{  "id": "lbl_01k2ja2000e0080000000000m1",  "name": "bug",  "color": "b60205",  "description": "Something isn't working"}

Pull requests

Pull requests fechados ou mergeados também podem incluir closedAt, mergedAt e mergeCommitSha. Trate head.ref e base.ref como strings opacas de referência do Origin; elas podem ser nomes curtos de branches ou valores refs/heads/… totalmente qualificados.

version é a última revisão numerada do pull request. O Origin registra uma nova versão quando é feito push do head, quando o pull request é redirecionado para outra base e quando um pull request é reaberto depois que seu head foi movido enquanto ele estava fechado, cada uma com seu próprio headSha, baseSha e estatísticas de diff. Uma reabertura que registra uma versão envia pull_request.head_ref.pushed, o mesmo evento enviado por um push. O avanço isolado da branch base não registra nada, então version.baseSha (e base.sha, que o espelha) é a ponta da base conforme resolvida no momento em que a versão foi registrada e pode ficar defasada em relação à ponta atual da branch até que a próxima versão seja registrada. Leia a ponta atual da branch com Get Git Ref.

mergeCommitSha é o commit que o merge gravou na branch base: definido após o merge, indefinido antes. A prévia pré-merge é a ref pull/{pullNumber}/merge, um commit diferente; veja Dados do Git.

version.potentialMergeCommit relata o merge de teste do Origin para essa versão: se ele está prepared, encontrou um merge_conflict ou ainda está unknown e, depois de preparado, o sha do commit de merge e o baseSha a partir do qual ele foi gerado. Ele descreve apenas essa versão, então um pull request mergeado continua a relatá-lo. Os payloads de webhook pull_request.* o incluem com o estado do momento do evento. Um evento aguarda a preparação apenas dentro de um limite de tempo, então pode indicar unknown enquanto um Get Pull Request posterior indica prepared; leia o pull request novamente ou aguarde o próximo evento.

O verdict da revisão é approve, request_changes ou comment. submittedAt está ausente em uma draft review não enviada. dismissal está ausente enquanto o veredito permanece ativo. Revisões descartadas continuam visíveis nas listagens de revisões. Revisões automaticamente substituídas por uma decisão mais recente recebem uma mensagem gerada pelo servidor.

Os comentários expõem uma referência de thread para agrupamento. As solicitações de criação de comentários ainda aceitam o parâmetro de comando escalar threadId ao responder. Resolva ou reabra um thread com Atualizar Thread do Pull Request.

Listar Pull Requests

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Lista pull requests em um repositório, opcionalmente filtrados pelo branch de origem, branch de destino, autor, intervalo de data de criação e estado. Cada pull request inclui os rótulos atribuídos.

Os resultados são ordenados pela ordem de criação ou pela última atualização, selecionadas com sortBy, do mais recente para o mais antigo. Defina direction=asc para a ordem contrária. Os tokens de página incorporam a ordenação e os filtros sob os quais foram emitidos; portanto, um token reproduzido com uma ordenação ou conjunto de filtros diferente é rejeitado. Reinicie a paginação quando qualquer um deles mudar.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

Parâmetros de consulta

head string

Filtro opcional para branch exato (head-ref). Omitir para listar em todos os branches.

state string

Filtro de ciclo de vida. Valores permitidos: open (o padrão), closed, merged, all. closed abrange todos os pull requests que não estão mais abertos, incluindo os mesclados; merged restringe ao subconjunto dos mesclados. Qualquer outro valor retorna InvalidArgument (HTTP 400).

pageSize integer

Número máximo de resultados a retornar. Padrão: 30; máximo: 100.

pageToken string

Cherri Code opaco do nextPageToken de uma resposta anterior. Omita-o na primeira página. Em uma solicitação de acompanhamento, pageSize se aplica a essa página; omita-o para manter o tamanho de página anterior.

author string

Filtro opcional por autor. Informe um ID público de ator exatamente como este endpoint o retorna em pullRequests[].author.user.id, pullRequests[].author.app.id ou pullRequests[].author.serviceAccount.id (user_…, app_… ou sa_…), ou o endereço de e-mail exato de um usuário. A correspondência de e-mail não diferencia maiúsculas de minúsculas. Aplicativos e contas de serviço não têm identidade de e-mail, portanto apenas autores que são usuários podem ser selecionados dessa forma. Um autor sem solicitações de pull retorna uma lista vazia, assim como um e-mail que não corresponda a um único usuário. Qualquer outro valor, incluindo o ID compartilhado origin-cursor-managed-actor, retorna InvalidArgument (HTTP 400).

base string

Filtro exato opcional da branch base. Aceita um nome curto (main) ou uma referência totalmente qualificada (refs/heads/main). Omita para listar todas as branches base.

direction string

Direção de ordenação conforme sortBy. "desc" é o padrão: com sortBy=created retorna primeiro os mais recentemente criados, e com sortBy=updated os mais recentemente atualizados. "asc" inverte cada um. Qualquer outro valor retorna InvalidArgument (HTTP 400).

since string

Limite inferior inclusivo opcional para o horário de criação, como um carimbo de data/hora RFC 3339, por exemplo 2026-08-01T00:00:00Z. Retorna apenas pull requests criados naquele instante ou depois dele. Um carimbo de data/hora malformado retorna InvalidArgument (HTTP 400).

until string

Limite superior inclusivo opcional para o horário de criação, no mesmo formato RFC 3339 que since. Retorna apenas pull requests criadas naquele instante ou antes dele. Um timestamp malformado retorna InvalidArgument (HTTP 400).

sortBy string

Chave de ordenação. Valores permitidos: created (ordem de criação, padrão) ou updated (horário da última atualização). Qualquer outro valor retorna InvalidArgument (HTTP 400).

headSha string

Filtro opcional por commit da cabeça (head): o SHA hexadecimal completo de 40 ou 64 caracteres do head de uma pull request, correspondido sem distinção entre maiúsculas e minúsculas. Seleciona uma pull request quando qualquer uma de suas versões registradas tiver esse commit de head, atual ou substituído; portanto, compare head.sha em cada resultado para distingui-los. Os outros filtros ainda se aplicam, e state tem como padrão open, então informe state=all para incluir pull requests mescladas e fechadas. SHAs malformados, abreviados ou desconhecidos não correspondem a nada.

stackId string

Filtro opcional por stack: um ID de stack, conforme retornado em pullRequests[].stack.id. Retorna apenas os membros dessa stack, na ordem de classificação solicitada, e não na ordem da stack; portanto, reconstrua a stack a partir de stack.parentPullRequest de cada membro. state continua tendo como padrão open, que exclui membros mesclados; passe state=all para obter a stack inteira. Um ID bem-formado que não identifica nenhuma stack neste repositório retorna uma lista vazia; qualquer outro valor retorna InvalidArgument (HTTP 400).

Campos da resposta

pullRequests matriz

Página de snapshots de PullRequest; números de resposta e números de versão são strings JSON.

pullRequests[].id string

Identificador estável do pull request na Origin.

pullRequests[].number string

Número da pull request local do repositório codificado como uma string JSON.

pullRequests[].state string

Estado do pull request: aberto ou fechado. Pull requests mesclados estão fechados com merged definido como true.

pullRequests[].draft boolean

Se o pull request é um rascunho.

pullRequests[].merged boolean

Se o pull request foi mesclado.

pullRequests[].title string

Título do pull request.

pullRequests[].body string

Corpo da descrição do pull request.

pullRequests[].head objeto

O lado de origem da alteração — o que está sendo mesclado.

pullRequests[].head.ref string

A referência para a qual este lado aponta, conforme registrada pela Origin.

pullRequests[].head.sha string

SHA do commit desta ponta na versão mais recente da alteração.

pullRequests[].base objeto

O lado de destino da alteração — no qual ela é mesclada.

pullRequests[].base.ref string

A referência para a qual este lado aponta, conforme registrada pela Origin.

pullRequests[].base.sha string

SHA do commit desta ponta na versão mais recente da alteração.

pullRequests[].author objeto

Ator público que abriu a pull request.

pullRequests[].author.user objeto

Variante de usuário do ator. Definida quando um usuário realizou a ação.

pullRequests[].author.user.id string

Identificador público do usuário.

pullRequests[].author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

pullRequests[].author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

pullRequests[].author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

pullRequests[].author.app objeto

Variante de app do ator. Definida quando um app executou a ação.

pullRequests[].author.app.id string

Identificador público do aplicativo.

pullRequests[].author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

pullRequests[].author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

pullRequests[].author.serviceAccount.id string

Identificador público para a conta de serviço.

pullRequests[].createdAt string

Registro de data e hora de criação da pull request no formato RFC 3339.

pullRequests[].updatedAt string

Timestamp RFC 3339 da atualização mais recente do pull request.

pullRequests[].closedAt string

Carimbo de data/hora de fechamento no formato RFC 3339; pode aparecer em pull requests fechados ou mesclados.

pullRequests[].mergedAt string

Carimbo de data/hora de merge no formato RFC 3339; pode aparecer em pull requests mesclados.

pullRequests[].mergeCommitSha string

SHA do commit que o merge gravou no branch base. Definido quando a pull request é mesclada e ausente antes disso. A prévia pré-merge é um commit diferente, lido pela referência pull/<number>/merge com Obter referência do Git.

pullRequests[].additions integer

Linhas adicionadas na versão atual do pull request.

pullRequests[].deletions integer

Linhas removidas na versão atual do pull request.

pullRequests[].changedFiles integer

Número de arquivos alterados na versão atual do pull request.

pullRequests[].labels lista

Rótulos atualmente atribuídos ao pull request, ordenados por nome. Vazio quando nenhum estiver atribuído.

pullRequests[].labels[].id string

Identificador público do rótulo.

pullRequests[].labels[].name string

Nome do rótulo, exclusivo no repositório. Os nomes apontam para o rótulo nos endpoints de gravação.

pullRequests[].labels[].color string

Cor hexadecimal de seis caracteres, sem # no início.

pullRequests[].labels[].description string

Descrição do rótulo. Ausente quando o rótulo não tiver descrição.

pullRequests[].stack objeto

Associação à pilha: a cadeia de pull requests dependentes à qual este pertence, cada um empilhado sobre aquele em que se baseia. Ausente quando o pull request não faz parte de uma pilha.

pullRequests[].stack.id string

Identificador estável do stack, compartilhado por todos os membros do stack. Informe-o como stackId em Listar Pull Requests para ler os demais membros.

pullRequests[].stack.parentPullRequest objeto

A pull request sobre a qual esta está empilhada. Ausente na raiz da pilha. Uma pull request pai mesclada continua referenciada até que a pull request filha tenha seu destino alterado ou seja vinculada a outro pai.

pullRequests[].stack.parentPullRequest.id string

Identificador estável da Origin da pull request principal.

pullRequests[].stack.parentPullRequest.number string

Número local do repositório da pull request pai, codificado como uma string JSON.

pullRequests[].stack.parentPullRequest.repository objeto

Repositório ao qual o elemento pai pertence, com os mesmos campos id, name e owner que o campo repository de uma execução de verificação. As stacks nunca abrangem mais de um repositório, portanto este é sempre o próprio repositório da pull request.

pullRequests[].version objeto

Versão numerada atual do pull request e seus SHAs de head/base.

pullRequests[].version.number string

Número de versão monotônico do pull request codificado como uma string JSON.

pullRequests[].version.headSha string

SHA do HEAD capturado por esta versão da pull request.

pullRequests[].version.baseSha string

SHA base capturado por esta versão do pull request.

pullRequests[].version.createdAt string

Carimbo de data e hora RFC 3339 da criação desta versão do pull request.

pullRequests[].version.potentialMergeCommit objeto

O merge de teste do Origin desta versão — um commit que mescla seu headSha no topo do branch base — e o estágio alcançado na preparação desse merge. Presente em todas as versões. Descreve apenas esta versão e continua legível após o merge do pull request; é um commit diferente de mergeCommitSha. Em um pull request empilhado, o branch base é o branch do pull request pai; portanto, o merge de teste abrange apenas as alterações deste pull request sobre esse branch.

pullRequests[].version.potentialMergeCommit.state string

Até onde chegou a preparação do merge de teste. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que o merge de teste não está preparado: a versão está aguardando a preparação, ou a preparação expirou ou falhou. Toda nova versão começa como unknown, portanto nunca carrega o commit de outra versão. prepared significa que o merge de teste existe e é descrito por sha e baseSha. merge_conflict significa que mergear headSha na ponta do branch base gerou conflito, portanto não há merge de teste; essa é a condição que Get Pull Request Mergeability relata como um bloqueio merge_conflict, e reabrir o pull request prepara a versão novamente. Trate qualquer valor não reconhecido como unknown.

pullRequests[].version.potentialMergeCommit.sha string

SHA do commit de merge de teste com dois pais: o primeiro pai é o baseSha deste objeto e o segundo pai é o headSha da versão. Presente apenas quando state for prepared. A ref pull/{pullNumber}/merge aponta para ele enquanto esta versão for a mais recente. Depois disso, ele continua acessível para leitura pelo SHA por meio de Obter commit, mas não pode ser obtido pelo SHA via Git.

pullRequests[].version.potentialMergeCommit.baseSha string

Ponta do branch base sobre a qual o merge de teste foi criado. Presente apenas quando state for prepared. Pode ser mais recente que pullRequests[].version.baseSha, e a Origin não a atualiza quando o branch base simplesmente avança.

nextPageToken string

Token de continuação opaco retornado por uma resposta de listagem; uma string vazia significa que não há próxima página. Não o inspecione nem o construa, e reinicie a paginação quando o repositório ou os filtros mudarem.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "pullRequests": [    {      "id": "pr_01k2ja2000e0080000000000d4",      "number": "17",      "state": "open",      "draft": false,      "merged": false,      "title": "Add launch telemetry",      "body": "Adds structured launch telemetry to the ignition path.",      "head": {        "ref": "add-telemetry",        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"      },      "base": {        "ref": "add-telemetry-schema",        "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"      },      "author": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      },      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "additions": 128,      "deletions": 46,      "changedFiles": 5,      "labels": [        {          "id": "lbl_01k2ja2000e0080000000000m1",          "name": "bug",          "color": "d73a4a",          "description": "Something isn't working"        }      ],      "stack": {        "id": "stk_01k2ja2000e0080000000000s1",        "parentPullRequest": {          "id": "pr_01k2ja2000e0080000000000d3",          "number": "16",          "repository": {            "id": "repo_01k2ja2000e0080000000000q4",            "name": "rocket",            "owner": {              "slug": "acme",              "id": "ns_01k2ja2000e0080000000000p3",              "type": "team"            }          }        }      },      "version": {        "number": "3",        "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",        "createdAt": "2026-08-01T09:30:00Z"      }    }  ]}

Obter pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Retorna uma única pull request, incluindo os rótulos atribuídos a ela.

Pull requests fechadas ou mescladas podem incluir adicionalmente closedAt, mergedAt e mergeCommitSha. Trate head.ref e base.ref como strings opacas de referência Origin; elas podem ser nomes de branch curtos ou valores totalmente qualificados refs/heads/….

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

pullNumber string Obrigatório

Campos da resposta

id string

Identificador estável da pull request do Origin.

number string

Número da pull request local do repositório codificado como uma string JSON.

state string

Estado do pull request: aberto ou fechado. Pull requests mesclados estão fechados com merged definido como true.

draft boolean

Se o pull request é um rascunho.

merged boolean

Se o pull request foi mesclado.

title string

Título do pull request.

body string

Corpo da descrição do pull request.

head objeto

O lado de origem da alteração — o que está sendo mesclado.

head.ref string

A referência para a qual este lado aponta, conforme registrada pela Origin.

head.sha string

SHA do commit mais recente desta ponta na versão mais recente da alteração.

base objeto

O lado de destino da alteração — no qual ela é mesclada.

base.ref string

A referência para a qual este lado aponta, conforme registrada pela Origin.

base.sha string

SHA do commit desta ponta na versão mais recente da alteração.

author objeto

Ator público que abriu o pull request.

author.user objeto

Variante do ator definida pelo usuário. Definida quando um usuário executa a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante de usuário estiver presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não possui nome.

author.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, omitido.

author.app objeto

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado próprio do Cherri Code.

author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

createdAt string

Carimbo de data e hora de criação da pull request no padrão RFC 3339.

updatedAt string

Registro de data e hora no formato RFC 3339 da atualização mais recente do pull request.

closedAt string

Data e hora de fechamento no formato RFC 3339; pode aparecer em pull requests fechados ou mesclados.

mergedAt string

Timestamp de merge no formato RFC 3339; pode aparecer em pull requests mesclados.

mergeCommitSha string

SHA do commit que o merge gravou na branch base. Definido quando a pull request é mesclada e ausente antes disso. A prévia pré-merge é um commit diferente, obtido pela referência pull/<number>/merge com Obter referência do Git.

additions integer

Linhas adicionadas na versão atual do pull request.

deletions integer

Linhas excluídas na versão atual do pull request.

changedFiles integer

Número de arquivos alterados na versão atual da pull request.

labels matriz

Rótulos atualmente atribuídos ao pull request, ordenados por nome. Vazio quando nenhum estiver atribuído.

labels[].id string

Identificador público do rótulo.

labels[].name string

Nome do rótulo, exclusivo dentro do repositório. Os nomes identificam o rótulo nos endpoints de escrita.

labels[].color string

Cor hexadecimal de seis caracteres sem # inicial.

labels[].description string

Descrição do rótulo. Ausente quando o rótulo não tiver descrição.

stack objeto

Associação à stack: a cadeia de pull requests dependentes à qual esta pull request pertence, cada uma empilhada sobre aquela em que se baseia. Ausente quando a pull request não faz parte de uma stack.

stack.id string

Identificador estável do stack, compartilhado por todos os membros do stack. Passe-o como stackId em Listar pull requests para ler os demais membros.

stack.parentPullRequest objeto

O pull request sobre o qual este está empilhado. Ausente na raiz do stack. Um parent mesclado continua referenciado até que o filho seja redirecionado para outro target ou receba outro parent.

stack.parentPullRequest.id string

Identificador estável da Origin do pull request pai.

stack.parentPullRequest.number string

Número, local ao repositório, da pull request pai, codificado como uma string JSON.

stack.parentPullRequest.repository objeto

Repositório ao qual o pai pertence, com os mesmos campos id, name e owner que o repository de uma execução de verificação. As stacks nunca abrangem mais de um repositório, portanto este é sempre o repositório da própria pull request.

version objeto

Versão numerada atual do pull request e seus SHAs de head/base.

version.number string

Número monotonicamente crescente da versão da pull request codificado como uma string JSON.

version.headSha string

SHA do head capturada por esta versão desta pull request.

version.baseSha string

SHA base capturado por esta versão do pull request.

version.createdAt string

Registro de data e hora no formato RFC 3339 da criação desta versão do pull request.

version.potentialMergeCommit objeto

Merge de teste do Origin para esta versão (um commit que mescla o headSha dela na ponta da branch base) e até onde a preparação desse merge avançou. Presente em todas as versões. Descreve apenas esta versão e continua disponível para leitura depois que a pull request é mesclada; é um commit diferente de mergeCommitSha. Em uma pull request empilhada, a branch base é a branch da pull request pai, portanto o merge de teste abrange apenas as alterações desta pull request sobre ela.

version.potentialMergeCommit.state string

Até onde avançou a preparação do merge de teste. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que o merge de teste não está preparado: a versão está aguardando a preparação, ou a preparação expirou ou falhou. Toda nova versão começa como unknown, então nunca carrega o commit de outra versão. prepared significa que o merge de teste existe e que sha e baseSha o descrevem. merge_conflict significa que mergear headSha na ponta da branch base gerou conflito, então não há merge de teste; é a condição que Obter mergeabilidade da pull request relata como um bloqueio merge_conflict, e reabrir a pull request prepara a versão novamente. Trate qualquer valor não reconhecido como unknown.

version.potentialMergeCommit.sha string

SHA do commit de merge de teste com dois pais: o primeiro pai é o baseSha deste objeto e o segundo pai é o headSha da versão. Presente apenas quando state for prepared. A referência pull/{pullNumber}/merge aponta para ele enquanto esta versão for a mais recente. Depois disso, ele continua disponível para leitura por SHA via Obter commit, mas não pode ser buscado por SHA pelo Git.

version.potentialMergeCommit.baseSha string

Ponta da branch base sobre a qual o merge de teste foi gerado. Presente apenas quando state for prepared. Pode ser mais recente que version.baseSha, e a Origin não a atualiza quando a branch base simplesmente avança.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estrutura da resposta:

{  "id": "pr_01k2ja2000e0080000000000d4",  "number": "17",  "state": "open",  "draft": false,  "merged": false,  "title": "Add launch telemetry",  "body": "Adds structured launch telemetry to the ignition path.",  "head": {    "ref": "add-telemetry",    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"  },  "base": {    "ref": "add-telemetry-schema",    "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  },  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "additions": 128,  "deletions": 46,  "changedFiles": 5,  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ],  "stack": {    "id": "stk_01k2ja2000e0080000000000s1",    "parentPullRequest": {      "id": "pr_01k2ja2000e0080000000000d3",      "number": "16",      "repository": {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      }    }  },  "version": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",    "createdAt": "2026-08-01T09:30:00Z",    "potentialMergeCommit": {      "state": "prepared",      "sha": "c7b6a5948372615049f8e7d6c5b4a3928170605f",      "baseSha": "5e2d1c0b9a8f7e6d5c4b3a2918070605f4e3d2c1"    }  }}

Criar pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Cria uma solicitação de pull de head para base.

Opcionalmente, parent_pull_number empilha esta alteração em outra pull request aberta ou em rascunho no mesmo repositório.

Um title com mais de 256 caracteres, ou um body com mais de 65.536 caracteres, retorna InvalidArgument (HTTP 400). Ambos os limites contam pontos de código Unicode.

Uma head sem histórico em comum com base retorna InvalidArgument (HTTP 400) e não cria nada. Se um push posterior deixar a head de uma pull request aberta sem histórico em comum com sua base, o Origin fechará a pull request e emitirá pull_request.closed; um push relacionado subsequente não a reabrirá.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

Corpo da solicitação

title string Obrigatório

Título do pull request. Comprimento máximo: 256 caracteres.

body string

Corpo/descrição do pull request. Pode ficar vazio. Tamanho máximo: 65.536 caracteres.

head string Obrigatório

Nome do branch de origem (a cabeça da alteração). Deve resolver no repositório no momento da chamada.

base string Obrigatório

Nome do branch de destino (no qual a alteração será mesclada). Deve indicar um branch que exista no repositório no momento da chamada. Um SHA de commit, um nome de tag ou um branch inexistente retorna InvalidArgument (HTTP 400).

draft booleano

Quando verdadeiro, crie como rascunho. Quando falso ou omitido, crie como aberto (pronto para revisão).

parentPullRequest objeto

Pull request pai opcional da stack: outra pull request aberta ou em rascunho no mesmo repositório. Defina exatamente um membro. Um seletor vazio, mais de um membro ou clear retorna InvalidArgument (HTTP 400).

parentPullRequest.number string

Número da pull request pai dentro do repositório.

parentPullRequest.id string

ID da pull request pai, conforme retornado em id.

Campos da resposta

id string

Identificador do pull request do Stable Origin.

number string

Número do pull request local do repositório codificado como uma string JSON.

state string

Estado do pull request: aberto ou fechado. Pull requests mesclados são fechados com merged definido como true.

draft booleano

Indica se o pull request é um rascunho.

merged boolean

Indica se o pull request foi mesclado.

title string

Título do pull request.

body string

Corpo da descrição do pull request.

head objeto

O lado de origem da alteração — o que está sendo mesclado.

head.ref string

A ref para a qual este lado aponta, conforme registrado pela Origin.

head.sha string

SHA do commit desta ponta na versão mais recente da alteração.

base objeto

O lado de destino da alteração — aquilo em que ela é mesclada.

base.ref string

A ref para a qual este lado aponta, conforme registrado pela Origin.

base.sha string

SHA do commit desta ponta na versão mais recente da alteração.

author objeto

Ator público que abriu a pull request.

author.user objeto

Variante do usuário do ator. Definida quando um usuário executou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre informado quando a variante do usuário estiver presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta separados por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não possui nome.

author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; caso contrário, é omitido.

author.app objeto

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do aplicativo.

author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

createdAt string

Carimbo de data/hora RFC 3339 de criação da pull request.

updatedAt string

Carimbo de data/hora RFC 3339 da atualização mais recente do pull request.

closedAt string

Timestamp de fechamento no formato RFC 3339; pode aparecer em pull requests fechadas ou mescladas.

mergedAt string

Carimbo de data e hora RFC 3339 do merge; pode aparecer em pull requests mesclados.

mergeCommitSha string

SHA do commit que o merge escreveu no branch base. Definido quando o pull request é mesclado e ausente antes disso. A pré-visualização pré-merge é um commit diferente, leia a referência pull/<number>/merge com Obter referência do Git.

additions integer

Linhas adicionadas na versão atual do pull request.

deletions integer

Linhas excluídas na versão atual do pull request.

changedFiles integer

Número de arquivos alterados na versão atual do pull request.

labels matriz

Rótulos atualmente atribuídos à pull request, ordenados por nome. Vazio quando nenhum está atribuído.

labels[].id string

Identificador público do rótulo.

labels[].name string

Nome do rótulo, único dentro do repositório. Os nomes se referem ao rótulo nos endpoints de gravação.

labels[].color string

Cor hexadecimal de seis caracteres sem # no início.

labels[].description string

Descrição do rótulo. Ausente quando o rótulo não tiver descrição.

stack objeto

Associação à stack: a cadeia de pull requests dependentes da qual esta faz parte, cada uma empilhada sobre a que ela constrói. Ausente quando a pull request não faz parte de uma stack.

stack.id string

Identificador estável da stack, compartilhado por todos os membros da stack. Passe-o como stackId para Listar pull requests para ler os outros membros.

stack.parentPullRequest objeto

A pull request sobre a qual esta está empilhada. Ausente na raiz da stack. Uma pull request pai mesclada continua referenciada até que a filha seja redirecionada para outro destino ou receba um novo pai.

stack.parentPullRequest.id string

Identificador do Stable Origin do pull request pai.

stack.parentPullRequest.number string

Número local do repositório do pull request pai, codificado como uma string JSON.

stack.parentPullRequest.repository objeto

Repositório ao qual pertence a Pull Request pai, com os mesmos campos id, name e owner do repository de uma execução de verificação. Stacks nunca abrangem vários repositórios; portanto, este é sempre o repositório da própria Pull Request.

version objeto

Versão numerada atual do pull request e seus SHAs de head/base.

version.number string

Número monotônico da versão do pull request codificado como uma string JSON.

version.headSha string

SHA do HEAD capturado por esta versão do pull request.

version.baseSha string

SHA base capturada por esta versão deste pull request.

version.createdAt string

Carimbo de data e hora RFC 3339 da criação desta versão do pull request.

version.potentialMergeCommit objeto

O merge de teste da Origin para esta versão (um commit que mescla o headSha dela sobre a ponta do branch base) e até onde a preparação dele avançou. Presente em todas as versões. Descreve apenas esta versão e continua disponível para leitura depois que o pull request é mesclado; é um commit diferente do mergeCommitSha. Em um pull request empilhado, o branch base é o branch do pull request pai, então o merge de teste abrange apenas as alterações deste pull request sobre ele.

version.potentialMergeCommit.state string

Até onde avançou a preparação do merge de teste. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que o merge de teste não está preparado: a versão está aguardando a preparação, ou a preparação expirou ou falhou. Toda nova versão começa como unknown, portanto nunca carrega o commit de outra versão. prepared significa que o merge de teste existe e que sha e baseSha o descrevem. merge_conflict significa que mergear headSha na ponta do branch base gerou conflito, portanto não há merge de teste; essa é a condição que Get Pull Request Mergeability relata como um bloqueio merge_conflict, e reabrir a pull request prepara a versão novamente. Trate qualquer valor não reconhecido como unknown.

version.potentialMergeCommit.sha string

SHA do commit de merge de teste com dois pais: o primeiro pai é o baseSha deste objeto e o segundo é o headSha da versão. Presente apenas quando state é prepared. A ref pull/{pullNumber}/merge aponta para ele enquanto esta for a versão mais recente. Depois disso, ele continua podendo ser lido pelo SHA por meio de Get Commit, mas não pode ser consultado pelo SHA via Git.

version.potentialMergeCommit.baseSha string

Ponta do branch base sobre a qual o merge de teste foi gerado. Presente apenas quando state for prepared. Pode ser mais recente que version.baseSha, e a Origin não a atualiza quando o branch base simplesmente avança.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "title": "Add launch telemetry",  "body": "Adds structured launch telemetry to the ignition path.",  "head": "add-telemetry",  "base": "main",  "draft": false}'

Formato de resposta:

{  "id": "pr_01k2ja2000e0080000000000d4",  "number": "17",  "state": "open",  "draft": false,  "merged": false,  "title": "Add launch telemetry",  "body": "Adds structured launch telemetry to the ignition path.",  "head": {    "ref": "add-telemetry",    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"  },  "base": {    "ref": "main",    "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  },  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "additions": 128,  "deletions": 46,  "changedFiles": 5,  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ],  "version": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",    "createdAt": "2026-08-01T09:30:00Z"  }}

Atualizar Pull Request

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Atualiza o título, o corpo, a branch base, a branch pai da stack e/ou o estado de ciclo de vida de um pull request.

Campos omitidos permanecem inalterados. Os campos presentes são aplicados nesta ordem: metadata, depois reopen/draft/ready-for-review, depois base, depois o parent da stack e, por fim, close. O close é executado por último para que um retarget na mesma solicitação ainda consiga ver uma alteração aberta; o reopen é executado antes do base para que um pull fechado possa ser retargetado; o parent da stack é executado após base para que um parent explícito prevaleça sobre aquele derivado de uma alteração de base. Se uma etapa posterior falhar, as etapas anteriores podem já ter sido commitadas.

Um title com mais de 256 caracteres, ou um body com mais de 65.536 caracteres, retorna InvalidArgument (HTTP 400). Ambos os limites contam pontos de código Unicode.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

pullNumber string Obrigatório

Corpo da solicitação

title string

Novo título. Campos omitidos permanecem inalterados. Comprimento máximo: 256 caracteres.

body string

Novo corpo/descrição. Uma string vazia limpa o corpo. Comprimento máximo: 65.536 caracteres.

state string

"open" ou "closed". "closed" fecha o pull request. "open" sem draft: true marca como pronto para revisão, incluindo a publicação de um rascunho existente. Reabrir um pull request cujo head mudou enquanto estava fechado registra uma nova version e envia pull_request.head_ref.pushed. Merged não é gravável; use MergePullRequest.

draft boolean

true marca o pull request como rascunho; false marca como pronto para revisão (e reabre se estiver atualmente fechado, o que pode registrar uma nova version). Ignorado quando state for "closed".

base string

Nova branch base. Redireciona o pull request e pode atualizar a hierarquia da stack quando a nova base for o head de outra alteração (ou a branch padrão). Deve nomear uma branch que exista no repositório no momento da chamada; um SHA de commit, um nome de tag ou uma branch que não exista retorna InvalidArgument (HTTP 400).

parentPullRequest objeto

Edição do parent da stack. Defina exatamente um membro: number ou id empilha este pull request sobre esse parent, substituindo qualquer parent atual, e clear remove o parent. Omita o campo para deixar a stack inalterada. Um seletor vazio, clear: false ou mais de um membro retorna InvalidArgument (HTTP 400). Trata-se apenas de uma associação: nenhuma branch é reescrita, e base só é redirecionada se você também a enviar. O Origin aplica isso depois de base, então um parent explícito prevalece sobre aquele derivado de uma alteração de base.

parentPullRequest.number string

Número do pull request pai dentro do repositório.

parentPullRequest.id string

ID do pull request pai, conforme retornado em id.

parentPullRequest.clear boolean

Remove o pai atual da stack. Apenas true é aceito.

Campos da resposta

id string

Identificador estável do pull request no Origin.

number string

Número do pull request local do repositório codificado como uma string JSON.

state string

Estado do pull request: aberto ou fechado. Pull requests mesclados são fechados com merged definido como true.

draft boolean

Se o pull request é um rascunho.

merged boolean

Se o pull request foi mesclado.

title string

Título do pull request.

body string

Corpo da descrição do pull request.

head object

O lado de origem da alteração — o que está sendo mesclado.

head.ref string

O ref para o qual este lado aponta, conforme registrado pelo Origin.

head.sha string

SHA do commit da ponta deste lado na versão mais recente da alteração.

base object

O lado de destino da alteração — no qual ela é mesclada.

base.ref string

O ref para o qual este lado aponta, conforme registrado pelo Origin.

base.sha string

SHA do commit da ponta deste lado na versão mais recente da alteração.

author object

Ator público que abriu o pull request.

author.user object

Variante de usuário do ator. Definida quando um usuário realizou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de email do usuário. Sempre definido quando a variante user está presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não possui nome.

author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; caso contrário, é omitido.

author.app object

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

Nome de exibição registrado do aplicativo. Omitido quando o aplicativo não pode ser resolvido e no ator gerenciado próprio do Cherri Code.

author.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

createdAt string

Timestamp de criação do pull request no formato RFC 3339.

updatedAt string

Timestamp RFC 3339 da atualização mais recente do pull request.

closedAt string

Timestamp de fechamento no formato RFC 3339; pode aparecer em pull requests fechados ou mesclados.

mergedAt string

Timestamp de merge no formato RFC 3339; pode aparecer em pull requests mesclados.

mergeCommitSha string

SHA do commit que o merge gravou na branch base. Definido quando o pull request é mesclado e ausente antes disso. A prévia anterior ao merge é um commit diferente; consulte a referência pull/<number>/merge usando Obter referência do Git.

additions integer

Linhas adicionadas na versão atual da pull request.

deletions integer

Linhas excluídas na versão atual da pull request.

changedFiles integer

Número de arquivos alterados na versão atual da pull request.

labels matriz

Rótulos atualmente atribuídos à pull request, ordenados por nome. Fica vazio quando nenhum estiver atribuído.

labels[].id string

Identificador público do rótulo.

labels[].name string

Nome do rótulo, único dentro do repositório. Os nomes endereçam o rótulo nos endpoints de gravação.

labels[].color string

Cor hexadecimal de seis caracteres sem o # inicial.

labels[].description string

Descrição do rótulo. Ausente quando o rótulo não possui descrição.

stack object

Associação à stack: a cadeia de pull requests dependentes à qual este pertence, cada um empilhado sobre aquele em que se baseia. Ausente quando o pull request não faz parte de uma stack.

stack.id string

Identificador estável da stack, compartilhado por todos os membros da stack. Passe-o como stackId para List Pull Requests para ler os demais membros.

stack.parentPullRequest object

O pull request no qual este está empilhado. Ausente na raiz da pilha. Um pai mesclado permanece referenciado até que o filho seja retargeted ou tenha o pai alterado.

stack.parentPullRequest.id string

Identificador estável do pull request pai no Origin.

stack.parentPullRequest.number string

Número local do repositório do pull request pai, codificado como uma string JSON.

stack.parentPullRequest.repository object

Repositório ao qual o pai pertence, com os mesmos campos id, name e owner que o repository de uma execução de verificação. As stacks nunca atravessam repositórios, então este é sempre o próprio repositório do pull request.

version object

Versão numerada atual do pull request e seus SHAs de head/base.

version.number string

Número monotônico da versão do pull request codificado como uma string JSON.

version.headSha string

SHA do head capturada por esta versão desta pull request.

version.baseSha string

SHA base capturado por esta versão da pull request.

version.createdAt string

Timestamp RFC 3339 para a criação desta versão do pull request.

version.potentialMergeCommit object

O merge de teste desta versão feito pelo Origin (um commit que mescla o headSha dela na ponta da branch base) e até onde sua preparação avançou. Presente em todas as versões. Descreve apenas esta versão e continua disponível para leitura depois que o pull request é mesclado; é um commit diferente de mergeCommitSha. Em um pull request empilhado, a branch base é a branch do pull request pai, então o merge de teste abrange apenas as alterações deste pull request sobre ela.

version.potentialMergeCommit.state string

Até onde avançou a preparação do merge de teste. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que o merge de teste não está preparado: a versão está aguardando a preparação, ou a preparação excedeu o tempo limite ou falhou. Toda nova versão começa como unknown, portanto nunca carrega o commit de outra versão. prepared significa que o merge de teste existe e que sha e baseSha o descrevem. merge_conflict significa que mergear headSha na ponta da branch base gerou conflito e, por isso, não há merge de teste; essa é a condição que Get Pull Request Mergeability relata como um bloqueio merge_conflict, e reabrir o pull request prepara a versão novamente. Trate qualquer valor não reconhecido como unknown.

version.potentialMergeCommit.sha string

SHA do commit de merge de teste com dois pais: o primeiro pai é o baseSha deste objeto e o segundo é o headSha da versão. Presente apenas quando state for prepared. O ref pull/{pullNumber}/merge aponta para ele enquanto esta for a versão mais recente. Depois disso, ele ainda pode ser lido pelo SHA por meio de Get Commit, mas não pode ser buscado pelo SHA via Git.

version.potentialMergeCommit.baseSha string

Ponta da branch base sobre a qual o merge de teste foi gerado. Presente apenas quando state for prepared. Pode ser mais recente que version.baseSha, e o Origin não a atualiza quando a branch base apenas avança.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "title": "Add launch telemetry",  "body": "Adds structured launch telemetry to the ignition path.",  "state": "open",  "draft": false,  "base": "main"}'

Formato de resposta:

{  "id": "pr_01k2ja2000e0080000000000d4",  "number": "17",  "state": "open",  "draft": false,  "merged": false,  "title": "Add launch telemetry",  "body": "Adds structured launch telemetry to the ignition path.",  "head": {    "ref": "add-telemetry",    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"  },  "base": {    "ref": "main",    "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  },  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z",  "additions": 128,  "deletions": 46,  "changedFiles": 5,  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ],  "version": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",    "createdAt": "2026-08-01T09:30:00Z"  }}

Listar comentários do pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/comments
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Lista todos os comentários de uma pull request em ordem cronológica, opcionalmente limitados a um intervalo de tempo de criação. Cada comentário inclui toda a sua thread: ID, âncora do diff e estado de resolução. Agrupe a resposta plana por thread.id sem fazer uma segunda solicitação.

Os page tokens incorporam os filtros sob os quais foram emitidos, portanto um token reutilizado com filtros diferentes é rejeitado; reinicie a paginação quando um filtro for alterado.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

pullNumber string Obrigatório

Parâmetros de consulta

pageSize integer

Número máximo de comentários a retornar. Padrão: 30; máximo: 100.

pageToken string

Cherri Code opaco do nextPageToken de uma resposta anterior. Omita-o na primeira página. O pageSize informado em uma solicitação de acompanhamento vale para essa página; omita-o para manter o tamanho de página anterior.

since string

Limite inferior inclusivo opcional para o horário de criação do comentário, como um carimbo de data/hora RFC 3339, por exemplo 2026-08-01T00:00:00Z. Retorna apenas comentários criados nesse instante ou depois. Um carimbo de data/hora malformado retorna InvalidArgument (HTTP 400).

until string

Limite superior inclusivo opcional para a hora de criação do comentário, no mesmo formato RFC 3339 usado em since. Retorna apenas comentários criados naquele instante ou antes dele. Um carimbo de data/hora malformado retorna InvalidArgument (HTTP 400).

threadIds matriz

IDs de thread opcionais que restringem a listagem aos comentários nessas threads. Omita para retornar todos os comentários do pull request. Duplicatas são ignoradas, portanto o limite de 20 se aplica a IDs distintos. Uma lista maior, ou um ID vazio, retorna InvalidArgument (HTTP 400).

Campos da resposta

comments matriz

Comentários gerais visíveis e comentários em linha em uma única lista cronológica; agrupe-os por thread.id.

comments[].id string

Identificador estável de comentário de pull request.

comments[].thread objeto

A conversa à qual este comentário pertence, incluindo sua âncora de diff e o estado de resolução.

comments[].thread.id string

Identidade estável do tópico. Agrupe os comentários em uma única discussão por este valor.

comments[].thread.version objeto

Versão da pull request contra a qual a thread foi registrada, incluindo os SHAs de head e base. A âncora fica fixa nesta versão e não se move à medida que a pull request recebe novas versões.

comments[].thread.version.number string

Número de versão monotônica da pull request codificado como uma string JSON.

comments[].thread.version.headSha string

SHA do head capturado por esta versão desta pull request.

comments[].thread.version.baseSha string

SHA base capturada por esta versão desta pull request.

comments[].thread.path string

Caminho do arquivo da âncora de diff da conversa. Vazio para threads de discussão geral.

comments[].thread.side string

Lado do diff da âncora. Valores permitidos: left, right. Não definido para tópicos de discussão geral.

comments[].thread.startLine integer

Primeira linha do intervalo ancorado na versão side do arquivo. 0 para threads no nível do arquivo e de discussão geral.

comments[].thread.endLine integer

Última linha incluída do intervalo ancorado. 0 quando a âncora está em uma única linha ou não possui intervalo de linhas.

comments[].thread.resolvedAt string

Registro de data e hora no formato RFC 3339 de quando a thread foi resolvida. Não definido enquanto a thread estiver aberta.

comments[].thread.createdAt string

Carimbo de data/hora de criação da thread no formato RFC 3339.

comments[].thread.updatedAt string

Carimbo de data e hora RFC 3339 da atualização mais recente do tópico.

comments[].body string

Texto do comentário.

comments[].author objeto

Ator público que escreveu o comentário.

comments[].author.user objeto

Variante do usuário do ator. Definida quando um usuário executou a ação.

comments[].author.user.id string

Identificador público do usuário.

comments[].author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

comments[].author.user.displayName string

Nome de exibição do usuário: primeiro e último nome da conta separados por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

comments[].author.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

comments[].author.app objeto

Variante de app do ator. Definida quando um app executou a ação.

comments[].author.app.id string

Identificador público do aplicativo.

comments[].author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira linha da Cherri Code.

comments[].author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

comments[].author.serviceAccount.id string

Identificador público da conta de serviço.

comments[].createdAt string

Data e hora de criação do comentário no formato RFC 3339.

comments[].updatedAt string

Carimbo de data e hora RFC 3339 da última edição do comentário.

pullRequest objeto

Container PullRequestReference incluído junto com a página de comentários.

pullRequest.id string

Identificador estável do pull request.

pullRequest.number string

Número da pull request local do repositório codificado como uma string JSON.

pullRequest.repository objeto

Referência do container do repositório para a pull request.

pullRequest.repository.id string

Identificador do repositório em uma referência de contêiner.

pullRequest.repository.name string

Nome do repositório em uma referência de contêiner.

pullRequest.repository.owner objeto

Referência do proprietário do repositório.

pullRequest.repository.owner.slug string

Slug do proprietário visível na URL, usado junto com o ID do proprietário para identificar o dono do repositório.

pullRequest.repository.owner.id string

Identificador do proprietário de origem.

pullRequest.repository.owner.type string

Tipo de namespace do proprietário. Somente leitura. Valores permitidos: team, user. Omitido quando desconhecido.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais comentários.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/comments' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estrutura da resposta:

{  "comments": [    {      "id": "cmt_01k2ja2000e0080000000000e5",      "thread": {        "id": "cth_01k2ja2000e0080000000000s6",        "version": {          "number": "3",          "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",          "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"        },        "path": "src/telemetry/retry.ts",        "side": "right",        "startLine": 42,        "endLine": 45,        "createdAt": "2026-08-01T09:30:00Z",        "updatedAt": "2026-08-02T14:45:00Z"      },      "body": "Should the retry budget be configurable?",      "author": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      },      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z"    }  ],  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  }}

Obter comentário de pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Retorna um único comentário de pull request pelo seu ID estável do Origin. Um comentário fora do repositório autorizado, ou um comentário de revisão pendente que não esteja visível para o chamador, retorna 404.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

commentId string Obrigatório

Campos da resposta

id string

Identificador estável do comentário de pull request.

thread object

A conversa à qual este comentário pertence, incluindo sua âncora de diff e o estado de resolução.

thread.id string

Identidade estável do tópico. Agrupe os comentários em uma mesma discussão por esse valor.

thread.version object

Versão da pull request contra a qual a thread foi registrada, incluindo os SHAs do head e do base. A âncora está fixa nesta versão e não se move conforme a pull request recebe novas versões.

thread.version.number string

Número de versão monotônico da pull request, codificado como uma string JSON.

thread.version.headSha string

SHA do head capturado por esta versão desta pull request.

thread.version.baseSha string

SHA base capturado por esta versão do pull request.

thread.path string

Caminho do arquivo da âncora de diff da thread. Vazio para threads de discussão geral.

thread.side string

Lado do diff da âncora. Valores permitidos: left, right. Não definido para tópicos de discussão geral.

thread.startLine integer

Primeira linha do intervalo ancorado na versão side do arquivo. 0 para threads no nível do arquivo e de discussão geral.

thread.endLine integer

Última linha, inclusive, do intervalo ancorado. 0 quando a âncora corresponde a uma única linha ou não possui intervalo de linhas.

thread.resolvedAt string

Carimbo de data e hora RFC 3339 de quando a thread foi resolvida. Não definido enquanto a thread estiver aberta.

thread.createdAt string

Timestamp de criação da thread em RFC 3339.

thread.updatedAt string

Carimbo de data/hora RFC 3339 da atualização mais recente do tópico.

body string

Texto do comentário.

author object

Ator público que escreveu o comentário.

author.user object

Variante de usuário do ator. Definida quando um usuário realizou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante user estiver presente.

author.user.displayName string

Nome de exibição do usuário: primeiro e último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não possui nome.

author.user.handle string

O identificador de perfil informado pelo usuário, sem o prefixo @. Exibido apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

author.app object

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

Nome de exibição registrado do app. Omitido quando não é possível resolver o app e no ator gerenciado próprio do Cherri Code.

author.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

createdAt string

Timestamp de criação do comentário RFC 3339.

updatedAt string

Carimbo de data/hora RFC 3339 da edição mais recente do comentário.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/comments/COMMENT_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "cmt_01k2ja2000e0080000000000e5",  "thread": {    "id": "cth_01k2ja2000e0080000000000s6",    "version": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    },    "path": "src/telemetry/retry.ts",    "side": "right",    "startLine": 42,    "endLine": 45,    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z"  },  "body": "Should the retry budget be configurable?",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z"}

Excluir comentário de pull request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Exclui um comentário de pull request pelo seu ID estável do Origin. O corpo da resposta fica vazio.

O autor do comentário sempre pode excluí-lo. Qualquer outro chamador precisa ter acesso de gravação ao repositório, o que repository:contents:write concede; caso contrário, recebe PermissionDenied (HTTP 403). Excluir o último comentário de um thread remove o thread; excluir qualquer outro comentário, inclusive o que abriu o thread, mantém o thread e os demais comentários no lugar. A resolução do thread não é um requisito. As reações ao comentário e seu histórico de edições são removidos junto com ele.

Um ID desconhecido, um comentário já excluído e um comentário em outro repositório retornam 404. Um ID malformado retorna InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

commentId string Obrigatório

Campos da resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/comments/COMMENT_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Criar comentário de Pull Request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/comments
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Cria um comentário em um pull request do Origin. O comentário tem exatamente um entre quatro alvos: threadId responde a uma thread existente, seja de discussão geral ou inline; inline abre uma nova thread ancorada a um intervalo de linhas no diff da versão do pull request; file abre uma nova thread em um arquivo inteiro desse diff; se nenhum deles for fornecido, uma nova thread de discussão geral será aberta. Conteúdos com mais de 65.536 caracteres são rejeitados com InvalidArgument (HTTP 400).

Uma âncora inline deve referenciar o diff da versão. O path deve fazer parte desse diff, e o side deve ter conteúdo nele; por isso, tentar ancorar left em um arquivo adicionado ou right em um arquivo excluído resulta em InvalidArgument (HTTP 400). É possível ancorar qualquer linha de um arquivo alterado, e o intervalo não se restringe aos hunks do diff. O intervalo deve caber no arquivo do lado ancorado, que left lê no commit base e right no head: um intervalo que ultrapassa a última linha resulta em InvalidArgument (HTTP 400). O Origin nunca recorre a um comentário de discussão geral quando uma âncora é inválida.

Uma âncora file contém apenas o caminho. O Origin determina o lado a partir do tipo de alteração do arquivo — a versão base para um arquivo excluído e a versão head caso contrário — e o retorna em thread.side. Envie o caminho excluído em caso de exclusão e o caminho head para qualquer outra alteração. Um caminho fora do diff é rejeitado com InvalidArgument (HTTP 400), assim como o caminho de origem anterior à renomeação de um arquivo renomeado.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

Corpo da solicitação

body string Obrigatório

Texto do comentário. Comprimento máximo: 65.536 caracteres, contados como pontos de código Unicode.

threadId string

ID de thread existente para resposta. Omitir para abrir uma nova thread. Não pode ser combinado com versionNumber.

inline object

Âncora de diff para uma nova thread inline. Não pode ser combinada com threadId.

inline.path string Obrigatório

Caminho do arquivo no diff da versão da pull request.

inline.side string Obrigatório

Lado do diff ao qual a âncora se refere. Valores permitidos: left para a versão base do arquivo, right para a versão head.

inline.startLine inteiro Obrigatório

Primeira linha (indexada a partir de 1) do intervalo ancorado na versão side do arquivo. O intervalo não pode ultrapassar o fim desse arquivo.

inline.endLine integer

Inclui a última linha do intervalo ancorado. Deve ser maior ou igual a startLine. Omitir para uma âncora de linha única.

file object

Âncora para uma nova thread em nível de arquivo, referente a um arquivo inteiro no diff da versão da pull request. Não pode ser combinada com threadId ou inline.

file.path string Obrigatório

Caminho do arquivo no diff da versão da pull request: o caminho excluído em caso de exclusão; caso contrário, o caminho do head.

versionNumber string

Número da versão da pull request contra a qual abrir uma nova thread. 0 ou não definido significa a versão mais recente no momento da chamada. Só é relevante para novas threads.

Campos da resposta

id string

Identificador estável do comentário do pull request.

thread object

O tópico ao qual este comentário pertence. Uma resposta traz apenas o ID do tópico, e um novo tópico de discussão geral traz o ID e os registros de data e hora; um novo tópico inline traz a âncora completa. Consulte Obter comentário de Pull Request ou Listar comentários de Pull Request para ver o estado completo do tópico.

thread.id string

Identidade estável do tópico. Agrupe os comentários de uma mesma discussão por este valor.

thread.version object

Versão da pull request contra a qual a thread foi criada, incluindo os SHAs de head e base. A âncora permanece fixa nesta versão e não se move conforme a pull request recebe novas versões.

thread.version.number string

Número monotônico da versão do pull request codificado como uma string JSON.

thread.version.headSha string

SHA do commit HEAD capturado por esta versão desta pull request.

thread.version.baseSha string

SHA base capturado por esta versão deste pull request.

thread.path string

Caminho do arquivo da âncora de diff da thread. Vazio para threads de discussão geral.

thread.side string

Lado do diff da âncora. Valores permitidos: left, right. Não definido para tópicos de discussão geral.

thread.startLine integer

Primeira linha do intervalo ancorado na versão side do arquivo. 0 para threads de nível de arquivo e de discussão geral.

thread.endLine integer

Última linha inclusiva do intervalo ancorado. 0 quando a âncora é uma única linha ou não tem intervalo de linhas.

thread.resolvedAt string

Carimbo de data/hora RFC 3339 de quando a thread foi resolvida. Não definido enquanto a thread estiver aberta.

thread.createdAt string

Data e hora de criação da thread no formato RFC 3339.

thread.updatedAt string

Timestamp RFC 3339 da atualização mais recente do thread.

body string

Texto do comentário.

author object

Ator público que escreveu o comentário.

author.user object

Variante de usuário do ator. Definida quando um usuário realizou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante do usuário estiver presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

author.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, omitido.

author.app object

Variante de aplicativo do ator. Definida quando um aplicativo executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

author.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

createdAt string

Data e hora de criação do comentário no formato RFC 3339.

updatedAt string

Carimbo de data e hora RFC 3339 da última edição do comentário.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/comments' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "body": "Should the retry budget be configurable?"}'

Formato da resposta:

{  "id": "cmt_01k2ja2000e0080000000000e5",  "thread": {    "id": "cth_01k2ja2000e0080000000000s6",    "version": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    },    "path": "src/telemetry/retry.ts",    "side": "right",    "startLine": 42,    "endLine": 45,    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z"  },  "body": "Should the retry budget be configurable?",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z"}

Atualizar comentário do pull request

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Atualiza um comentário de pull request pelo seu ID estável do Origin.

Substitui o corpo do comentário. O comentário deve pertencer ao repositório no caminho, ser visível para o solicitante e ter sido escrito por esse solicitante. Comentários de repositórios diferentes e comentários ocultos pendentes de revisão retornam 404; um comentário visível pertencente a outro autor retorna 403. Corpos com mais de 65.536 caracteres são rejeitados com InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

commentId string Obrigatório

Corpo da solicitação

body string Obrigatório

Texto que substituirá o comentário. Comprimento máximo: 65.536 caracteres, contados como pontos de código Unicode.

Campos de resposta

id string

Identificador estável do comentário do pull request.

thread object

A thread à qual este comentário pertence, incluindo sua âncora de diff e o estado de resolução.

thread.id string

Identidade estável do tópico. Agrupe os comentários em uma única discussão por esse valor.

thread.version object

Versão da pull request à qual a conversa se refere, incluindo os SHAs de head e base. A âncora fica fixada nessa versão e não muda conforme a pull request ganha novas versões.

thread.version.number string

Número de versão monotônico da pull request codificado como uma string JSON.

thread.version.headSha string

SHA do head capturado por esta versão desta pull request.

thread.version.baseSha string

SHA base capturada por esta versão do pull request.

thread.path string

Caminho do arquivo da âncora de diff da conversa. Vazio para conversas de discussão geral.

thread.side string

Lado do diff da âncora. Valores permitidos: left, right. Não definido para tópicos de discussão geral.

thread.startLine integer

Primeira linha do intervalo ancorado na versão side do arquivo. 0 para tópicos no nível do arquivo e de discussão geral.

thread.endLine integer

Última linha, inclusive, do intervalo ancorado. 0 quando a âncora corresponde a uma única linha ou não possui intervalo de linhas.

thread.resolvedAt string

Carimbo de data/hora RFC 3339 de quando a thread foi resolvida. Não definido enquanto a thread estiver aberta.

thread.createdAt string

Data e hora de criação da thread no formato RFC 3339.

thread.updatedAt string

Timestamp RFC 3339 da atualização mais recente da conversa.

body string

Texto do comentário.

author object

Ator público que escreveu o comentário.

author.user object

Variante do usuário do ator. Definida quando um usuário executou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e‑mail do usuário. Sempre definido quando a variante do usuário estiver presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não possui nome.

author.user.handle string

Identificador do perfil reivindicado pelo usuário, sem o prefixo @. Presente somente enquanto esse perfil estiver publicamente visível; omitido caso contrário.

author.app object

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

O nome de exibição registrado do app. Omitido quando não for possível resolver o app e no ator gerenciado próprio do Cherri Code.

author.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

createdAt string

Data e hora de criação do comentário no formato RFC 3339.

updatedAt string

Timestamp RFC 3339 da edição mais recente do comentário.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/comments/COMMENT_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "body": "Should the retry budget be configurable?"}'

Formato da resposta:

{  "id": "cmt_01k2ja2000e0080000000000e5",  "thread": {    "id": "cth_01k2ja2000e0080000000000s6",    "version": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    },    "path": "src/telemetry/retry.ts",    "side": "right",    "startLine": 42,    "endLine": 45,    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z"  },  "body": "Should the retry budget be configurable?",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-02T14:45:00Z"}

Atualizar thread do pull request

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/threads/{threadId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Resolve ou reabre uma discussão de comentários de pull request e retorna o estado atualizado da discussão. Resolver uma discussão já resolvida, ou reabrir uma já aberta, não tem efeito.

O thread deve pertencer ao repositório indicado no caminho; um thread armazenado em outro repositório retorna 404. É permitido responder a um thread resolvido com Create Pull Request Comment, e isso não o reabre.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

threadId string Obrigatório

ID de thread estável da Origin.

Corpo da solicitação

resolved boolean Obrigatório

Estado de resolução do destino. true resolve a conversa; false reabre a conversa.

Campos da resposta

id string

Identidade estável do tópico. Agrupe os comentários em uma discussão por este valor.

version object

Versão da pull request contra a qual a thread foi registrada, incluindo os SHAs de head e base. A âncora fica fixa nessa versão e não se move à medida que a pull request ganha versões.

version.number string

Número monotônico da versão do pull request codificado como uma string JSON.

version.headSha string

SHA do head capturado por esta versão do pull request.

version.baseSha string

SHA base capturado por esta versão da pull request.

path string

Caminho do arquivo da âncora do diff da thread. Vazio para threads de discussão geral.

side string

Lado do diff da âncora. Valores permitidos: left, right. Não definido para threads de discussão geral.

startLine integer

Primeira linha do intervalo ancorado na versão side do arquivo. 0 para threads no nível do arquivo e de discussão geral.

endLine integer

Última linha (inclusiva) do intervalo ancorado. 0 quando a âncora é uma única linha ou não tem intervalo de linhas.

resolvedAt string

Carimbo de data e hora RFC 3339 de quando o tópico foi resolvido. Não definido enquanto o tópico estiver aberto.

createdAt string

Timestamp RFC 3339 de criação da thread.

updatedAt string

Timestamp RFC 3339 da atualização mais recente da thread.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/threads/THREAD_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "resolved": true}'

Estrutura da resposta:

{  "id": "cth_01k2ja2000e0080000000000s6",  "version": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  },  "path": "src/telemetry/retry.ts",  "side": "right",  "startLine": 42,  "endLine": 45,  "resolvedAt": "2026-08-03T10:00:00Z",  "createdAt": "2026-08-01T09:30:00Z",  "updatedAt": "2026-08-03T10:00:00Z"}

Listar commits do pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/commits
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Lista os commits de um pull request.

Retorna os commits do pull request como objetos Commit esparsos (sem stats). Os resultados padrão são 30 e são limitados a 100, com no máximo 250 commits visíveis ao todo. Um token de página fixa a versão do pull request e o cursor de commits; um token que não corresponda mais ao head ou base atual retorna 400.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

pullNumber string Obrigatório

Parâmetros de consulta

pageSize integer

Número máximo de commits a retornar. Usa 30 por padrão quando não definido ou igual a 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco de uma resposta anterior via next_page_token. Vazio na primeira página. O token está vinculado ao repositório, à versão da pull request e ao deslocamento do commit. O pageSize informado em uma solicitação de acompanhamento vale para essa página; omita-o para manter o tamanho de página anterior.

Campos da resposta

commits matriz

Commits esparsos sem estatísticas, com no máximo 250 commits visíveis no total.

commits[].sha string

SHA completo do commit.

commits[].commit object

Metadados do objeto Git aninhados separadamente das relações de repositório de nível superior.

commits[].commit.author object

Identidade do autor do Git registrada no commit, não um objeto de usuário do Origin.

commits[].commit.author.name string

Nome registrado na identidade de autor do Git.

commits[].commit.author.email string

E-mail registrado na identidade do autor do Git.

commits[].commit.author.date string

Data no formato RFC 3339 registrada na identidade do autor no Git.

commits[].commit.committer object

Identidade do committer do Git registrada no commit, não um objeto de usuário do Origin.

commits[].commit.committer.name string

Nome registrado na identidade do Git.

commits[].commit.committer.email string

E-mail registrado na identidade do Git.

commits[].commit.committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da assinatura do git (ex.: "2014-11-07T22:01:45+01:00").

commits[].commit.message string

Mensagem de commit.

commits[].commit.tree object

Árvore referenciada pelo commit.

commits[].commit.tree.sha string

SHA da árvore referenciada pelo commit.

commits[].parents matriz

Referências dos commits pai, cada uma contendo um SHA.

commits[].parents[].sha string

SHA do commit pai.

nextPageToken string

O token fixa a versão da pull request e o cursor de commit; um token desatualizado em relação ao head ou à base atual retorna 400.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/commits' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "commits": [    {      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "commit": {        "author": {          "name": "Jane Doe",          "email": "[email protected]",          "date": "2026-08-01T09:30:00Z"        },        "committer": {          "name": "Jane Doe",          "email": "[email protected]",          "date": "2026-08-01T09:30:00Z"        },        "message": "Add launch telemetry",        "tree": {          "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8"        }      },      "parents": [        {          "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"        }      ],      "stats": {        "additions": 128,        "deletions": 46,        "total": 174      }    }  ]}

Listar arquivos do pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/files
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Lista os arquivos alterados em um pull request.

Retorna o nome do arquivo, o status, a contagem de linhas, o patch e, opcionalmente, o nome anterior do arquivo. Por padrão, os resultados trazem 30 arquivos, com limite máximo de 100. Um page token fixa a versão da pull request e o cursor de arquivos; um token que não corresponda mais ao head ou à base atual retorna 400.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

Parâmetros de consulta

pageSize integer

Número máximo de arquivos alterados a serem retornados. O padrão é 30 quando não definido ou 0. Valores acima de 100 são limitados a 100.

pageToken string

Cherri Code opaco de uma resposta anterior (next_page_token). Vazio na primeira página. O token está vinculado ao repositório, à versão da pull request e ao cursor de arquivo alterado. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos da resposta

files matriz

Registros de arquivos alterados da versão atual da pull request.

files[].filename string

Caminho do arquivo alterado da pull request.

files[].status string

Status da alteração: adicionado, removido, modificado, renomeado ou copiado.

files[].additions integer

Número de linhas adicionadas no arquivo.

files[].deletions integer

Número de linhas excluídas no arquivo.

files[].changes integer

Número total de linhas alteradas no arquivo.

files[].patch string

Patch unificado para o arquivo.

files[].previousFilename string

Caminho anterior quando o arquivo foi renomeado ou copiado.

nextPageToken string

O token fixa a versão do pull request e o cursor de arquivo; um token desatualizado em relação ao head ou à base atual retorna 400.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/files' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estrutura da resposta:

{  "files": [    {      "filename": "src/telemetry.ts",      "status": "modified",      "additions": 6,      "deletions": 3,      "changes": 9,      "patch": "@@ -12,6 +12,9 @@\n import { ignite } from \"./ignition\";\n+import { emitLaunchTelemetry } from \"./telemetry\";\n"    }  ]}

Listar rótulos de pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Lista todos os rótulos atribuídos a um pull request, ordenados por nome.

A resposta contém a lista completa de rótulos atribuídos, em vez de uma página dela; portanto, este endpoint não aceita parâmetros de paginação. Um pull request pode ter no máximo 100 rótulos. Um pull request desconhecido retorna 404.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

Campos da resposta

labels array

Todos os rótulos atualmente atribuídos ao pull request, ordenados por nome.

labels[].id string

Identificador público do rótulo.

labels[].name string

Nome do rótulo, exclusivo no repositório. Os nomes identificam o rótulo nos endpoints de gravação.

labels[].color string

Cor hexadecimal de seis caracteres sem # no início.

labels[].description string

Descrição do rótulo. Ausente quando o rótulo não tem descrição.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Definir rótulos do Pull Request

PUT/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Substitui todos os rótulos atribuídos a um pull request pelos rótulos indicados.

Uma lista vazia remove todos os rótulos atribuídos. Os rótulos já devem existir no repositório; um nome desconhecido ou um pull request desconhecido retorna 404. Um pull request pode ter no máximo 100 rótulos, portanto especificar mais de 100 retorna FailedPrecondition (HTTP 400). A resposta lista os rótulos atribuídos após a substituição, ordenados por nome.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

Corpo da solicitação

labels matriz

Nomes dos rótulos a atribuir. Máximo de 100. Uma lista vazia remove todos os rótulos atribuídos. Nomes duplicados são ignorados.

Campos da resposta

labels matriz

Rótulos atribuídos após a substituição, ordenados por nome. Cada item contém id, name, color e description.
curl --request PUT \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "labels": [    "bug"  ]}'

Formato da resposta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Adicionar rótulos a uma pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Adiciona rótulos existentes do repositório a uma pull request.

Os rótulos já atribuídos à pull request permanecem atribuídos. Os rótulos já devem existir no repositório; um nome ou uma pull request desconhecidos resultam em 404. A solicitação deve especificar entre 1 e 100 rótulos, e uma pull request pode ter no máximo 100 rótulos no total; portanto, uma solicitação que ultrapassaria esse limite resulta em FailedPrecondition (HTTP 400). A resposta lista os rótulos especificados, não o conjunto completo da pull request; consulte o conjunto completo em Listar rótulos da pull request.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo na entidade proprietária.

pullNumber string Obrigatório

Corpo da solicitação

labels matriz Obrigatório

Nomes dos rótulos a adicionar. Máximo de 100. Nomes duplicados são ignorados.

Campos da resposta

labels matriz

Rótulos especificados na solicitação. Cada item contém id, name, color e description.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "labels": [    "bug"  ]}'

Formato da resposta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Remover todos os rótulos de um pull request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Remove todos os rótulos de um pull request.

A solicitação é bem-sucedida quando o pull request não possui rótulos. Um pull request inexistente retorna 404. O corpo da resposta está vazio.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

Campos da resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Remover rótulo de Pull Request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels/{labelName}
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Remove um rótulo de um pull request.

Um rótulo não atribuído ao pull request retorna 404, assim como um pull request desconhecido. A resposta lista os rótulos restantes no pull request, ordenados por nome.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

labelName string Obrigatório

Nome do rótulo a remover.

Campos da resposta

labels matriz

Rótulos restantes no pull request, ordenados por nome. Cada item contém id, name, color e description.
curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/labels/LABEL_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Mesclar pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/merge
Scoperepository:contents:writeAuthInstallation tokenUser access token

Faz o merge de um pull request em sua base.

Para um pull request em pilha, faz merge de todo o prefixo da raiz ao destino, que termina neste número de pull, não apenas deste pull. Compatível apenas com repositórios Origin nativos; repositórios espelhados são rejeitados.

O merge incorpora o commit mais recente da version mais recente da solicitação de pull. Se a branch de origem avançou além desse commit — por exemplo, porque um push foi feito, mas o Origin ainda não o registrou como uma nova versão —, a solicitação retorna Aborted (HTTP 409 Conflict), a mesma resposta que para um expectedHeadSha desatualizado, e nada é mesclado. Tente novamente depois que Obter solicitação de pull informar o novo head em version.headSha.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

pullNumber string Obrigatório

Número do pull request a ser mesclado. Quando este pull request está empilhado, a mesclagem inclui todos os pull requests desde a raiz da pilha até este número.

Corpo da solicitação

expectedHeadSha string

Evite mesclar um head que seu app ainda não viu: informe o SHA completo do commit (40 ou 64 caracteres hexadecimais) que se espera ser o head atual do pull request. Se o head tiver mudado, a mesclagem será rejeitada com ABORTED (HTTP 409 Conflict), e nada será mesclado. Valores que não sejam um SHA completo de commit serão rejeitados com InvalidArgument (HTTP 400). Omita esse valor para mesclar o head atual, seja ele qual for. Essa verificação não é feita quando o pull request já foi mesclado; nesse caso, a operação retorna sucesso idempotente.

mergeMethod string

Como o pull request é integrado. Valores permitidos: merge, que cria um commit de merge, e squash, que cria um único commit squash. Um método não permitido pelo repositório é rejeitado com FailedPrecondition (HTTP 400), e qualquer outro valor é rejeitado com InvalidArgument (HTTP 400). Omita-o para usar o padrão do repositório: um commit de merge quando permitido; caso contrário, um squash. Se o branch base exigir um histórico linear, será usado um squash.

Campos da resposta

mergeCommitSha string

SHA do commit que o merge gravou na branch base. A prévia antes do merge é um commit diferente; leia a ref pull/<number>/merge com Obter referência do Git.

mergedPullNumbers vetor

Números de pull request em formato de string JSON mesclados da raiz da stack até o destino.

pullRequest object

Pull request de destino após o merge; o tipo de resposta declarado é o recurso completo, embora o exemplo esteja abreviado.

pullRequest.id string

Identificador do pull request do Stable Origin.

pullRequest.number string

Número do pull request local do repositório codificado como uma string JSON.

pullRequest.state string

Estado do pull request: aberto ou fechado. Pull requests mesclados são fechados com merged definido como true.

pullRequest.draft boolean

Se o pull request é um rascunho.

pullRequest.merged boolean

Se o pull request foi mesclado.

pullRequest.title string

Título do pull request.

pullRequest.body string

Corpo da descrição do pull request.

pullRequest.head object

O lado de origem da alteração — o que está sendo mesclado.

pullRequest.head.ref string

O ref para o qual este lado aponta, conforme registrado pelo Origin.

pullRequest.head.sha string

SHA do commit do tip deste lado na versão mais recente da alteração.

pullRequest.base objeto

O lado de destino da alteração — no qual ela é mesclada.

pullRequest.base.ref string

O ref para o qual este lado aponta, conforme registrado pelo Origin.

pullRequest.base.sha string

SHA do commit mais recente deste lado na versão mais recente da alteração.

pullRequest.author object

Ator público que abriu a pull request.

pullRequest.author.user objeto

Variante do usuário do ator. Definida quando um usuário executou a ação.

pullRequest.author.user.id string

Identificador público do usuário.

pullRequest.author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante "user" estiver presente.

pullRequest.author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

pullRequest.author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

pullRequest.author.app objeto

Variante de app do ator. Definida quando um app executou a ação.

pullRequest.author.app.id string

Identificador público do app.

pullRequest.author.app.displayName string

Nome de exibição registrado do app. Omitido quando não for possível resolver o app e no ator gerenciado de primeira parte do Cherri Code.

pullRequest.author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

pullRequest.author.serviceAccount.id string

Identificador público da conta de serviço.

pullRequest.createdAt string

Timestamp de criação do pull request em RFC 3339.

pullRequest.updatedAt string

Registro de data e hora RFC 3339 da atualização mais recente do pull request.

pullRequest.closedAt string

Timestamp de fechamento no formato RFC 3339; pode aparecer em pull requests fechados ou mesclados.

pullRequest.mergedAt string

Timestamp de merge no formato RFC 3339; pode aparecer em pull requests mesclados.

pullRequest.mergeCommitSha string

SHA do commit que o merge registrou na branch base. Definido quando o pull request é mesclado e inexistente antes disso. A prévia da mesclagem é um commit diferente, acessível pela ref pull/<number>/merge com Obter referência do Git.

pullRequest.additions integer

Linhas adicionadas na versão atual do pull request.

pullRequest.deletions integer

Linhas excluídas na versão atual do pull request.

pullRequest.changedFiles integer

Quantidade de arquivos alterados na versão atual da pull request.

pullRequest.labels matriz

Rótulos atualmente atribuídos à pull request, ordenados por nome. Vazio quando nenhum rótulo estiver atribuído.

pullRequest.labels[].id string

Identificador público do rótulo.

pullRequest.labels[].name string

Nome do rótulo, único dentro do repositório. Os nomes se referem ao rótulo nos endpoints de escrita.

pullRequest.labels[].color string

Cor hexadecimal de seis caracteres sem o # inicial.

pullRequest.labels[].description string

Descrição do rótulo. Ausente quando o rótulo não possui descrição.

pullRequest.stack objeto

Associação à stack: a cadeia de pull requests dependentes da qual este faz parte, cada um empilhado sobre aquele em que se baseia. Ausente quando o pull request não faz parte de uma stack.

pullRequest.stack.id string

Identificador estável da pilha, compartilhado por todos os membros dela. Passe-o como stackId para Listar solicitações de pull para consultar os outros membros.

pullRequest.stack.parentPullRequest objeto

O pull request do qual este depende na pilha. Não aparece na raiz da pilha. Um pull request pai mesclado continua referenciado até que o filho seja redirecionado ou associado a outro pai.

pullRequest.stack.parentPullRequest.id string

Identificador estável do Origin do pull request pai.

pullRequest.stack.parentPullRequest.number string

Número local do repositório do pull request pai, codificado como uma string JSON.

pullRequest.stack.parentPullRequest.repository objeto

Repositório ao qual o elemento pai pertence, com os mesmos campos id, name e owner do repository de uma execução de verificação. Stacks nunca cruzam repositórios, portanto este é sempre o próprio repositório do pull request.

pullRequest.version objeto

Versão numerada atual do pull request e seus SHAs de head/base.

pullRequest.version.number string

Número monotônico da versão do pull request codificado como uma string JSON.

pullRequest.version.headSha string

SHA do head capturada por esta versão da pull request.

pullRequest.version.baseSha string

SHA base capturado por esta versão do pull request.

pullRequest.version.createdAt string

Carimbo de data/hora RFC 3339 para a criação desta versão da pull request.

pullRequest.version.potentialMergeCommit object

O merge de teste do Origin para esta versão: um commit que mescla seu headSha à ponta da branch base, além do estágio alcançado pela preparação. Presente em todas as versões. Descreve apenas esta versão e continua acessível após o merge do pull request; é um commit diferente de mergeCommitSha. Para um pull request empilhado, a branch base é a branch do pull request pai. Assim, o merge de teste inclui apenas as alterações deste pull request sobre essa branch.

pullRequest.version.potentialMergeCommit.state string

Até que ponto avançou a preparação do merge de teste. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que o merge de teste não está preparado: a versão está aguardando a preparação, ou a preparação excedeu o tempo limite ou falhou. Toda nova versão começa como unknown, portanto nunca contém o commit de outra versão. prepared significa que o merge de teste existe e que sha e baseSha o descrevem. merge_conflict significa que houve um conflito ao mesclar headSha na ponta do branch base, portanto não há merge de teste; essa é a condição que Obter possibilidade de merge do pull request relata como um impedimento merge_conflict, e reabrir o pull request prepara a versão novamente. Trate um valor não reconhecido como unknown.

pullRequest.version.potentialMergeCommit.sha string

SHA do commit de merge de teste com dois pais: o primeiro pai é o baseSha deste objeto e o segundo é o headSha da versão. Presente apenas quando state é prepared. A ref pull/{pullNumber}/merge aponta para ele enquanto esta for a versão mais recente. Depois disso, ele continua disponível para leitura pelo SHA por meio de Obter commit, mas não pode ser consultado pelo SHA via Git.

pullRequest.version.potentialMergeCommit.baseSha string

Commit mais recente da branch base usado para criar o merge de teste. Presente apenas quando state é prepared. Ele pode ser mais recente que pullRequest.version.baseSha, e o Origin não o atualiza quando a branch base simplesmente avança.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/merge' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "expectedHeadSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "mergeMethod": "squash"}'

Formato da resposta:

{  "mergeCommitSha": "5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d",  "mergedPullNumbers": [    "17"  ],  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "state": "closed",    "draft": false,    "merged": true,    "title": "Add launch telemetry",    "body": "Adds structured launch telemetry to the ignition path.",    "head": {      "ref": "add-telemetry",      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"    },    "base": {      "ref": "main",      "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    },    "author": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "closedAt": "2026-08-03T10:15:00Z",    "mergedAt": "2026-08-03T10:15:00Z",    "mergeCommitSha": "5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d",    "additions": 128,    "deletions": 46,    "changedFiles": 5,    "labels": [      {        "id": "lbl_01k2ja2000e0080000000000m1",        "name": "bug",        "color": "d73a4a",        "description": "Something isn't working"      }    ],    "version": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",      "createdAt": "2026-08-01T09:30:00Z"    }  }}

Obter capacidade de mesclagem da pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/mergeability
Scoperepository:pull_requests:readAuthInstallation tokenUser access token
PreviewThis endpoint is in preview and may change before it is generally available.

Retorna se a pull request pode ser mesclada e, quando não pode, as condições que a bloqueiam. O veredito é avaliado com base nas mesmas condições que Merge Pull Request impõe, portanto um veredito mergeable significa que espera-se que uma mesclagem do mesmo head seja bem-sucedida. Para uma pull request empilhada, o veredito abrange todas as pull requests desde a raiz da pilha até esta, e cada bloqueador identifica a pull request a que pertence.

Uma stack com mais de 200 pull requests no total, incluindo ancestrais já mesclados, retorna FailedPrecondition (HTTP 400).

Esta operação está em prévia e seu formato pode mudar enquanto o contrato não estiver definido. Decodifique as respostas tolerando campos desconhecidos e valores de enum desconhecidos, trate um verdict não reconhecido como blocked e renderize blockers[].message quando não reconhecer blockers[].kind.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

pullNumber string Obrigatório

Número do pull request dentro do repositório.

Parâmetros de consulta

expectedHeadSha string

Proteção opcional: o SHA completo do commit, com 40 ou 64 caracteres hexadecimais, que deve corresponder ao head atual do pull request. Quando definido e o head avaliado for diferente, a solicitação retorna Aborted (HTTP 409 Conflict) em vez de um resultado. Um valor que não seja um SHA completo de commit retorna InvalidArgument (HTTP 400).

Campos de resposta

pullRequest objeto

O pull request ao qual o veredito se refere.

pullRequest.id string

Identificador estável do pull request.

pullRequest.number string

Número do pull request local do repositório, codificado como uma string JSON.

pullRequest.repository objeto

Referência do contêiner do repositório para o pull request.

pullRequest.repository.id string

Identificador do repositório em uma referência de container.

pullRequest.repository.name string

Nome do repositório em uma referência de container.

pullRequest.repository.owner object

Referência do owner do repositório.

pullRequest.repository.owner.slug string

Slug do owner usado na URL, combinado com o ID do owner para identificar o proprietário do repositório.

pullRequest.repository.owner.id string

Identificador do proprietário da Origin.

pullRequest.repository.owner.type string

Tipo do namespace do proprietário. Apenas saída. Valores permitidos: team, user. Omitido quando desconhecido.

verdict string

Resposta geral para cada pull request em evaluatedPullRequests. Valores permitidos: mergeable, indicando que mergear pullRequest integra todos eles, e blocked. Trate qualquer valor não reconhecido como blocked.

blockers matriz

Tudo o que impede o merge, ordenado pela pull request a que pertencem, com a raiz da pilha primeiro e, depois, por tipo. Vazio quando verdict é mergeable. No máximo um bloqueador por pull request por tipo, exceto required_checks, que tem um por estado, e rule_failure e ruleset_error, que têm um por mensagem distinta.

blockers[].pullRequest objeto

Pull request em evaluatedPullRequests ao qual este bloqueador pertence. Possui os mesmos campos que pullRequest.

blockers[].kind string

Categoria do blocker. Valores permitidos: draft, closed, merged, merge_conflict, required_checks, required_approvals, codeowner_approval, behind_base, needs_restack, restack_pending, conflict_check_pending, invalid_stack, ruleset_error, rule_failure. Novos tipos são adicionados ao longo do tempo; um blocker cujo tipo for mais recente que o seu client é decodificado com kind sem valor e continua bloqueando.

blockers[].message string

Descrição legível por humanos do bloqueio e de como removê-lo. Nunca fica vazia, portanto é o que deve ser renderizado quando kind não for reconhecido.

blockers[].requiredChecks objeto

Definido em um bloqueador required_checks.

blockers[].requiredChecks.state string

Estado compartilhado por todos os checks deste blocker. Valores permitidos: missing, pending, failing, action_required.

blockers[].requiredChecks.checks matriz

Verificações obrigatórias nesse estado.

blockers[].requiredChecks.checks[].name string

Nome exigido pela regra do repositório.

blockers[].requiredChecks.checks[].owner objeto

Principal que deve relatar a verificação, com as mesmas variantes de actor do actor de uma execução de verificação.

blockers[].requiredChecks.checks[].checkRun objeto

A execução de verificação em headSha que corresponde a este requisito, por referência. Omitida quando nenhuma foi relatada, o que corresponde ao estado missing. Ela traz apenas id, name e checkSuite.id, porque esta operação pode ser lida apenas com repository:pull_requests:read, enquanto o status, a conclusão, a saída e a URL de detalhes de uma execução exigem repository:checks:read; leia esses dados com Obter execução de verificação.

blockers[].requiredApprovals objeto

Definido em um bloqueador required_approvals.

blockers[].requiredApprovals.requiredCount integer

Revisões de aprovação exigidas pelas regras do repositório.

blockers[].requiredApprovals.approvedCount integer

Revisões de aprovação atualmente contabilizadas para o requisito.

blockers[].codeownerApproval objeto

Definido em um bloqueador codeowner_approval.

blockers[].codeownerApproval.requirements matriz

Sets de owner que ainda precisam de approval.

blockers[].codeownerApproval.requirements[].owners matriz

Responsáveis pelo código, qualquer um dos quais pode atender ao requisito.

blockers[].codeownerApproval.requirements[].paths matriz

Caminhos alterados cobertos por este conjunto de proprietários.

blockers[].mergeConflict object

Definido em um bloqueador merge_conflict.

blockers[].mergeConflict.conflictedPaths matriz

Caminhos que conflitam com o branch base. No máximo 100 são listados.

blockers[].mergeConflict.truncated booleano

Se há mais caminhos em conflito do que os listados.

blockers[].mergeConflict.inheritedFromDownstack booleano

Se o conflito vem de um pull request abaixo deste na stack, ou seja, este pull request está aguardando aquele em vez de ter um conflito próprio.

blockers[].stackShape objeto

Definido em um blocker invalid_stack.

blockers[].stackShape.reason string

Por que a stack não pode ser avaliada. Valores permitidos: partially_merged, cycle, missing_parent, cross_repository_parent, base_branch_missing.

blockers[].stackShape.relatedPullRequests matriz

Outros pull requests envolvidos, quando o motivo mencionar algum. Cada um traz os mesmos campos que pullRequest.

evaluatedPullRequests matriz

Pull requests em que um merge de pullRequest iria resultar, começando pela raiz da stack e terminando em pullRequest. Ancestrais que já foram mesclados fazem parte do histórico e não são listados. Exatamente um elemento para um pull request não empilhado. Cada um contém os mesmos campos de pullRequest.

headSha string

Commit mais recente de pullRequest que foi avaliado.

baseRef string

Branch em que os pull requests avaliados são mesclados: a base da raiz da stack, e não a base do próprio pull request quando ele faz parte de uma stack.

baseSha string

Commit da ponta de baseRef em evaluatedAt. Um push posterior para baseRef pode alterar o veredito. Fica vazio quando a branch base não pôde ser determinada, por exemplo em uma stack inválida.

evaluatedAt string

Timestamp no formato RFC 3339 de quando este resultado foi avaliado. Alterações posteriores a esse momento não são refletidas; consulte novamente para obtê-las.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/mergeability' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'
{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000a1",      "name": "launch-control",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000b2"      }    }  },  "verdict": "blocked",  "blockers": [    {      "pullRequest": {        "id": "pr_01k2ja2000e0080000000000d4",        "number": "17",        "repository": {          "id": "repo_01k2ja2000e0080000000000a1",          "name": "launch-control",          "owner": {            "slug": "acme",            "id": "ns_01k2ja2000e0080000000000b2"          }        }      },      "kind": "required_approvals",      "message": "Approving review count is 0; 1 required. Request reviews and wait for the required approvals.",      "requiredApprovals": {        "requiredCount": 1,        "approvedCount": 0      }    },    {      "pullRequest": {        "id": "pr_01k2ja2000e0080000000000d4",        "number": "17",        "repository": {          "id": "repo_01k2ja2000e0080000000000a1",          "name": "launch-control",          "owner": {            "slug": "acme",            "id": "ns_01k2ja2000e0080000000000b2"          }        }      },      "kind": "required_checks",      "message": "Required status checks are pending. Wait for checks to finish or fix the failing checks.",      "requiredChecks": {        "state": "pending",        "checks": [          {            "name": "ci / build",            "owner": {              "app": {                "id": "app_01k2ja2000e0080000000000e5",                "displayName": "Launch CI"              }            },            "checkRun": {              "id": "cr_01k2ja2000e0080000000000f6",              "name": "ci / build",              "checkSuite": {                "id": "crg_01k2ja2000e0080000000000f7"              }            }          }        ]      }    }  ],  "evaluatedPullRequests": [    {      "id": "pr_01k2ja2000e0080000000000d4",      "number": "17",      "repository": {        "id": "repo_01k2ja2000e0080000000000a1",        "name": "launch-control",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000b2"        }      }    }  ],  "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "baseRef": "main",  "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",  "evaluatedAt": "2026-08-02T14:45:00Z"}

Listar revisores solicitados de um pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Lista os usuários e grupos cuja revisão está solicitada atualmente em um pull request.

Uma solicitação direta é encerrada quando aquele usuário envia uma revisão, e uma solicitação de grupo é encerrada quando qualquer membro atual do grupo envia. Revisões em draft não enviadas mantêm a solicitação pendente, e solicitar revisão novamente após um envio devolve o revisor a esta lista. Grupos sem um identificador público legível são omitidos.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

pullNumber string Obrigatório

Número do pull request local do repositório.

Campos da resposta

users matriz

Usuários cuja revisão foi solicitada. Vazio quando nenhuma estiver pendente.

users[].id string

Identificador de usuário codificado (user_…), no mesmo formato usado pela API da organização.

users[].email string

Endereço de email do usuário. Vazio quando a conta não possui um.

users[].displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

users[].handle string

O identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

groups matriz

Grupos cuja revisão foi solicitada. Vazio quando nenhuma estiver pendente.

groups[].id string

Identificador público do grupo (grp_…).
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/requested_reviewers' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "users": [    {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  ],  "groups": [    {      "id": "grp_01k2ja2000e0080000000000n2"    }  ]}

Request Pull Request Reviewers

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Solicita revisões dos usuários e grupos informados em um pull request e retorna os reviewers solicitados por essa chamada.

Os identificadores são resolvidos em relação aos candidatos a revisor do repositório por ID público, e-mail do usuário ou slug do grupo. Nomes de exibição não são resolvidos. Um identificador desconhecido ou ambíguo retorna InvalidArgument (HTTP 400) nomeando o identificador, e é necessário pelo menos uma entrada não vazia entre users e groups.

Solicitar um reviewer que já foi solicitado atualiza o timestamp da solicitação, fazendo com que um reviewer que já havia enviado uma revisão volte a aparecer como pendente. Um reviewer que não é candidato do repositório retorna PermissionDenied (HTTP 403).

Path Parameters

ownerSlug string Obrigatório

Slug único da owning entity.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

pullNumber string Obrigatório

Número do pull request local ao repositório.

Corpo da solicitação

users array

Identificadores de usuário a solicitar. Cada entrada deve corresponder de forma única a um candidato a usuário do repositório pelo id público user_… ou e-mail.

groups matriz

Identificadores de grupo a serem solicitados. Cada entrada deve corresponder de forma única a um candidato a grupo do repositório pelo ID público grp_…, slug de grupo qualificado ou slug do grupo.

Response Fields

users matriz

Usuários solicitados por esta chamada.

users[].id string

Identificador do usuário codificado (user_…), no mesmo formato usado pela API da organização.

users[].email string

Endereço de e-mail do usuário. Vazio quando a conta não possui nenhum.

users[].displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

users[].handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; caso contrário, é omitido.

groups array

Grupos solicitados por esta chamada.

groups[].id string

Identificador público do grupo (grp_…).
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/requested_reviewers' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "users": [    "user_01k2ja2000e0080000000000c3"  ],  "groups": [    "grp_01k2ja2000e0080000000000n2"  ]}'

Formato da resposta:

{  "users": [    {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  ],  "groups": [    {      "id": "grp_01k2ja2000e0080000000000n2"    }  ]}

Remover revisores solicitados de um pull request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Remove as revisões solicitadas aos usuários e grupos informados em um pull request. O corpo da resposta é vazio.

Os identificadores são resolvidos entre os candidatos a revisor do repositório por public id, email do usuário ou slug do grupo. Nomes de exibição não são resolvidos. Um identificador desconhecido ou ambíguo retorna InvalidArgument (HTTP 400) indicando o identificador, e é necessária pelo menos uma entrada não vazia entre users e groups.

Remover um usuário ou grupo que não esteja solicitado no momento não tem efeito. Um identificador que não seja mais um candidato a revisor ainda é aceito quando for um public id estável (user_… ou grp_…), de modo que um revisor que saiu do repositório possa ser removido.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug único da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único dentro da entidade proprietária.

pullNumber string Obrigatório

Número do pull request local do repositório.

Corpo da solicitação

users matriz

Identificadores de usuários a remover. Cada entrada deve corresponder de forma única a um candidato a usuário do repositório por public id user_… ou email.

groups matriz

Identificadores de grupos a remover. Cada entrada deve corresponder de forma única a um candidato a grupo do repositório por public id grp_…, slug de grupo qualificado ou slug de grupo.

Campos da resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/requested_reviewers' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "users": [    "user_01k2ja2000e0080000000000c3"  ],  "groups": [    "grp_01k2ja2000e0080000000000n2"  ]}'

Resposta:

204 No Content

Listar revisões de pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Lista as revisões enviadas em um pull request, ordenadas por submitted_at em ordem crescente. Revisões pendentes são omitidas.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

pullNumber string Obrigatório

Parâmetros de consulta

pageSize integer

Número máximo de avaliações a retornar. Padrão: 30; máximo: 100.

pageToken string

Cherri Code opaco do nextPageToken de uma resposta anterior. Omita-o na primeira página. O pageSize em uma solicitação de acompanhamento se aplica a essa página; omita-o para manter o tamanho de página anterior.

Campos da resposta

reviews matriz

Avaliações enviadas ordenadas por submittedAt em ordem crescente; rascunhos de avaliações não enviadas são omitidos.

reviews[].id string

Identificador estável da revisão.

reviews[].author object

Ator público que elaborou a avaliação.

reviews[].author.user objeto

Variante de usuário do ator. Definida quando um usuário executou a ação.

reviews[].author.user.id string

Identificador público do usuário.

reviews[].author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante user está presente.

reviews[].author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

reviews[].author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; omitido caso contrário.

reviews[].author.app object

Variante do app do ator. Definida quando um app executou a ação.

reviews[].author.app.id string

Identificador público do app.

reviews[].author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira‑parte do Cherri Code.

reviews[].author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

reviews[].author.serviceAccount.id string

Identificador público da conta de serviço.

reviews[].verdict string

Veredito da revisão; aprovar, request_changes ou comentar.

reviews[].body string

Texto do resumo da revisão.

reviews[].submittedAt string

Timestamp de envio no formato RFC 3339; ausente para uma revisão de rascunho não enviada.

reviews[].pullRequestVersion objeto

Versão do pull request à qual a revisão se aplica.

reviews[].pullRequestVersion.number string

Número monotônico da versão da pull request codificado como uma string JSON.

reviews[].pullRequestVersion.headSha string

SHA do head capturado por esta versão da pull request.

reviews[].pullRequestVersion.baseSha string

SHA base capturada por esta versão desta pull request.

reviews[].dismissal object

Presente após uma revisão ser descartada; revisões descartadas permanecem visíveis nas listagens.

reviews[].dismissal.dismissedBy objeto

Ator público que descartou a avaliação quando foi exposto.

reviews[].dismissal.dismissedBy.user objeto

Variante de usuário do ator. Definida quando um usuário executou a ação.

reviews[].dismissal.dismissedBy.user.id string

Identificador público do usuário.

reviews[].dismissal.dismissedBy.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante user está presente.

reviews[].dismissal.dismissedBy.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não tem nome.

reviews[].dismissal.dismissedBy.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver publicamente visível; omitido caso contrário.

reviews[].dismissal.dismissedBy.app objeto

Variante do app do ator. Definida quando um app executou a ação.

reviews[].dismissal.dismissedBy.app.id string

Identificador público do app.

reviews[].dismissal.dismissedBy.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira‑parte do Cherri Code.

reviews[].dismissal.dismissedBy.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

reviews[].dismissal.dismissedBy.serviceAccount.id string

Identificador público da conta de serviço.

reviews[].dismissal.dismissedAt string

Timestamp de dispensa no formato RFC 3339.

reviews[].dismissal.message string

Motivo da dispensa; a substituição automática usa uma mensagem gerada pelo servidor.

pullRequest object

Container PullRequestReference incluído junto com a página de revisões.

pullRequest.id string

Identificador estável do pull request.

pullRequest.number string

Número do pull request local do repositório codificado como uma string JSON.

pullRequest.repository object

Referência do contêiner do repositório para o pull request.

pullRequest.repository.id string

Identificador do repositório em uma referência de contêiner.

pullRequest.repository.name string

Nome do repositório em uma referência de contêiner.

pullRequest.repository.owner objeto

Referência do proprietário do repositório.

pullRequest.repository.owner.slug string

Slug do proprietário visível na URL usado junto com o ID do proprietário para identificar o dono do repositório.

pullRequest.repository.owner.id string

Identificador do proprietário de origem.

pullRequest.repository.owner.type string

Tipo do namespace do proprietário. Somente saída. Valores permitidos: team, user. Omitido quando desconhecido.

nextPageToken string

Cherri Code opaco para a próxima página; vazio quando não houver mais revisões.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/reviews' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "reviews": [    {      "id": "rev_01k2ja2000e0080000000000f6",      "author": {        "user": {          "id": "user_01k2ja2000e0080000000000c3",          "email": "[email protected]"        }      },      "verdict": "approve",      "body": "Approving. The telemetry schema matches the spec.",      "submittedAt": "2026-08-02T15:00:00Z",      "pullRequestVersion": {        "number": "3",        "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"      }    }  ],  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  }}

Criar revisão de pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Cria e envia uma revisão em uma pull request, opcionalmente com seus comentários, em uma única solicitação atômica. Cada comentário aceita os mesmos destinos aceitos por Criar comentário de pull request: comments[].inline para um intervalo de linhas, comments[].file para um arquivo inteiro, comments[].threadId para uma resposta, e nenhum deles para discussão geral.

A revisão é enviada imediatamente. Uma nova revisão approve ou request_changes substitui a revisão de decisão ativa anterior do chamador na mesma pull request, que é descartada. Autores de pull requests não podem approve suas próprias pull requests. Falha com FAILED_PRECONDITION enquanto o chamador tiver uma revisão de rascunho não enviada na pull request.

Quando comments está definido, cada âncora é validada em relação ao diff da versão revisada antes de qualquer gravação, usando a mesma verificação no diff de Create Pull Request Comment. Se um comentário falhar, toda a solicitação falha com InvalidArgument (HTTP 400) e nada é publicado. Os comentários ficam visíveis de forma atômica junto com a revisão: nenhum comentário ou evento pode ser observado até que a revisão seja enviada; então, cada comentário emite seu próprio webhook pull_request.comment.created, juntamente com o evento da revisão.

A operação não inclui uma chave de idempotência, portanto uma nova tentativa após uma falha de transporte ambígua pode criar uma segunda revisão. Chame Listar revisões do pull request antes de tentar novamente.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

pullNumber string Obrigatório

Corpo da solicitação

verdict string Obrigatório

A decisão da revisão. Valores permitidos: PULL_REQUEST_REVIEW_VERDICT_UNSPECIFIED, approve, request_changes, comment.

body string

Resumo da revisão em texto livre. Pode ficar vazio.

versionNumber string

Número da versão do pull request ao qual a revisão se aplica (veja PullRequestVersion.number). Omitir para revisar a versão mais recente no momento da chamada. Os comentários são ancorados nessa mesma versão.

comments array

Comentários publicados de forma atômica juntamente com a revisão. Máximo de 50 por solicitação.

comments[].body string Obrigatório

Texto do comentário. Deve conter um caractere que não seja espaço em branco.

comments[].inline objeto

Âncora de diff para uma nova thread inline no diff da versão revisada. Mesma estrutura e validação que inline em Criar comentário de pull request. Não pode ser combinada com comments[].threadId.

comments[].inline.path string Obrigatório

Caminho do arquivo no diff da versão revisada.

comments[].inline.side string Obrigatório

Lado do diff da âncora. Valores permitidos: left para a versão base do arquivo, right para a versão head.

comments[].inline.startLine inteiro Obrigatório

Primeira linha (baseada em 1) do intervalo ancorado na versão side do arquivo. O intervalo não pode ultrapassar o fim desse arquivo.

comments[].inline.endLine integer

Inclui a última linha do intervalo ancorado. Deve ser maior ou igual a startLine. Omitir para uma âncora de linha única.

comments[].threadId string

ID de uma thread existente nesta pull request para responder. A resposta permanece oculta até a publicação da revisão. Omita comments[].inline, comments[].file e este campo para abrir uma nova thread de discussão geral.

comments[].file objeto

Âncora para uma nova discussão em nível de arquivo sobre um arquivo inteiro no diff da versão revisada. Mesma estrutura, derivação de lado e validação que file em Criar comentário de pull request. Não pode ser combinada com comments[].inline nem com comments[].threadId.

comments[].file.path string Obrigatório

Caminho do arquivo no diff da versão revisada: o caminho excluído em caso de exclusão, caso contrário o caminho do head.

Campos da resposta

id string

Identificador estável da revisão.

author objeto

Entidade pública que redigiu a avaliação.

author.user objeto

Variante de usuário do ator. Definida quando um usuário realizou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre preenchido quando a variante de usuário está presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

author.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

author.app objeto

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

O nome de exibição registrado do app. Omitido quando não for possível resolver o app e no caso do ator gerenciado próprio do Cherri Code.

author.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

verdict string

Veredito da revisão; aprovar, solicitar_alterações ou comentar.

body string

Texto do resumo da revisão.

submittedAt string

Carimbo de data e hora no formato RFC 3339 de envio; ausente para uma revisão de rascunho não submetida.

pullRequestVersion objeto

Versão do pull request à qual a revisão se aplica.

pullRequestVersion.number string

Número monotônico da versão do pull request codificado como uma string JSON.

pullRequestVersion.headSha string

SHA do head capturado por esta versão desta pull request.

pullRequestVersion.baseSha string

SHA base capturado por esta versão desta pull request.

dismissal objeto

Exibido após uma revisão ser descartada; revisões descartadas permanecem visíveis nas listagens.

dismissal.dismissedBy objeto

Ator público que rejeitou a revisão quando exposto.

dismissal.dismissedBy.user objeto

Variante de usuário do ator. Definida quando um usuário realizou a ação.

dismissal.dismissedBy.user.id string

Identificador público do usuário.

dismissal.dismissedBy.user.email string

Endereço de e-mail do usuário. Sempre preenchido quando a variante de usuário está presente.

dismissal.dismissedBy.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

dismissal.dismissedBy.user.handle string

Identificador de perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

dismissal.dismissedBy.app objeto

Variante de app do ator. Definida quando um app executou a ação.

dismissal.dismissedBy.app.id string

Identificador público do app.

dismissal.dismissedBy.app.displayName string

O nome de exibição registrado do app. Omitido quando não é possível resolver o app e no caso do ator gerenciado de primeira parte do Cherri Code.

dismissal.dismissedBy.serviceAccount objeto

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

dismissal.dismissedBy.serviceAccount.id string

Identificador público da conta de serviço.

dismissal.dismissedAt string

Registro de data e hora de descarte conforme a RFC 3339.

dismissal.message string

Motivo da dispensa; em caso de substituição automática, é usada uma mensagem gerada pelo servidor.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/reviews' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "verdict": "approve",  "body": "Approving. The telemetry schema matches the spec.",  "versionNumber": "3"}'

Estrutura da resposta:

{  "id": "rev_01k2ja2000e0080000000000f6",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "verdict": "approve",  "body": "Approving. The telemetry schema matches the spec.",  "submittedAt": "2026-08-02T15:00:00Z",  "pullRequestVersion": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  }}

Atualizar revisão do Pull Request

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews/{reviewId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Atualiza o corpo de uma revisão. Somente o autor da revisão pode atualizá-la; outros chamadores recebem PERMISSION_DENIED. Uma revisão que não pertence ao pull request especificado retorna NOT_FOUND.

As revisões de rascunho não enviadas também podem ser atualizadas; a resposta de um rascunho não tem submitted_at.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

pullNumber string Obrigatório

reviewId string Obrigatório

Corpo da solicitação

body string Obrigatório

Texto de resumo substituto da revisão; substitui integralmente o corpo anterior. Deve conter um caractere que não seja espaço em branco; caso contrário, INVALID_ARGUMENT.

Campos de resposta

id string

Identificador estável da revisão.

author object

Ator público que escreveu a avaliação.

author.user object

Variante de usuário do ator. Definida quando um usuário realizou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante user está presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente somente enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

author.app object

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do aplicativo.

author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não pode ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

author.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

verdict string

Veredito da revisão: aprovar, solicitar_alterações ou comentar.

body string

Texto do resumo da revisão.

submittedAt string

Carimbo de data e hora do envio no formato RFC 3339; ausente para uma revisão de rascunho não enviada.

pullRequestVersion object

Versão do pull request à qual a revisão se aplica.

pullRequestVersion.number string

Número de versão monotônico da pull request codificado como uma string JSON.

pullRequestVersion.headSha string

SHA do head capturada por esta versão desta pull request.

pullRequestVersion.baseSha string

SHA base capturado por esta versão do pull request.

dismissal object

Presente depois que uma revisão é descartada; revisões descartadas permanecem visíveis nas listagens.

dismissal.dismissedBy object

Ator público que descartou a revisão quando exposto.

dismissal.dismissedBy.user object

Variante de usuário do ator. Definida quando um usuário realizou a ação.

dismissal.dismissedBy.user.id string

Identificador público do usuário.

dismissal.dismissedBy.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante user está presente.

dismissal.dismissedBy.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome que o produto exibe. Omitido quando a conta não possui nome.

dismissal.dismissedBy.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente somente enquanto esse perfil estiver visível publicamente; caso contrário, é omitido.

dismissal.dismissedBy.app object

Variante de app do ator. Definida quando um app executou a ação.

dismissal.dismissedBy.app.id string

Identificador público do aplicativo.

dismissal.dismissedBy.app.displayName string

O nome de exibição registrado do app. Omitido quando não é possível resolver o app e no caso do ator gerenciado próprio do Cherri Code.

dismissal.dismissedBy.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

dismissal.dismissedBy.serviceAccount.id string

Identificador público da conta de serviço.

dismissal.dismissedAt string

Data e hora da dispensa no formato RFC 3339.

dismissal.message string

Motivo da dispensa; a substituição automática usa uma mensagem gerada pelo servidor.
curl --request PATCH \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/reviews/REVIEW_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "body": "Approving. The telemetry schema matches the spec."}'

Formato da resposta:

{  "id": "rev_01k2ja2000e0080000000000f6",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "verdict": "approve",  "body": "Approving. The telemetry schema matches the spec.",  "submittedAt": "2026-08-02T15:00:00Z",  "pullRequestVersion": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  }}

Descartar revisão do Pull Request

PUT/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews/{reviewId}/dismissals
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Descarta uma revisão enviada para que seu veredito deixe de ser considerado no estado de revisão do pull request. A própria revisão é mantida e continua aparecendo em ListPullRequestReviews, com dismissal definido.

Para dispensar uma revisão, não é necessário tê-la criado; basta ter permissão de gravação nas revisões de pull request do repositório.

Somente as revisões approve e request_changes podem ser descartadas, e apenas uma vez: uma revisão comment, uma revisão de rascunho não enviada ou uma revisão já descartada retorna FAILED_PRECONDITION, e repetir a chamada mantém o primeiro descarte. Uma revisão que não pertence ao pull request especificado retorna NOT_FOUND.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

pullNumber string Obrigatório

reviewId string Obrigatório

Identificador estável da revisão do Origin, conforme retornado por ListPullRequestReviews.

Corpo da solicitação

message string Obrigatório

Motivo registrado com a demissão. Deve conter um caractere que não seja espaço em branco; caso contrário, INVALID_ARGUMENT.

Campos de resposta

id string

Identificador estável da revisão.

author object

Ator público que escreveu a avaliação.

author.user object

Variante do usuário do ator. Definida quando um usuário realizou a ação.

author.user.id string

Identificador público do usuário.

author.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante de usuário estiver presente.

author.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

author.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

author.app object

Variante de app do ator. Definida quando um app executou a ação.

author.app.id string

Identificador público do app.

author.app.displayName string

Nome de exibição registrado do app. Omitido quando o app não puder ser resolvido e no ator gerenciado de primeira parte do Cherri Code.

author.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

author.serviceAccount.id string

Identificador público da conta de serviço.

verdict string

Veredito da revisão; aprovar, solicitar_alterações ou comentar.

body string

Texto do resumo da revisão.

submittedAt string

Data e hora de envio no formato RFC 3339; ausente para uma revisão de rascunho não enviada.

pullRequestVersion object

Versão do pull request à qual a revisão se aplica.

pullRequestVersion.number string

Número de versão monotônico da pull request, codificado como uma string JSON.

pullRequestVersion.headSha string

SHA do head capturado por esta versão desta pull request.

pullRequestVersion.baseSha string

SHA da base capturado por esta versão desta pull request.

dismissal object

Presente depois que uma avaliação é rejeitada; avaliações rejeitadas permanecem visíveis nas listagens.

dismissal.dismissedBy object

Ator público que descartou a revisão quando exposto.

dismissal.dismissedBy.user object

Variante de usuário do ator. Definida quando um usuário realizou a ação.

dismissal.dismissedBy.user.id string

Identificador público do usuário.

dismissal.dismissedBy.user.email string

Endereço de e-mail do usuário. Sempre definido quando a variante user estiver presente.

dismissal.dismissedBy.user.displayName string

Nome de exibição do usuário: o primeiro e o último nome da conta unidos por um espaço, o mesmo nome exibido pelo produto. Omitido quando a conta não tem nome.

dismissal.dismissedBy.user.handle string

O handle do perfil reivindicado pelo usuário, sem o prefixo @. Presente apenas enquanto esse perfil estiver visível publicamente; omitido caso contrário.

dismissal.dismissedBy.app object

Variante de app do ator. Definida quando um app executou a ação.

dismissal.dismissedBy.app.id string

Identificador público do app.

dismissal.dismissedBy.app.displayName string

O nome de exibição registrado do app. Omitido quando não é possível resolver o app e no caso do ator gerenciado próprio do Cherri Code.

dismissal.dismissedBy.serviceAccount object

Variante de conta de serviço do ator. Definida quando uma conta de serviço executou a ação.

dismissal.dismissedBy.serviceAccount.id string

Identificador público da conta de serviço.

dismissal.dismissedAt string

Data e hora de dispensa no formato RFC 3339.

dismissal.message string

Motivo da anulação; a substituição automática usa uma mensagem gerada pelo servidor.
curl --request PUT \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER/reviews/REVIEW_ID/dismissals' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "message": "Superseded by a newer review."}'

Formato da resposta:

{  "id": "rev_01k2ja2000e0080000000000f6",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "verdict": "approve",  "body": "Approving. The telemetry schema matches the spec.",  "submittedAt": "2026-08-02T15:00:00Z",  "pullRequestVersion": {    "number": "3",    "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"  },  "dismissal": {    "dismissedBy": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "dismissedAt": "2026-08-02T15:00:00Z",    "message": "Superseded by a newer review."  }}

Conjuntos de regras

Listar conjuntos de regras

GET/v1/origin/repos/{ownerSlug}/{repoName}/rulesets
Scoperepository:rulesets:readAuthInstallation tokenUser access token

Lista todos os conjuntos de regras configurados em um repositório.

Os conjuntos de regras por repositório são uma configuração limitada, portanto o conjunto completo é retornado em uma única resposta e este endpoint não faz paginação. repository é içado (hoisted) uma vez e descreve o repositório compartilhado por cada conjunto de regras na resposta.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

Campos da resposta

rulesets matriz

Conjuntos de regras configurados no repositório.

rulesets[].id string

ID do conjunto de regras Stable Origin.

rulesets[].name string

Nome do conjunto de regras.

rulesets[].description string

Descrição do conjunto de regras.

rulesets[].enforcement string

Como o Origin aplica o conjunto de regras. Valores permitidos: active, evaluate, disabled.

rulesets[].kind string

A operação que o conjunto de regras protege. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

rulesets[].includedRefNames matriz

Padrões de nomes de refs incluídos neste conjunto de regras. Suporta globs e os tokens ~ALL e ~DEFAULT_BRANCH.

rulesets[].excludedRefNames matriz

Padrões de nomes de ref que este conjunto de regras exclui. Mesma linguagem de padrões que rulesets[].includedRefNames.

rulesets[].rules matriz

Regras de proteção neste conjunto de regras.

rulesets[].rules[].id string

ID de Origem Estável para esta regra.

rulesets[].rules[].ruleType string

Tipo de regra, por exemplo pull_request, require_status_checks, require_branch_up_to_date, deletion ou non_fast_forward.

rulesets[].rules[].parameters objeto

Parâmetros específicos do tipo em um objeto JSON. A estrutura depende de rulesets[].rules[].ruleType.

rulesets[].bypassActors matriz

Principais que podem contornar este conjunto de regras. Um agente de bypass cuja identidade armazenada não puder ser lida é omitido da resposta.

rulesets[].bypassActors[].id string

ID de origem estável para este ator de desvio.

rulesets[].bypassActors[].bypassMode string

Quando a exceção se aplica. Valores permitidos: always, pull_request_only.

rulesets[].bypassActors[].user objeto

Uma entidade principal de usuário. Exatamente um entre user, team, app ou originRole está presente.

rulesets[].bypassActors[].user.id string

ID numérico do usuário Cherri Code codificado como uma string decimal.

rulesets[].bypassActors[].team objeto

Um diretor de equipe.

rulesets[].bypassActors[].team.organizationPublicId string

ID público imutável da organização.

rulesets[].bypassActors[].team.groupPublicId string

ID público imutável do grupo.

rulesets[].bypassActors[].app objeto

Um app principal.

rulesets[].bypassActors[].app.id string

ID do app, com o prefixo app_.

rulesets[].bypassActors[].originRole objeto

Uma entidade principal com a função Origin.

rulesets[].bypassActors[].originRole.role string

Valores permitidos: namespace_admin, repository_admin, repository_write.

repository objeto

Repositório compartilhado por todos os conjuntos de regras nesta resposta.

repository.id string

Identificador do repositório em uma referência de contêiner.

repository.name string

Nome do repositório em uma referência de contêiner.

repository.owner objeto

Referência do proprietário do repositório.

repository.owner.slug string

Slug do proprietário visível na URL usado com o ID do proprietário para identificar o proprietário do repositório.

repository.owner.id string

Identificador do proprietário da origem.

repository.owner.type string

Tipo de namespace do proprietário. Somente de saída. Valores permitidos: team, user. Omitido quando desconhecido.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estrutura da resposta:

{  "rulesets": [    {      "id": "rs_01k2ja2000e0080000000000t7",      "name": "require-review",      "description": "Require an approving review before merging to main.",      "enforcement": "active",      "kind": "merge_branch",      "includedRefNames": [        "refs/heads/main"      ],      "rules": [        {          "id": "rsr_01k2ja2000e0080000000000v8",          "ruleType": "pull_request",          "parameters": {            "requiredApprovingReviewCount": 1          }        }      ],      "bypassActors": [        {          "id": "rsba_01k2ja2000e0080000000000w9",          "bypassMode": "always",          "user": {            "id": "act_01k2ja2000e0080000000000x0"          }        }      ]    }  ],  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  }}

Criar conjunto de regras

POST/v1/origin/repos/{ownerSlug}/{repoName}/rulesets
Scoperepository:rulesets:writeAuthInstallation tokenUser access token

Cria um conjunto de regras do repositório.

A resposta inclui o conjunto de regras armazenado, incluindo os IDs que o Origin atribui a cada regra e agente de bypass. Um name vazio é rejeitado com InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

Corpo da solicitação

name string Obrigatório

Nome do conjunto de regras.

descrição string

Descrição do conjunto de regras.

enforcement string Obrigatório

Como o Origin aplica o conjunto de regras. Valores permitidos: active, evaluate, disabled.

kind string Obrigatório

A operação que o conjunto de regras protege. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames matriz

Padrões de nomes de ref que este conjunto de regras inclui. Suporta globos e os tokens ~ALL e ~DEFAULT_BRANCH. Valores acima de 64 entradas são rejeitados com InvalidArgument (HTTP 400).

excludedRefNames matriz

Padrões de nomes de ref que este conjunto de regras exclui. Mesmo linguagem de padrões e limite de 64 entradas que includedRefNames.

rules matriz

Regras de proteção a serem armazenadas. Cada entrada contém ruleType e parameters opcionais; a Origin atribui o id de cada regra. Mais de 20 entradas são rejeitadas com InvalidArgument (HTTP 400).

bypassActors matriz

Principais de bypass a serem armazenados. Cada entrada contém bypassMode e exatamente um entre user, team, app ou originRole; o Origin atribui o id de cada ator. Valores acima de 15 entradas são rejeitados com InvalidArgument (HTTP 400).

Campos de resposta

id string

ID do conjunto de regras Stable Origin.

name string

Nome do conjunto de regras.

descrição string

Descrição do conjunto de regras.

enforcement string

Como o Origin aplica o conjunto de regras. Valores permitidos: active, evaluate, disabled.

kind string

A operação que o conjunto de regras protege. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames matriz

Padrões de nomes de ref que este conjunto de regras inclui. Suporta globs e os tokens ~ALL e ~DEFAULT_BRANCH.

excludedRefNames matriz

Padrões de nomes de ref que este conjunto de regras exclui. Mesma linguagem de padrões que includedRefNames.

rules matriz

Regras de proteção neste conjunto de regras.

rules[].id string

ID de origem estável para esta regra.

rules[].ruleType string

Tipo de regra, por exemplo, pull_request, require_status_checks, require_branch_up_to_date, deletion ou non_fast_forward.

rules[].parameters objeto

Parâmetros específicos do tipo em um objeto JSON. A estrutura depende de rules[].ruleType.

bypassActors matriz

Principais que podem contornar este conjunto de regras. Um agente de bypass cuja identidade armazenada não pode ser lida é omitido da resposta.

bypassActors[].id string

ID de Origem Estável para este ator de bypass.

bypassActors[].bypassMode string

Quando a exceção se aplica. Valores permitidos: always, pull_request_only.

bypassActors[].user objeto

Uma entidade principal de usuário. Exatamente um entre user, team, app ou originRole está presente.

bypassActors[].user.id string

ID numérico do usuário Cherri Code codificado como uma string decimal.

bypassActors[].equipe object

Um diretor de equipe.

bypassActors[].team.organizationPublicId string

ID público imutável da organização.

bypassActors[].team.groupPublicId string

ID público imutável do grupo.

bypassActors[].app objeto

Um app principal.

bypassActors[].app.id string

ID do app, com o prefixo app_.

bypassActors[].originRole objeto

Uma entidade principal com a função Origin.

bypassActors[].originRole.role string

Valores permitidos: namespace_admin, repository_admin, repository_write.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "name": "require-review",  "description": "Require an approving review before merging to main.",  "enforcement": "active",  "kind": "merge_branch",  "includedRefNames": [    "refs/heads/main"  ],  "rules": [    {      "ruleType": "pull_request",      "parameters": {        "requiredApprovingReviewCount": 1      }    }  ],  "bypassActors": [    {      "bypassMode": "always",      "user": {        "id": "act_01k2ja2000e0080000000000x0"      }    }  ]}'

Estrutura da resposta:

{  "id": "rs_01k2ja2000e0080000000000t7",  "name": "require-review",  "description": "Require an approving review before merging to main.",  "enforcement": "active",  "kind": "merge_branch",  "includedRefNames": [    "refs/heads/main"  ],  "rules": [    {      "id": "rsr_01k2ja2000e0080000000000v8",      "ruleType": "pull_request",      "parameters": {        "requiredApprovingReviewCount": 1      }    }  ],  "bypassActors": [    {      "id": "rsba_01k2ja2000e0080000000000w9",      "bypassMode": "always",      "user": {        "id": "act_01k2ja2000e0080000000000x0"      }    }  ]}

Obter conjunto de regras

GET/v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}
Scoperepository:rulesets:readAuthInstallation tokenUser access token

Retorna um conjunto de regras do repositório pelo ID estável da Origin.

Tanto um repositório desconhecido quanto um conjunto de regras desconhecido retornam 404; a mensagem permite diferenciá-los.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, único para a entidade proprietária.

rulesetId string Obrigatório

ID do conjunto de regras Stable Origin.

Campos de resposta

id string

ID do conjunto de regras Stable Origin.

name string

Nome do conjunto de regras.

description string

Descrição do conjunto de regras.

enforcement string

Como o Origin aplica o conjunto de regras. Valores permitidos: active, evaluate, disabled.

kind string

A operação que o conjunto de regras protege. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames matriz

Padrões de nomes de ref incluídos neste conjunto de regras. Oferece suporte a globs e aos tokens ~ALL e ~DEFAULT_BRANCH.

excludedRefNames matriz

Padrões de nomes de ref que este conjunto de regras exclui. Mesma linguagem de padrões que includedRefNames.

rules matriz

Regras de proteção neste conjunto de regras.

rules[].id string

ID de Origem Estável desta regra.

rules[].ruleType string

Tipo de regra, por exemplo pull_request, require_status_checks, require_branch_up_to_date, deletion ou non_fast_forward.

rules[].parameters object

Parâmetros específicos do tipo em um objeto JSON. A estrutura depende de rules[].ruleType.

bypassActors matriz

Principais que podem ignorar este conjunto de regras. Um agente que pode ignorar, cuja identidade armazenada não pode ser lida, é omitido da resposta.

bypassActors[].id string

ID de origem estável deste ator de bypass.

bypassActors[].bypassMode string

Quando a exceção se aplica. Valores permitidos: always, pull_request_only.

bypassActors[].user objeto

Uma entidade principal de usuário. Exatamente um entre user, team, app ou originRole está presente.

bypassActors[].user.id string

ID numérico do usuário Cherri Code codificado como uma string decimal.

bypassActors[].team objeto

Um chefe de equipe.

bypassActors[].team.organizationPublicId string

ID público imutável da organização.

bypassActors[].team.groupPublicId string

ID público imutável do grupo.

bypassActors[].app objeto

Uma entidade principal do app.

bypassActors[].app.id string

ID do app, com o prefixo app_.

bypassActors[].originRole objeto

Uma entidade principal com uma função Origin.

bypassActors[].originRole.role string

Valores permitidos: namespace_admin, repository_admin, repository_write.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets/RULESET_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato da resposta:

{  "id": "rs_01k2ja2000e0080000000000t7",  "name": "require-review",  "description": "Exigir uma revisão aprovada antes de mergear na main.",  "enforcement": "active",  "kind": "merge_branch",  "includedRefNames": [    "refs/heads/main"  ],  "rules": [    {      "id": "rsr_01k2ja2000e0080000000000v8",      "ruleType": "pull_request",      "parameters": {        "requiredApprovingReviewCount": 1      }    }  ],  "bypassActors": [    {      "id": "rsba_01k2ja2000e0080000000000w9",      "bypassMode": "always",      "user": {        "id": "act_01k2ja2000e0080000000x0"      }    }  ]}

Atualizar conjunto de regras

PUT/v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}
Scoperepository:rulesets:writeAuthInstallation tokenUser access token

Atualiza um conjunto de regras do repositório existente.

A solicitação substitui toda a configuração do conjunto de regras. rules e bypassActors são substituídos integralmente, em vez de serem mesclados, e o Origin atribui novos IDs às entradas armazenadas. Portanto, envie todas as regras e todos os atores de bypass que deseja manter.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo para a entidade proprietária.

rulesetId string Obrigatório

ID do conjunto de regras de origem estável.

Corpo da solicitação

name string Obrigatório

Nome do conjunto de regras.

description string

Descrição do conjunto de regras.

enforcement string Obrigatório

Como o Origin aplica o conjunto de regras. Valores permitidos: active, evaluate, disabled.

kind string Obrigatório

A operação que o conjunto de regras protege. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames matriz

Padrões de nomes de ref incluídos neste conjunto de regras. Suporta globs e os tokens ~ALL e ~DEFAULT_BRANCH. Valores acima de 64 entradas são rejeitados com InvalidArgument (HTTP 400).

excludedRefNames matriz

Padrões de nomes de referência que este conjunto de regras exclui. Mesma linguagem de padrões e limite de 64 entradas que includedRefNames.

rules matriz

Regras de proteção a serem armazenadas. Cada item contém ruleType e parameters opcionais; a Origin atribui o id de cada regra. Valores acima de 20 entradas são rejeitados com InvalidArgument (HTTP 400).

bypassActors matriz

Principais a ignorar para armazenamento. Cada item contém bypassMode e exatamente um entre user, team, app ou originRole; a Origin atribui o id de cada ator. Valores acima de 15 itens são rejeitados com InvalidArgument (HTTP 400).

Campos da resposta

id string

ID do conjunto de regras Stable Origin.

name string

Nome do conjunto de regras.

description string

Descrição do conjunto de regras.

enforcement string

Como o Origin aplica o conjunto de regras. Valores permitidos: active, evaluate, disabled.

kind string

A operação que o conjunto de regras protege. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames matriz

Padrões de nomes de ref incluídos neste conjunto de regras. Suporta globs e os tokens ~ALL e ~DEFAULT_BRANCH.

excludedRefNames matriz

Padrões de nomes de ref que este conjunto de regras exclui. Mesma linguagem de padrões que includedRefNames.

rules matriz

Regras de proteção neste conjunto de regras.

rules[].id string

ID de Origem Estável para esta regra.

rules[].ruleType string

Tipo de regra, por exemplo pull_request, require_status_checks, require_branch_up_to_date, deletion ou non_fast_forward.

rules[].parameters objeto

Parâmetros específicos do tipo em um objeto JSON. A estrutura depende de rules[].ruleType.

bypassActors matriz

Identidades que podem ignorar este conjunto de regras. Um ator com permissão para ignorá-lo cuja identidade armazenada não possa ser lida é omitido da resposta.

bypassActors[].id string

ID de origem estável para este ator de desvio.

bypassActors[].bypassMode string

Quando a exceção é aplicável. Valores permitidos: always, pull_request_only.

bypassActors[].user objeto

Uma identidade de usuário. Apenas um entre user, team, app ou originRole está presente.

bypassActors[].user.id string

ID numérico do usuário do Cherri Code codificado como uma string decimal.

bypassActors[].team objeto

Um chefe de equipe.

bypassActors[].team.organizationPublicId string

ID público imutável da organização.

bypassActors[].team.groupPublicId string

ID público imutável do grupo.

bypassActors[].app objeto

Uma entidade principal do app.

bypassActors[].app.id string

ID do app, com o prefixo app_.

bypassActors[].originRole objeto

Uma entidade principal com uma função de Origin.

bypassActors[].originRole.role string

Valores permitidos: namespace_admin, repository_admin, repository_write.
curl --request PUT \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets/RULESET_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "name": "require-review",  "description": "Exigir uma revisão aprovadora antes de mesclar para main.",  "enforcement": "active",  "kind": "merge_branch",  "includedRefNames": [    "refs/heads/main"  ],  "rules": [    {      "ruleType": "pull_request",      "parameters": {        "requiredApprovingReviewCount": 1      }    }  ],  "bypassActors": [    {      "bypassMode": "always",      "user": {        "id": "act_01k2ja2000e0080000000000x0"      }    }  ]}'

Formato da resposta:

{  "id": "rs_01k2ja2000e0080000000000t7",  "name": "require-review",  "description": "Exige uma revisão aprovada antes de mergear na main.",  "enforcement": "active",  "kind": "merge_branch",  "includedRefNames": [    "refs/heads/main"  ],  "rules": [    {      "id": "rsr_01k2ja2000e0080000000000v8",      "ruleType": "pull_request",      "parameters": {        "requiredApprovingReviewCount": 1      }    }  ],  "bypassActors": [    {      "id": "rsba_01k2ja2000e0080000000000w9",      "bypassMode": "always",      "user": {        "id": "act_01k2ja2000e0080000000000x0"      }    }  ]}

Excluir conjunto de regras

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}
Scoperepository:rulesets:writeAuthInstallation tokenUser access token

Exclui um conjunto de regras do repositório pelo ID estável do Origin. O corpo da resposta fica vazio.

Um repositório desconhecido e um conjunto de regras desconhecido retornam 404; a mensagem permite diferenciá-los. Um conjunto de regras armazenado em outro repositório é tratado como desconhecido. Um rulesetId vazio retorna InvalidArgument (HTTP 400).

Parâmetros de caminho

ownerSlug string Obrigatório

Slug exclusivo da entidade proprietária.

repoName string Obrigatório

Nome do repositório, exclusivo da entidade proprietária.

rulesetId string Obrigatório

ID estável do conjunto de regras do Origin.

Campos de resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets/RULESET_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Autoridades de certificação SSH

Uma autoridade de certificação SSH é uma chave pública em que um proprietário confia: os certificados de usuário assinados por ela autenticam o git via SSH nos repositórios do proprietário, permitindo que os membros da equipe proprietária usem git via SSH sem registrar uma chave SSH. Estes endpoints listam as autoridades em que um proprietário confia, adicionam e removem autoridades e definem se o proprietário exige certificados. As autoridades pertencem a proprietários do tipo equipe, e a verificação de duplicidade ao adicionar se restringe ao proprietário, e não ao Origin como um todo. Assim, mais de um proprietário pode confiar na mesma autoridade.

A listagem aceita tokens de instalação e de usuário. Para adicionar e remover autoridades e definir a exigência, é necessária uma credencial de usuário do Cherri Code com namespace:settings:write. Tokens de app e de instalação não são aceitos.

Listar autoridades certificadoras SSH

GET/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities
Scopenamespace:settings:readAuthInstallation tokenUser access token

Lista as autoridades certificadoras SSH em que um proprietário confia para git via SSH, das mais recentes para as mais antigas, e indica se o proprietário exige certificados. A resposta não é paginada: todas as autoridades são retornadas.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug do proprietário cujas autoridades serão listadas.

Campos de resposta

certificateAuthorities array

Todas as autoridades em que o proprietário confia, das mais recentes para as mais antigas.

certificateAuthorities[].id string

Identificador da autoridade; usado como certificateAuthorityId em Excluir autoridade certificadora SSH.

certificateAuthorities[].name string

Rótulo definido quando a autoridade foi adicionada.

certificateAuthorities[].keyType string

Tipo de chave OpenSSH da chave pública da autoridade, por exemplo, ssh-ed25519.

certificateAuthorities[].fingerprint string

Impressão digital SHA-256 da chave pública no formato SHA256:<base64>, o mesmo exibido por ssh-keygen -l.

certificateAuthorities[].publicKey string

Chave pública da autoridade no formato <key_type> <base64>, sem comentário.

certificateAuthorities[].createdAt string

Timestamp RFC 3339 de quando a autoridade foi adicionada.

requireCertificates boolean

Indica se o proprietário exige certificados SSH; consulte Definir exigência de certificado SSH.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/owners/OWNER_SLUG/ssh-certificate-authorities' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Formato de resposta:

{  "certificateAuthorities": [    {      "id": "nsca_01k2ja2000e0080000000000s5",      "name": "Acme production CA",      "keyType": "ssh-ed25519",      "fingerprint": "SHA256:D5vlIclvaSZlwq4gmckavfLE7n7F542Eyhk/PvXkRq0",      "publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPwoQNzBuiWhDF4EKwRyt8h48XRY7Bc4yWbQ9s3Tnj7Q",      "createdAt": "2026-08-02T14:45:00Z"    }  ],  "requireCertificates": true}

Adicionar autoridade de certificação SSH

POST/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities
Scopenamespace:settings:writeAuthUser access token

Adiciona uma autoridade de certificação SSH confiável para o proprietário e a retorna. Depois disso, os membros da equipe proprietária podem usar git via SSH nos repositórios do proprietário com certificados de usuário assinados pela autoridade, sem precisar registrar uma chave SSH.

publicKey é a chave pública da própria autoridade, informada como uma linha de authorized_keys do OpenSSH. Um certificado, um tipo de chave não compatível ou uma chave RSA com menos de 2048 bits retorna InvalidArgument (HTTP 400). Uma chave que já está na lista do proprietário retorna AlreadyExists (HTTP 409 Conflict); a verificação se restringe ao proprietário, então mais de um proprietário pode confiar na mesma autoridade. Autoridades só podem ser adicionadas a proprietários que pertencem a uma equipe; qualquer outro proprietário retorna FailedPrecondition (HTTP 400).

O chamador deve ser uma credencial de usuário do Cherri Code com namespace:settings:write. Tokens de app e tokens de acesso da instalação não são aceitos.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug do proprietário.

Corpo da solicitação

publicKey string Obrigatório

A chave pública da autoridade como uma linha de authorized_keys do OpenSSH (<key_type> <base64> [comment]). Os tipos de chave aceitos são ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521 e ssh-rsa com módulo de pelo menos 2048 bits. Certificados não são aceitos.

name string Obrigatório

Rótulo da autoridade, com no máximo 255 caracteres.

Campos de resposta

id string

Identificador da autoridade; é usado como certificateAuthorityId em Excluir autoridade de certificação SSH.

name string

Rótulo atribuído quando a autoridade foi adicionada.

keyType string

Tipo de chave OpenSSH da chave pública da autoridade, por exemplo, ssh-ed25519.

fingerprint string

Impressão digital SHA-256 da chave pública no formato SHA256:<base64>, o mesmo exibido por ssh-keygen -l.

publicKey string

A chave pública da autoridade no formato <key_type> <base64>, sem comentário.

createdAt string

Timestamp RFC 3339 de quando a autoridade foi adicionada.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/owners/OWNER_SLUG/ssh-certificate-authorities' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPwoQNzBuiWhDF4EKwRyt8h48XRY7Bc4yWbQ9s3Tnj7Q acme-ssh-ca",  "name": "Acme production CA"}'

Formato de resposta:

{  "id": "nsca_01k2ja2000e0080000000000s5",  "name": "Acme production CA",  "keyType": "ssh-ed25519",  "fingerprint": "SHA256:D5vlIclvaSZlwq4gmckavfLE7n7F542Eyhk/PvXkRq0",  "publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPwoQNzBuiWhDF4EKwRyt8h48XRY7Bc4yWbQ9s3Tnj7Q",  "createdAt": "2026-08-02T14:45:00Z"}

Excluir autoridade de certificação SSH

DELETE/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities/{certificateAuthorityId}
Scopenamespace:settings:writeAuthUser access token

Remove uma autoridade de certificação SSH do proprietário. Todos os certificados assinados por essa autoridade deixam de funcionar. Enquanto o proprietário exigir certificados, a última autoridade dele não pode ser removida; nesse caso, a solicitação retorna FailedPrecondition (HTTP 400). O corpo da resposta é vazio.

O chamador deve ser uma credencial de usuário do Cherri Code com namespace:settings:write. Tokens de app e de instalação não são aceitos.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug do proprietário.

certificateAuthorityId string Obrigatório

id da autoridade a ser removida.

Campos de resposta

Solicitações bem-sucedidas não retornam corpo da resposta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/owners/OWNER_SLUG/ssh-certificate-authorities/CERTIFICATE_AUTHORITY_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Resposta:

204 No Content

Definir exigência de certificado SSH

POST/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities:setRequirement
Scopenamespace:settings:writeAuthUser access token

Define se o proprietário exige certificados SSH e retorna a configuração do proprietário. Enquanto a exigência estiver ativa, o git via SSH nos repositórios do proprietário só aceita certificados emitidos pelas autoridades do proprietário: chaves SSH registradas por usuários são recusadas, assim como chaves de API de usuário via HTTPS. Para exigir certificados, é necessário ter pelo menos uma autoridade cadastrada; caso contrário, a solicitação retorna FailedPrecondition (HTTP 400). Definir o valor atual é bem-sucedido e não gera nenhuma alteração.

O chamador deve ser uma credencial de usuário do Cherri Code com namespace:settings:write. Tokens de app e de instalação não são aceitos.

Parâmetros de caminho

ownerSlug string Obrigatório

Slug do proprietário.

Corpo da solicitação

requireCertificates boolean Obrigatório

True para exigir certificados SSH nos repositórios do proprietário; false para deixar de exigi-los.

Campos de resposta

requireCertificates boolean

Indica se o proprietário exige certificados SSH para git via SSH.
curl --request POST \  --url 'https://api.cursor.com/v1/origin/owners/OWNER_SLUG/ssh-certificate-authorities:setRequirement' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN' \  --header 'Content-Type: application/json' \  --data '{  "requireCertificates": true}'

Formato de resposta:

{  "requireCertificates": true}

Webhooks

O Origin envia solicitações HTTP POST assinadas para a URL HTTPS de webhook registrada do app, com content-type: application/json.

A entrega é feita pelo menos uma vez. Elimine duplicatas de tentativas usando webhook-id, aceite a solicitação de forma durável, retorne 2xx rapidamente e processe o evento de forma assíncrona.

O Origin aguarda 10 segundos pelos cabeçalhos de resposta do destinatário. Esse prazo cobre a resolução de DNS, a conexão, o handshake TLS e o tempo até a resposta, e se aplica a cada tentativa. Uma tentativa que exceda esse prazo é registrada como erro de transporte e repetida conforme o cronograma de Tentativas. Falhas repetidas podem desativar a entrega automaticamente.

Para confirmar que um destinatário funciona antes que qualquer evento real o alcance, chame Ping Webhook.

O Origin entrega eventos para repositórios espelhados, e os payloads de eventos de instalação os listam nas matrizes de repositórios selecionados. A entrega não amplia o que a instalação pode chamar: consulte Repositórios espelhados.

Cabeçalhos

CabeçalhoDescrição
content-typeapplication/json
user-agentCherri Code-Origin-Webhook/1.0
webhook-idID de entrega estável e chave de idempotência.
webhook-timestampTimestamp Unix incluído na assinatura.
webhook-signaturev1ed,BASE64_SIGNATURE
webhook-event-typeSlug do evento para roteamento.
webhook-event-idID do evento Origin subjacente, espelhado do corpo assinado.
webhook-app-idID do app de destino.
webhook-installation-idID da instalação de destino.

Os cabeçalhos de roteamento são apenas conveniências. Após a verificação da assinatura, o corpo é a fonte oficial.

Verificação de assinatura

Use o corpo bruto da solicitação antes de processá-lo. Crie:

lowercaseHex(SHA-256("<webhook-id>.<webhook-timestamp>.<raw-request-body>"))

Verifique a assinatura Ed25519 dos bytes UTF-8 desse resumo hexadecimal usando uma chave JWKS ativa da Origin. Rejeite timestamps que estejam a mais de cinco minutos do horário atual.

As bibliotecas do Standard Webhooks não verificam as entregas da Origin. Os cabeçalhos usam os nomes do Standard Webhooks, mas a Origin assina o resumo SHA-256 em vez do próprio conteúdo assinado, com uma tag de versão v1ed que não está definida na especificação do Standard Webhooks. Faça a verificação com a construção acima, como no exemplo a seguir.

import {  createHash,  createPublicKey,  verify,  type JsonWebKeyInput,} from "node:crypto";export async function verifyOriginWebhook(  body: Buffer,  headers: Record<string, string | undefined>): Promise<boolean> {  const id = headers["webhook-id"];  const timestamp = Number(headers["webhook-timestamp"]);  const signature = headers["webhook-signature"]    ?.split(/\s+/)    .find((value) => value.startsWith("v1ed,"));  const now = Math.floor(Date.now() / 1000);  if (    !id ||    !signature ||    !Number.isInteger(timestamp) ||    Math.abs(now - timestamp) > 300  ) {    return false;  }  const digest = createHash("sha256")    .update(`${id}.${timestamp}.`)    .update(body)    .digest("hex");  // Em produção, mantenha esta resposta em cache.  const { keys } = await fetch(    "https://api.cursor.com/v1/origin/keys"  ).then((response) => response.json()) as {    keys: JsonWebKeyInput[];  };  return keys.some((jwk) => {    try {      return verify(        null,        Buffer.from(digest),        createPublicKey({ key: jwk, format: "jwk" }),        Buffer.from(signature.slice(5), "base64")      );    } catch {      return false;    }  });}

Envelope de entrega

Cada solicitação encapsula o payload do evento com as informações de identificação da entrega, do app e da instalação:

{  "deliveryId": "whd_01...",  "appId": "app_01...",  "installationId": "i_01...",  "event": {    "id": "evt_01...",    "type": "pull_request.comment.created",    "eventTime": "2026-07-01T10:03:00Z",    "payload": {}  }}

deliveryId permanece estável entre as tentativas. event.id identifica o evento de domínio subjacente.

Tentativas

O Origin tenta novamente em caso de erros de transporte e respostas 429 e 5xx, em até sete tentativas no total. Outras respostas 4xx são definitivas.

A primeira tentativa é o envio original. As seis tentativas seguintes aguardam 5 segundos, 30 segundos, 1 minuto, 2 minutos, 4 minutos e 8 minutos, nessa ordem.

Um destinatário que falhe em todas as tentativas recebe sete POSTs ao longo de cerca de 16 minutos. O webhook-id permanece o mesmo em todas as tentativas. Elimine duplicatas com base nele.

Desativação automática

O proprietário pode pausar a entrega de webhooks de um app nas configurações do app. O Origin também a desativa por conta própria quando o destinatário falha em pelo menos 20 rodadas de entrega dentro de uma janela de 72 horas, sem nenhuma entrega bem-sucedida nesse período, e as falhas atingem mais de um namespace instalador.

A entrega fica interrompida até que um proprietário a retome. Batch Redeliver Webhook Deliveries retorna FailedPrecondition (HTTP 400) e não enfileira nada. A API não expõe nenhum campo para o estado pausado, então use esse FailedPrecondition como sinal.

Limpar o webhookUrl do app por meio de Update App é uma ação à parte. Isso cancela as entregas pendentes, e definir uma URL novamente não as traz de volta.

Recuperação

Use um JWT do app para consultar GET /app/webhook/deliveries. Filtre por status da entrega, tipo de evento, instalação, intervalo de tempo ou token de página. delivered=false retorna todas as entregas que o destinatário ainda não confirmou com 2xx. As entregas permanecem listáveis por sete dias, então recupere dentro desse período.

Use POST /app/webhook/deliveries:batchRedeliver para enfileirar a reentrega de até 100 IDs de entrega. A operação elimina IDs duplicados e informa o resultado de cada entrega. Um app pausado ou desativado automaticamente rejeita a chamada com FailedPrecondition (HTTP 400) e não enfileira nada.

Referência de webhooks

Todos os eventos que o Origin entrega, com o payload de cada evento documentado campo a campo. Para detalhes sobre o funcionamento da assinatura, cabeçalhos, verificação de assinatura, o envelope de entrega, o cronograma de tentativas e a desativação automática, consulte Webhooks.

Eventos

EventoEntregue quando
repository.createdUm repositório é criado.
repository.deletedUm repositório é excluído.
repository.pushedUma ou mais referências do Git são alteradas em um push.
repository.metadata.updatedO branch padrão de um repositório é alterado.
pull_request.createdUma pull request é aberta.
pull_request.head_ref.pushedA head da pull request avança.
pull_request.base_ref.updatedA referência base ou o commit base resolvido é alterado.
pull_request.metadata.updatedO título ou a descrição é alterado.
pull_request.closedUma pull request é fechada sem ser mergeada, inclusive quando o Origin a fecha porque um push deixou sua head sem histórico em comum com sua base.
pull_request.mergedUma pull request é mergeada.
pull_request.reopenedUma pull request fechada é reaberta.
pull_request.publishedUma pull request em rascunho é aberta.
pull_request.label.addedUm rótulo é atribuído a uma pull request.
pull_request.label.removedUm rótulo deixa de estar atribuído a uma pull request, inclusive quando a definição do rótulo é excluída.
pull_request.comment.createdUm comentário visível em uma pull request é criado.
pull_request.comment.reaction.addedUma reação é adicionada a um comentário de pull request. Adicionar novamente uma reação que o usuário já possui entrega este evento novamente.
pull_request.comment.reaction.removedUma reação é removida de um comentário de pull request. Remover uma reação que o usuário não possui não entrega nada.
pull_request.review.submittedUma revisão é enviada com qualquer veredito.
pull_request.review.dismissedUma revisão enviada é descartada, explicitamente ou por ser substituída.
pull_request.reviewer.addedUm revisor é solicitado.
pull_request.reviewer.removedUm revisor é removido.
pull_request.reviewer.rerequestedUm revisor é solicitado novamente.
repository.check_run.createdUma execução de verificação é criada.
repository.check_run.completedUma execução de verificação é concluída.
repository.check_run.rerequestedUma execução de verificação concluída é solicitada novamente. Entregue apenas ao app que é dono da execução.
installation.createdO app é instalado.
installation.updatedOs escopos, a seleção de repositório ou o slug do namespace do proprietário são alterados.
installation.suspendedA instalação é suspensa.
installation.unsuspendedUma instalação suspensa é restaurada.
installation.deletedO app é desinstalado.

O formato do payload de cada evento está documentado campo por campo em Payloads de eventos.

Os cinco eventos installation.* são enviados ao próprio app, e não a uma assinatura de repositório. O Origin sempre os envia, portanto eles não aparecem na lista de eventos selecionáveis do app. Todos os outros eventos desta tabela são assinaturas com escopo de repositório.

Um app novo não vem inscrito em nenhum dos eventos com escopo de repositório. Selecione os de que você precisa nas configurações do app ou defina-os com o campo events de Create App ou Update App. O Origin só entrega um evento a apps inscritos nele que tenham uma URL de webhook definida e cuja instalação abranja o repositório e tenha o escopo exigido pelo evento. Caso contrário, não há entrega nem erro: nada é enviado e nada aparece em List Webhook Deliveries.

O Origin não envia repository.pushed para um repositório que ele espelha do GitHub. Esses pushes pertencem ao GitHub, que envia seus próprios webhooks de push, então uma entrega do Origin os duplicaria. Pushes para repositórios nativos do Origin e para espelhos de saída são enviados normalmente, e o estado de espelhamento não afeta nenhum outro evento. O repository.deleted é enviado para um repositório espelhado do GitHub: interromper a sincronização exclui apenas o repositório do lado do Cherri Code, e o GitHub não envia nada para ele.

Payloads de eventos

O envelope de entrega de cada evento carrega o objeto de payload do evento em payload. Eventos com o mesmo formato pertencem à mesma família de payload; cada família abaixo documenta os eventos que a entregam, seus campos e um payload de exemplo, gerados a partir da especificação OpenAPI. Na especificação, a extensão x-origin-webhook-events de cada schema de payload lista os eventos que o entregam.

Repositório criado

EVENTOrepository.created

Campos do payload

repository object

O repositório criado.

repository.id string

repository.name string Obrigatório

O nome do repositório, único para seu owner. Obrigatório na criação.

repository.fullName string

"{owner.login}/{name}". Derivado.

repository.owner object

A entidade proprietária. Determinada pelo parent na criação; não pode ser definida diretamente.

repository.owner.slug string

Nome único do owner, compatível com URL.

repository.owner.id string

ID único do namespace do owner.

repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

repository.defaultBranch string

Nome da branch padrão. Sempre definido nas responses. No create, omitir este campo ou deixá-lo vazio assume o valor padrão "main".

repository.createdAt string

Timestamp no formato RFC 3339.

repository.updatedAt string

Timestamp no formato RFC 3339.

repository.pushedAt string

Timestamp do push mais recente em qualquer branch; ausente até o primeiro push. Timestamp no formato RFC 3339.

repository.cloneUrl string

URL HTTPS para clonar o repositório.

repository.mirror object

Metadados do espelho. Ausente para repositórios nativos e antes de a sincronização inicial de um espelho estar concluída.

repository.mirror.source string

Um dos seguintes: github.

repository.mirror.sourceId string

Identificador opaco do repositório atribuído pela origem.

repository.mirror.status string

Direção efetiva durante uma transição, até a conclusão do cutover. Um dos valores: inbound, outbound.

repository.visibility string

Visibilidade do repositório, internal ou private. Um dos valores: internal, private.

repository.allowMergeCommit boolean

Se pull requests podem ser integrados como merge commits.

repository.allowSquashMerge boolean

Se pull requests podem ser integrados como squash merges.

repository.deleteBranchOnMerge boolean

Se a head branch é excluída automaticamente ao mergear.

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "fullName": "acme/rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "defaultBranch": "main",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-01T09:30:00Z",    "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git"  }}

Repositório excluído

EVENTrepository.deleted

Campos do payload

repository object

O repositório que foi excluído. Apenas uma referência: após a exclusão, o repositório não é mais resolvido pela API.

repository.id string

repository.name string

repository.owner object

O proprietário de um repositório.

repository.owner.slug string

Nome único e compatível com URL do proprietário.

repository.owner.id string

ID único do namespace do proprietário.

repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

deletedAt string

Quando o repositório foi excluído. Timestamp RFC 3339.

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "deletedAt": "2026-08-03T08:15:00Z"}

Push no repositório

EVENTrepository.pushed

Um push atômico, que pode atualizar várias referências do Git. Não há matriz de commits; cada atualização de referência traz apenas metadados da ponta, em regime de melhor esforço.

Campos do payload

repository object

O repositório de destino do push.

repository.id string

repository.name string

repository.owner object

O owner de um repositório.

repository.owner.slug string

Nome único do owner, compatível com URL.

repository.owner.id string

ID único do namespace do owner.

repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

refUpdates matriz

Referências do Git incluídas neste push, limitadas a 100.

refUpdates[].ref string

A referência do Git completa que sofreu push. Exemplo: refs/heads/main ou refs/tags/v3.14.1.

refUpdates[].before string

O SHA do commit mais recente em ref antes do push. Formado só por zeros (0000000000000000000000000000000000000000) quando a ref acabou de ser criada.

refUpdates[].after string

O SHA do commit mais recente em ref após o push. Contém apenas zeros (0000000000000000000000000000000000000000) quando a ref foi excluída.

refUpdates[].created boolean

Se este push criou a ref.

refUpdates[].deleted boolean

Se este push excluiu a ref.

refUpdates[].forced boolean

Indica se este push reescreveu o histórico: uma atualização non-fast-forward de um ref existente (a nova ponta não é descendente da ponta antiga). Falso para criações e exclusões de ref, atualizações fast-forward e pushes observados antes de o Origin passar a rastrear o status de force-push.

refUpdates[].headCommit object

Metadados de melhor esforço do commit na nova ponta resolvida. Não definido para exclusões, referências que não sejam commits, pushes históricos e falhas de extração.

refUpdates[].headCommit.sha string

refUpdates[].headCommit.author object

Identidade Git e timestamp do autor ou committer de um commit. Essa é a identidade registrada no objeto do commit, não uma conta de usuário vinculada.

refUpdates[].headCommit.author.name string

refUpdates[].headCommit.author.email string

refUpdates[].headCommit.author.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da signature do git (ex.: "2014-11-07T22:01:45+01:00").

refUpdates[].headCommit.committer object

Identidade Git e data e hora do autor ou responsável pelo commit. Essa é a identidade registrada no objeto do commit, não uma conta de usuário vinculada.

refUpdates[].headCommit.committer.name string

refUpdates[].headCommit.committer.email string

refUpdates[].headCommit.committer.date string

Timestamp ISO-8601 que preserva o deslocamento de fuso horário original da signature do git (ex.: "2014-11-07T22:01:45+01:00").

refUpdates[].headCommit.message string

pushedAt string

Quando o Origin detectou o push. Timestamp RFC 3339.

pusher object

O principal que realizou o push, conforme verificado pelo Origin. Ausente quando o próprio Origin realizou o push, como no push de merge que avança a referência base quando uma pull request é mesclada.

pusher.user object

pusher.user.id string

pusher.user.email string Obrigatório

pusher.user.displayName string

Nome de exibição legível por pessoas: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

pusher.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver publicamente visível; omitido para usuários sem handle reivindicado e para perfis não públicos.

pusher.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, identifica o app que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

pusher.user.performedVia.app objeto

O app que agiu em nome do usuário.

pusher.user.performedVia.app.id string

pusher.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

pusher.app objeto

pusher.app.id string

pusher.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser identificado e no ator de fachada próprio do Cherri Code.

pusher.serviceAccount objeto

pusher.serviceAccount.id string

refUpdatesCount integer

Número de atualizações de refs no push atômico. ref_updates pode ser menor quando o produtor limitar a lista.

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "refUpdates": [    {      "ref": "refs/heads/add-telemetry",      "before": "5c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d",      "after": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "created": false,      "deleted": false,      "forced": false,      "headCommit": {        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "author": {          "name": "Jane Doe",          "email": "[email protected]",          "date": "2026-08-01T09:30:00Z"        },        "committer": {          "name": "Jane Doe",          "email": "[email protected]",          "date": "2026-08-01T09:30:00Z"        },        "message": "Add launch telemetry"      }    }  ],  "pushedAt": "2026-08-02T14:45:00Z",  "pusher": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "refUpdatesCount": 1}

Metadados do repositório atualizados

EVENTrepository.metadata.updated

Contém o snapshot completo do repositório, sem delta e sem actor de atualização. Compare snapshots sucessivos ou consulte o repositório novamente para ver o que mudou.

Campos do payload

repository object

O snapshot completo do repositório após a atualização.

repository.id string

repository.name string Obrigatório

O nome do repositório, único para seu proprietário. Obrigatório na criação.

repository.fullName string

"{owner.login}/{name}". Derivado.

repository.owner object

A entidade proprietária. Determinada pelo parent na criação; não pode ser definida diretamente.

repository.owner.slug string

Nome único do owner, compatível com URL.

repository.owner.id string

ID único do namespace do proprietário.

repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

repository.defaultBranch string

Nome da branch padrão. Sempre definido nas responses. Na criação, se este campo for omitido ou deixado vazio, o valor padrão é "main".

repository.createdAt string

Timestamp no formato RFC 3339.

repository.updatedAt string

Timestamp no formato RFC 3339.

repository.pushedAt string

Timestamp do push mais recente em qualquer branch; ausente até o primeiro push. Timestamp no formato RFC 3339.

repository.cloneUrl string

URL HTTPS para clonar o repositório.

repository.mirror object

Metadados do espelho. Ausente para repositórios nativos e antes de a sincronização inicial do espelho estar pronta.

repository.mirror.source string

Um dentre: github.

repository.mirror.sourceId string

Identificador opaco do repositório atribuído pela origem.

repository.mirror.status string

Direção efetiva durante uma transição, até a conclusão do cutover. Um destes: inbound, outbound.

repository.visibility string

Visibilidade do repositório, internal ou private. Um destes: internal, private.

repository.allowMergeCommit boolean

Se pull requests podem ser integrados como merge commits.

repository.allowSquashMerge boolean

Define se pull requests podem ser integrados como squash merges.

repository.deleteBranchOnMerge boolean

Se a head branch é excluída automaticamente ao mergear.

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "fullName": "acme/rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "defaultBranch": "release",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-03T08:15:00Z",    "cloneUrl": "https://origin.cursor.com/git/acme/rocket.git",    "pushedAt": "2026-08-02T14:45:00Z"  }}

Eventos de pull request

EVENTpull_request.createdpull_request.publishedpull_request.reopenedpull_request.closedpull_request.mergedpull_request.metadata.updatedpull_request.head_ref.pushedpull_request.base_ref.updatedpull_request.stack_parent.updated

Uma alteração no ciclo de vida de um pull request. A ação do ciclo de vida é o event.type do envelope; não existe um campo de ação separado.

Campos do payload

pullRequest object

O snapshot do pull request. Os rótulos atribuídos são omitidos; leia-os com GetPullRequest.

pullRequest.id string

Identificador estável do pull request no Origin.

pullRequest.number string

Número do pull request dentro do respectivo repositório.

pullRequest.state string

"open" ou "closed". Um rascunho é "open"; pull requests mesclados e fechados são ambos "closed".

pullRequest.draft boolean

Se o pull request ainda está em rascunho.

pullRequest.merged boolean

Se o pull request foi mesclado.

pullRequest.title string

Título do pull request.

pullRequest.body string

Descrição do pull request.

pullRequest.head object

O lado de origem do pull request — o que está sendo mesclado.

pullRequest.head.ref string

O ref para o qual este lado aponta, conforme registrado pelo Origin.

pullRequest.head.sha string

SHA do commit mais recente deste lado na versão mais recente da alteração. Para base, este é o base_sha da versão, que pode estar atrás do commit mais recente do branch (consulte PullRequestVersion).

pullRequest.base object

O lado de destino do pull request — aquilo em que ele é incorporado.

pullRequest.base.ref string

O ref para o qual este lado aponta, conforme registrado pelo Origin.

pullRequest.base.sha string

SHA do commit mais recente deste lado na versão mais recente da alteração. Para base, este é o base_sha da versão, que pode estar atrás do commit mais recente do branch (consulte PullRequestVersion).

pullRequest.author object

O principal que abriu o pull request.

pullRequest.author.user object

pullRequest.author.user.id string

pullRequest.author.user.email string Obrigatório

pullRequest.author.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do ID ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

pullRequest.author.user.handle string

O nome de usuário reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um nome de usuário reivindicado e para perfis não públicos.

pullRequest.author.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, identifica o app que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

pullRequest.author.user.performedVia.app object

O app que agiu em nome do usuário.

pullRequest.author.user.performedVia.app.id string

pullRequest.author.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser identificado e no ator de fachada próprio do Cherri Code.

pullRequest.author.app object

pullRequest.author.app.id string

pullRequest.author.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser identificado e no ator de fachada próprio do Cherri Code.

pullRequest.author.serviceAccount object

pullRequest.author.serviceAccount.id string

pullRequest.createdAt string

Quando o pull request foi aberto. Timestamp RFC 3339.

pullRequest.updatedAt string

Quando o pull request foi atualizado pela última vez. Carimbo de data e hora RFC 3339.

pullRequest.closedAt string

Quando o pull request foi fechado ou mesclado; fica sem valor enquanto estiver aberto. Carimbo de data e hora RFC 3339.

pullRequest.mergedAt string

Quando a pull request foi mesclada; permanece indefinido se não tiver sido mesclada. Data e hora no formato RFC 3339.

pullRequest.mergeCommitSha string

SHA do commit que o merge gravou na branch base; definido após o merge e sem valor antes dele. A prévia antes do merge é a ref pull/\<number>/merge (consulte GetGitRef), um commit diferente.

pullRequest.additions integer

Linhas adicionadas pela versão mais recente do pull request.

pullRequest.deletions integer

Linhas excluídas pela versão mais recente do pull request.

pullRequest.changedFiles integer

Arquivos alterados pela versão mais recente do pull request.

pullRequest.stack object

Associação à stack. Sem valor quando o pull request não faz parte de uma stack.

pullRequest.stack.id string

Identificador estável da stack. Passe-o como stack_id para ListPullRequests a fim de listar os membros da stack.

pullRequest.stack.parentPullRequest object

O pull request sobre o qual este está empilhado. Deixe em branco para a raiz da pilha. Um pull request pai mesclado continua sendo referenciado até que o filho seja redirecionado ou tenha o pai alterado.

pullRequest.stack.parentPullRequest.id string

ID imutável da alteração no Origin.

pullRequest.stack.parentPullRequest.number string

pullRequest.stack.parentPullRequest.repository object

Referência do repositório para este pull request.

pullRequest.stack.parentPullRequest.repository.id string

pullRequest.stack.parentPullRequest.repository.name string

pullRequest.stack.parentPullRequest.repository.owner object

O proprietário de um repositório.

pullRequest.stack.parentPullRequest.repository.owner.slug string

Nome único e compatível com URL do proprietário.

pullRequest.stack.parentPullRequest.repository.owner.id string

ID único do namespace do proprietário.

pullRequest.stack.parentPullRequest.repository.owner.type string

team ou user. Disponível apenas na saída; sem valor quando desconhecido. Um entre team, user.

pullRequest.version object

A versão mais recente do pull request.

pullRequest.version.number string

Número de versão monotônico dentro da alteração (começa em 1).

pullRequest.version.headSha string

SHA do commit HEAD desta versão.

pullRequest.version.baseSha string

SHA do commit base em relação ao qual esta versão é comparada: a ponta da branch base conforme resolvida no momento em que a versão foi registrada. Ela pode ficar desatualizada em relação à ponta atual da branch até o próximo push do head ou até um novo redirecionamento.

pullRequest.version.createdAt string

Quando esta versão foi criada. Timestamp no formato RFC 3339.

pullRequest.version.potentialMergeCommit object

O merge de teste do Origin desta versão e até onde chegou sua preparação (state). Calculado para esta versão: o segundo pai do commit é head_sha; o primeiro é o base_sha do merge de teste, a ponta da branch base no momento da preparação, que pode ser mais recente que o base_sha desta versão. A ref pull/\<number>/merge aponta apenas para o commit da versão mais recente; commits antigos continuam acessíveis por SHA pela API (GetCommit), mas não podem ser buscados por SHA via git. Diferente de PullRequest.merge_commit_sha, que só é definido após o merge. Definido em PullRequest.version e PullRequestWebhook.version.

pullRequest.version.potentialMergeCommit.state string

Até que ponto a preparação desta versão avançou; uma nova versão começa como unknown até que sua própria preparação seja concluída. Valores não reconhecidos devem ser tratados como unknown. Um dos valores unknown, prepared, merge_conflict.

pullRequest.version.potentialMergeCommit.sha string

Definido apenas quando state é prepared: o commit de teste de merge com dois pais, sendo o segundo pai o head_sha da versão e o primeiro pai o base_sha; a ponta de pull/\<number>/merge enquanto esta for a versão mais recente; pode ser consultado pelo SHA posteriormente.

pullRequest.version.potentialMergeCommit.baseSha string

Definido apenas quando state é prepared: a ponta da branch base no momento da preparação; pode ser mais recente que o base_sha da versão; não é atualizado quando a branch base apenas avança; preparado novamente ao reabrir.

repository object

O repositório ao qual o pull request pertence.

repository.id string

repository.name string

repository.owner object

O proprietário de um repositório.

repository.owner.slug string

Nome único e compatível com URL do proprietário.

repository.owner.id string

ID único do namespace do proprietário.

repository.owner.type string

team ou user. Disponível apenas na saída; sem valor quando desconhecido. Um entre team, user.

Exemplo de event.payload:

{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "state": "open",    "draft": false,    "merged": false,    "title": "Add launch telemetry",    "body": "Adds structured launch telemetry to the ignition path.",    "head": {      "ref": "add-telemetry",      "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"    },    "base": {      "ref": "add-telemetry-schema",      "sha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    },    "author": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "additions": 128,    "deletions": 46,    "changedFiles": 5,    "stack": {      "id": "stk_01k2ja2000e0080000000000s1",      "parentPullRequest": {        "id": "pr_01k2ja2000e0080000000000d3",        "number": "16",        "repository": {          "id": "repo_01k2ja2000e0080000000000q4",          "name": "rocket",          "owner": {            "slug": "acme",            "id": "ns_01k2ja2000e0080000000000p3",            "type": "team"          }        }      }    },    "version": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8",      "createdAt": "2026-08-01T09:30:00Z"    }  },  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  }}

Eventos de rótulo de Pull Request

EVENTpull_request.label.addedpull_request.label.removed

Uma alteração nos rótulos atribuídos ao pull request. Faça a leitura do conjunto atual com ListPullRequestLabels.

Campos do payload

pullRequest object

O pull request cujos rótulos atribuídos foram alterados.

pullRequest.id string

ID imutável da alteração no Origin.

pullRequest.number string

pullRequest.repository object

Referência do repositório para este pull request.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner object

O owner de um repositório.

pullRequest.repository.owner.slug string

Nome único e compatível com URL do owner.

pullRequest.repository.owner.id string

ID único do namespace do owner.

pullRequest.repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team e user.

label object

O rótulo ao qual o evento se refere.

label.id string

label.name string

label.color string

Cor em hex de seis caracteres, sem # no início.

label.description string

actor object

O principal que aplicou ou removeu o rótulo, quando conhecido.

actor.user object

actor.user.id string

actor.user.email string Obrigatório

actor.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços nas extremidades e unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

actor.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

actor.user.performedVia object

Definido quando um app agiu em nome deste usuário com um installation user token, na ação descrita por este campo de ator. Por exemplo, no autor de um comentário, ele identifica o app que criou o comentário, e não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estiverem disponíveis.

actor.user.performedVia.app object

O app que agiu em nome do usuário.

actor.user.performedVia.app.id string

actor.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

actor.app object

actor.app.id string

actor.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

actor.serviceAccount object

actor.serviceAccount.id string

Exemplo de event.payload:

{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  },  "label": {    "id": "lbl_01k2ja2000e0080000000000m1",    "name": "bug",    "color": "d73a4a",    "description": "Something isn't working"  },  "actor": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  }}

Pull Request Comment

EVENTpull_request.comment.created

Um comentário criado em um pull request. Comentários enviados junto com uma revisão são entregues no momento em que a revisão é submetida, um evento por comentário.

Campos do payload

pullRequest object

O pull request no qual o comentário foi feito.

pullRequest.id string

ID imutável da alteração do Origin.

pullRequest.number string

pullRequest.repository object

Referência do repositório para este pull request.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner object

O proprietário de um repositório.

pullRequest.repository.owner.slug string

Nome exclusivo do proprietário, adequado para URLs.

pullRequest.repository.owner.id string

ID único do namespace do proprietário.

pullRequest.repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um de team, user.

comment object

O comentário criado. Um comentário que iniciou a thread inclui a âncora de diff da thread; uma resposta inclui apenas comment.thread.id. O estado de resolução da thread não faz parte do evento; consulte-o com GetPullRequestComment.

comment.id string

comment.thread object

A conversa à qual este comentário pertence, incluindo sua âncora no diff e seu estado de resolução.

comment.thread.id string

comment.thread.version object

A versão da pull request à qual o thread se refere, incluindo seus SHAs de head e base (veja PullRequestReview.pull_request_version).

comment.thread.version.number string

Número de versão monotônico dentro do pull request (baseado em 1).

comment.thread.version.headSha string

SHA do commit HEAD desta versão.

comment.thread.version.baseSha string

SHA do commit base em relação ao qual esta versão é comparada.

comment.thread.path string

Caminho do arquivo da âncora de diff do tópico. Vazio para tópicos de discussão geral.

comment.thread.side string

Lado do diff da âncora. Não definido para tópicos de discussão geral. Um entre left e right.

comment.thread.startLine integer

Primeira linha do intervalo ancorado na versão side do arquivo. 0 para tópicos no nível do arquivo e de discussão geral.

comment.thread.endLine integer

Última linha (inclusiva) do intervalo ancorado. 0 quando a âncora é uma única linha ou não tem intervalo de linhas.

comment.thread.resolvedAt string

Quando a conversa foi resolvida. Não definido enquanto a conversa estiver aberta. Carimbo de data/hora RFC 3339.

comment.thread.createdAt string

Timestamp no formato RFC 3339.

comment.thread.updatedAt string

Timestamp no formato RFC 3339.

comment.body string

comment.author object

Um usuário, app ou conta de serviço que realizou uma ação visível externamente.

comment.author.user object

comment.author.user.id string

comment.author.user.email string Obrigatório

comment.author.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços em branco no início ou no fim, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do ID ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

comment.author.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

comment.author.user.performedVia object

Definido quando um app agiu em nome deste usuário com um installation user token, para a ação descrita por este campo de ator. Por exemplo, no autor de um comentário, identifica o app que criou o comentário, e não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estiverem disponíveis.

comment.author.user.performedVia.app object

O app que agiu em nome do usuário.

comment.author.user.performedVia.app.id string

comment.author.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

comment.author.app object

comment.author.app.id string

comment.author.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

comment.author.serviceAccount object

comment.author.serviceAccount.id string

comment.createdAt string

Timestamp no formato RFC 3339.

comment.updatedAt string

Timestamp no formato RFC 3339.

Exemplo de event.payload:

{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  },  "comment": {    "id": "cmt_01k2ja2000e0080000000000e5",    "thread": {      "id": "cth_01k2ja2000e0080000000000s6",      "version": {        "number": "3",        "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"      },      "path": "src/telemetry/retry.ts",      "side": "right",      "startLine": 42,      "endLine": 45,      "createdAt": "2026-08-01T09:30:00Z",      "updatedAt": "2026-08-02T14:45:00Z"    },    "body": "Should the retry budget be configurable?",    "author": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z"  }}

Eventos de reação a comentários de Pull Request

EVENTpull_request.comment.reaction.addedpull_request.comment.reaction.removed

Uma reação adicionada a um comentário de pull request ou removida dele. O event.type do envelope indica a ação. Uma adição é entregue pelo menos uma vez: adicionar ao comentário uma reação que o usuário já possui gera outro pull_request.comment.reaction.added para o mesmo (comment, reactor, content); remover uma reação que o usuário não possui não gera nada.

Campos do payload

pullRequest object

O pull request no qual o comentário foi feito.

pullRequest.id string

ID imutável da alteração do Origin.

pullRequest.number string

pullRequest.repository object

Referência do repositório para este pull request.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner objeto

O proprietário de um repositório.

pullRequest.repository.owner.slug string

Nome único do proprietário, compatível com URL.

pullRequest.repository.owner.id string

ID único do namespace do proprietário.

pullRequest.repository.owner.type string

team ou user. Somente saída; fica indefinido quando desconhecido. Um entre team, user.

comment object

O comment ao qual a reação se refere.

comment.id string

comment.thread object

A thread à qual o comentário pertence.

comment.thread.id string

reaction objeto

A reação que foi adicionada ou removida.

reaction.content string

A reação colocada no comentário. O conjunto é fechado; um valor não reconhecido deve ser interpretado como uma reação que o destinatário não consegue renderizar. Uma entre thumbs_up, thumbs_down, laugh, hooray, confused, heart, rocket, eyes.

reaction.reactor objeto

A entidade principal que adicionou a reação. Somente o reator pode removê‑la; portanto, esta é a entidade principal atuante tanto nos eventos de adição quanto de remoção.

reaction.reactor.user object

reaction.reactor.user.id string

reaction.reactor.user.email string Obrigatório

reaction.reactor.user.displayName string

Nome de exibição legível por pessoas: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do email, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

reaction.reactor.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

reaction.reactor.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no autor de um comentário, indica o app que criou o comentário, não um ator que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente e também pode estar ausente quando os dados de delegação não estão disponíveis.

reaction.reactor.user.performedVia.app object

O app que agiu em nome do usuário.

reaction.reactor.user.performedVia.app.id string

reaction.reactor.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

reaction.reactor.app object

reaction.reactor.app.id string

reaction.reactor.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido nos payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

reaction.reactor.serviceAccount object

reaction.reactor.serviceAccount.id string

Exemplo de event.payload:

{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  },  "comment": {    "id": "cmt_01k2ja2000e0080000000000e5",    "thread": {      "id": "cth_01k2ja2000e0080000000000s6"    }  },  "reaction": {    "content": "thumbs_up",    "reactor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    }  }}

Eventos de revisão de pull request

EVENTOpull_request.review.submittedpull_request.review.dismissed

Campos da carga útil

pullRequest object

O pull request no qual a revisão foi registrada.

pullRequest.id string

ID imutável da alteração de Origin.

pullRequest.number string

pullRequest.repository object

Referência do repositório para este pull request.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner object

O dono de um repositório.

pullRequest.repository.owner.slug string

Nome único do proprietário, compatível com URL.

pullRequest.repository.owner.id string

ID único do namespace do proprietário.

pullRequest.repository.owner.type string

team ou user. Disponível apenas na saída; fica sem definição quando desconhecido. Um entre team, user.

review object

A avaliação que foi enviada ou dispensada. Quando ela é dispensada, review.dismissal é definido.

review.id string

Identificador estável da revisão no Origin.

review.author object

O diretor que redigiu a avaliação.

review.author.user object

review.author.user.id string

review.author.user.email string Obrigatório

review.author.user.displayName string

Nome de exibição legível por humanos: o nome e o sobrenome da conta, cada um com os espaços em branco no início e no fim removidos, unidos por um espaço — exatamente o nome que a interface do produto exibe. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do ID ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

review.author.user.handle string

O identificador de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um identificador reivindicado e para perfis não públicos.

review.author.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, indica o app que criou o comentário, não um ator que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente e também pode estar ausente quando os dados de delegação não estão disponíveis.

review.author.user.performedVia.app object

O app que agiu em nome do usuário.

review.author.user.performedVia.app.id string

review.author.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

review.author.app object

review.author.app.id string

review.author.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

review.author.serviceAccount object

review.author.serviceAccount.id string

review.verdict string

Um destes: approve, request_changes, comment.

review.body string

Resumo da revisão em texto livre. Fica vazio quando o revisor não deixou nenhum resumo.

review.submittedAt string

Quando a revisão foi enviada. Não definido para uma revisão em rascunho ainda não enviada. Carimbo de data e hora RFC 3339.

review.pullRequestVersion object

A versão do pull request e o head SHA aos quais o veredito se aplica.

review.pullRequestVersion.number string

Número de versão monotônico dentro do pull request (começando em 1).

review.pullRequestVersion.headSha string

SHA do commit HEAD desta versão.

review.pullRequestVersion.baseSha string

SHA do commit base em relação ao qual esta versão é comparada.

review.dismissal objeto

Definido quando a revisão é descartada; ausente enquanto o veredito ainda for considerado no estado de revisão do pull request.

review.dismissal.dismissedBy object

O principal que dispensou a revisão. Ausente quando a dispensa foi registrada com um tipo de ator que esta API não expõe.

review.dismissal.dismissedBy.user object

review.dismissal.dismissedBy.user.id string

review.dismissal.dismissedBy.user.email string Obrigatório

review.dismissal.dismissedBy.user.displayName string

Nome de exibição legível por pessoas: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do ID ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

review.dismissal.dismissedBy.user.handle string

O identificador de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um identificador reivindicado e para perfis não públicos.

review.dismissal.dismissedBy.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, indica o app que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

review.dismissal.dismissedBy.user.performedVia.app object

O app que agiu em nome do usuário.

review.dismissal.dismissedBy.user.performedVia.app.id string

review.dismissal.dismissedBy.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

review.dismissal.dismissedBy.app object

review.dismissal.dismissedBy.app.id string

review.dismissal.dismissedBy.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

review.dismissal.dismissedBy.serviceAccount object

review.dismissal.dismissedBy.serviceAccount.id string

review.dismissal.dismissedAt string

Quando a revisão foi descartada. Timestamp RFC 3339.

review.dismissal.message string

Motivo registrado junto com a dispensa. Revisões encerradas automaticamente porque seu autor enviou um veredito mais recente recebem um motivo gerado pelo servidor.

Exemplo de event.payload:

{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  },  "review": {    "id": "rev_01k2ja2000e0080000000000f6",    "author": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "verdict": "approve",    "body": "Approving. The telemetry schema matches the spec.",    "submittedAt": "2026-08-02T15:00:00Z",    "pullRequestVersion": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    }  }}

Eventos do revisor de pull requests

EVENTpull_request.reviewer.addedpull_request.reviewer.removedpull_request.reviewer.rerequested

Uma alteração nos requested reviewers do pull request. Leia o set pendente atual com ListPullRequestRequestedReviewers.

Campos do payload

pullRequest object

O pull request cujos requested reviewers foram alterados.

pullRequest.id string

ID imutável da alteração do Origin.

pullRequest.number string

pullRequest.repository object

Referência do repositório para este pull request.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner objeto

O owner de um repositório.

pullRequest.repository.owner.slug string

Nome único do owner, compatível com URL.

pullRequest.repository.owner.id string

ID único do namespace do proprietário.

pullRequest.repository.owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

reviewer object

O revisor solicitado ao qual o evento se refere.

reviewer.user object

reviewer.user.id string

reviewer.user.email string Obrigatório

reviewer.user.displayName string

Nome de exibição legível por humanos: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do email, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

reviewer.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver publicamente visível; omitido para usuários sem handle reivindicado e para perfis não públicos.

reviewer.user.performedVia object

Definido quando um aplicativo agiu em nome deste usuário usando um token de usuário da instalação, para realizar a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, indica o aplicativo que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

reviewer.user.performedVia.app object

O app que agiu em nome do usuário.

reviewer.user.performedVia.app.id string

reviewer.user.performedVia.app.displayName string

O nome de exibição registrado do aplicativo, nunca vazio quando presente. Omitido em cargas úteis cujo aplicativo não pôde ser resolvido e no ator de fachada oficial do Cherri Code.

reviewer.group object

Identidade de grupo público do Origin (grp_…). Atualmente, apenas id.

reviewer.group.id string

createdVia string

Como a solicitação de revisão foi criada. Um destes: manual, codeowners.

createdBy object

O principal que criou a solicitação de revisão, quando conhecido.

createdBy.user object

createdBy.user.id string

createdBy.user.email string Obrigatório

createdBy.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do ID ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

createdBy.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver publicamente visível; omitido para usuários sem handle reivindicado e para perfis não públicos.

createdBy.user.performedVia object

Definido quando um app agiu em nome deste usuário com um installation user token, na ação descrita por este campo de actor. Por exemplo, no autor de um comentário, indica o app que criou o comentário, e não um actor que o tenha editado ou excluído depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estiverem disponíveis.

createdBy.user.performedVia.app object

O app que agiu em nome do usuário.

createdBy.user.performedVia.app.id string

createdBy.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido nos payloads cujo app não pôde ser identificado e no ator de fachada próprio do Cherri Code.

createdBy.app object

createdBy.app.id string

createdBy.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

createdBy.serviceAccount object

createdBy.serviceAccount.id string

createdAt string

Quando a solicitação de revisão foi criada. Timestamp no formato RFC 3339.

Exemplo de event.payload:

{  "pullRequest": {    "id": "pr_01k2ja2000e0080000000000d4",    "number": "17",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    }  },  "reviewer": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "createdVia": "codeowners",  "createdAt": "2026-08-02T14:45:00Z"}

Eventos de execução de verificações

EVENTOrepository.check_run.createdrepository.check_run.updatedrepository.check_run.completed

Instantâneo confirmado para um evento do ciclo de vida de uma execução de verificação do Origin.

Campos do payload

repository object

O repositório ao qual a execução de verificação pertence.

repository.id string

repository.name string

repository.owner object

O proprietário de um repositório.

repository.owner.slug string

Nome exclusivo do proprietário, compatível com URL.

repository.owner.id string

ID único do namespace do proprietário.

repository.owner.type string

team ou user. Somente para saída; não definido quando desconhecido. Um entre team e user.

checkSuite objeto

A suíte à qual o check run pertence.

checkSuite.id string

ID único da suíte atribuído pelo servidor.

checkSuite.repository objeto

Repositório ao qual a suíte pertence.

checkSuite.repository.id string

checkSuite.repository.name string

checkSuite.repository.owner object

O proprietário de um repositório.

checkSuite.repository.owner.slug string

Nome exclusivo do proprietário, compatível com URL.

checkSuite.repository.owner.id string

ID único do namespace do proprietário.

checkSuite.repository.owner.type string

team ou user. Somente saída; não definido quando desconhecido. Um entre team e user.

checkSuite.sha string

SHA resolvido do commit HEAD ao qual a suíte está vinculada (hexadecimal em minúsculas).

checkSuite.key string

Chave de idempotência escolhida pelo aplicativo para a suíte.

checkSuite.name string

Nome da suíte visível ao usuário.

checkSuite.detailsUrl string

Link com mais detalhes sobre a suíte como um todo, se definido.

checkSuite.createdAt string

Timestamp no formato RFC 3339.

checkSuite.updatedAt string

Timestamp no formato RFC 3339.

checkSuite.externalId string

Identidade imutável atribuída pelo provedor para esta tentativa de suíte.

checkSuite.actor object

Principal que produziu a suíte.

checkSuite.actor.user objeto

checkSuite.actor.user.id string

checkSuite.actor.user.email string Obrigatório

checkSuite.actor.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

checkSuite.actor.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

checkSuite.actor.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, identifica o app que criou o comentário, não um ator que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente e também pode estar ausente quando os dados de delegação não estão disponíveis.

checkSuite.actor.user.performedVia.app object

O app que agiu em nome do usuário.

checkSuite.actor.user.performedVia.app.id string

checkSuite.actor.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido nos payloads em que não foi possível resolver o app e no ator de fachada first-party do Cherri Code.

checkSuite.actor.app objeto

checkSuite.actor.app.id string

checkSuite.actor.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada primário do Cherri Code.

checkSuite.actor.serviceAccount objeto

checkSuite.actor.serviceAccount.id string

checkRun object

O snapshot da execução da verificação neste ponto do ciclo de vida.

checkRun.id string

ID exclusivo da execução de verificação atribuído pelo servidor.

checkRun.repository object

Repositório ao qual a execução de verificação pertence.

checkRun.repository.id string

checkRun.repository.name string

checkRun.repository.owner object

O proprietário de um repositório.

checkRun.repository.owner.slug string

Nome exclusivo do proprietário, compatível com URL.

checkRun.repository.owner.id string

ID único do namespace do proprietário.

checkRun.repository.owner.type string

team ou user. Somente saída; não definido quando desconhecido. Um entre team e user.

checkRun.checkSuite objeto

Suíte à qual esta execução de verificação pertence.

checkRun.checkSuite.id string

checkRun.sha string

SHA do commit HEAD resolvido ao qual a execução de verificação está associada (hexadecimal em minúsculas).

checkRun.key string

Chave de idempotência escolhida pelo app para a execução de verificação.

checkRun.name string

Nome do check-run visível ao usuário.

checkRun.status string

Estado do ciclo de vida. failing é uma execução ainda em andamento cujo app já sabe que não será aprovada: pendente para os critérios de aprovação e as verificações obrigatórias, ainda sem conclusion, um aviso antecipado para os leitores. rerequested é uma execução concluída cuja reexecução foi solicitada e ainda não recebeu resposta do app responsável: pendente para os leitores (renderizada como queued), com conclusion e os tempos ainda descrevendo a tentativa substituída. Definido apenas pela Origin quando uma nova solicitação é feita (RerequestCheckRun); os apps não podem publicá-lo. Um dos valores: queued, in_progress, completed, rerequested, failing.

checkRun.conclusion string

Presente somente se status for completed ou rerequested. Para uma execução rerequested, é o veredito da tentativa substituída: trate a execução como pendente e leia conclusion apenas quando status == completed. Um dos valores: success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRun.detailsUrl string

Link para mais detalhes sobre esta execução de verificação específica, se definido.

checkRun.externalUpdatedAt string

O horário da última atualização do sistema externo usado para ordenação. Timestamp RFC 3339.

checkRun.startedAt string

Quando a execução da verificação foi iniciada, se informado. Carimbo de data/hora RFC 3339.

checkRun.completedAt string

Quando a execução da verificação foi concluída, se informado. Data e hora no formato RFC 3339.

checkRun.createdAt string

Timestamp no formato RFC 3339.

checkRun.updatedAt string

Quando o Origin gravou a execução pela última vez. Não é atualizado por uma postagem ignorada por estar desatualizada ou que repetiu os valores armazenados (veja PostCheckRunResponse.outcome), portanto não é possível distinguir esses dois casos. Carimbo de data e hora no formato RFC 3339.

checkRun.externalId string

Identidade imutável atribuída pelo provedor para esta tentativa de verificação (veja CheckRunInput.external_id: o estilo recomendado é usar um por execução).

checkRun.actor object

Principal que gerou a execução da verificação; sempre o actor da suíte proprietária.

checkRun.actor.user objeto

checkRun.actor.user.id string

checkRun.actor.user.email string Obrigatório

checkRun.actor.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

checkRun.actor.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

checkRun.actor.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação, para a ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, identifica o app que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

checkRun.actor.user.performedVia.app object

O app que agiu em nome do usuário.

checkRun.actor.user.performedVia.app.id string

checkRun.actor.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

checkRun.actor.app object

checkRun.actor.app.id string

checkRun.actor.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

checkRun.actor.serviceAccount object

checkRun.actor.serviceAccount.id string

checkRun.output object

Saída legível por humanos para esta execução de verificação, se definida.

checkRun.output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRun.output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.deadlineAt string

Prazo opcional. Se omitido ou não definido, significa que não há expiração. É removido quando a execução é concluída, inclusive quando expira como timed_out (veja CheckRunInput.deadline_at). Data e hora no formato RFC 3339.

checkRun.isRerequestable boolean

Se o app que relatou declarou que esta execução pode ser solicitada novamente (CheckRunInput.is_rerequestable).

checkRun.rerequestedAt string

Definido enquanto uma nova solicitação estiver pendente; limpo quando o provedor publicar novamente. Não definido significa que não há nenhuma nova solicitação pendente. Enquanto definido, status é rerequested e a execução permanece pendente no estado de CI do commit' (conclusion e os tempos correspondem ao resultado substituído); o aplicativo responsável responde publicando a execução que se comprometeu a fornecer ao declarar is_rerequestable — uma nova execução para a mesma key ou uma atualização desta execução (que limpa este campo) —, após o que ela poderá ser solicitada novamente. Carimbo de data/hora no formato RFC 3339.

checkRun.rerequestedBy object

Principal que solicitou novamente a execução. Presente somente se rerequested_at estiver definido; é removido junto com ele quando o aplicativo proprietário responde.

checkRun.rerequestedBy.user object

checkRun.rerequestedBy.user.id string

checkRun.rerequestedBy.user.email string Obrigatório

checkRun.rerequestedBy.user.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto renderiza. Omitido quando a conta não tem nome; nunca sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

checkRun.rerequestedBy.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

checkRun.rerequestedBy.user.performedVia object

Definido quando um app agiu em nome deste usuário usando um token de usuário da instalação na ação descrita por este campo de ator. Por exemplo, no campo de autor de um comentário, identifica o app que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

checkRun.rerequestedBy.user.performedVia.app objeto

O app que agiu em nome do usuário.

checkRun.rerequestedBy.user.performedVia.app.id string

checkRun.rerequestedBy.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

checkRun.rerequestedBy.app objeto

checkRun.rerequestedBy.app.id string

checkRun.rerequestedBy.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

checkRun.rerequestedBy.serviceAccount object

checkRun.rerequestedBy.serviceAccount.id string

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "checkSuite": {    "id": "crg_01k2ja2000e0080000000000h8",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842",    "name": "CI",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "externalId": "build-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    }  },  "checkRun": {    "id": "cr_01k2ja2000e0080000000000g7",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "checkSuite": {      "id": "crg_01k2ja2000e0080000000000h8"    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842-unit-tests",    "name": "unit-tests",    "status": "completed",    "conclusion": "success",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "externalUpdatedAt": "2026-08-02T14:44:30Z",    "startedAt": "2026-08-02T14:40:00Z",    "completedAt": "2026-08-02T14:44:30Z",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "externalId": "run-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "output": {      "title": "Unit tests",      "summary": "128 tests passed.",      "text": "All suites green."    }  }}

Nova solicitação de execução de verificação

EVENTOrepository.check_run.rerequested

Payload do webhook repository.check&#95;run.rerequested, entregue apenas ao app que possui o check run. Responda publicando uma nova execução para o mesmo SHA da branch head e a mesma chave — uma nova execução (com um novo external&#95;id) ou uma atualização da execução solicitada novamente. A execução marcada apresenta status: rerequested (sua conclusão e seus tempos correspondem ao resultado substituído) até que a publicação da resposta limpe rerequested_at. Cada nova solicitação aceita emite um evento, e uma execução pode ser solicitada novamente após ser respondida; portanto, deduplique as reentregas usando apenas o ID do evento. check_run.rerequested_at contém a marcação da solicitação pendente. O payload não inclui contexto de pull request (as execuções de verificação estão associadas a (repository, sha)): um consumidor que precise do pull request deve resolvê-lo a partir de check_run.sha, usando seu próprio mapeamento de head, ou consultar ListPullRequests filtrando pela branch head usada na compilação.

Campos do payload

repository object

O repositório ao qual a execução da verificação pertence.

repository.id string

repository.name string

repository.owner object

O proprietário de um repositório.

repository.owner.slug string

Nome exclusivo do proprietário, adequado para uso em URL.

repository.owner.id string

ID exclusivo do namespace do proprietário.

repository.owner.type string

team ou user. Somente saída; permanece indefinido quando desconhecido. Um entre team, user.

checkSuite object

A suíte à qual a execução de verificação pertence.

checkSuite.id string

ID único da suíte atribuído pelo servidor.

checkSuite.repository objeto

Repositório ao qual a suíte pertence.

checkSuite.repository.id string

checkSuite.repository.name string

checkSuite.repository.owner object

O proprietário de um repositório.

checkSuite.repository.owner.slug string

Nome exclusivo e amigável para URL do proprietário.

checkSuite.repository.owner.id string

ID exclusivo do namespace do proprietário.

checkSuite.repository.owner.type string

team ou user. Apenas para saída; não definido quando desconhecido. Um de team, user.

checkSuite.sha string

SHA do commit HEAD ao qual a suíte está vinculada (hexadecimal em minúsculas).

checkSuite.key string

Chave de idempotência escolhida pelo app para a suíte.

checkSuite.name string

Nome da suíte visível ao usuário.

checkSuite.detailsUrl string

Link com mais detalhes sobre a suíte como um todo, se definido.

checkSuite.createdAt string

Timestamp no formato RFC 3339.

checkSuite.updatedAt string

Timestamp no formato RFC 3339.

checkSuite.externalId string

Identidade imutável atribuída pelo provedor para esta tentativa de suíte.

checkSuite.actor object

Principal que produziu a suíte.

checkSuite.actor.user objeto

checkSuite.actor.user.id string

checkSuite.actor.user.email string Obrigatório

checkSuite.actor.user.displayName string

Nome de exibição legível por humanos: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto exibe. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

checkSuite.actor.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

checkSuite.actor.user.performedVia objeto

Definido quando um app agiu em nome deste usuário com um installation user token, para a ação descrita por este campo de ator. Por exemplo, no autor de um comentário, indica o app que criou o comentário, e não um ator que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estiverem disponíveis.

checkSuite.actor.user.performedVia.app objeto

O app que agiu em nome do usuário.

checkSuite.actor.user.performedVia.app.id string

checkSuite.actor.user.performedVia.app.displayName string

O nome de exibição registrado do app, que nunca fica vazio quando presente. Omitido nos payloads cujo app não pôde ser identificado e no ator de fachada do Cherri Code first-party.

checkSuite.actor.app objeto

checkSuite.actor.app.id string

checkSuite.actor.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

checkSuite.actor.serviceAccount objeto

checkSuite.actor.serviceAccount.id string

checkRun object

A execução de verificação re-solicitada (status: rerequested); check_run.rerequested_at registra o carimbo e check_run.rerequested_by o responsável que solicitou.

checkRun.id string

ID único da execução de verificação atribuído pelo servidor.

checkRun.repository object

Repositório ao qual a execução de verificação pertence.

checkRun.repository.id string

checkRun.repository.name string

checkRun.repository.owner object

O proprietário de um repositório.

checkRun.repository.owner.slug string

Nome exclusivo e amigável para URL do proprietário.

checkRun.repository.owner.id string

ID exclusivo do namespace do proprietário.

checkRun.repository.owner.type string

team ou user. Somente saída; não definido quando desconhecido. Um entre team e user.

checkRun.checkSuite object

Suíte a que esta execução de verificação pertence.

checkRun.checkSuite.id string

checkRun.sha string

SHA do commit HEAD resolvido ao qual a execução de verificação está associada (hexadecimal em minúsculas).

checkRun.key string

Chave de idempotência escolhida pelo aplicativo para a execução de verificação.

checkRun.name string

Nome do check-run visível ao usuário.

checkRun.status string

Estado do ciclo de vida. failing é uma execução ainda em andamento cujo aplicativo já sabe que ela não vai passar: pendente para gates e verificações obrigatórias, ainda sem conclusion, funcionando como um aviso antecipado para os leitores. rerequested é uma execução concluída cuja reexecução foi solicitada e ainda não foi respondida pelo aplicativo responsável: pendente para os leitores (renderizar como queued), com conclusion e os tempos ainda descrevendo a tentativa substituída. Definido apenas pelo Origin quando há uma nova solicitação (RerequestCheckRun); os aplicativos não podem publicá-lo. Um dos valores: queued, in_progress, completed, rerequested, failing.

checkRun.conclusion string

Presente apenas se status for completed ou rerequested. Para uma execução rerequested, é o veredito da tentativa substituída: trate a execução como pendente e leia conclusion apenas quando status == completed. Um dos valores: success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRun.detailsUrl string

Link para mais detalhes sobre esta execução de verificação específica, se definido.

checkRun.externalUpdatedAt string

O horário da última atualização do sistema externo usado para ordenação. Timestamp RFC 3339.

checkRun.startedAt string

Quando a execução da verificação foi iniciada, se informado. Carimbo de data/hora RFC 3339.

checkRun.completedAt string

Quando a execução da verificação foi concluída, se informado. Carimbo de data/hora RFC 3339.

checkRun.createdAt string

Timestamp no formato RFC 3339.

checkRun.updatedAt string

Quando o Origin gravou a execução pela última vez. Não é atualizado por uma postagem que foi ignorada por estar desatualizada ou que repetiu os valores armazenados (veja PostCheckRunResponse.outcome), portanto não é possível distinguir esses dois casos. Carimbo de data/hora no formato RFC 3339.

checkRun.externalId string

Identidade imutável atribuída pelo provedor para esta tentativa de verificação (veja CheckRunInput.external_id: recomenda-se uma por execução).

checkRun.actor object

Principal que gerou a execução da verificação; sempre o actor da suíte proprietária.

checkRun.actor.user object

checkRun.actor.user.id string

checkRun.actor.user.email string Obrigatório

checkRun.actor.user.displayName string

Nome de exibição legível por humanos: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto exibe. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

checkRun.actor.user.handle string

O identificador de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um identificador reivindicado e para perfis não públicos.

checkRun.actor.user.performedVia objeto

Definido quando um aplicativo agiu em nome deste usuário usando um token de usuário de instalação, para a ação descrita por este campo de ator. Por exemplo, no autor de um comentário, indica o aplicativo que criou o comentário, não um ator que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente e também pode estar ausente quando os dados de delegação não estão disponíveis.

checkRun.actor.user.performedVia.app objeto

O app que agiu em nome do usuário.

checkRun.actor.user.performedVia.app.id string

checkRun.actor.user.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada first-party do Cherri Code.

checkRun.actor.app object

checkRun.actor.app.id string

checkRun.actor.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

checkRun.actor.serviceAccount object

checkRun.actor.serviceAccount.id string

checkRun.output object

Saída legível por humanos para esta execução de verificação, se definida.

checkRun.output.title string

Título curto para a saída. Comprimento máximo: 255 caracteres.

checkRun.output.summary string

Resumo da saída. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.output.text string

Saída detalhada. Pode conter Markdown. Tamanho máximo em UTF-8: 65535 bytes.

checkRun.deadlineAt string

Prazo opcional. Se omitido ou não definido, não haverá expiração. Removido quando a execução é concluída, inclusive quando expira como timed_out (veja CheckRunInput.deadline_at). Carimbo de data/hora no formato RFC 3339.

checkRun.isRerequestable boolean

Indica se o app que gerou o relatório declarou que esta execução pode ser solicitada novamente (CheckRunInput.is_rerequestable).

checkRun.rerequestedAt string

Definido enquanto uma nova solicitação estiver pendente; removido quando o provedor publicar novamente. Não definido significa que não há nenhuma nova solicitação pendente. Enquanto definido, status é rerequested e a execução permanece pendente no estado de CI do commit (conclusion e os tempos correspondem ao resultado substituído); o aplicativo responsável responde publicando a execução que se comprometeu a fornecer, declarando is_rerequestable — uma nova execução para a mesma key ou uma atualização desta execução (o que limpa este campo) —, após o que a execução poderá ser solicitada novamente. Carimbo de data/hora no formato RFC 3339.

checkRun.rerequestedBy object

Principal que solicitou novamente a execução. Presente somente se rerequested_at estiver definido; é removido junto com ele quando o aplicativo proprietário responde.

checkRun.rerequestedBy.user objeto

checkRun.rerequestedBy.user.id string

checkRun.rerequestedBy.user.email string Obrigatório

checkRun.rerequestedBy.user.displayName string

Nome de exibição legível por humanos: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto exibe. Omitido quando a conta não tem nome; nunca é sintetizado a partir do e-mail, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser resolvido.

checkRun.rerequestedBy.user.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem handle reivindicado e para perfis não públicos.

checkRun.rerequestedBy.user.performedVia objeto

Definido quando um aplicativo agiu em nome deste usuário usando um token de usuário de instalação, para a ação descrita por este campo de ator. Por exemplo, no autor de um comentário, indica o aplicativo que criou o comentário, não um ator que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente e também pode estar ausente quando os dados de delegação não estão disponíveis.

checkRun.rerequestedBy.user.performedVia.app objeto

O app que agiu em nome do usuário.

checkRun.rerequestedBy.user.performedVia.app.id string

checkRun.rerequestedBy.user.performedVia.app.displayName string

O nome de exibição registrado do aplicativo, nunca vazio quando presente. Omitido nos payloads cujo aplicativo não pôde ser resolvido e no ator de fachada primário do Cherri Code.

checkRun.rerequestedBy.app objeto

checkRun.rerequestedBy.app.id string

checkRun.rerequestedBy.app.displayName string

O nome de exibição registrado do aplicativo, nunca vazio quando presente. Omitido em payloads cujo aplicativo não pôde ser resolvido e no ator de fachada próprio do Cherri Code.

checkRun.rerequestedBy.serviceAccount objeto

checkRun.rerequestedBy.serviceAccount.id string

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "checkSuite": {    "id": "crg_01k2ja2000e0080000000000h8",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842",    "name": "CI",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T15:10:00Z",    "externalId": "build-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    }  },  "checkRun": {    "id": "cr_01k2ja2000e0080000000000g7",    "repository": {      "id": "repo_01k2ja2000e0080000000000q4",      "name": "rocket",      "owner": {        "slug": "acme",        "id": "ns_01k2ja2000e0080000000000p3",        "type": "team"      }    },    "checkSuite": {      "id": "crg_01k2ja2000e0080000000000h8"    },    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "key": "ci-8842-unit-tests",    "name": "unit-tests",    "status": "rerequested",    "conclusion": "failure",    "detailsUrl": "https://ci.acme.dev/runs/8842",    "externalUpdatedAt": "2026-08-02T14:44:30Z",    "startedAt": "2026-08-02T14:40:00Z",    "completedAt": "2026-08-02T14:44:30Z",    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T15:10:00Z",    "externalId": "run-8842",    "actor": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    },    "output": {      "title": "Unit tests",      "summary": "1 of 129 tests failed.",      "text": "FAIL telemetry.spec.ts > flushes queued events on shutdown"    },    "isRerequestable": true,    "rerequestedAt": "2026-08-02T15:10:00Z",    "rerequestedBy": {      "user": {        "id": "user_01k2ja2000e0080000000000c3",        "email": "[email protected]"      }    }  }}

Instalação criada

EVENTOinstallation.created

Campos do payload

installation object

A captura da instalação no momento do evento.

installation.id string

installation.appId string

O identificador do app instalado; o mesmo valor de app.id no payload.

installation.target object

O proprietário de um repositório.

installation.target.slug string

Nome único do proprietário, compatível com URL.

installation.target.id string

ID único do namespace do proprietário.

installation.target.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.repoSelectionMode string

Um dos valores: all, selected.

installation.repositories lista

Vazio quando repository_selection é "all". Limitado a 5.000; consulte repositories_count para o total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

O owner de um repositório.

installation.repositories[].owner.slug string

Nome único do owner, compatível com URL.

installation.repositories[].owner.id string

ID único do namespace do proprietário.

installation.repositories[].owner.type string

team ou user. Disponível apenas na saída; não definido quando desconhecido. Um entre team, user.

installation.scopes lista

installation.repositoriesCount integer

Total real; 0 quando repository_selection é "all".

installation.createdAt string

Timestamp no formato RFC 3339.

installation.updatedAt string

Timestamp no formato RFC 3339.

installation.deletedAt string

Timestamp no formato RFC 3339.

installation.suspendedAt string

Definido enquanto a instalação está suspensa; não definido quando ela está ativa. Carimbo de data/hora RFC 3339.

installation.installedBy object

Usuário que instalou o app originalmente.

installation.installedBy.id string

installation.installedBy.email string Obrigatório

installation.installedBy.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é gerado a partir do email, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo actor não pôde ser resolvido.

installation.installedBy.handle string

O identificador de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um identificador reivindicado e para perfis não públicos.

installation.installedBy.performedVia object

Definido quando um aplicativo agiu em nome deste usuário com um token de usuário da instalação, para a ação descrita por este campo de agente. Por exemplo, no autor de um comentário, indica o aplicativo que criou o comentário, não um agente que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

installation.installedBy.performedVia.app object

O app que agiu em nome do usuário.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser identificado e no ator da fachada própria do Cherri Code.

app object

O app ao qual a instalação pertence.

app.id string

app.displayName string

O display name registrado do app, nunca vazio quando presente. Omitido quando a hidratação no momento do enqueue não conseguiu resolver o app.

Exemplo de event.payload:

{  "installation": {    "id": "inst_01k2ja2000e0080000000000b2",    "appId": "app_01k2ja2000e0080000000000a1",    "target": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "repoSelectionMode": "selected",    "repositories": [      {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      }    ],    "scopes": [      "repository:contents:read",      "repository:pull_requests:read"    ],    "repositoriesCount": 1,    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-01T09:30:00Z",    "installedBy": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "app": {    "id": "app_01k2ja2000e0080000000000a1",    "displayName": "CI Status Bot"  }}

Instalação atualizada

EVENTinstallation.updated

Campos do payload

installation object

O snapshot da instalação no momento do event.

installation.id string

installation.appId string

O identificador do app instalado; o mesmo valor de app.id no payload.

installation.target object

O owner de um repositório.

installation.target.slug string

Nome único do proprietário, compatível com URL.

installation.target.id string

ID único do namespace do proprietário.

installation.target.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.repoSelectionMode string

Um dos valores: all, selected.

installation.repositories vetor

Vazio quando repository_selection é "all". Limitado a 5.000; consulte repositories_count para o total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

O proprietário de um repositório.

installation.repositories[].owner.slug string

Nome único do owner, compatível com URL.

installation.repositories[].owner.id string

ID único do namespace do proprietário.

installation.repositories[].owner.type string

team ou user. Disponível apenas na saída; não definido quando desconhecido. Um entre team e user.

installation.scopes vetor

installation.repositoriesCount integer

Total real; 0 quando repository_selection for "all".

installation.createdAt string

Timestamp no formato RFC 3339.

installation.updatedAt string

Timestamp no formato RFC 3339.

installation.deletedAt string

Timestamp no formato RFC 3339.

installation.suspendedAt string

Definido enquanto a instalação está suspensa; não definido quando ela está ativa. Timestamp RFC 3339.

installation.installedBy object

Usuário que instalou o app originalmente.

installation.installedBy.id string

installation.installedBy.email string Obrigatório

installation.installedBy.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é gerado a partir do email, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo actor não pôde ser resolvido.

installation.installedBy.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um handle reivindicado e para perfis não públicos.

installation.installedBy.performedVia object

Definido quando um app agiu em nome deste usuário com um installation user token, para a ação descrita por este campo actor. Por exemplo, no autor de um comentário, indica o app que criou o comentário, e não um actor que o tenha editado ou excluído depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estiverem disponíveis.

installation.installedBy.performedVia.app object

O app que agiu em nome do usuário.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

O display name registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no actor de fachada próprio do Cherri Code.

app object

O app ao qual a instalação pertence.

app.id string

app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido quando a hidratação no momento do enfileiramento não conseguiu resolver o app.

Exemplo de event.payload:

{  "installation": {    "id": "inst_01k2ja2000e0080000000000b2",    "appId": "app_01k2ja2000e0080000000000a1",    "target": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "repoSelectionMode": "selected",    "repositories": [      {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      }    ],    "scopes": [      "repository:contents:read",      "repository:pull_requests:read"    ],    "repositoriesCount": 1,    "createdAt": "2026-08-01T09:30:00Z",    "updatedAt": "2026-08-02T14:45:00Z",    "installedBy": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "app": {    "id": "app_01k2ja2000e0080000000000a1",    "displayName": "CI Status Bot"  }}

Instalação suspensa

EVENTinstallation.suspended

Campos do payload

installation object

O snapshot da instalação no momento do event.

installation.id string

installation.appId string

O identificador do app instalado; o mesmo valor de app.id no payload.

installation.target object

O proprietário de um repositório.

installation.target.slug string

Nome único do proprietário, compatível com URL.

installation.target.id string

ID único do namespace do proprietário.

installation.target.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.repoSelectionMode string

Um dos valores: all, selected.

installation.repositories matriz

Vazio quando repository_selection é "all". Limitado a 5.000; consulte repositories_count para o total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

O owner de um repositório.

installation.repositories[].owner.slug string

Nome único do owner, compatível com URL.

installation.repositories[].owner.id string

ID único do namespace do proprietário.

installation.repositories[].owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.scopes matriz

installation.repositoriesCount integer

Total real; 0 quando repository_selection é "all".

installation.createdAt string

Timestamp no formato RFC 3339.

installation.updatedAt string

Timestamp no formato RFC 3339.

installation.deletedAt string

Timestamp no formato RFC 3339.

installation.suspendedAt string

Definido enquanto a instalação está suspensa; não definido quando ela está ativa. Timestamp RFC 3339.

installation.installedBy object

Usuário que instalou o app originalmente.

installation.installedBy.id string

installation.installedBy.email string Obrigatório

installation.installedBy.displayName string

Nome de exibição legível por humanos: o nome e o sobrenome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é gerado a partir do email, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

installation.installedBy.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um handle reivindicado e para perfis não públicos.

installation.installedBy.performedVia object

Definido quando um app agiu em nome deste usuário com um installation user token, para a ação descrita por este campo de actor. Por exemplo, no autor de um comentário, indica o app que criou o comentário, e não um actor que o editou ou excluiu depois. Ausente quando o usuário agiu diretamente; também pode estar ausente quando os dados de delegação não estiverem disponíveis.

installation.installedBy.performedVia.app object

O app que agiu em nome do usuário.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no ator da fachada oficial do Cherri Code.

app object

O app ao qual a instalação pertence.

app.id string

app.displayName string

O display name registrado do app, nunca vazio quando presente. Omitido quando a hidratação no momento do enqueue não conseguiu resolver o app.

Exemplo de event.payload:

{  "installation": {    "id": "inst_01k2ja2000e0080000000000b2",    "appId": "app_01k2ja2000e0080000000000a1",    "target": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "repoSelectionMode": "selected",    "repositories": [      {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      }    ],    "scopes": [      "repository:contents:read",      "repository:pull_requests:read"    ],    "repositoriesCount": 1,    "createdAt": "2026-08-01T09:30:00Z",    "installedBy": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    },    "suspendedAt": "2026-08-03T08:15:00Z"  },  "app": {    "id": "app_01k2ja2000e0080000000000a1",    "displayName": "CI Status Bot"  }}

Instalação reativada

EVENTinstallation.unsuspended

Campos do payload

installation object

O snapshot da instalação no momento do evento.

installation.id string

installation.appId string

O identificador do app instalado; o mesmo valor de app.id no payload.

installation.target object

O owner de um repositório.

installation.target.slug string

Nome único do owner, compatível com URL.

installation.target.id string

ID único do namespace do proprietário.

installation.target.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.repoSelectionMode string

Um dos valores: all, selected.

installation.repositories lista

Vazio quando repository_selection é "all". Limitado a 5.000; consulte repositories_count para o total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

O owner de um repositório.

installation.repositories[].owner.slug string

Nome único do owner, compatível com URL.

installation.repositories[].owner.id string

ID único do namespace do proprietário.

installation.repositories[].owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.scopes vetor

installation.repositoriesCount integer

Total real; 0 quando repository_selection for "all".

installation.createdAt string

Timestamp no formato RFC 3339.

installation.updatedAt string

Timestamp no formato RFC 3339.

installation.deletedAt string

Timestamp no formato RFC 3339.

installation.suspendedAt string

Definido enquanto a instalação estiver suspensa; desativado quando ela estiver ativa. Timestamp RFC 3339.

installation.installedBy objeto

Usuário que instalou o app originalmente.

installation.installedBy.id string

installation.installedBy.email string Obrigatório

installation.installedBy.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a UI do produto renderiza. Omitido quando a conta não tem nome; nunca é gerado a partir do email, do id ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

installation.installedBy.handle string

O handle de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um handle reivindicado e para perfis não públicos.

installation.installedBy.performedVia object

Definido quando um app agiu em nome deste usuário com um installation user token, referente à ação descrita por este campo actor. Por exemplo, no autor de um comentário, indica o app que criou o comentário, e não um actor que o editou ou excluiu posteriormente. Ausente quando o usuário agiu diretamente, e pode estar ausente quando os dados de delegação não estiverem disponíveis.

installation.installedBy.performedVia.app objeto

O app que agiu em nome do usuário.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

O display name registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e no actor de fachada first-party do Cherri Code.

app object

O app ao qual a instalação pertence.

app.id string

app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido quando a hidratação durante o enfileiramento não conseguiu resolver o app.

Exemplo de event.payload:

{  "installation": {    "id": "inst_01k2ja2000e0080000000000b2",    "appId": "app_01k2ja2000e0080000000000a1",    "target": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "repoSelectionMode": "selected",    "repositories": [      {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      }    ],    "scopes": [      "repository:contents:read",      "repository:pull_requests:read"    ],    "repositoriesCount": 1,    "createdAt": "2026-08-01T09:30:00Z",    "installedBy": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "app": {    "id": "app_01k2ja2000e0080000000000a1",    "displayName": "CI Status Bot"  }}

Instalação excluída

EVENTinstallation.deleted

Campos do payload

installation object

A captura da instalação no momento do evento.

installation.id string

installation.appId string

O identificador do app instalado; o mesmo valor de app.id no payload.

installation.target object

O owner de um repositório.

installation.target.slug string

Nome único do owner, compatível com URL.

installation.target.id string

ID único do namespace do proprietário.

installation.target.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.repoSelectionMode string

Um dos valores: all, selected.

installation.repositories matriz

Vazio quando repository_selection é "all". Limitado a 5.000; consulte repositories_count para o total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

O owner de um repositório.

installation.repositories[].owner.slug string

Nome único do owner, compatível com URL.

installation.repositories[].owner.id string

ID único do namespace do proprietário.

installation.repositories[].owner.type string

team ou user. Disponível apenas na saída; fica indefinido quando desconhecido. Um entre team, user.

installation.scopes matriz

installation.repositoriesCount integer

Total real; 0 quando repository_selection for "all".

installation.createdAt string

Timestamp no formato RFC 3339.

installation.updatedAt string

Timestamp no formato RFC 3339.

installation.deletedAt string

Timestamp no formato RFC 3339.

installation.suspendedAt string

Definido enquanto a instalação está suspensa; não definido quando ela está ativa. Timestamp RFC 3339.

installation.installedBy object

Usuário que instalou o app originalmente.

installation.installedBy.id string

installation.installedBy.email string Obrigatório

installation.installedBy.displayName string

Nome de exibição legível por humanos: o primeiro e o último nome da conta, cada um sem espaços extras, unidos por um espaço — exatamente o nome que a interface do produto exibe. Omitido quando a conta não tem nome; nunca é gerado a partir do e-mail, do ID ou de qualquer outro campo. Também pode estar ausente em payloads de webhook cujo ator não pôde ser identificado.

installation.installedBy.handle string

O identificador de perfil reivindicado pelo usuário (a identidade por trás de cursor.com /@handle), sem o prefixo @. Presente apenas enquanto o perfil do usuário estiver visível publicamente; omitido para usuários sem um identificador reivindicado e para perfis não públicos.

installation.installedBy.performedVia object

Definido quando um app age em nome desse usuário usando um token de usuário da instalação para a ação descrita pelo campo de ator. Por exemplo, no campo de autor de um comentário, identifica o app que criou o comentário, não um ator que o editou ou excluiu depois. Ausente quando o usuário age diretamente; também pode estar ausente quando os dados de delegação não estão disponíveis.

installation.installedBy.performedVia.app object

O app que agiu em nome do usuário.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

O nome de exibição registrado do app, nunca vazio quando presente. Omitido em payloads cujo app não pôde ser resolvido e para o ator da fachada oficial do Cherri Code.

app object

O app ao qual a instalação pertence.

app.id string

app.displayName string

O display name registrado do app, nunca vazio quando presente. Omitido quando a hidratação no momento do enqueue não conseguiu resolver o app.

Exemplo de event.payload:

{  "installation": {    "id": "inst_01k2ja2000e0080000000000b2",    "appId": "app_01k2ja2000e0080000000000a1",    "target": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    },    "repoSelectionMode": "selected",    "repositories": [      {        "id": "repo_01k2ja2000e0080000000000q4",        "name": "rocket",        "owner": {          "slug": "acme",          "id": "ns_01k2ja2000e0080000000000p3",          "type": "team"        }      }    ],    "scopes": [      "repository:contents:read",      "repository:pull_requests:read"    ],    "repositoriesCount": 1,    "createdAt": "2026-08-01T09:30:00Z",    "installedBy": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    },    "deletedAt": "2026-08-03T08:15:00Z"  },  "app": {    "id": "app_01k2ja2000e0080000000000a1",    "displayName": "CI Status Bot"  }}

Anotações da execução de verificação

EVENTOrepository.check_run.annotations.created

Uma solicitação CreateCheckRunAnnotations acrescenta anotações a uma execução de verificação (repository.check_run.annotations.created). As anotações são somente de acréscimo (nunca são editadas nem removidas individualmente), então .created representa todo o ciclo de vida delas, e cada solicitação corresponde a um evento. check_run é uma referência, não um instantâneo: consulte GetCheckRun para obter o status, a conclusão e a saída da execução'. annotations segue a ordem da solicitação e pode conter menos itens do que annotations_count quando o Origin limita a lista para que o corpo possa ser entregue; consulte as páginas restantes com ListCheckRunAnnotations. Como nos outros webhooks de check-run, o payload não traz contexto de pull request: identifique o pull request a partir de sha.

Campos do payload

repository object

O repositório ao qual a execução de verificação pertence.

repository.id string

repository.name string

repository.owner object

O proprietário de um repositório.

repository.owner.slug string

Nome exclusivo do proprietário, compatível com URL.

repository.owner.id string

ID único do namespace do proprietário.

repository.owner.type string

team ou user. Somente saída; não definido quando desconhecido. Um entre team e user.

checkRun object

A execução de verificação à qual as anotações foram adicionadas, junto com seu conjunto de testes.

checkRun.id string

checkRun.name string

checkRun.checkSuite objeto

Suíte à qual esta execução de verificação pertence.

checkRun.checkSuite.id string

sha string

SHA do commit HEAD resolvido ao qual a execução de verificação está associada (hexadecimal em minúsculas).

annotations matriz

As anotações adicionadas, na ordem da solicitação. A lista pode ter menos itens que annotations_count quando o Origin limita seu tamanho.

annotations[].id string

annotations[].checkRunId string

annotations[].annotationLevel string

Um dos valores: notice, warning, failure.

annotations[].message string

annotations[].title string

annotations[].rawDetails string

annotations[].createdAt string

Timestamp no formato RFC 3339.

annotations[].updatedAt string

Timestamp no formato RFC 3339.

annotations[].location objeto

Localização de origem opcional para uma anotação de check-run. path, start_line e end_line são obrigatórios sempre que a anotação envolvente fornecer esta mensagem. path é canônico e relativo ao repositório; linhas e colunas são coordenadas positivas, inclusivas e numeradas a partir de 1; columns só é compatível com intervalos de uma única linha.

annotations[].location.path string Obrigatório

Tamanho máximo em UTF-8: 4096 bytes.

annotations[].location.startLine integer Obrigatório

annotations[].location.endLine integer Obrigatório

annotations[].location.columns objeto

Par opcional de colunas para um intervalo de anotação de uma única linha.

annotations[].location.columns.startColumn integer

annotations[].location.columns.endColumn integer

annotationsCount integer

Número de anotações adicionadas pela solicitação.

createdAt string

Quando o lote foi adicionado. Timestamp no formato RFC 3339.

Exemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "checkRun": {    "id": "cr_01k2ja2000e0080000000000g7",    "name": "unit-tests",    "checkSuite": {      "id": "crg_01k2ja2000e0080000000000h8"    }  },  "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",  "annotations": [    {      "id": "cra_01k2ja2000e0080000000000v1",      "checkRunId": "cr_01k2ja2000e0080000000000g7",      "annotationLevel": "warning",      "message": "Deprecated API usage; migrate to the v2 client.",      "title": "Deprecated API",      "createdAt": "2026-08-02T14:45:00Z",      "updatedAt": "2026-08-02T14:45:00Z",      "location": {        "path": "src/telemetry.ts",        "startLine": 42,        "endLine": 42,        "columns": {          "startColumn": 5,          "endColumn": 31        }      }    },    {      "id": "cra_01k2ja2000e0080000000000v2",      "checkRunId": "cr_01k2ja2000e0080000000000g7",      "annotationLevel": "failure",      "message": "Three tests failed in telemetry.test.ts.",      "title": "Test failures",      "rawDetails": "FAIL telemetry.test.ts flushes on shutdown (expected 1 call, received 0)",      "createdAt": "2026-08-02T14:45:00Z",      "updatedAt": "2026-08-02T14:45:00Z"    }  ],  "annotationsCount": 2,  "createdAt": "2026-08-02T14:45:00Z"}