Registro de alterações da API Origin
A API Origin está em Beta Inicial e sujeita a alterações. Revise a especificação OpenAPI ao atualizar uma integração.
Alterações na API Origin pública, incluindo endpoints, esquemas de solicitação e resposta, escopos e webhooks, agrupadas por dia, com as mais recentes primeiro. Cada alteração tem um rótulo: Incompatível, Descontinuada, Adicionada, Alterada ou Removida. Alterações incompatíveis e descontinuadas incluem orientações de migração no próprio texto. A referência da API Origin sempre reflete o estado sincronizado mais recente.
- Alterado. Um
pageSizeenviado junto com umpageTokense aplica à página correspondente, e uma solicitação de acompanhamento que omitepageSizemantém o tamanho de página anterior, em List App Installation Repositories, List Branches, List Check Run Annotations, List Check Runs For Commit, List Check Runs For Suite, List Check Suites For Commit, List Commit Files, Listar arquivos de comparação, List Namespace Grants, List Namespaces, List Pull Request Files, List Pull Requests, List Repos e List Repository Grants. List Commit Files e List Comparison Files não rejeitam mais comInvalidArgument(HTTP 400) umpageSizede acompanhamento diferente do enviado na primeira solicitação, e os demais endpoints deixaram de ignorá-lo. Todos os demais parâmetros aos quais um page token está vinculado, como o repositório, os filtros e a versão da pull request, ainda precisam corresponder.
- Alterado. Merge Pull Request retorna
Aborted(HTTP 409 Conflict) em vez deInvalidArgument(HTTP 400) quando o head branch do pull request avançou além do head da suaversionmais recente, por exemplo, porque foi integrado um push que o Origin ainda não havia registrado como nova versão. É a mesma resposta dada a umexpectedHeadShadesatualizado. Em nenhum dos casos o merge é feito; tente novamente depois que Get Pull Request informar o novo head emversion.headSha.
- Incompatível. As referências de versão de threads de comentários e de revisões não incluem mais
createdAt; elas contêm apenasnumber,headShaebaseShada versão. Isso abrangethread.versionem List Pull Request Comments, Get Pull Request Comment, Create Pull Request Comment e Update Pull Request Comment,versionem Update Pull Request Thread,pullRequestVersionem List Pull Request Reviews, Create Pull Request Review, Update Pull Request Review e Dismiss Pull Request Review, além dos mesmos campos nos payloadspull_request.comment.createdepull_request.review.*. Migração: nos pontos em que sua integração liacreatedAtde uma versão de thread ou de revisão, passe a lê-lo deversionem Get Pull Request ou no payload de ciclo de vidapull_request.*que registrou essa versão, fazendo a correspondência pelonumber. - Adicionado. As versões da pull request agora incluem
potentialMergeCommit, o merge de teste que o Origin faz dessa versão:stateéprepared,merge_conflictouunknown, e um mergepreparedinclui também oshado commit de merge e obaseSha, a ponta do branch base a partir da qual ele foi gerado. O campo é retornado emversionpor List Pull Requests, Get Pull Request, Create Pull Request, Update Pull Request e Merge Pull Request, e incluído nos payloads de ciclo de vidapull_request.*, para que um receptor de webhook obtenha a prévia do merge sem precisar chamar Get Git Ref. Um evento traz o valor vigente no momento em que foi emitido; por isso, trateunknowncomo ainda não determinado e leia a pull request novamente. - Adicionado. Create Installation User Token emite um token de usuário da instalação que age em nome de um membro elegível do namespace:
POST /v1/origin/app/installations/{installationId}/user_access_tokens. Requer um JWT do app e uma instalação à qual tenha sido concedidonamespace:user_tokens:write. Identifique o usuário comuserIdouuserEmail; os campos opcionaisscopeserepositoryIdsrestringem o acesso. O token expira em no máximo 15 minutos e nunca dura mais que o JWT do app. - Adicionado. Atores do tipo usuário podem incluir
performedVia.appcom oide odisplayNameopcional do app quando um app agiu em nome do usuário. O campo fica ausente em ações feitas diretamente pelo usuário e pode ficar ausente quando os dados de delegação não estão disponíveis. Consulte Agir em nome de usuários. - Adicionado. List Commits aceita os filtros
authorEmailsecommitterEmails, com até 100 e-mails distintos cada. A correspondência ignora maiúsculas/minúsculas e espaços nas extremidades; quando as duas listas são definidas, o commit precisa corresponder a ambas. Uma página filtrada pode vir vazia e ainda assim ter umnextPageToken, então continue paginando até o token vir vazio. - Alterado. Uma execução de verificação cancelada não substitui mais um resultado aprovado. Um post
completedcom a conclusãocancelledenviado para uma execução que estácompletedcomsuccess,neutralouskippedé ignorado como desatualizado, qualquer que seja o seuexternalUpdatedAt; assim, Post Check Run e Batch Upsert Check Runs respondem200com a execução armazenada e ooutcomeignored_stale. Já um cancelamento enviado como nova tentativa de execução ou de suíte passa a ter prioridade menor que a tentativa aprovada; assim, List Check Runs For Commit, List Check Suites For Commit, List Check Runs For Suite e Get Pull Request Mergeability continuam informando a aprovação. Uma falha mais recente continua substituindo uma aprovação, e um cancelamento continua prevalecendo sobre uma execução com falha ou pendente; consulte a regra completa em Tentativas e a tentativa atual.
- Adicionado. List Namespaces lista os namespaces nos quais você pode listar repositórios, ordenados por slug:
GET /v1/origin/namespaces. 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. Apenas os namespaces em que você temnamespace:repositories:readsão retornados, de modo que cadanamespace.slugé umownerSlugválido para List Repos. O campoviewerCanCreateRepositoriesde cada entrada indica se uma chamada a Criar repositório nesse namespace passaria, no seu caso, pela autorização e pelas verificações de plano e de configurações do proprietário. As páginas contêm 30 namespaces por padrão e no máximo 100. Requer uma credencial de usuário do Cherri Code, não exige escopo e custa 1 ponto; tokens de app, tokens de acesso da instalação e contas de serviço recebemPermissionDenied(HTTP 403).
- Alterado. Reabrir um pull request por meio de Update Pull Request registra uma nova
versionquando o head foi movido enquanto o pull request estava fechado e enviapull_request.head_ref.pushed. Antes, o pull request mantinha o head que tinha no momento do fechamento até a branch receber um novo push. A versão registrada tem seus própriosheadSha,baseShae estatísticas de diff, no mesmo formato registrado por um push. Pull requests mergeados não são afetados. - Alterado. Um SHA de commit abreviado enviado para Get Commit ou List Commit Files é resolvido da mesma forma que em Get Git Commit: apenas entre objetos de commit. Assim, um prefixo que identifica exatamente um commit é resolvido mesmo quando um blob ou tree no repositório compartilha esse prefixo. A entrada de 22 de setembro mencionava apenas Get Git Commit. Get Blob e Get Tag não foram alterados.
Apps e instalações
- Alterado. Criar token de acesso da instalação informa que um token expira em no máximo 15 minutos e nunca depois do JWT do app que o solicitou. Leia
expiresAtna resposta e emita um novo token quando esse prazo passar, em vez de presumir uma duração fixa.
Pull requests
- Alteração incompatível. Create Pull Request não aceita mais
parentPullNumber. Uma solicitação que o inclua retornaInvalidArgument(HTTP 400) indicandoparent_pull_numberem vez de criar o pull request. Assim, um client que continue enviando esse campo falha de forma explícita, em vez de perder silenciosamente o parent da stack. Migração: envieparentPullRequestcom um membronumberem todos os lugares onde sua integração enviavaparentPullNumber. - Adicionado. Delete Pull Request Comment exclui um comentário de Pull Request pelo seu id no Origin:
DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}. O autor do comentário sempre pode excluí-lo; qualquer outro chamador precisa ter acesso de gravação ao repositório por meio derepository:contents:write, caso contrário recebePermissionDenied(HTTP 403). Excluir o último comentário de um thread remove o thread, enquanto excluir qualquer outro comentário mantém o thread. Em ambos os casos, as reações e o histórico de edições do comentário também são removidos. Um id desconhecido ou já excluído retorna404. Requerrepository:pull_requests:reviews:writee custa 5 pontos. - Adicionado. As respostas de pull request incluem um objeto
stackcom oidda stack e oparentPullRequestsobre o qual este pull request está empilhado. Esse objeto fica ausente quando o pull request não faz parte de uma stack e não incluiparentPullRequestna raiz. Ele é retornado por List Pull Requests, Get Pull Request, Create Pull Request, Update Pull Request e Merge Pull Request, e está presente em todo payloadpull_request.*. Umstackentregue reflete a topologia no momento do evento em que foi enviado. - Adicionado. Create Pull Request e Update Pull Request aceitam
parentPullRequest, um seletor que indica o parent da stack pornumberouid, ou o remove comclearna atualização. Exatamente um membro deve ser definido; um seletor vazio,clear: false, mais de um membro ouclearna criação retornamInvalidArgument(HTTP 400). A edição é apenas uma associação: nenhuma branch é reescrita, ebasesó é redirecionado quando também é enviado. A atualização aplica o seletor depois debase, então um parent explícito prevalece sobre o parent derivado de uma alteração de base. - Adicionado. List Pull Requests aceita
stackId, um id de stack no formato retornado emstack.id. Os membros dessa stack são retornados na ordem de classificação solicitada, e não na ordem da stack; por isso, recrie a stack a partir dostack.parentPullRequestde cada membro. O valor padrão destatecontinua sendoopen, então passestate=allpara obter a stack inteira. Um id bem formado que não corresponda a nenhuma stack no repositório retorna uma lista vazia, e qualquer outro valor retornaInvalidArgument(HTTP 400). - Adicionado. List Pull Requests aceita
headSha, o SHA hexadecimal completo de 40 ou 64 caracteres do head de um pull request. Um pull request é selecionado quando qualquer uma de suas versões registradas tem esse head commit, seja atual ou substituída; por isso, comparehead.shaem cada resultado para distinguir os dois casos. SHAs malformados, abreviados ou desconhecidos não retornam nenhum resultado.
Execuções de verificação
- Obsoleto.
checkRunsna resposta de Batch Upsert execução de verificação está obsoleto e foi substituído porresults[].checkRun. Ele será removido em uma versão futura, mas continua sendo preenchido com as mesmas execuções, na mesma ordem. Migração: leiaresults[].checkRun, que associa cada execução armazenada aooutcomeda respectiva gravação. - Adicionado. Post execução de verificação retorna
outcome, e Batch Upsert execução de verificação retornaresults[], com um item por execução enviada, na ordem da solicitação. Cada item associacheckRunao seu própriooutcome. O valor écreated,updated,unchangedouignored_stale. Um envio cujoexternalUpdatedAtseja mais antigo que o carimbo armazenado é ignorado, e um envio que repete os valores armazenados não altera nada. Em ambos os casos, a resposta é200com a execução armazenada eupdatedAtpermanece inalterado; por isso,outcomeé a única forma de diferenciá-los. - Alterado. O
messagede uma anotação de execução de verificação pode conter Markdown, que o Origin renderiza na Página da Pull Request, tanto na aba Checks quanto no cartão inline em Changes. Esse formato é aceito em Post execução de verificação e Batch Upsert execução de verificação e retornado por Obter execução de verificação.rawDetailscontinua sendo texto simples.
Dados do Git
- Alterado. Get Git Commit resolve um
shaabreviado somente quando ele tem pelo menos 5 caracteres hexadecimais, e apenas entre objetos de commit. A solicitação falha quando nenhum commit ou mais de um commit corresponde à abreviação. SHAs completos, branches, tags eHEADcontinuam sendo resolvidos como antes.
Autoridades certificadoras SSH
- Adicionado. List SSH Certificate Authorities lista as autoridades de certificação SSH em que um proprietário confia para git over SSH, da mais recente para a mais antiga, junto com
requireCertificates, que indica se o proprietário exige certificados:GET /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities. A resposta não é paginada, e cada entrada decertificateAuthorities[]contémid,name,keyType,fingerprint,publicKeyecreatedAt. Requernamespace:settings:read. - Adicionado. Add SSH Certificate Authority adiciona uma autoridade em que o proprietário confia e a retorna:
POST /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities. O corpo recebe umpublicKeyobrigatório, que é uma linhaauthorized_keysdo OpenSSH cujo tipo de chave sejassh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521oussh-rsacom módulo de pelo menos 2048 bits, e umnameobrigatório de no máximo 255 caracteres. Um certificado, um tipo de chave não compatível ou uma chave RSA menor retornaInvalidArgument(HTTP 400); uma chave que o proprietário já tem na lista retornaAlreadyExists(HTTP 409 Conflict), sendo a verificação feita no âmbito do proprietário, e não do Origin como um todo; e um proprietário que não pertence a uma equipe retornaFailedPrecondition(HTTP 400). Requer uma credencial de usuário do Cherri Code comnamespace:settings:write. - Adicionado. Delete SSH Certificate Authority remove uma autoridade do proprietário e responde com
204 No Content:DELETE /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities/{certificateAuthorityId}. Todos os certificados assinados pela autoridade deixam de funcionar e, enquanto o proprietário exigir certificados, a última autoridade dele não pode ser removida; a tentativa retornaFailedPrecondition(HTTP 400). Requer uma credencial de usuário do Cherri Code comnamespace:settings:write. - Adicionado. Set SSH Certificate Requirement define se o proprietário exige certificados SSH:
POST /v1/origin/owners/{ownerSlug}/ssh-certificate-authorities:setRequirement. O corpo recebe um booleanorequireCertificatesobrigatório, e a resposta contém a configuraçãorequireCertificatesdo proprietário. Enquanto a exigência estiver ativa, o git over SSH nos repositórios do proprietário aceita apenas certificados das autoridades dele; assim, chaves SSH registradas por usuários e chaves de API de usuário via HTTPS são recusadas. Exigir certificados sem nenhuma autoridade na lista retornaFailedPrecondition(HTTP 400), e definir o valor atual é concluído com sucesso, sem nenhuma alteração. Requer uma credencial de usuário do Cherri Code comnamespace:settings:write.
Webhooks
- Adicionado.
pull_request.comment.reaction.addedepull_request.comment.reaction.removedsão webhook events nos quais é possível se inscrever, entregues quando uma reação é adicionada a um comentário de Pull Request ou removida dele. O payload compartilhado entre eles contém a referênciapullRequest, uma referênciacommentcom o respectivothreade areactioncom os respectivoscontentereactor. Uma adição é entregue pelo menos uma vez: adicionar novamente uma reação que o reator já tem entrega o evento outra vez para o mesmo comentário, reator e conteúdo, então consolide os eventos com base nesse trio. Remover uma reação que o reator não tem não gera nenhuma entrega. - Alterado. O payload de
pull_request.label.removedcontémactor, o principal que removeu o rótulo, quando conhecido. A entrada de 19 de setembro informava queactorera definido apenas empull_request.label.added, mas ele é definido nos dois eventos quando o principal é conhecido.
- Adicionado. Delete Git Ref exclui uma referência de branch:
DELETE /v1/origin/repos/{ownerSlug}/{repoName}/git/refs/{ref}. O caminho identifica o branch comorefs/heads/<branch>ouheads/<branch>, e somente referências de branch podem ser excluídas. Um branch inexistente retorna404; o branch padrão do repositório, um branch protegido por uma regra de exclusão e um repositório cujo conteúdo é espelhado de outro host retornamFailedPrecondition(HTTP 400); e um branch cuja ponta muda durante a exclusão retornaFailedPrecondition(HTTP 400) ouAborted(HTTP 409 Conflict). Nesse caso, tente novamente para excluir a nova ponta. Pull requests cujo head é o branch excluído são fechados, assim como acontece após uma exclusão via push. Requerrepository:contents:writee custa 5 pontos. - Adicionado.
pull_request.label.addedepull_request.label.removedsão eventos de webhook que podem ser assinados, entregues quando um rótulo é atribuído a um pull request ou removido dele. O payload compartilhado entre eles contém a referênciapullRequeste o snapshotlabel. Somente empull_request.label.added, ele também inclui umactorque identifica o principal que atribuiu o rótulo. Excluir a definição de um rótulo entrega umpull_request.label.removedpara cada pull request que tinha esse rótulo.
- Alteração incompatível. Criar app passa a exigir que o proprietário do namespace esteja apto a fazer gravações no Origin, a mesma pré-condição que Criar repositório sempre exigiu. Uma solicitação em um namespace cujo proprietário seja um usuário que não esteja em um plano Pro, Pro Student, Pro+, Ultra ou Start, ou cujo proprietário seja uma equipe sem um plano de equipe pago ativo, no Privacy Mode (Legado) ou com o Origin desativado por um admin da equipe, retorna
FailedPrecondition(HTTP 400), quando antes criava o app. A verificação considera a aptidão do proprietário do namespace, não a do usuário que faz a chamada. Migração: crie apps apenas em namespaces cujo proprietário possa fazer gravações no Origin e trateFailedPreconditionem todos os pontos em que sua integração presumia que o app havia sido criado. - Alterado. O Origin agora concede ao destinatário de um webhook 10 segundos para responder a uma entrega, em vez de cinco. O prazo abrange a resolução de DNS, a conexão, o handshake TLS e o tempo até a resposta, e vale para cada tentativa; uma tentativa que exceder esse prazo conta como erro de transporte e é repetida conforme o cronograma documentado em Tentativas.
- Alteração incompatível. Os arquivos de Get Repo Tarball envolvem a árvore do repositório em um único diretório de nível superior chamado
{ownerSlug}-{repoName}-{shortSha}/, em queshortShacorresponde aos 7 primeiros caracteres hexadecimais do commit resolvido, seguindo o layout do endpoint de tarball do GitHub. Antes, as entradas do arquivo ficavam na raiz do arquivo tar, sem um diretório envolvente. Migração: remova um componente inicial do caminho ao extrair, por exemplo comtar --strip-components=1, em todos os pontos em que sua integração lia entradas da raiz do arquivo tar. - Alteração incompatível. Get App passa a exigir
namespace:apps:readno namespace proprietário do app, em vez deapp:settings:read, o escopo anunciado junto com o endpoint na entrada de 12 de setembro.app:settings:readnão autoriza mais nenhuma operação e foi removido do catálogo de escopos;app:settings:writepermanece inalterado e continua abrangendo Update App, Add App Signing Key e Revoke App Signing Key. Migração: concedanamespace:apps:readno namespace proprietário do app em todos os pontos em que sua integração usavaapp:settings:read. - Adicionado. List App Installation Repositories aceita
filter, uma correspondência de substring que não diferencia maiúsculas de minúsculas, aplicada aos nomes de repositório e aos namespaces de proprietário. Um valorowner/repocom uma única barra compara cada metade com o campo correspondente; espaços em branco no início e no fim são ignorados, e um valor vazio não aplica nenhum filtro. Cada page token carrega o filtro com o qual foi gerado, portanto envie o mesmo filtro ao solicitar as páginas seguintes. - Alterado. A especificação OpenAPI não inclui mais
format: enumnos esquemas de enum do tipo string. Essa chave não é um formato registrado do OpenAPI nem do JSON Schema, duplicava a listaenumao lado dela, e geradores que a mapeavam para um tipo nomeado emitiam código que não compilava. Os nomes de esquema, os valores de enum e o JSON transmitido permanecem inalterados; gere novamente qualquer client criado a partir da especificação para obter os tipos corrigidos.
- Incompatível. Os payloads de
repository.check_run.createderepository.check_run.completednão incluem mais umactorno nível do payload. Esse campo repetia o principal da suíte de verificações à qual a execução pertence, que o mesmo payload já entrega comocheckSuite.actorecheckRun.actor. Migração: onde sua integração lia oactorde nível superior do payload, leiacheckRun.actor, que é sempre igual aoactorda suíte à qual a execução pertence. - Incompatível.
caseInsensitiveewholeWordem Grep Contents só se aplicam quandoliteralé true. Uma busca por expressão regular passa a ignorar os dois booleanos, que antes eram respeitados, e umaquerycontendo apenas(?i)retornaInvalidArgument(HTTP 400). Migração: definaliteralpara continuar usando os booleanos ou, em uma busca por expressão regular, escreva um(?i)no início e delimitadores de palavra\bdiretamente naquery. - Incompatível. A especificação OpenAPI renomeia o schema de componente
ThreadparaCommentThread. Ele é o schema de resposta de Update Pull Request Thread e o tipo do objetothreadem um comentário de Pull Request. Nomes de campos, caminhos, IDs de operação e o JSON transmitido continuam iguais, então uma integração que lê as respostas diretamente não precisa de nenhuma alteração. Migração: gere novamente qualquer cliente criado a partir da especificação e renomeie o tipo onde o código gerado usavaThread. - Adicionado. Add App Installation Repositories adiciona repositórios à seleção de uma instalação existente e retorna a instalação atualizada:
POST /v1/origin/namespaces/{namespaceSlug}/installations/{installationId}/repos. O corpo recebe um array obrigatóriorepoIds, que é combinado com a seleção atual; a gravação nunca altera os escopos da instalação, e uma solicitação cujos repositórios já estejam todos concedidos é concluída com sucesso sem alterar nada. Um repositório fora do namespace, uma instalação que já abrange todos os repositórios do namespace, uma instalação suspensa e uma instalação anterior aos escopos por instalação retornamFailedPrecondition(HTTP 400) e não concedem nada. Requer uma credencial de usuário do Cherri Code comnamespace:installations:writee custa 5 pontos. A primeira instalação continua exigindo o consentimento de um administrador do namespace no navegador. - Adicionado. Respostas tarifadas de Git over HTTPS incluem
X-RateLimit-Limit,X-RateLimit-RemainingeX-RateLimit-Used, comX-RateLimit-Resourcedefinido comogit. O Git tem um orçamento próprio, separado do orçamento REST que Limites de taxa documenta comocore. Uma solicitação Git que excede o orçamento retorna429comRetry-AftereX-RateLimit-Reset, e uma solicitação não tarifada não inclui cabeçalhos de limite de taxa. - Alterado. Upsert Repository Grant e Upsert Namespace Grant aceitam um principal
grouppertencente à própria equipe do proprietário do resource, além dos grupos da organização que já aceitavam. Os grupos da própria equipe podem receber concessões mesmo quando essa equipe não está vinculada a uma organização, enquanto um grupo pertencente a outra equipe continua retornandoFailedPrecondition(HTTP 400). A página Concessões descreve os tipos de principal.
- Alteração incompatível. Create Repo exige
namespace:repositories:createno lugar denamespace:new_repository:write, que não autoriza mais nada e foi removido do catálogo de escopos. Migração: solicitenamespace:repositories:createna credencial de usuário do Cherri Code em todos os pontos em que sua integração solicitavanamespace:new_repository:write. - Adicionado. Get Pull Request Mergeability informa se um pull request pode ser mergeado e, quando não pode, as condições tipadas que o bloqueiam:
GET /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/mergeability.verdictémergeableoublocked, e cada entrada emblockerstraz umkind, umamessagelegível por humanos e o pull request emevaluatedPullRequestsao qual pertence, de modo que o veredito de um pull request em stack abrange todos os pull requests desde a raiz da stack até ele. Uma proteção opcionalexpectedHeadSharetornaAborted(HTTP 409 Conflict) quando o head tiver avançado, e um repositório espelhado ou uma stack com mais de 200 pull requests retornaFailedPrecondition(HTTP 400). A operação está disponível em prévia, marcada comx-cursor-visibility: PREVIEWna especificação OpenAPI; portanto, decodifique as respostas tolerando campos e valores de enum desconhecidos e trate umverdictnão reconhecido comoblocked. Exigerepository:pull_requests:reade custa 10 pontos. - Adicionado. Grep Contents pesquisa o texto dos arquivos de um repositório em uma ref e retorna as linhas correspondentes:
POST /v1/origin/repos/{ownerSlug}/{repoName}:grep. O corpo recebe umqueryobrigatório, interpretado como expressão regular, a menos queliteralesteja definido, além deref,caseInsensitive,wholeWord,contextBeforeecontextAfter(valores acima de 10 são reduzidos para 10),filterPath, as listas de globincludeseexcludes(no máximo 20 entradas cada) emaxResults(padrão e máximo de 1000). Cada entrada retornada corresponde a uma linha, e a resposta só está completa quandolimitHité false; não há paginação. Exigerepository:contents:reade custa 5 pontos. - Adicionado. O
statusde check-run ganhou um quarto valor,rerequested, e List Check Runs For Commit o aceita como filtro destatus. Ele indica uma execução concluída cuja reexecução foi solicitada, mas à qual o app proprietário ainda não respondeu; portanto, trate-a como pendente e exiba-a comoqueued. Ele aparece em Get Check Run, List Check Runs For Suite, List Check Runs For Commit e Rerequest Check Run. Somente o Origin define esse valor: uma solicitação de Post Check Run ou Batch Upsert Check Runs que o contenha retornaInvalidArgument(HTTP 400). - Adicionado. List Pull Requests aceita
sortBy, comcreated(ordem de criação, o padrão) ouupdated(hora da última atualização).directiondefine o sentido da ordenação porsortBye continua com padrãodesc. Um token de página guarda a ordenação com a qual foi gerado, então um token reutilizado com a outra ordenação é rejeitado. - Adicionado. List Pull Requests aceita
state=merged, que lista apenas pull requests mergeados.closedcontinua abrangendo todos os pull requests que não estão mais abertos, incluindo os mergeados, então os chamadores existentes continuam vendo os mesmos resultados. - Alterado. Rerequest Check Run define o
statusda execução comorerequested, substituindo a observação de 11 de setembro de que a chamada nunca altera ostatusnem aconclusionda própria execução. Aconclusione os tempos da execução continuam descrevendo a tentativa substituída; portanto, leiaconclusionsomente quandostatusforcompleted. A execução continua aparecendo como pendente em List Check Runs For Suite e List Check Runs For Commit até que o app responsável responda, o que também limparerequestedAte armazena o status enviado. - Alterado. O payload de
repository.check_run.rerequestedtrazcheckRun.statuscomorerequestedem vez decompleted, echeckRun.conclusione os tempos continuam descrevendo a tentativa substituída. A migração é a mesma do endpoint: trate cada caso com base emcheckRun.statuse leiacheckRun.conclusionsomente quando o status forcompleted.
Pull requests
- Alteração incompatível. Create Pull Request e Update Pull Request agora rejeitam um
baseque não corresponda a um branch existente. Um SHA de commit, um nome de tag ou um branch inexistente retornaInvalidArgument(HTTP 400) e informa a ref totalmente qualificada que o Origin procurou. Antes, a mesma solicitação criava o pull request ou alterava o branch de destino dele. Nesses casos, a ref de merge do pull request nunca podia ser preparada, então o CI nunca a recebia e não era possível mergear o pull request. Migração: passe um nome de branch, na forma curta, comomain, ou totalmente qualificada, comorefs/heads/main, e altere o destino de todo pull request existente cuja base seja um SHA de commit ou uma tag.
Apps
- Adicionado. Criar app registra um app pertencente a um namespace:
POST /v1/origin/namespaces/{namespaceSlug}/apps. O corpo recebe os campos obrigatóriosdisplayNameepublicKey(a chave pública Ed25519 em PEM SPKI com a qual o app assina seus JWTs), além dos opcionaiswebhookUrl,events,description,websiteUrl,installationRedirectUrisedefaultScopes. Os apps são criados como privados, e uma URL de webhook, tipo de evento, URI de redirecionamento ou escopo inválido retornaInvalidArgument(HTTP 400). Requernamespace:apps:createem uma credencial de usuário do Cherri Code e custa 10 pontos. - Adicionado. List Namespace Apps lista os apps pertencentes a um namespace, do mais recente para o mais antigo:
GET /v1/origin/namespaces/{namespaceSlug}/apps. As entradas trazem apenas metadados de exibição (id,displayNameedescription); para ler a configuração de webhook de um app, use Get App. Requernamespace:apps:reade custa 1 ponto. - Adicionado. Get App retorna a configuração completa de um app pelo id:
GET /v1/origin/apps/{appId}. Esta é a leitura de gerenciamento feita pelo publisher; Get Authenticated App continua sendo a leitura que o próprio app faz com seu JWT. Requerapp:settings:reade custa 1 ponto. - Adicionado. Update App grava a configuração de um app:
PATCH /v1/origin/apps/{appId}.displayName,webhookUrl,descriptionewebsiteUrlsão campos simples, enquantoevents,installationRedirectUrisedefaultScopessão wrappers de substituição completa, que trocam a lista inteira. Campos omitidos permanecem inalterados, uma requisição que não define nada retornaInvalidArgument(HTTP 400), e enviarwebhookUrlcomo string vazia desativa a entrega e cancela definitivamente as entregas pendentes do app. Requerapp:settings:writee custa 5 pontos. - Adicionado. Add App Signing Key registra mais uma chave pública Ed25519 para um app:
POST /v1/origin/apps/{appId}/signing_keys. A resposta traz okida ser usado como ID da chave do JWT, que é o digest SHA-256 em base64url da codificação SPKI DER da chave. Uma chave já registrada retornaAlreadyExists(HTTP 409 Conflict), e uma chave que ultrapasse o limite de chaves ativas do app retornaFailedPrecondition(HTTP 400). Requerapp:settings:writee custa 5 pontos. - Adicionado. Revoke App Signing Key desativa uma chave de assinatura e responde com
204 No Content:DELETE /v1/origin/apps/{appId}/signing_keys/{kid}. JWTs de app assinados com a chave revogada deixam de autenticar, e revogar a última chave ativa retornaFailedPrecondition(HTTP 400). Requerapp:settings:writee custa 5 pontos. - Adicionado. As respostas de app trazem
namespaceSlug, o slug do namespace ao qual o app pertence, junto comdescription,websiteUrledefaultScopes. Esses campos são retornados por Get Authenticated App, Get App, Criar app e Update App.
Concessões
- Adicionado. List Repository Grants lista os usuários, grupos e grupos da equipe proprietária que têm uma permissão concedida diretamente em um repositório:
GET /v1/origin/repos/{ownerSlug}/{repoName}/grants. Permissões herdadas do proprietário do repositório não são incluídas, e um principal que não pode mais ser resolvido é omitido; por isso, uma página pode conter menos concessões do quepageSize. Requerrepository:settings:reade custa 1 ponto. - Adicionado. Upsert Repository Grant define a permissão que um principal tem diretamente em um repositório:
POST /v1/origin/repos/{ownerSlug}/{repoName}/grants. O corpo especifica exatamente um entreuser,groupouteamGroupe umapermissionigual aread,writeouadmin;customretornaInvalidArgument(HTTP 400), e um principal fora da equipe ou organização do proprietário retornaFailedPrecondition(HTTP 400). Repetir uma concessão que o principal já tem é bem-sucedido e não gera alteração. Requerrepository:settings:writee custa 5 pontos. - Adicionado. Delete Repository Grant remove a permissão que um principal tem diretamente em um repositório e responde com
204 No Content:DELETE /v1/origin/repos/{ownerSlug}/{repoName}/grants. Permissões herdadas do proprietário não são afetadas, então um grupo da equipe proprietária volta ao padrão definido no nível do proprietário. Remover uma permissão que o principal não tem diretamente é bem-sucedido e não gera alteração. Requerrepository:settings:writee custa 5 pontos. - Adicionado. List Namespace Grants lista quem recebeu acesso a um proprietário:
GET /v1/origin/owners/{ownerSlug}/grants. Cada concessão indica a permissão que confere em todos os repositórios do proprietário, as concessões de admin aparecem primeiro, e concessões feitas em repositórios individuais são excluídas. Requernamespace:settings:reade custa 1 ponto. - Adicionado. Upsert Namespace Grant define a permissão que um principal tem diretamente em um proprietário:
POST /v1/origin/owners/{ownerSlug}/grants.permissionaceitaPERMISSION_READ,PERMISSION_CONTRIBUTOR,PERMISSION_WRITEouPERMISSION_ADMIN, ePERMISSION_CUSTOMretornaInvalidArgument(HTTP 400). Um principal fora da equipe proprietária ou de sua organização, ou uma gravação que deixaria o proprietário sem admin, retornaFailedPrecondition(HTTP 400). Requernamespace:settings:writee custa 5 pontos. - Adicionado. Delete Namespace Grant remove a permissão que um principal tem diretamente em um proprietário e responde com
204 No Content:DELETE /v1/origin/owners/{ownerSlug}/grants. Concessões por repositório não são afetadas, e uma remoção que deixaria o proprietário sem admin retornaFailedPrecondition(HTTP 400). Requernamespace:settings:writee custa 5 pontos.
Instalações
- Adicionado. As instalações incluem
suspendedAt, definido enquanto a instalação está suspensa e omitido quando ela está ativa, edeletedAt, presente apenas no snapshot do webhookinstallation.deleted. Ambos são retornados por Get App Installation e List App Installations. - Adicionado. Os cinco payloads
installation.*inclueminstallation.appId, com o mesmo valor doapp.iddo próprio payload, einstallation.updatedAteminstallation.createdeinstallation.updated. Todos os campos de uma instalação retornados por Get App Installation estão presentes no snapshot com o mesmo nome e tipo, de modo que um único decodificador faz a leitura de ambos.
Execuções de verificação
- Alteração incompatível. O payload de
repository.check_run.rerequestednão inclui mais umrerequestedByde nível superior. O principal que solicitou a nova execução agora fica na execução de verificação incorporada, comocheckRun.rerequestedBy, substituindo a nota de 10 de setembro segundo a qual o payload traz o solicitante junto ao repositório, à suíte e à execução. Migração: leiacheckRun.rerequestedByonde quer que seu destinatário lesse orerequestedBydo próprio payload. - Adicionado. Rerequest Check Run solicita ao app que relatou uma execução de verificação que a execute novamente:
POST /v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/rerequestcom corpo vazio. A execução deve estarcompleted, deve terisRerequestable, deve ser a tentativa atual para suakeye deve estar no head atual de um pull request aberto; qualquer outro caso retornaFailedPrecondition(HTTP 400), e uma segunda solicitação enquanto outra estiver pendente retornaAlreadyExists(HTTP 409 Conflict). A chamada nunca altera ostatusnem aconclusionda própria execução. Qualquer principal comrepository:contents:writepode solicitar novamente qualquer execução que aceite nova solicitação, independentemente do app que a relatou, e a chamada custa 5 pontos. - Adicionado. As execuções de verificação incluem
rerequestedBy, o principal que solicitou a nova execução, presente sempre quererequestedAtestiver definido e limpo junto com ele. Retornado por Obter execução de verificação, List Check Runs For Suite, List Check Runs For Commit, Post execução de verificação, Batch Upsert execução de verificação e Rerequest Check Run. - Alterado.
rerequestedAtpassa a indicar uma nova solicitação pendente, e não mais um registro único. O Origin o limpa quando o app proprietário responde publicando uma nova execução para o mesmo head SHA ekey, seja uma nova execução com um novoexternalIdou uma atualização da execução solicitada com o mesmoexternalId; depois disso, a execução pode ser solicitada novamente. Isso substitui a nota de 10 de setembro segundo a qual uma execução de verificação pode ser solicitada novamente no máximo uma vez; portanto, um destinatário pode receber mais de um eventorepository.check_run.rerequestedpara a mesma execução. Continue eliminando entregas duplicadas pelo id do evento. - Alterado. Uma execução de verificação solicitada novamente permanece em List Check Runs For Suite e List Check Runs For Commit e aparece como pendente, com
rerequestedAtdefinido e osstatuseconclusionanteriores inalterados, em vez de sair das duas listagens até o app responder. Uma verificação obrigatória bloqueia o merge como verificação pendente, e não como ausente. Isso substitui a nota de 10 de setembro segundo a qual a execução sai das listagens até que chegue uma nova tentativa.
Repositórios
- Adicionado. Update Repo grava as configurações do repositório:
PATCH /v1/origin/repos/{ownerSlug}/{repoName}. O corpo aceita os campos opcionaisdefaultBranch,allowMergeCommit,allowSquashMerge,deleteBranchOnMergeevisibility, e os campos omitidos permanecem inalterados.allowMergeCommiteallowSquashMergedevem ser enviados juntos, com pelo menos um deles comotrue;defaultBranchedeleteBranchOnMergeretornamFailedPrecondition(HTTP 400) em um repositório que recebe dados de uma fonte upstream; e uma requisição que não define nada retornaInvalidArgument(HTTP 400). Os grupos são aplicados em uma ordem fixa, e não de forma atômica, portanto, se um grupo for rejeitado, os grupos anteriores a ele permanecem aplicados. Requerrepository:settings:writee custa 5 pontos. - Adicionado. Transition Repo Mirror inicia uma alteração na direção do espelhamento e retorna o job que a acompanha:
POST /v1/origin/repos/{ownerSlug}/{repoName}/mirror:transition. O corpo exige umtransitioncom valorinitial_to_inbound,inbound_to_outboundououtbound_to_inbound, e o repositório permanece com status de espelhamento em transição enquanto o job é executado. Um repositório que não esteja no estado inicial esperado pela transição, ou que já tenha um job ativo, retornaFailedPrecondition(HTTP 400). Requerrepository:mirror:writeem uma credencial de usuário do Cherri Code que também administre o repositório na fonte upstream do espelhamento, e custa 10 pontos. - Adicionado. Force Repo Mirror Cutover transfere um repositório para sua fonte upstream sem enviar de volta o estado divergente:
POST /v1/origin/repos/{ownerSlug}/{repoName}/mirror:forceCutovercom corpo vazio. A fonte é adotada como fonte da verdade no estado em que se encontra, e as refs que existem apenas no Origin são salvas em um snapshot e abandonadas. A operação só é aceita para um repositório com statusoutboundou travado em uma transição de outbound para inbound cujo job ativo informerequires_attention; nesse caso, a transferência forçada substitui esse job. Requerrepository:mirror:writee custa 10 pontos. - Adicionado. Detach Repo Mirror desconecta permanentemente um repositório espelhado da sua fonte upstream e responde
204 No Content:DELETE /v1/origin/repos/{ownerSlug}/{repoName}/mirror. O repositório mantém seu conteúdo e se torna um repositório nativo, a sincronização é interrompida em ambas as direções e a credencial de deploy do espelhamento é excluída. Desvincular um repositório já desvinculado é bem-sucedido, mas não tem efeito, enquanto um repositório que nunca teve espelhamento retornaFailedPrecondition(HTTP 400). Requerrepository:mirror:deletee custa 5 pontos. - Adicionado. Get Mirror Transition Job retorna um job de transição pelo id:
GET /v1/origin/repos/{ownerSlug}/{repoName}/mirror/transition-jobs/{jobId}. Um job informa seutransition, umstatuscom valorqueued,running,succeeded,failed_rolled_back,requires_attentionousuperseded, umattemptCounte, em caso de falha,lastErrorCodeelastErrorMessage. A stringphaseé um detalhe de exibição que ganha novos valores à medida que o processo de transição evolui, então consultestatusperiodicamente para verificar a conclusão em vez de se basear emphase. Requerrepository:metadata:reade custa 1 ponto. - Adicionado. Get Active Mirror Transition Job retorna o job de transição em andamento do repositório e o último job já finalizado:
GET /v1/origin/repos/{ownerSlug}/{repoName}/mirror/transition-jobs:active. TantoactiveJobquantolastJobsão opcionais, então um repositório que nunca passou por transição retorna um objeto vazio; consultar periodicamente até queactiveJobdesapareça e depois lerlastJobé o que permite distinguir uma transição concluída de uma que nunca foi executada. Requerrepository:metadata:reade custa 1 ponto. - Alterado. As referências dos endpoints de estado de espelhamento foram movidas para a API de migração do Origin. Os contratos HTTP não mudaram, e as âncoras anteriores da API Origin redirecionam para a nova referência.
- Adicionado. Merge Pull Request aceita um
mergeMethodopcional com valormergeousquash, que define se o pull request entra como um merge commit ou como um único commit de squash. Um método que o repositório não permite é rejeitado comFailedPrecondition(HTTP 400), e qualquer outro valor, incluindorebase, é rejeitado comInvalidArgument(HTTP 400). Omita-o para manter o comportamento anterior: um merge commit quando o repositório permite; caso contrário, um squash; e um squash quando a branch base exige histórico linear. - Adicionado. Os payloads de repositório incluem
visibility, que pode serinternalouprivate, além dos booleanosallowMergeCommit,allowSquashMergeedeleteBranchOnMerge. Os quatro campos são somente leitura e são retornados por Get Repo, Criar repositório, List Repos e List App Installation Repositories. - Adicionado. As execuções de verificação incluem
isRerequestable, em que o app que reporta a execução declara que ela pode ser executada novamente, ererequestedAt, o timestamp da nova solicitação. EnvieisRerequestableem Post execução de verificação e Batch Upsert execução de verificação; ambos os campos são retornados nessas operações e em Obter execução de verificação, List Check Runs For Suite e List Check Runs For Commit. Ao declarar uma execução como re-solicitável, seu app se compromete a responder a cada nova solicitação publicando uma nova execução para o mesmo SHA de head ekey. - Adicionado.
repository.check_run.rerequestedé entregue quando uma execução de verificação concluída é solicitada novamente e chega apenas ao app dono da execução, e não a todos os inscritos no repositório. Seu payload inclui o repositório, a suíte de verificações, a execução de verificação marcada ererequestedBy, mas não traz contexto de pull request; portanto, identifique o pull request a partir decheckRun.sha. A inscrição exigerepository:checks:read. Uma execução de verificação só pode ser solicitada novamente uma vez, então elimine reentregas duplicadas usando o id do evento. - Adicionado. Todo schema de webhook payload na especificação OpenAPI inclui uma extensão
x-origin-webhook-eventsque indica os eventos com os quais ele é entregue, além de um payload de exemplo selecionado comoexampledo schema. A nova referência de payloads de eventos documenta os campos e o payload de exemplo de cada payload e é gerada a partir desses schemas, no mesmo layout da referência de endpoints. - Alterado. Uma execução de verificação solicitada novamente deixa de aparecer em List Check Runs For Suite e List Check Runs For Commit até que o app dono dela publique uma nova tentativa ou atualize a existente com um
externalUpdatedAtmais recente. Com isso, uma verificação obrigatória aparece como ausente e bloqueia o merge enquanto a nova solicitação estiver pendente. Para ler a execução excluída, use o id dela com Obter execução de verificação.
- Alteração incompatível. Uma âncora
inlinecujo intervalo de linhas ultrapassa o fim do arquivo agora é rejeitada comInvalidArgument(HTTP 400) em Create Pull Request Comment e Create Pull Request Review. O intervalo continua sem se restringir aos hunks do diff e é validado com base no arquivo como ele existe no lado ancorado:lefto lê no commit base eright, no head. O erro informa a quantidade de linhas do arquivo. Em uma revisão, basta uma âncora fora do intervalo para que toda a solicitação falhe e nada seja publicado. Migração: antes de gravar, limiteinline.startLineeinline.endLineà quantidade de linhas do lado ancorado, obtendo esse valor por meio de Get Contents quando a âncora estiver fora dos hunks do diff.
- Adicionado. Create Git Ref cria uma branch em um commit existente:
POST /v1/origin/repos/{ownerSlug}/{repoName}/git/refs. Receberefcomorefs/heads/<branch>ouheads/<branch>eshacomo o SHA hex completo de um commit no repositório; tags e outros namespaces de referência retornamInvalidArgument(HTTP 400). Criar uma branch que já aponta parasharetorna a referência existente, e criar uma branch que já existe em outro commit retornaAlreadyExists(HTTP 409 Conflict). Requerrepository:contents:writee custa 5 pontos. - Adicionado. Create Commit From Files faz commit de alterações de arquivo inline em uma branch e a avança:
POST /v1/origin/repos/{ownerSlug}/{repoName}/git/commits:createFromFiles. Cada entrada defiles[]define exatamente um entrecontent(comencodingutf-8oubase64emodefile,executableousymlink) edelete, eexpectedHeadShadeve corresponder à ponta da branch, que se torna o parent do novo commit. A resposta retornasha,treeShaepreviousHeadSha. Cada solicitação comporta no máximo 1.000 alterações de arquivo, 8 MiB por arquivo e 32 MiB de conteúdo no total. Requerrepository:contents:writee custa 10 pontos. - Alterado. A entrega de webhook agora faz sete novas tentativas após uma falha de envio, em vez de seis, e a primeira nova tentativa ocorre 5 segundos após a falha, e não mais 30 segundos. A sequência completa é de 5 segundos, 30 segundos, 1 minuto, 2 minutos, 4 minutos e 8 minutos; assim, um destinatário que fique fora do ar durante todo o período recebe um
POSTa mais praticamente na mesma janela de 16 minutos. Desduplique a tentativa extra pelowebhook-id, da mesma forma que você faz com as demais.
- Alteração incompatível. Os metadados de app não incluem mais
slug. O campo foi removido da resposta de Get Authenticated App, de todos os atores de app retornados pelas operações de check, pull request, revisão e comentário (actor.app,author.appedismissal.dismissedBy.app), do objetoappnos cinco payloads de webhookinstallation.*e do payload de Ping Webhook. Isso substitui a nota de 2 de setembro, segundo a qual os atores de app incluemdisplayNamejunto comideslug. Antes, era garantido que um ator de app incluísseslug; agora ele incluiide o campo opcionaldisplayName. Migração: identifique apps poride rotule-os comdisplayNameem todos os pontos em que sua integração liaslug. - Adicionado. List Pull Request Comments aceita um parâmetro de consulta opcional
threadIds, que restringe a listagem aos comentários dessas threads. Assim, você pode ler uma única thread sem paginar todo o histórico de comentários de um pull request. Duplicatas são ignoradas, então o limite de 20 se aplica a IDs distintos; uma lista maior ou um ID vazio retornaInvalidArgument(HTTP 400). Os page tokens incorporam o conjunto com o qual foram gerados, então reinicie a paginação sempre que o filtro mudar. - Alterado. O filtro
authorem List Pull Requests agora também aceita o endereço de email exato de um usuário, sem diferenciar maiúsculas de minúsculas, além dos IDs de atoruser_…,app_…esa_…que já aceitava. Um email que não corresponde a um único usuário retorna uma lista vazia em vez de um erro; antes, um email retornavaInvalidArgument(HTTP 400). Apps e contas de serviço não têm identidade de email, então só é possível selecionar autores que sejam usuários dessa forma, e os IDs de ator continuam sendo a identidade retornada nessas respostas.
- Adicionado. List Check Runs For Commit aceita os parâmetros de consulta opcionais
checkNameestatus.checkNamecorresponde exatamente aonamede uma execução de verificação, estatusaceitaqueued,in_progressoucompleted; qualquer outro valor retornaInvalidArgument(HTTP 400). Os dois filtros são aplicados após o agrupamento pela tentativa mais recente. Assim, uma execução é filtrada pelo status da sua tentativa mais recente, e um filtro nunca traz de volta uma tentativa substituída. Os page tokens incorporam os filtros com os quais foram emitidos, então reinicie a paginação quando um filtro mudar. - Adicionado. List Pull Request Comments aceita os parâmetros de consulta opcionais
sinceeuntil, que definem limites inclusivos para o horário de criação do comentário no formato de timestamps RFC 3339, como2026-08-01T00:00:00Z. Um timestamp malformado retornaInvalidArgument(HTTP 400). Os page tokens incorporam os limites com os quais foram emitidos, então reinicie a paginação quando um limite mudar. Usesincepara acompanhar novos comentários em vez de paginar novamente todo o histórico de comentários de um pull request. - Alterado. Quando os escopos obrigatórios de uma operação vêm da própria credencial, e não de uma concessão da instalação, a extensão
x-origin-scopesdessa operação é marcada comambient: truena especificação OpenAPI publicada. Nove operações têm essa flag, entre elas Get Authenticated App, Criar token de acesso da instalação e List App Installation Repositories. As strings de escopo continuam na extensão, para que as respostas403ainda as indiquem, e o tratamento de solicitações não muda. Consulte a flag para distinguir uma operação que exige apenas autenticação de uma que precisa de um escopo aprovado na instalação.
- Alteração incompatível. List Check Suites For Commit, List Check Runs For Commit e List Check Runs For Suite retornam apenas a tentativa mais recente de cada verificação e omitem as tentativas substituídas, em linha com o que o merge gate e as visualizações de CI do produto já exibiam. Uma suíte é consolidada na sua tentativa mais recente por actor responsável pelo relatório e chave de suíte, e uma execução é consolidada na sua tentativa mais recente por chave de execução dentro de uma suíte. Assim, uma execução com falha e sua nova tentativa bem-sucedida não aparecem mais juntas.
totalSizee os tokens de página consideram o conjunto consolidado. Migração: para ler uma tentativa substituída, use o id dela em Get Check Run ou Get Check Suite, que continuam acessando todas as tentativas armazenadas. - Adicionado. Create Pull Request Comment aceita uma âncora
fileque abre uma thread de comentários em um arquivo inteiro no diff da versão da pull request. Ela contém apenasfile.path: o Origin deduz 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 nos demais casos) e o retorna emthread.side. Envie o caminho excluído no caso de uma exclusão e o caminho head em qualquer outra alteração; um caminho fora do diff ou o caminho original de um arquivo renomeado (anterior à renomeação) retornaInvalidArgument(HTTP 400).file,inlineethreadIdsão mutuamente exclusivos. Create Pull Request Review aceita a mesma âncora comocomments[].file. - Adicionado. Actors públicos de usuário agora incluem
displayNameehandle, além deideemail.displayNameé o nome e o sobrenome da conta separados por um espaço, o mesmo nome exibido pelo produto, e é omitido quando a conta não tem nome.handleé o handle de perfil reivindicado, sem o prefixo@, e só aparece enquanto esse perfil estiver visível publicamente. Ambos aparecem onde quer que um actor de usuário apareça, incluindo autores de pull requests e comentários, actors de execuções de verificação e de suítes, dispensas de revisão, revisores solicitados, oinstalledByde uma instalação e os webhook payloads correspondentes. O recibo de instalação incluidisplayName, mas nuncahandle. - Adicionado. Actors públicos de app agora incluem o
displayNameregistrado do app, além deideslug, e o objetoappnos cinco webhook payloadsinstallation.*também passa a incluí-lo. Ele é omitido quando não é possível resolver o app e no actor gerenciado próprio do Cherri Code. - Alterado. Solicitar um escopo
:writetambém concede o escopo:readcorrespondente. Assim, uma instalação que solicitarepository:labels:writerecebe tambémrepository:labels:read. Isso vale quando um app é instalado, quando uma instalação é pré-visualizada e quando um token de acesso da instalação restringe seus escopos; além disso, uma credencial existente somente de gravação agora permite a leitura correspondente. Escopos de leitura continuam sem conceder gravação.
- Adicionado.
repository.deletedé entregue quando um repositório é excluído, seja pela exclusão de um repositório nativo ou de saída no produto, seja pela interrupção da sincronização em um espelho de entrada. O payload traz uma referênciarepositoryedeletedAtem vez de um snapshot, porque um repositório excluído não é mais resolvido pela API. A assinatura exigerepository:metadata:read. Diferentemente derepository.pushed, este evento é entregue para repositórios espelhados do GitHub, já que interromper a sincronização exclui apenas o repositório do lado do Cherri Code, e o GitHub não envia nada nesse caso. Excluir novamente um repositório já excluído não emite nenhum evento. - Adicionado.
repository.metadata.updatedé entregue quando a branch padrão de um repositório é alterada, incluindo gravações feitas pelas configurações e pela API, um espelho de entrada que acompanha uma renomeação no upstream e a reconciliação do trunk no primeiro push. O payload traz o snapshot completo derepositoryapós a gravação, sem delta e sem o ator que fez a atualização; portanto, compare snapshots sucessivos ou busque o repositório novamente para ver o que mudou. A assinatura exigerepository:metadata:read. - Adicionado. Os usuários solicitados como revisores agora trazem um
emailjunto com oid. Ele aparece em List Pull Request Requested Reviewers e Request Pull Request Reviewers, e na entradareviewer.userdos webhookspull_request.reviewer.added,pull_request.reviewer.removedepull_request.reviewer.rerequested. O valor é o endereço de email da conta e fica vazio quando a conta não tem um. Antes, esses pontos identificavam o usuário apenas pelo id. - Alterado. As respostas REST passam a incluir os campos com valor padrão em vez de omiti-los; assim, um booleano
false, um número0, uma string vazia e um array vazio estão presentes em todos os corpos de resposta. Um pull request que não é rascunho, retornado por Get Pull Request, informadraftcomofalseem vez de omiti-lo, e uma lista vazia retorna[]em vez de não retornar nada. Campos que o contrato marca como opcionais, comosubmitted_atedismissal, continuam ausentes quando não definidos. Onde sua integração tratava uma chave ausente como valor padrão, passe a ler o próprio valor. Isso segue a forma como os payloads de webhook sempre foram serializados. - Alterado. Cada operação na especificação OpenAPI publicada tem um
operationIdexclusivo. Quando uma operação atende a dois formatos de URL, o segundo formato recebe o sufixo_2:OriginService_GetRepoTarball_2paraGET …/tarball/{ref}eOriginService_ListMatchingGitRefs_2paraGET …/git/matching-refs. Os dois formatos de URL e o tratamento das solicitações não mudaram; portanto, gere novamente qualquer cliente criado a partir da especificação para obter os métodos renomeados. - Alterado.
installation.updatedtambém é entregue quando o namespace do proprietário é renomeado, uma vez para cada instalação que ainda pertence ao namespace. O evento traz o novo slug do namespace, junto com os escopos atuais e a seleção de repositórios dessa instalação.
- Alterado. Todas as operações da especificação OpenAPI publicada incluem uma extensão
x-origin-scopesque indica o escopo exigido pela operação e as credenciais aceitas.scopescontém o escopo exigido, etokenTypescontém os tipos de credencial aceitos:apppara um JWT do app,installationpara um token de acesso da instalação euserpara uma credencial de usuário. Tipos de credencial rejeitados pela operação ficam ausentes detokenTypes, e Consultar limite de taxa é a única operação que não exige escopo. A extensão também substituiu as frases sobre escopo que constavam nas descrições de Create Label, Update Label e Delete Label. A autorização não mudou: a extensão apenas publica os escopos que o Origin já aplicava.
- Adicionado. List Pull Request Requested Reviewers retorna os usuários e grupos cuja revisão está pendente em uma pull request:
GET /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers. Uma solicitação direta é removida quando esse usuário envia uma revisão, e uma solicitação de grupo é removida quando qualquer membro atual do grupo envia uma revisão. Já uma revisão em rascunho não enviada mantém a solicitação pendente. Os revisores são retornados como ids, e a leitura deles requerrepository:pull_requests:reviews:read. - Adicionado. Request Pull Request Reviewers solicita revisões de usuários e grupos e retorna os revisores solicitados:
POST /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers. Identifique cada revisor pelo id públicouser_…, e-mail, idgrp_…ou slug do grupo. Nomes de exibição não são resolvidos, um identificador desconhecido ou ambíguo retornaInvalidArgument(HTTP 400), e um revisor que não é candidato para o repositório retornaPermissionDenied(HTTP 403). Solicitar novamente um revisor já solicitado renova a solicitação, de modo que um revisor que já havia enviado uma revisão volta a aparecer como pendente. Requerrepository:pull_requests:reviews:write. - Adicionado. Remove Pull Request Requested Reviewers remove solicitações de revisão pendentes e retorna
204com corpo vazio:DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers. Remover um revisor que não está solicitado no momento não tem efeito, e um public id estável continua sendo resolvido mesmo depois que esse revisor sai da lista de candidatos do repositório, o que permite remover solicitações obsoletas. Requerrepository:pull_requests:reviews:write. - Adicionado. Update Pull Request Thread resolve ou reabre uma thread de comentários de pull request e retorna seu estado atualizado:
PATCH /v1/origin/repos/{ownerSlug}/{repoName}/pulls/threads/{threadId}. Envieresolvedcomotruepara resolver oufalsepara reabrir. Ambas as operações são idempotentes, responder a uma thread resolvida não a reabre, e uma thread armazenada em outro repositório retorna404. Requerrepository:pull_requests:reviews:write. - Adicionado. Comentários de pull request agora trazem a thread completa em vez de apenas o id da thread.
threadpassou a incluir aversionà qual foi vinculada, com os SHAs de head e base, opath,side,startLineeendLineda âncora de diff da thread,resolvedAte os próprioscreatedAteupdatedAtda thread. Retornado por List Pull Request Comments, Get Pull Request Comment e Update Pull Request Comment.thread.idnão mudou, então agrupar comentários por ele continua funcionando. - Adicionado. Create Pull Request Comment aceita uma âncora
inline, composta porpath,side,startLinee umendLineopcional, que abre uma thread ancorada em uma linha no diff de uma versão da pull request, além de umversionNumberque indica a versão à qual vincular o comentário e, por padrão, corresponde à mais recente no momento da chamada. Opathdeve fazer parte do diff dessa versão, em um lado no qual o arquivo tenha conteúdo. Qualquer linha de um arquivo alterado pode servir de âncora, não apenas linhas dentro de um hunk do diff, e uma âncora inválida retornaInvalidArgument(HTTP 400) em vez de virar um comentário de discussão geral.inlineethreadIdsão mutuamente exclusivos, assim comothreadIdeversionNumber. - Adicionado. Create Pull Request Review aceita uma matriz
comments, com no máximo 50 itens por solicitação, que publica uma revisão junto com seus comentários em uma única chamada atômica. Cada item contém umbodye os mesmos destinos de Create Pull Request Comment: uma âncorainlineno diff da versão revisada, uma respostathreadIdou nenhum dos dois, para criar uma nova thread de discussão geral. Todas as âncoras são validadas antes de qualquer gravação, então basta uma âncora inválida para que a solicitação inteira falhe comInvalidArgument(HTTP 400), sem publicar nada. A operação não tem chave de idempotência, então consulte List Pull Request Reviews antes de tentar novamente após uma falha ambígua. Uma solicitação semcommentscontinua funcionando como antes. - Adicionado.
pull_request.comment.createdinclui a âncora de diff da thread no comentário que abriu a thread, para que um destinatário possa materializar a thread sem precisar de uma leitura adicional.comment.threadcontém os camposversion,path,side,startLineeendLineaos quais o comentário se refere; uma resposta inclui apenascomment.thread.id, e o estado de resolução não faz parte do evento. Comentários registrados com uma revisão por meio de Create Pull Request Review não emitem nada até que a revisão seja enviada; a partir daí, cada um emite seu próprio evento.
- Adicionado. Get Repo Tarball baixa um arquivo tar compactado com gzip da árvore de um repositório:
GET /v1/origin/repos/{ownerSlug}/{repoName}/tarball/{ref}. A primeira solicitação para um commit resolvido transmiteapplication/gzipcomo corpo da resposta; solicitações posteriores para o mesmo commit retornam302com uma URL de download assinada emLocation, válida por 15 minutos. As entradas do arquivo ficam na raiz do arquivo tar, sem diretório de nível superior; um repositório vazio retornaABORTED(HTTP 409 Conflict); e baixar um arquivo requerrepository:contents:read. - Adicionado. Listar arquivos de comparação lista os arquivos alterados em uma comparação, ou seja, o diff de
headem relação à base de merge debaseehead:GET /v1/origin/repos/{ownerSlug}/{repoName}/compare/{basehead}/files. Os resultados são paginados, com 30 arquivos por página por padrão e no máximo 100, e cada arquivo tem o mesmo formato retornado por List Commit Files. Uma comparaçãoidenticaloubehindretorna uma lista vazia, históricos sem relação retornam404, e uma comparação cujos commits mudam durante a paginação rejeita o token de página comInvalidArgument(HTTP 400), para que a listagem recomece da primeira página. A leitura de arquivos de comparação requerrepository:contents:read. - Adicionado. O endpoint de chaves de assinatura envia
Cache-Control: public, max-age=600, stale-if-error=600. Reutilize um JWKS em cache por 10 minutos e depois atualize; se uma atualização falhar, mantenha as últimas chaves válidas por no máximo mais 10 minutos antes de falhar a verificação. Atualize ao receber uma assinatura que nenhuma chave ativa consiga verificar, para que um ID de chave desativado seja descartado. - Alterado. Uma check run ainda
in_progressquando seudeadlineAtexpira é concluída com a conclusãotimed_oute entregarepository.check_run.completed, substituindo a nota de 27 de agosto de que um prazo não altera o status de uma execução. A expiração ocorre por meio de uma varredura periódica, e não de um temporizador por execução, então uma execução pode ultrapassar brevemente o prazo. Uma execuçãoqueuednunca expira, assim como uma execução semdeadlineAt, e o Origin mantém oexternalUpdatedAtda execução para que uma conclusão posterior do seu provedor possa sobrescrever a conclusãotimed_out. - Alterado.
repository.pushednão é mais entregue para repositórios que o Origin espelha do GitHub. O GitHub é responsável por esses pushes e envia seus próprios webhooks de push, então a entrega do Origin os duplicava. Pushes para repositórios Origin nativos e para espelhos de saída continuam sendo entregues normalmente, e o estado do espelho não afeta nenhum outro evento. - Alterado. Create Pull Request agora rejeita um
headsem histórico em comum combasecomInvalidArgument(HTTP 400) e não cria nada, em vez de retornar o404gerado pela comparação subjacente. - Alterado. Um push que deixa o head de um pull request aberto sem histórico em comum com sua base fecha o pull request e entrega
pull_request.closed. Um push relacionado posterior não o reabre. - Alterado. Cada operação na especificação OpenAPI documenta os códigos de resposta que ela pode retornar, em vez de listar
400,401,403e429de forma uniforme em todas as operações:404em todo caminho parametrizado,409onde um handler reporta conflito,202em Batch Redeliver Webhook Deliveries e Sync Mirror, e conjuntos menores em Get Rate Limit e Get Authenticated App. O schemaStatusdescreve o envelope de erro que o Origin retorna, inclusive o fato de que um404nunca distingue um recurso inexistente de um inacessível, e toda operação inclui um exemplo de solicitação e de resposta. O tratamento de solicitações não mudou; gere novamente qualquer cliente criado a partir da especificação para obter os novos modelos de resposta.
- Adicionado. Execuções de verificação aceitam e retornam um timestamp
deadlineAtopcional. Envie-o no corpo da execução em Post Check Run ou Batch Upsert Check Runs e leia-o em Get Check Run, List Check Runs For Suite e List Check Runs For Commit. O Origin limpa o prazo assim que a execução chega acompleted, mantém o valor armazenado quando uma atualização omite o campo e rejeita prazos a mais de 24 horas no futuro comInvalidArgument(HTTP 400), em vez de ajustá-los ao limite. Quando o prazo expira, o status da execução não muda. - Alterado. A especificação OpenAPI publicada declara
https://api.cursor.comcomo servidor e um esquema de segurança HTTP bearerbearerAuth, para que um client gerado a partir do documento já reconheça a base URL e o requisitoAuthorization: Bearer. - Alterado. Os parâmetros de caminho do OpenAPI agora têm os mesmos nomes usados nas URLs. As vinculações geradas
identifier.ownerSlugeidentifier.namepassaram a serownerSlugerepoNameem todas as 55 operações com escopo de repositório, o que permite que geradores OpenAPI padrão consumam o documento. As URLs e o comportamento das solicitações não mudaram; gere novamente qualquer client criado a partir da especificação para adotar os novos nomes de parâmetros. - Alterado. Os enums publicados não listam mais suas entradas de valor zero
*_UNSPECIFIED, comoRULESET_ENFORCEMENT_UNSPECIFIEDem Create Ruleset ePULL_REQUEST_REVIEW_VERDICT_UNSPECIFIEDem Create Pull Request Review. O Origin nunca aceitou nem retornou esses valores, portanto solicitações e respostas não mudaram. - Alterado. Todas as operações da especificação documentam respostas
400,401,403e429com o corpogoogle.rpc.Status, em vez de apenas a resposta genéricadefault. Consulte Erros para ver o corpo e a lista completa de status.
- Alteração incompatível. Os payloads de webhook de revisores para
pull_request.reviewer.added,pull_request.reviewer.removedepull_request.reviewer.rerequestedsubstituem o parreviewer.kindereviewer.idpor um revisor tipado, em que exatamente um entrereviewer.userereviewer.groupestá presente. Migração: leiareviewer.user.idonde você liareviewer.idcomreviewer.kindigual auser, ereviewer.group.idondereviewer.kinderagroup. - Adicionado. List Labels retorna as definições de rótulos de um repositório, ordenadas por nome:
GET /v1/origin/repos/{ownerSlug}/{repoName}/labels. A leitura de rótulos exige o novo escoporepository:labels:read. Os resultados são paginados, com 30 rótulos por página por padrão e no máximo 100. - Adicionado. Create Label define um rótulo em um repositório e o retorna:
POST /v1/origin/repos/{ownerSlug}/{repoName}/labels. Toda gravação de rótulo exige o novo escoporepository:labels:write.nameé limitado a 50 caracteres edescriptiona 255,colordeve ter seis caracteres hexadecimais sem#inicial, e um nome já usado por outro rótulo do repositório é rejeitado comAlreadyExists(HTTP 409 Conflict). - Adicionado. Get Label retorna um rótulo do repositório pelo nome:
GET /v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}. Um nome inexistente retorna404. - Adicionado. Delete Label exclui um rótulo do repositório pelo nome e retorna
204:DELETE /v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}. Excluir um rótulo também o remove de todos os pull requests aos quais ele estava atribuído. - Adicionado. Update Label altera o nome, a cor ou a descrição de um rótulo, identificando-o pelo nome atual:
PATCH /v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}. Campos omitidos permanecem inalterados, e renomear para um nome já usado por outro rótulo é rejeitado comAlreadyExists(HTTP 409 Conflict). - Adicionado. List Check Run Annotations retorna as anotações de uma execução de verificação em ordem crescente de ID, que também é a ordem de criação:
GET /v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/annotations. A leitura exigerepository:checks:read. Os resultados são paginados, com 30 anotações por página por padrão e no máximo 100. - Adicionado. Create Check Run Annotations acrescenta de 1 a 25 anotações a uma execução de verificação em um único lote atômico e as retorna:
POST /v1/origin/repos/{ownerSlug}/{repoName}/check-runs/{checkRunId}/annotations. O acréscimo exigerepository:checks:write. Uma execução de verificação comporta no máximo 100 anotações, e um lote que ultrapasse esse limite é rejeitado comResourceExhausted(HTTP 429) sem gravar nada. A operação só permite acréscimos e não é idempotente, portanto uma nova tentativa após uma falha ambígua pode gerar duplicatas. - Adicionado. List Pull Requests aceita mais cinco parâmetros de consulta:
author, um ID público de ator exatamente como a resposta o retorna empullRequests[].author.user.id,pullRequests[].author.app.idoupullRequests[].author.serviceAccount.id;base, um filtro exato de branch base que aceita um nome curto ou uma ref totalmente qualificada;direction,descpara os mais recentes primeiro (o padrão) ouascpara os mais antigos primeiro; esinceeuntil, limites inclusivos em RFC 3339 para a data de criação. Um autor sem pull requests retorna uma lista vazia, e qualquer outro valor inválido retornaInvalidArgument(HTTP 400). - Adicionado.
pull_request.review.dismissedé entregue quando uma revisão enviada é descartada, seja explicitamente, seja por ter sido substituída por uma decisão mais recente. Ele traz o mesmo formato de payload quepull_request.review.submitted, comreview.dismissalpreenchido, e a assinatura exigerepository:pull_requests:reviews:read. - Adicionado. As instalações agora identificam o usuário que instalou o app.
installedBy, que contém o ID públicouser_…e o email desse usuário, é retornado por Get App Installation e List App Installations e acompanha todos os snapshots de webhookinstallation.*. Nesses snapshots, ele identifica quem fez a instalação original e é omitido quando o registro desse usuário não pode mais ser lido. O recibo de instalação passa a incluir uma declaraçãoinstalledByque identifica o usuário que realizou aquela instalação ou novo consentimento. Por isso, após um novo consentimento, os dois valores podem ser diferentes.
- Adicionado. Ping Webhook envia uma entrega de teste para a URL de webhook configurada no seu app e informa o que o destinatário respondeu:
POST /v1/origin/app/webhook/pings. A entrega é assinada como uma entrega de produção, temwebhook-event-typeigual apinge não pertence a nenhuma instalação. O Origin a envia uma única vez, sem novas tentativas, e ela nunca aparece em List Webhook Deliveries. Um app sem URL de webhook configurada é rejeitado comFailedPrecondition(HTTP 400). - Adicionado. Respostas de erro trazem o request ID duas vezes: no cabeçalho de resposta
X-Request-IDe em uma entradagoogle.rpc.RequestInfoemdetails. O Origin repete ox-request-idque você enviou ou gera um quando nenhum é enviado, e inclui a entrada mesmo quando a mensagem é um erro interno opaco. Veja Erros. - Alterado. Create Pull Request e Update Pull Request rejeitam um
titlecom mais de 256 caracteres ou umbodycom mais de 65.536 caracteres, retornandoInvalidArgument(HTTP 400). Antes, valores acima desses limites falhavam com um erro interno. Ambos os limites contam code points Unicode, então um caractere astral, como um emoji, conta apenas uma vez. - Alterado. As respostas de Sync Mirror sempre trazem
synced, comtrueoufalse, de acordo com o HTTP status:200quando verdadeiro,202quando falso. Antes, o campo era omitido quando falso, e os chamadores precisavam interpretar um campo ausente comofalse. - Alterado. Caminhos sem correspondência em
/v1/origine solicitações que usam o método errado em um caminho conhecido retornam o envelope de erro documentado, em vez de um corpo genérico do router. A mensagem informa o método e o caminho e nunca repete a query string. - Alterado. Mergear um pull request agora entrega um webhook
repository.pushedpara o base ref que o merge avança. Como o próprio Origin realiza esse push, o evento não identifica nenhum autor do push. Antes, atualizações do base ref decorrentes de um merge não eram entregues.
- Alterado. Criar comentário de Pull Request e Atualizar comentário de Pull Request agora rejeitam um
bodycom mais de 65.536 caracteres, retornandoInvalidArgument(HTTP 400). Antes, um corpo acima desse tamanho falhava com um erro interno. O limite considera pontos de código Unicode, então um caractere astral, como um emoji, é contado uma única vez.
- Adicionado. Delete Ruleset exclui um ruleset do repositório pelo seu ID estável do Origin e retorna
204:DELETE /v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}. Requerrepository:rulesets:write. Um ruleset armazenado em outro repositório é tratado como desconhecido, e umrulesetIdvazio é rejeitado comInvalidArgument(HTTP 400). - Adicionado. Todo endpoint com escopo de repositório identifica um repositório pelo seu ID estável, além do proprietário e nome: envie
_como slug do proprietário e o ID como nome do repositório, como emGET /v1/origin/repos/_/REPO_ID. Obtenha o ID no campoidde Obter repositório. O ID continua válido após uma renomeação, mas não concede nenhuma permissão por si só. Por isso, seu app precisa do mesmo escopo no repositório resolvido, e um ID que ele não consegue acessar retorna o mesmo404de um ID inexistente. Criar repositório aceita apenas um slug do proprietário e rejeita_. - Alterado. Apps agora acessam repositórios espelhados. Um espelho pode ser selecionado em uma instalação, aparece em List App Installation Repositories e nas matrizes de repositórios do payload do webhook da instalação, pode ser indicado em
repositoryIdsem Criar token de acesso da instalação e recebe entregas de webhook. Enquanto não se torna um espelho de saída estável, o espelho permanece somente leitura: apenasrepository:metadata:readerepository:contents:readse aplicam, e qualquer outro escopo retorna403nesse repositório, incluindogit push. Consulte Repositórios espelhados.
- Alteração incompatível. O parâmetro de consulta
recursiveem Get Tree é um booleano, e não uma string, então apenastruee1percorrem a árvore inteira; qualquer outro valor, incluindofalse,0e um?recursivesem valor, lista apenas os filhos imediatos. Migração: envierecursive=trueem todos os pontos em que sua integração dependia de qualquer valor não vazio derecursivepara ativar a recursão. - Alteração incompatível. Os payloads de webhook do ciclo de vida de pull requests omitem os
labelsatribuídos ao pull request, substituindo o campo anunciado em 20 de agosto de 2026. As respostas REST continuam incluindo esse campo. Migração: leia os rótulos em Get Pull Request ou List Pull Requests em vez de usar o snapshot do webhook. - Adicionado. List Rulesets retorna todos os rulesets configurados em um repositório, além de uma referência
repositorycompartilhada:GET /v1/origin/repos/{ownerSlug}/{repoName}/rulesets. Como os rulesets são uma configuração de tamanho limitado, a resposta não é paginada. A leitura de rulesets exigerepository:rulesets:read. - Adicionado. Create Ruleset armazena um novo ruleset e o retorna com os IDs que o Origin atribui a cada regra e a cada ator de bypass:
POST /v1/origin/repos/{ownerSlug}/{repoName}/rulesets. Os dois endpoints de gravação de rulesets exigemrepository:rulesets:write. - Adicionado. Get Ruleset retorna um único ruleset pelo seu ID estável no Origin:
GET /v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}. - Adicionado. Update Ruleset substitui integralmente a configuração de um ruleset, incluindo
rulesebypassActors:PUT /v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}. Envie todas as regras e todos os atores de bypass que deseja manter, pois as entradas armazenadas são substituídas, e não mescladas. - Adicionado. Rulesets incluem
id,name,description,enforcement(active,evaluateoudisabled),kind(merge_branch,push_branch,push_tagoupush_repository), os padrõesincludedRefNameseexcludedRefNames(que aceitam globs e os tokens~ALLe~DEFAULT_BRANCH),rulesebypassActors. Create Ruleset e Update Ruleset rejeitam comInvalidArgument(HTTP 400) mais de 64 padrões por lista, 20 regras ou 15 atores de bypass. - Adicionado. Merge Pull Request aceita um campo opcional
expectedHeadShana solicitação: o SHA completo do commit ao qual o head do pull request deve corresponder. Se o head tiver mudado, o merge é rejeitado comABORTED(HTTP 409 Conflict) e nada é mergeado; um valor que não seja um SHA completo de commit é rejeitado comInvalidArgument(HTTP 400). Omita o campo para fazer o merge do head atual, seja ele qual for. - Adicionado. Referências de proprietário incluem uma string
type(teamouuser), omitida quando o Origin não consegue resolvê-la. Ela é retornada sempre que aparece umownerou umtargetde instalação, incluindo Get Repo, List Repos, List App Installations e a referência de repositório nas respostas de checks e de pull requests.
- Alteração incompatível. List Pull Request Labels retorna todos os rótulos atribuídos em uma única resposta e não é mais paginado: os parâmetros de consulta
pageSizeepageTokene o campo de respostanextPageTokenforam removidos. Migração: removapageSizeepageTokenda solicitação e leia o conjunto completo emlabels. - Alteração incompatível. Um pull request comporta no máximo 100 rótulos, e Add Pull Request Labels e Set Pull Request Labels rejeitam com
FailedPrecondition(HTTP 400) qualquer gravação que ultrapasse esse limite. Migração: mantenha cada pull request com no máximo 100 rótulos, removendo rótulos antes de adicionar novos. - Adicionado. Pull requests agora incluem uma matriz
labelscom os rótulos atribuídos a eles, ordenada por nome e vazia quando não há rótulos atribuídos. Essa matriz é retornada por List Pull Requests, Get Pull Request, Create Pull Request, Update Pull Request e Merge Pull Request, e incluída nos payloads de webhook do ciclo de vida de pull requests.
- Adicionado. List Pull Request Labels retorna os rótulos atribuídos a um pull request, ordenados por nome:
GET /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels. Requerrepository:pull_requests:read. Os resultados são paginados, com 30 rótulos por página por padrão e no máximo 100 rótulos por página. - Adicionado. Add Pull Request Labels atribui rótulos existentes do repositório a um pull request, sem alterar os rótulos que ele já tem:
POST /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels. Todos os endpoints de gravação de rótulos exigemrepository:pull_requests:write. - Adicionado. Set Pull Request Labels substitui todos os rótulos de um pull request pelos nomes enviados. Uma lista vazia remove todos eles:
PUT /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels. - Adicionado. Remove Pull Request Label remove um rótulo pelo nome e retorna os rótulos restantes no pull request:
DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels/{labelName}. - Adicionado. Remove All Pull Request Labels remove todos os rótulos de um pull request e retorna
204:DELETE /v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels. - Adicionado. As entradas de rótulo contêm
id,name,color(um valor hexadecimal de seis caracteres sem#inicial) e umadescriptionopcional. Elas são retornadas por todos os endpoints de rótulos de pull request. - Alterado. O orçamento do limite de taxa do JWT do app aumentou de 600 para 6.000 pontos por minuto, e Criar token de acesso da instalação passou a consumir 1 ponto em vez de 5. Assim, um app pode emitir cerca de 100 tokens de instalação por segundo.
- Alterado. A elegibilidade de proprietários para Criar repositório e para pushes via Git HTTPS agora inclui os planos Pro Student e Start, além de Pro, Pro+ e Ultra. Os requisitos para proprietários do tipo equipe continuam os mesmos.
- Alterado. Slugs de proprietários e nomes de repositórios em caminhos de repositório agora são resolvidos sem diferenciar maiúsculas de minúsculas, e as respostas retornam a grafia armazenada, não a que você enviou. Criar repositório rejeita nomes que diferem apenas em maiúsculas/minúsculas de um nome que o proprietário já tem; portanto, compare nomes de repositórios sem diferenciar maiúsculas de minúsculas.
- Alteração incompatível. O Git via HTTPS rejeita um push com
403quando o proprietário do repositório não está habilitado para gravação no Origin. Se o proprietário for um usuário, ele precisa ter um plano Pro, Pro+ ou Ultra; se for uma equipe, ela precisa ter um plano de equipe pago ativo, não pode estar no Privacy Mode (legado) e não pode ter o Origin desativado por um admin da equipe. Clone, fetch e pull não são afetados. Migração: trate o403no push como uma falha de habilitação do proprietário que não se resolve com uma nova tentativa e confirme o plano do proprietário antes de fazer push em nome dele. - Alterado. O primeiro push para um repositório criado com Criar repositório redefine o
defaultBranchquando esse push apenas cria branches e nenhuma delas é a branch padrão armazenada: o Origin escolhe a branch criada ou, se o push criar várias e uma delas se chamarmainoumaster, escolhe essa. Consulte o valor atual em Obter repositório.
- Alteração incompatível. Criar repositório rejeita solicitações cujo proprietário não esteja apto a fazer gravações no Origin e retorna
FailedPrecondition(HTTP 400). Um proprietário do tipo usuário precisa estar em um plano Pro, Pro+ ou Ultra, e um proprietário do tipo equipe precisa ter um plano de equipe pago ativo, não pode estar no Privacy Mode (legado) e não pode ter o Origin desativado por um Admin da equipe. Migração: trate o400de Criar repositório como uma falha de elegibilidade do proprietário que não se resolve com uma nova tentativa e confirme o plano do proprietário antes de criar repositórios em nome dele.
- Alteração incompatível. Os apps perderam o acesso aos repositórios que o Origin espelha do GitHub. Esses repositórios não aparecem mais em List App Installation Repositories, o Criar token de acesso da instalação os rejeita em
repositoryIds, e uma solicitação que faça referência a um deles retorna403tanto na REST API quanto no Git via HTTPS. Migração: descubra os repositórios por meio de List App Installation Repositories em vez de usar uma lista de repositórios armazenada, e faça a leitura de repositórios vindos do GitHub diretamente no GitHub, e não pela API Origin. - Alteração incompatível. O Origin deixou de enviar webhooks para os repositórios que espelha do GitHub, e os payloads de eventos de instalação deixaram de incluir esses repositórios nas matrizes de repositórios selecionados e em
repositoriesCount. Migração: obtenha os eventos de repositórios vindos do GitHub diretamente no GitHub e considere a matriz de repositórios do payload de instalação como o conjunto de repositórios que seu app pode acessar.
- Alterado. Os parâmetros de revisão agora aceitam o
HEADsimbólico, além de um SHA, branch ou tag:shaem List Commits, Get Commit, List Commit Files, Get Git Commit e Get Tree;refem Get Contents e Batch Get Contents; e qualquer um dos lados debaseheadem Compare Commits. - Alterado. Obter referência do Git resolve o
HEADsimbólico e o retorna comoref: "HEAD"junto com o commit da ponta. List Matching Git Refs e List Matching Git Refs by Path só correspondem aHEADde forma exata, porque ele não fica sobrefs/. - Alterado. Remover uma instalação ou excluir o app invalida os tokens de acesso dessa instalação antes de
expiresAt. A REST API e o Git via HTTPS rejeitam tokens revogados com401, então o app precisa ser reinstalado para poder emitir um token válido. Consulte Token de acesso da instalação.
- Alteração incompatível. Get Contents rejeita arquivos maiores que 1 MiB (após a decodificação) com
FailedPrecondition(HTTP 400), e um único arquivo acima do limite faz falhar toda a solicitação de Batch Get Contents. - Adicionado. Tokens de acesso da instalação agora autenticam o Git via HTTPS. Use o token como senha HTTP Basic, com o nome de usuário
x-access-token, nocloneUrldo repositório. Clone, fetch e pull exigemrepository:contents:read; push exigerepository:contents:write. Consulte Autenticação do Git via HTTPS. - Alterado.
cloneUrlpassa a usar o caminho raiz no formato do GitHub (https://origin.cursor.com/OWNER_SLUG/REPO_NAME.git) em vez do caminho legado/git/em List Repos, Obter repositório, Criar repositório, List App Installation Repositories e no payload do webhookrepository.created. Os dois formatos funcionam para clone, ecloneUrlnão garante nenhum formato de caminho específico; portanto, valores já armazenados continuam funcionando. - Alterado.
sizenas respostas de Get Contents e Batch Get Contents indica o tamanho do conteúdo decodificado em bytes, e não o comprimento da string base64content.
- Alteração incompatível. Os payloads de webhook de revisores trazem um ID externo estável em
reviewer.id: o ID de usuário codificado (user_…, no mesmo formato da API da organização) quandokindéuser, em substituição ao ID de autenticação com escopo do provedor; revisores do tipo grupo mantêm o public id do grupo (grp_…). Afetapull_request.reviewer.added,pull_request.reviewer.removedepull_request.reviewer.rerequested. Migração: onde sua integração comparavareviewer.idcom IDs de autenticação armazenados, passe a identificar revisores do tipo usuário pelo ID codificadouser_…. - Adicionado. Os apps podem ter até 10 chaves de assinatura Ed25519 ativas, e a verificação de JWT do app aceita tokens assinados com qualquer chave ativa.
- Adicionado. Sync Mirror sincroniza uma ref de um repositório espelhado a partir da sua fonte upstream:
POST /v1/origin/repos/{ownerSlug}/{repoName}:syncMirror. Requerrepository:contents:reade retorna200quando o alvo da sincronização é atingido ou202enquanto a sincronização está pendente. - Adicionado. Os redirecionamentos pós-instalação incluem um parâmetro de consulta
installation_receipt: um JWT assinado pelo Origin, válido por cinco minutos, que identifica a instalação na declaraçãosube replica ostatedo publisher como uma declaração. Valide-o com o JWKS publicado antes de confiar no callback. Consulte Recibo de instalação. - Removido. Os objetos de actor do Origin não incluem mais os campos de nível superior
kindeid, concluindo a descontinuação anunciada em 5 de agosto de 2026. Todos os camposactor,authoredismissedBynas respostas de checks, commits e pull requests são afetados. Migração: leia a varianteuser,appouserviceAccountdefinida no actor.
- Adicionado. Consultar limite de taxa retorna o orçamento compartilhado de pontos por minuto do principal autenticado, sem consumir pontos:
GET /v1/origin/rate_limit. Consulte Limites de taxa.
- Obsoleto.
OriginActor.kindeOriginActor.id. A identidade do ator é uma união discriminada das variantesuser,appeserviceAccount. Migração: leia os campos da variante selecionada em vez dekindeidno nível raiz.