Skip to main content

Command Palette

Search for a command to run...

API

API de Origin

Origin es la plataforma de forja de código de Cherri Code. Su API REST pública permite que las aplicaciones y herramientas interactúen con los repositorios, commits, comprobaciones, pull requests e instalaciones de aplicaciones de Origin.

  • Las aplicaciones de Origin se autentican con JWT de aplicación y tokens de acceso de instalación. Consulte Autenticación.
  • Consulte la especificación de OpenAPI completa para ver esquemas y ejemplos detallados.

Descripción general

Las aplicaciones de Origin implementan un consentimiento de instalación al estilo de OAuth y un modelo de autenticación al estilo de las aplicaciones de GitHub:

  1. La aplicación firma un JWT de EdDSA de corta duración con su clave privada Ed25519.
  2. La aplicación intercambia ese JWT y un ID de instalación por un token de acceso de instalación de corta duración (oit_…).
  3. El token de instalación llama a las API de repositorios y autentica Git a través de HTTPS dentro de los repositorios y ámbitos aprobados de la instalación.
  4. Origin envía entregas de webhooks firmadas a la URL de webhook registrada de la aplicación.

URL base

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

Las rutas de los endpoints de la referencia incluyen el prefijo /v1/origin completo.

Convenciones del protocolo

Las solicitudes y las respuestas usan application/json. Los nombres de los campos JSON usan camelCase. Las marcas de tiempo son cadenas con formato RFC 3339. Los enteros Protobuf de 64 bits, incluidos los números de pull request y de versión, se codifican como cadenas JSON.

Las respuestas incluyen los campos que tienen su valor predeterminado en lugar de descartarlos, por lo que un booleano false, un número 0, una cadena vacía y un array vacío aparecen todos en el cuerpo. Lee el valor en sí en lugar de interpretar una clave ausente como el valor predeterminado. Los campos documentados como ausentes u omitidos son opcionales en el contrato y quedan fuera del cuerpo cuando no se establecen.

Vista previa

Parte de la superficie de la API se publica en vista previa. Aparece en esta referencia y en la especificación, pero su estructura puede cambiar antes de su disponibilidad general. La especificación de OpenAPI la marca con x-cursor-visibility: PREVIEW. El marcador puede aplicarse a una operación, un parámetro, un esquema o un solo campo, por lo que una operación estable puede devolver igualmente un campo en vista previa. Los endpoints en vista previa muestran la insignia Preview en esta referencia. Trata los campos en vista previa como opcionales y no crees una dependencia estricta de su estructura.

Primeros pasos

Acceso a Origin

CLI de Origin

Instala la CLI de Origin e inicia sesión:

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

Clona un repositorio existente:

origin repo clone '{ownerSlug}/{repoName}'# o usa git directamentegit clone 'https://origin.cursor.com/{ownerSlug}/{repoName}.git'

Las aplicaciones clonan mediante la autenticación de Git por HTTPS con un token de acceso de instalación, no con el inicio de sesión de un usuario.

Instalación

Indica al administrador del espacio de trabajo del cliente que vaya a:

/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ámetroObligatorioDescripción
client_idSíID de la aplicación de Origin.
scopeSíÁmbitos separados por espacios. repository:metadata:read se añade automáticamente.
redirect_uriSí para instalaciones iniciadas por partnersURI de callback registrado exacto.
stateMuy recomendadoValor aleatorio antifalsificación que se incluye como la afirmación state del recibo de instalación. Genérelo antes de redirigir y verifique la afirmación en el callback.
summaryNoBreve explicación que se muestra durante el consentimiento.
include_granted_scopesNoCuando es true, conserva las autorizaciones existentes y solicita solo las adicionales.

El administrador del espacio de trabajo elige el propietario de destino, los ámbitos aprobados y todos los repositorios o solo los repositorios seleccionados. El cliente, no la aplicación, controla el acceso al repositorio.

Tras la aprobación, Origin redirige al callback registrado:

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

Verifica el recibo de instalación y luego guarda el ID de instalación de la afirmación sub del recibo. Lo necesitarás siempre que emitas un token de acceso de instalación.

Las instalaciones usan uno de estos dos modos de selección de repositorios:

  • all: la instalación puede acceder a todos los repositorios propiedad del destino seleccionado.
  • selected: la instalación solo puede acceder a los repositorios seleccionados por el administrador del espacio de trabajo.

Ambos modos incluyen repositorios replicados y repositorios nativos de Origin, por lo que una réplica aparece en GET /installation/repos y puede seleccionarse. Una réplica es de solo lectura hasta que se convierte en una réplica saliente estable: consulta Repositorios replicados.

Usa GET /installation/repos con un token de instalación para consultar los repositorios disponibles para esa instalación. Los endpoints JWT de aplicación permiten listar, inspeccionar y eliminar las instalaciones de la app. Eliminar una instalación impide emitir nuevos tokens.

Recibo de instalación

installation_receipt es un JWT compacto de corta duración firmado por Origin. Demuestra que la aprobación de la instalación provino de Origin y no de una redirección falsificada, e incluye todo lo que necesita el callback. Cherri Code no redirige sin él, por lo que los callbacks externos siempre lo incluyen.

Encabezado JOSE:

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

Afirmaciones:

{  "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 es el ID de tu app y sub es el ID de la instalación que debes usar al emitir tokens de acceso de instalación.
  • namespace_id es el ID estable del espacio de nombres en el que se instaló la app.
  • installedBy identifica al usuario que realizó esta instalación o volvió a dar su consentimiento. Describe la acción actual, por lo que, al volver a dar su consentimiento, puede diferir del installedBy duradero de Obtener instalación de app. Incluye displayName cuando la cuenta tiene un nombre y nunca incluye handle; lee el handle de una respuesta REST o de un payload de webhook.
  • Los recibos caducan cinco minutos después de su emisión. jti es único para cada recibo.
  • state solo está presente cuando la URL de instalación incluía un state no vacío y reproduce ese valor. Compáralo con el valor antifalsificación que generaste antes de redirigir.

Verifica el recibo antes de confiar en el callback: obtén la clave de firma del JWKS mediante el encabezado kid, exige alg EdDSA y typ origin-installation-receipt+jwt, y valida la firma, iss, aud y exp. Rechaza el callback si falla la verificación.

El recibo no es un token de acceso de instalación. No lo envíes nunca como credencial Bearer; en su lugar, emite tokens de instalación mediante Crear token de acceso de instalación.

Autenticación

Envía las credenciales REST con el esquema Bearer. Los badges de Auth de cada endpoint indican los tipos de credenciales que acepta:

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

Generar una clave de firma para una aplicación

Las aplicaciones de Origin se autentican con un par de claves Ed25519. Genere el par localmente y registre solo la clave pública en cursor.com/codebase/settings/apps. Una aplicación puede tener hasta 10 claves de firma activas.

Cree una clave privada PKCS#8 y una clave pública PEM SPKI con OpenSSL:

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

El archivo de clave pública comienza con -----BEGIN PUBLIC KEY-----. Pegue ese PEM al añadir una clave de firma. Use la clave privada correspondiente únicamente para firmar JWT de aplicación.

JWT de aplicación

Firma un JWT de corta duración con la clave privada Ed25519 asociada a una de las claves de firma activas de la aplicación. Genera ese par como se describe en Generar una clave de firma de aplicación.

Encabezado JOSE:

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

Afirmaciones:

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

Establece iss y kid con el ID de la aplicación. Usa una validez de aproximadamente cinco minutos.

Authorization: Bearer APP_JWT

Usa un JWT de aplicación para realizar operaciones a nivel de aplicación, como leer los metadatos de la aplicación, gestionar instalaciones, emitir tokens de instalación y recuperar entregas de webhooks.

Token de acceso de instalación

Realiza una solicitud a POST /app/installations/{installationId}/access_tokens con un JWT de aplicación. Los tokens de acceso de instalación comienzan con oit_.

Authorization: Bearer oit_...

La respuesta incluye expiresAt. Emite tokens justo a tiempo, renuévalos antes de que caduquen, trátalos como contraseñas y nunca los registres.

Un token caduca como máximo 15 minutos después de su creación, y nunca más tarde que el JWT de aplicación que lo solicitó, por lo que el JWT de cinco minutos recomendado arriba produce un token de cinco minutos como máximo. Lee expiresAt y emite un nuevo token cuando se supere, en lugar de dar por supuesta una duración: los tokens de Origin tienen una vida más corta que los tokens de acceso de instalación de las GitHub Apps, y una integración que reutilice un token siguiendo la planificación de GitHub fallará en cuanto el token caduque. Firma el JWT con un exp posterior cuando un job necesite los 15 minutos completos, tal como hace la receta de CI de CloneKit.

Eliminar la instalación o eliminar la aplicación invalida sus tokens de acceso de instalación antes de expiresAt. La API REST y Git por HTTPS rechazan entonces el token con 401. No lo reintentes con el mismo token; la aplicación debe reinstalarse antes de poder emitir uno funcional.

Un token de acceso de instalación no puede exceder los ámbitos aprobados ni el acceso a repositorios de la instalación. Puedes restringir un token a menos scopes o repositoryIds. Los arrays vacíos u omitidos heredan el grant completo de la instalación.

Usa tokens de acceso de instalación para operaciones con ámbito de repositorio, incluidos los pull requests, las escrituras de comprobaciones de ejecución y Git por HTTPS.

Para actuar como miembro del espacio de nombres de la instalación en lugar de hacerlo como la aplicación, emite un token de usuario de instalación. Consulta Actuar en nombre de usuarios.

Autenticación de Git por HTTPS

Los tokens de acceso de instalación autentican Git por HTTPS. El endpoint de Git usa autenticación HTTP Basic: la contraseña es el token de instalación y el nombre de usuario es x-access-token. Las credenciales Bearer se usan con la API REST; Git por HTTPS las rechaza.

Emita un token desde Crear token de acceso de instalación inmediatamente antes de la operación de Git. Los tokens caducan en un máximo de 15 minutos.

Clone, fetch y pull requieren repository:contents:read. Hacer push requiere repository:contents:write. El token debe incluir el repositorio de destino en su concesión.

Hacer push también requiere que el propietario del repositorio pueda escribir en Origin, el mismo requisito que exige Crear repositorio. Si el propietario es un usuario, debe tener un plan Pro, Pro Student, Pro+, Ultra o Start. Si el propietario es un equipo, debe tener un plan de equipo de pago activo, no debe estar en modo de privacidad (heredado) y Origin no debe estar desactivado por un administrador de equipo. Hacer push a un repositorio cuyo propietario no cumple los requisitos devuelve 403. Clone, fetch y pull no tienen este requisito.

Obtenga cloneUrl desde Get Repo o Listar repositorios de la instalación de la aplicación. Tanto la ruta con formato de GitHub (https://origin.cursor.com/OWNER_SLUG/REPO_NAME.git) como la ruta heredada /git/ permiten clonar.

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

Incluir el token en la URL lo guarda en .git/config. Después de clonar correctamente, actualiza el remoto para que los comandos posteriores no reutilicen un secreto vencido:

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

Para evitar incluir el token en la URL remota, proporciónalo mediante el asistente de credenciales de 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"

El asistente de credenciales de CLI de Origin es para el inicio de sesión de usuarios. Las integraciones de aplicaciones envían el token de instalación, como se muestra aquí. Trata el token como una contraseña: nunca lo registres y emite uno nuevo antes de expiresAt si un trabajo aún necesita acceso a Git.

Git por HTTPS mide su propio presupuesto, separado del presupuesto de REST en Límites de uso. Una respuesta de Git con cargo incluye los mismos encabezados X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Used, con X-RateLimit-Resource establecido en git en lugar de core. Las solicitudes de Git que exceden el presupuesto devuelven 429 con Retry-After y X-RateLimit-Reset. Consulta los encabezados para ajustar el ritmo de un trabajo en lugar de suponer un número; las solicitudes sin medición no incluyen encabezados de límite de uso.

En un repositorio replicado, un token de instalación permite clonar, hacer fetch y pull, y Origin rechaza git push con 403 hasta que la réplica se convierta en una réplica saliente estable. Consulta Repositorios replicados.

Solicitudes de CLI autenticadas por usuario

Usa origin api para las solicitudes autenticadas por usuario. Para una sesión interactiva, inicia sesión desde tu navegador:

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

Para una sesión no interactiva, proporciona una clave de API de usuario personal desde Cherri Code Dashboard → API Keys:

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

La CLI intercambia la clave de API personal por un token de acceso de usuario de corta duración y luego envía ese token en el header Authorization. No envíes la clave de API directamente a un endpoint de Origin. Las integraciones de aplicación deben usar JWT de aplicación y tokens de acceso de instalación.

Descubrimiento y claves de firma

Origin publica metadatos de descubrimiento sin autenticación y sus claves de firma activas. Las mismas claves firman las entregas de webhooks y los recibos de instalación.

Los metadatos de descubrimiento identifican al emisor y 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 devuelve JWK de Ed25519 activos:

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"    }  ]}

Guarda el JWKS en caché. /keys envía Cache-Control: public, max-age=600, stale-if-error=600, así que reutiliza una respuesta en caché durante 10 minutos y luego actualízala; si la actualización falla, conserva las últimas claves válidas durante un máximo de otros 10 minutos antes de que falle la verificación. Actualiza también si una firma no se puede verificar con ninguna clave, lo que elimina un ID de clave retirado. Las claves se rotan semanalmente.

Las firmas de webhook no incluyen un ID de clave, por lo que la verificación debe probar cada clave Ed25519 activa. Los recibos de instalación incluyen el kid de la clave de firma en su cabecera JOSE, por lo que la verificación de recibos puede resolver la clave directamente.

Ámbitos

Solicita únicamente los ámbitos mínimos que necesite tu aplicación. repository:metadata:read y el acceso a los metadatos de la aplicación o de la instalación se conceden automáticamente y no deben añadirse por separado a las URL de instalación.

ÁmbitoPermite
repository:metadata:readLeer metadatos del repositorio. Se añade automáticamente.
repository:contents:readLeer commits, ramas, contenido, archivos de comparación y objetos Git de bajo nivel. Buscar texto en archivos. Descargar un archivo del repositorio. Clonar, hacer fetch y hacer pull mediante Git por HTTPS. Sincronizar un repositorio replicado desde su fuente ascendente.
repository:contents:writeHacer push mediante Git por HTTPS. Fusionar pull requests. Crear ramas y hacer commit de cambios en archivos a través de los endpoints de datos de Git. Volver a solicitar una ejecución de comprobación.
repository:pull_requests:readLeer pull requests, archivos modificados, commits de pull requests, etiquetas asignadas y elegibilidad de fusión.
repository:pull_requests:writeCrear y actualizar pull requests. Asignar y eliminar etiquetas de pull requests.
repository:pull_requests:reviews:readLeer comentarios de pull requests, hilos de comentarios, revisiones enviadas y revisores solicitados.
repository:pull_requests:reviews:writeCrear y actualizar comentarios; resolver y reabrir hilos de comentarios; crear, actualizar y descartar revisiones; solicitar y eliminar revisores.
repository:checks:readLeer suites de comprobación, ejecuciones y anotaciones de ejecuciones de comprobación.
repository:checks:writeCrear y actualizar suites de comprobación y ejecuciones. Añadir anotaciones de ejecuciones de comprobación.
repository:labels:readLeer las definiciones de etiquetas que posee un repositorio.
repository:labels:writeCrear, actualizar y eliminar definiciones de etiquetas del repositorio.
repository:rulesets:readLeer conjuntos de reglas del repositorio.
repository:rulesets:writeCrear, actualizar y eliminar conjuntos de reglas del repositorio.
repository:settings:readLeer los grants mantenidos directamente sobre un repositorio.
repository:settings:writeActualizar los ajustes del repositorio: la rama predeterminada, la visibilidad, los métodos de fusión y la eliminación automática de la rama principal. Crear o actualizar y eliminar grants sobre un repositorio.
namespace:settings:readLeer los grants mantenidos directamente sobre un propietario. Leer las autoridades de certificación SSH en las que confía un propietario y si este exige certificados.
namespace:settings:writeCrear o actualizar y eliminar grants sobre un propietario. Añadir y eliminar autoridades de certificación SSH y establecer si el propietario exige certificados; estas escrituras las proporciona una credencial de usuario de Cherri Code.
namespace:user_tokens:writeEmitir tokens de usuario de instalación que actúan como miembro del espacio de nombres de la instalación. Un token no puede incluir este ámbito. Consulta Actuar en nombre de usuarios.

Solicitar un ámbito :write también concede el ámbito :read correspondiente, por lo que repository:labels:write abarca repository:labels:read y no es necesario enumerar ambos. Lo contrario no se cumple: un ámbito de lectura nunca concede permisos de escritura.

El token de instalación solo puede restringir estos grants. No puede añadir un ámbito ni un repositorio que el administrador del espacio de trabajo no haya aprobado.

Los cambios de estado de la replicación quedan fuera de esta tabla. Transition Repo Mirror, Force Repo Mirror Cutover y Desvincular réplica de repositorio requieren repository:mirror:write o repository:mirror:delete, que una aplicación no puede solicitar durante la instalación: los proporciona una credencial de usuario de Cherri Code, y quien realiza la llamada también debe administrar el repositorio en la fuente ascendente de la replicación.

La gestión de instalaciones también queda fuera. Add App Installation Repositories requiere namespace:installations:write, que una aplicación no puede solicitar durante la instalación: lo mantiene un administrador del espacio de nombres en una credencial de usuario de Cherri Code, y el mismo tipo de credencial que consintió la instalación es el que puede ampliarla.

La gestión de aplicaciones queda fuera por la misma razón. Crear aplicación requiere namespace:apps:create, List Namespace Apps y Get App requieren namespace:apps:read, y Update App, Add App Signing Key y Revoke App Signing Key requieren app:settings:write. Un publicador mantiene estos ámbitos en una credencial de usuario de Cursor; una aplicación no puede solicitarlos para sí misma.

La tabla abarca los ámbitos que solicita una aplicación durante la instalación. Para consultar el ámbito que requiere una operación concreta, lee su extensión x-origin-scopes en la especificación de OpenAPI. Esa extensión abarca todas las operaciones, incluidos los ámbitos app, installation y namespace que vienen con la propia credencial en lugar de con un grant de instalación. Una operación cuyos ámbitos vienen todos con la credencial marca su extensión como ambient: true: no hay nada que solicitar para ella y basta con presentar la credencial correcta.

Repositorios replicados

Una instalación usa todos los ámbitos que tiene en un repositorio nativo de Origin y en una réplica saliente estable. En un repositorio con cualquier otro estado de réplica, solo se aplican dos ámbitos:

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

Todos los demás ámbitos devuelven 403 en ese repositorio, independientemente de lo que haya aprobado el administrador del espacio de trabajo. A través de la API REST, siguen funcionando las lecturas del repositorio y del contenido, la comparación de commits y Sync Mirror; Origin rechaza los pull requests, las revisiones, los comentarios, las comprobaciones, los conjuntos de reglas y cualquier operación de escritura. A través de Git por HTTPS, siguen funcionando clone, fetch, pull y la descarga de LFS; Origin rechaza push y la carga de LFS.

Sacar un repositorio de ese estado es una operación que requiere credenciales de usuario, no algo que pueda hacer una instalación: Transition Repo Mirror hace avanzar la dirección de la réplica, Force Repo Mirror Cutover cambia a la fuente ascendente sin enviar de vuelta las refs divergentes y Detach Repo Mirror desconecta definitivamente la réplica.

El objeto mirror de un repositorio no indica si se permiten operaciones de escritura. Una réplica en plena transición puede informar de que mirror.status es outbound y seguir siendo de solo lectura, así que considera el 403 como la fuente de autoridad en lugar de basarte en mirror.status.

Límites de uso

La API de Origin utiliza un presupuesto compartido de puntos por entidad principal que se restablece en una ventana móvil de un minuto. Cada tipo de entidad principal autenticada tiene su propio presupuesto:

Entidad principalPresupuesto predeterminado
Token de acceso de instalación3.000 puntos/minuto
JWT de aplicación6.000 puntos/minuto
Usuario de Cherri Code o cuenta de servicio600 puntos/minuto

Cada endpoint aplica un coste fijo a ese presupuesto antes de ejecutar el controlador. Los errores de autenticación y autorización no consumen puntos.

Cherri Code puede aumentar los presupuestos por minuto de cada aplicación para los partners de diseño. Contacta con Cherri Code si tu integración necesita un límite mayor.

Encabezados de respuesta

Las respuestas facturadas y Obtener límite de uso incluyen:

EncabezadoDescripción
X-RateLimit-LimitPuntos disponibles en la ventana actual para esta entidad principal
X-RateLimit-RemainingPuntos restantes en la ventana actual
X-RateLimit-UsedPuntos consumidos en la ventana actual
X-RateLimit-ResetMarca de tiempo Unix (segundos UTC) en la que se restablece la ventana
X-RateLimit-ResourceSiempre core para el presupuesto compartido de la API pública

X-RateLimit-Reset indica una ventana completa de 60 segundos desde el momento de la respuesta. La ventana del contador comienza con la primera solicitud facturada de una ráfaga, no en el límite de un minuto natural.

Superar el límite

Cuando una solicitud supera el presupuesto, la API devuelve HTTP 429 con:

  • Retry-After: segundos de espera antes de reintentar (60)
  • Los mismos encabezados X-RateLimit-*, con X-RateLimit-Remaining establecido en 0
{  "code": 8,  "message": "Rate limit exceeded: 3000 points per minute for this installation. Retry after 60s.",  "details": []}

Espera Retry-After o hasta X-RateLimit-Reset antes de reintentar. Usa una espera progresiva con fluctuación cuando varios clientes simultáneos compartan un mismo token de instalación.

Consultar la cuota restante

Llame a Obtener límite de uso para consultar el presupuesto actual sin consumir puntos. El cuerpo de la respuesta refleja los encabezados X-RateLimit-* del recurso compartido core.

Convenciones comunes

Paginación

Los endpoints paginados aceptan:

  • pageSize: el valor predeterminado es 30 y el máximo es 100.
  • pageToken: token opaco devuelto por la página anterior. No lo inspecciones ni lo construyas.

Las respuestas usan un campo de colección específico del recurso y nextPageToken. Este está vacío cuando no hay una página siguiente. Las respuestas de listas públicas no incluyen recuentos totales. Los tokens de página están vinculados al recurso y los filtros de los que proceden. Reinicia la paginación cuando cambien los filtros. Los tokens no vacíos no válidos o que no coincidan devuelven 400.

Envía el mismo pageSize en cada solicitud de una secuencia, incluidas las continuaciones. La mayoría de los endpoints de listado usan el pageSize enviado junto con un token de página para determinar el tamaño de esa página y mantienen el tamaño de la página anterior si se omite; así lo indican sus entradas de pageToken. Los demás difieren en lo que recuerda un token de página, por lo que, si usas un pageSize constante, obtendrás el mismo tamaño de página en todos los endpoints.

Errores

Los errores usan un cuerpo con el estilo de Google RPC:

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

Los estados HTTP habituales son 400, 401, 403, 404, 429, 500 y 503. Algunas operaciones de la base de datos de Git también devuelven 409 por conflictos en el estado del repositorio. Consulta Límites de uso para ver los encabezados de 429 y el comportamiento de reintento.

Usa el estado HTTP y code para distinguir entre errores. Considera message como texto para desarrolladores.

Un 404 nunca distingue entre un recurso que no existe y uno al que tu aplicación no puede acceder. Interprétalo como "no disponible para esta instalación" en lugar de como prueba de que el recurso no existe.

details contiene entradas tipadas: violaciones de campo de google.rpc.BadRequest cuando un argumento no es válido y una entrada google.rpc.RequestInfo en cada error. Origin puede añadir tipos de detalles en cualquier momento, así que ignora las entradas que tu integración no reconozca.

Cada respuesta de error incluye el ID de solicitud dos veces: en un encabezado de respuesta X-Request-ID y como una entrada google.rpc.RequestInfo en details. Origin devuelve el x-request-id que enviaste o genera uno si no envías ninguno. La entrada RequestInfo está presente incluso cuando message es un error interno opaco, así que incluye el ID de solicitud cuando te pongas en contacto con Cherri Code por una llamada fallida.

Las rutas sin coincidencia bajo /v1/origin y las solicitudes que usan el método incorrecto en una ruta conocida devuelven este mismo cuerpo en lugar de un error genérico del enrutador. El mensaje indica el método y la ruta, y nunca devuelve la cadena de consulta.

IDs

Los ID de recurso son cadenas opacas con un prefijo de tipo, como app_… para una aplicación e i_… para una instalación. Almacénalos y compáralos como cadenas completas. No los analices, no intentes deducir significado a partir de sus caracteres ni dependas de su orden.

Un ID no cambia durante toda la vida de su recurso, mientras que los nombres y los slugs sí pueden cambiar. Un repositorio conserva su ID aunque se le cambie el nombre, así que usa el ID como clave para los datos en caché en lugar de {ownerSlug}/{repoName}, y haz referencia al repositorio por su ID como se describe en Rutas de repositorio.

Rutas de repositorio

Las rutas con ámbito de repositorio usan el slug del propietario y el nombre del repositorio en el formato {ownerSlug}/{repoName}. Ambos segmentos se resuelven sin distinguir entre mayúsculas y minúsculas, por lo que cualquier combinación de estas identifica el repositorio. Las respuestas devuelven el nombre y el slug almacenados, no la combinación de mayúsculas y minúsculas que envió, y las URL de Git por HTTPS se resuelven de la misma forma. Compare los nombres de repositorio sin distinguir entre mayúsculas y minúsculas y consulte las mayúsculas y minúsculas canónicas en Obtener repositorio.

Todas las rutas con ámbito de repositorio también aceptan el ID estable del repositorio en lugar del par: envíe _ como slug del propietario y el ID como nombre del repositorio, como en GET /v1/origin/repos/_/REPO_ID. Consulte el ID en el campo id de Obtener repositorio. El valor especial _ no puede reclamarse como slug del propietario, por lo que las dos formas nunca entran en conflicto. En una solicitud de Connect o JSON, establezca ownerSlug en _ y name en el ID.

La forma con ID permanece tras un cambio de nombre, lo que la convierte en la forma estable de identificar un repositorio. No otorga nada por sí sola: después de que Origin resuelva el ID a un repositorio, su aplicación sigue necesitando el mismo ámbito en ese repositorio. Un ID al que su aplicación no puede acceder devuelve el mismo cuerpo 404 que un ID que no existe, por lo que una respuesta nunca confirma que un repositorio existe. Un ID malformado devuelve 400. Crear repositorio acepta solo un slug del propietario y rechaza _.

Referencias de recursos

Las instantáneas de recursos contienen los campos actuales del recurso. El contexto del contenedor utiliza referencias compactas en lugar de duplicar recursos completos:

  • RepositoryReference identifica un repositorio.
  • PullRequestReference identifica una pull request e incluye anidada la referencia a su repositorio.
  • ThreadReference identifica el hilo que contiene un comentario de pull request.
  • OriginActor identifica un actor público como una de las variantes user, app o serviceAccount. Hay exactamente una variante presente; lea la identidad de esa variante.

Ejecuciones de comprobación

Las aplicaciones informan los resultados de CI como suites de comprobación y ejecuciones de comprobación asociadas a un commit mediante Post Check Run y Batch Upsert Check Runs, y los consultan a través de los endpoints de Checks. Esta sección define los términos que comparten esos endpoints: qué intento es el actual, cómo Origin ordena e informa las escrituras, y cómo se comportan los timestamps y los plazos.

Intentos y el intento actual

Cada (actor, key, externalId) reportado sobre un commit es un intento de suite, y cada (suite, key, externalId) dentro de él es un intento de ejecución. Reutilizar un externalId actualiza ese intento en el mismo lugar; un externalId nuevo inicia un intento nuevo y conserva el anterior como historial. Los intentos sustituidos siguen siendo consultables por id mediante Get Check Suite y Obtener ejecución de comprobación.

Allí donde la API muestra las comprobaciones actuales de un commit —en List Check Suites For Commit, List Check Runs For Commit y en el estado de CI y las comprobaciones obligatorias del pull request—, Origin colapsa los intentos en dos pasos:

  1. El intento de suite actual por (actor, key) es aquel cuyas ejecuciones actuales, tal como las selecciona el segundo paso, tienen el externalUpdatedAt más reciente; una suite sin ejecuciones se ordena por su createdAt. Los empates se resuelven por el createdAt de la suite y luego por su id, de más reciente a más antiguo.
  2. Dentro de ese intento de suite, la ejecución actual para una key es la que tiene el externalUpdatedAt más reciente. Los empates se resuelven por createdAt y luego por id, de más reciente a más antiguo.

List Check Runs For Suite aplica el segundo paso a la suite que indiques. Una ejecución es la actual para su commit solo cuando su suite es el intento de suite actual del commit. Como el primer paso ordena intentos de suite completos, una ejecución publicada bajo un intento de suite sustituido queda fuera de las comprobaciones del commit mientras otro intento tenga un externalUpdatedAt más reciente; en cuanto su marca de tiempo sea la más reciente, su intento de suite pasa a ser el actual y se ocultan entonces las ejecuciones del otro intento.

Un intento cancelado no desplaza a uno superado. En cualquiera de los dos pasos, un intento cancelado queda por debajo de los demás intentos de su key si el intento no cancelado más reciente de esa key se superó. Una ejecución se considera superada cuando está completed con la conclusión success, neutral o skipped. Un intento de suite se considera superado cuando todas sus ejecuciones actuales se superaron, y cuenta como cancelado cuando todas sus ejecuciones actuales están completed, al menos una con la conclusión cancelled y el resto superadas. Cuando se solicita repetir el intento superado, los intentos cancelados cuyo externalUpdatedAt sea igual o posterior a la solicitud vuelven a ordenarse por sus marcas de tiempo. Un intento de suite cancelado más reciente sigue desplazando a uno más antiguo que no se superó por completo.

Una ejecución cuya repetición se ha solicitado mantiene su lugar como intento actual para su key y figura como pendiente hasta que la aplicación propietaria responda: consulta Rerequest Check Run.

Ordenar las escrituras

Origin ordena las publicaciones dirigidas a una misma ejecución, es decir, el mismo externalId y key dentro de la suite, según checkRun.externalUpdatedAt con precisión de milisegundos. Una publicación se aplica solo cuando su valor es igual o posterior al externalUpdatedAt almacenado de la ejecución, elevado a rerequestedAt mientras haya una nueva solicitud pendiente. Los valores iguales sí se aplican, por lo que gana la publicación más reciente, con dos excepciones que también se consideran obsoletas: una publicación queued o in_progress no puede reabrir una ejecución completed con la misma marca de tiempo, y una publicación con exactamente la marca de tiempo almacenada se ignora mientras rerequestedAt esté establecido. Un valor más reciente se aplica, incluso si reabre una ejecución completed, con una excepción que se considera obsoleta independientemente de su marca de tiempo: una publicación completed con la conclusión cancelled no puede reemplazar una ejecución completed cuya conclusión sea success, neutral o skipped.

Una publicación obsoleta igualmente se considera correcta. La respuesta es HTTP 200 con la suite y la ejecución almacenadas, no con los valores publicados, y el updatedAt de la ejecución no cambia. Cada ejecución publicada se devuelve como un par: checkRun, la ejecución almacenada después de la llamada, y outcome, lo que la escritura hizo con ella. Post Check Run devuelve el par en el nivel superior de su respuesta, junto a checkSuite. Batch Upsert Check Runs devuelve un par por cada ejecución publicada en results[], en el orden de la solicitud, de modo que un elemento del lote lleva el mismo resultado por ejecución que la llamada individual incluye directamente. Lee outcome, o cada results[].outcome, para saber qué hizo la escritura:

outcomeSignificado
createdNo existía ninguna ejecución para (externalId, key) en la suite; se creó una.
updatedUna ejecución existente se reemplazó con los valores publicados.
unchangedLos valores publicados, incluido externalUpdatedAt, coinciden con la ejecución almacenada; no se escribió nada.
ignored_staleLa publicación se ignoró por obsoleta; checkRun lleva la ejecución almacenada, no los valores publicados.

updatedAt no avanza en una publicación unchanged ni ignored_stale, por lo que no permite distinguirlas; solo outcome puede hacerlo. Interpreta un valor no reconocido como «la ejecución almacenada está en la respuesta; se desconoce si se escribió». En un lote, Origin aplica la regla a cada ejecución por separado: una ejecución obsoleta no hace fallar el lote, y results[] lleva la ejecución almacenada en la posición correspondiente con outcome ignored_stale.

En Batch Upsert Check Runs, el checkRuns[] de nivel superior está en desuso en favor de results[]. Se sigue rellenando con las mismas ejecuciones almacenadas y en el mismo orden, pero no incluye resultados; lee results[] en su lugar. Esto se aplica solo al lote: en Post Check Run, checkRun y outcome son los campos de nivel superior que debes leer.

Marcas de tiempo y plazos

Una publicación cuyo externalUpdatedAt, startedAt o completedAt se sitúe más de 60 segundos en el futuro devuelve InvalidArgument (HTTP 400). completedAt no puede ser anterior a startedAt cuando ambos aparecen en la misma publicación. deadlineAt no puede situarse más de 24 horas en el futuro.

Solo expira una ejecución in_progress. Una vez vencido su deadlineAt, un barrido periódico la completa con la conclusión timed_out, establece completedAt si la ejecución no lo tenía, borra deadlineAt y entrega repository.check_run.completed. La expiración se produce unos minutos después del plazo, no exactamente en él: el barrido se ejecuta aproximadamente cada 30 minutos de forma predeterminada, una configuración operativa que puede cambiar, así que no dependas de ese intervalo. Una ejecución queued nunca expira, ni tampoco una ejecución sin deadlineAt. Una publicación completed borra el plazo. Origin deja externalUpdatedAt intacto cuando agota el tiempo de una ejecución, por lo que una publicación posterior con un externalUpdatedAt más reciente sigue aplicándose a una ejecución expirada.

Limitaciones actuales

  • El listado y la creación de repositorios en todo el espacio de nombres no forman parte de la API para partners. Descubre los repositorios mediante la instalación.
  • La comparación de commits devuelve datos resumidos, en lugar de una lista de commits integrada. Los archivos modificados tienen su propio endpoint paginado, Listar archivos de comparación.
  • Los hilos solo se pueden abordar para su resolución. No hay ningún endpoint que liste los hilos directamente; léelos en los comentarios que contienen.
  • Los webhooks de push no incluyen una lista completa de commits.
  • La fusión de pull requests es compatible con repositorios nativos de Origin. Los repositorios replicados se rechazan.
  • Un repositorio replicado es de solo lectura para una instalación hasta que se convierta en una réplica saliente estable. Consulta Repositorios replicados.

Lista de verificación de implementación

  • Almacena la clave privada de Ed25519 en un gestor de secretos y rota las claves de forma planificada. Consulta Generar una clave de firma de la app.
  • Verifica el recibo de instalación en los callbacks de instalación y lee el ID de instalación y state de sus afirmaciones.
  • Usa JWT de aplicación de corta duración y emite tokens de acceso de instalación justo a tiempo.
  • Usa tokens de acceso de instalación, no JWT de aplicación, para las API con ámbito de repositorio, la escritura de comprobaciones y Git HTTPS.
  • Solicita los ámbitos mínimos y el acceso al repositorio.
  • Trata los tokens de página como opacos y reinicia la paginación cuando cambien los filtros.
  • Mantén estables y legibles los valores de key de las comprobaciones. Usa un nuevo externalId inmutable para cada reintento y valores de externalUpdatedAt cada vez mayores para las actualizaciones.
  • Lee outcome en cada respuesta de Post Check Run y cada results[].outcome en cada respuesta de Batch Upsert Check Runs; una publicación obsoleta devuelve 200 con la ejecución almacenada. Consulta Ejecuciones de comprobación.
  • Verifica las firmas de los webhooks con el cuerpo sin procesar de la solicitud antes de analizarlo.
  • Elimina las entregas duplicadas con webhook-id y procésalas de forma asíncrona después de devolver 2xx.
  • Ignora los campos JSON desconocidos para garantizar la compatibilidad futura.
  • Respeta los encabezados Retry-After y X-RateLimit-*. Usa Obtener límite de uso para supervisar los puntos restantes sin consumirlos.

Referencia de endpoints

Descarga la especificación de OpenAPI para consultar los esquemas completos de los componentes. El documento declara https://api.cursor.com como su servidor y un esquema de seguridad HTTP bearer bearerAuth, y cada operación incluye los códigos de respuesta que esa operación puede devolver, además de un ejemplo de solicitud y de respuesta. Cada operación también incluye una extensión x-origin-scopes: scopes contiene el ámbito que requiere la operación y tokenTypes contiene los tipos de credencial que acepta. Cada esquema de payload de webhook incluye una extensión x-origin-webhook-events que enumera los eventos que lo envían, y la superficie en versión preliminar incluye x-cursor-visibility: PREVIEW. Los parámetros de ruta tienen los mismos nombres que usan las URL: ownerSlug y repoName. Cada operación tiene un operationId único; cuando una misma operación responde a dos formas de URL, el id de la segunda forma lleva el sufijo _2, como en OriginService_GetRepoTarball_2.

Los fragmentos de JSON muestran valores de marcador de posición con la estructura del esquema. Las descripciones de los campos de respuesta reflejan el esquema de OpenAPI y el contrato actual de la plataforma.

Aplicaciones e instalaciones

Obtener límite de uso

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

Devuelve el estado actual del límite de uso de la API pública del principal autenticado.

El acceso a este endpoint no consume puntos del límite de uso. La respuesta muestra el presupuesto compartido de puntos por minuto que usan otros endpoints de la API pública para este principal. Consulta Límites de uso.

Campos de respuesta

resources objeto

Recursos de límite de uso del principal autenticado.

resources.core objeto

Presupuesto compartido de puntos por minuto para los endpoints de la API pública.

resources.core.limit entero

Número máximo de puntos disponibles en la ventana actual.

resources.core.remaining entero

Puntos restantes en la ventana actual.

resources.core.reset entero

Marca de tiempo Unix (segundos UTC) en la que se restablece la ventana actual.

resources.core.used entero

Puntos consumidos en la ventana actual.

rate objeto

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

Estructura de la respuesta:

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

Obtener la aplicación autenticada

GET/v1/origin/app
AuthApp JWT

Devuelve los metadatos de la aplicación autenticada.

Campos de respuesta

id cadena

Identificador de la aplicación Origin utilizado como emisor del JWT e ID de clave.

displayName cadena

Nombre visible legible de la aplicación.

webhookUrl cadena

URL HTTPS registrada que recibe las entregas de webhooks de la aplicación.

events array

Suscripciones a eventos de webhook configuradas para la aplicación. Los eventos installation.* siempre se entregan y nunca aparecen aquí.

createdAt cadena

Marca de tiempo RFC 3339 de creación de la aplicación.

updatedAt cadena

Marca de tiempo RFC 3339 de la última actualización de metadatos de la aplicación.

installationRedirectUris array

URI de callback de instalación registradas; los callbacks no locales deben coincidir exactamente y usar HTTPS.

namespaceSlug cadena

Slug del espacio de nombres propietario de la aplicación.

description cadena

Descripción de la aplicación proporcionada por el publisher. Vacía si no se establece.

websiteUrl cadena

Sitio web del publisher. Vacío si no se establece.

defaultScopes array

Scopes predeterminados que se ofrecen al instalar la aplicación, como cadenas de scope del catálogo.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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 las instalaciones de la aplicación

GET/v1/origin/app/installations
AuthApp JWT

Enumera las instalaciones de la aplicación autenticada.

Parámetros de consulta

pageSize entero

Número máximo de instalaciones a devolver. Por defecto 30 cuando no se establece o es 0. Los valores superiores a 100 se ajustan a 100.

pageToken cadena

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página.

Campos de respuesta

installations array

Página de instalaciones propiedad de la aplicación autenticada.

installations[].id cadena

Identificador de la instalación que la aplicación almacena y utiliza para crear tokens de acceso de instalación.

installations[].appId cadena

Identificador de la aplicación instalada.

installations[].target objeto

Propietario seleccionado por el cliente para esta instalación.

installations[].target.slug cadena

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

installations[].target.id cadena

Identificador del propietario del origin.

installations[].target.type cadena

Tipo de espacio de nombres del propietario. Solo salida. Valores permitidos: team, user. Se omite cuando se desconoce.

installations[].createdAt cadena

Marca de tiempo RFC 3339 de creación de la instalación.

installations[].updatedAt cadena

Marca de tiempo RFC 3339 de la actualización más reciente de la instalación.

installations[].repoSelectionMode cadena

Modo de concesión del repositorio; exactamente "all" o "selected".

installations[].scopes array

Ámbitos aprobados para la instalación.

installations[].installedBy objeto

El usuario que instaló originalmente la aplicación, no el actor que otorgó el reconsentimiento más recientemente. Solo de salida. Ausente cuando ya no se puede leer ese registro de usuario.

installations[].installedBy.id cadena

Identificador público del usuario, con el prefijo user_.

installations[].installedBy.email cadena

Dirección de correo electrónico del usuario.

installations[].installedBy.displayName cadena

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

installations[].installedBy.handle cadena

Identificador de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; omitido en caso contrario.

installations[].suspendedAt cadena

Marca de tiempo RFC 3339 que se establece mientras la instalación está suspendida. Se omite mientras la instalación está activa.

installations[].deletedAt cadena

Marca de tiempo RFC 3339 de la eliminación de la instalación. Solo se incluye en la instantánea del webhook installation.deleted; una instalación eliminada ya no se resuelve a través de la API, por lo que este endpoint nunca la devuelve.

nextPageToken cadena

Cherri Code opaco para la página siguiente; vacío cuando no hay más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app/installations' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"      ]    }  ]}

Obtener la instalación de la aplicación

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

Devuelve una instalación de la app autenticada.

repoSelectionMode es all o selected.

Parámetros de ruta

installationId cadena Obligatorio

Identificador de la instalación.

Campos de respuesta

id cadena

Identificador de la instalación que la aplicación almacena y utiliza para emitir tokens de acceso de instalación.

appId cadena

Identificador de la aplicación instalada.

target object

Propietario seleccionado por el cliente para esta instalación.

target.slug cadena

Slug del propietario usado en la URL junto con su ID para identificar al propietario del repositorio.

target.id cadena

Identificador del propietario del origen.

target.type cadena

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

createdAt cadena

Marca de tiempo RFC 3339 de creación de la instalación.

updatedAt cadena

Marca de tiempo RFC 3339 de la última actualización de la instalación.

repoSelectionMode cadena

Modo de concesión de repositorios: exactamente "all" o "selected".

scopes array

Ámbitos aprobados para la instalación.

installedBy object

El usuario que instaló originalmente la aplicación, no el actor más reciente que volvió a dar su consentimiento. Solo de salida. Ausente cuando ya no se puede leer el registro de ese usuario.

installedBy.id cadena

Identificador público del usuario, con el prefijo user_.

installedBy.email cadena

Dirección de correo electrónico del usuario.

installedBy.displayName cadena

Nombre para mostrar del usuario: el nombre y apellido de la cuenta unidos por un espacio; es el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

installedBy.handle cadena

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

suspendedAt cadena

Marca de tiempo RFC 3339 que se establece mientras la instalación está suspendida. Se omite mientras la instalación está activa.

deletedAt cadena

Marca de tiempo RFC 3339 de la eliminación de la instalación. Solo se incluye en la instantánea del webhook installation.deleted; una instalación eliminada ya no se resuelve a través de la API, por lo que este endpoint nunca la devuelve.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app/installations/INSTALLATION_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"  ]}

Eliminar instalación de la app

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

Elimina una instalación que pertenece a la app autenticada e impide que se emitan nuevos tokens de acceso de instalación. Los tokens de corta duración ya emitidos pueden seguir siendo válidos hasta que caduquen (como máximo 15 minutos). El cuerpo de la respuesta está vacío.

Parámetros de ruta

installationId cadena Obligatorio

El identificador único de la instalación que se eliminará. Se obtiene de la ruta de la URL; la instalación debe pertenecer a la app autenticada.

Campos de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

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

Respuesta:

204 No Content

Crear token de acceso de instalación

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

Crea un token de acceso de instalación para la app autenticada.

Requiere autenticación con un JWT de firma de la app, como GetAuthenticatedApp. El token queda limitado a la instalación indicada, que debe pertenecer a la app autenticada. Quienes realizan la llamada pueden restringir el token a un subconjunto de los ámbitos aceptados y los repositorios accesibles de la instalación.

repositoryIds puede indicar un repositorio replicado. El token resultante conserva los ámbitos de la instalación y Origin sigue aplicando el límite de replicación en cada solicitud: consulta Repositorios replicados.

Parámetros de ruta

installationId cadena Obligatorio

El identificador único de la instalación a la que se limitará el token. Se obtiene de la ruta de la URL; la instalación debe pertenecer a la app autenticada.

Cuerpo de la solicitud

scopes array

Cadenas de ámbitos que se concederán al token. Los valores deben ser únicos y estar incluidos en los ámbitos aceptados de la instalación. Si está vacío o se omite, se conceden todos los ámbitos.

repositoryIds array

ID de repositorios que se concederán al token. Los valores deben ser únicos, ser accesibles para la instalación y contener como máximo 50 elementos. Si está vacío o se omite, se conceden todos los repositorios accesibles.

Campos de respuesta

token cadena

Credencial de instalación de corta duración con el prefijo oit_.

expiresAt cadena

Hora de caducidad RFC 3339; el token caduca después de un máximo de 15 minutos y nunca dura más que el JWT de aplicación usado para emitirlo.
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"  ]}'

Estructura de la respuesta:

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

Crear token de usuario de instalación

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

Crea un token de usuario de instalación que actúa en nombre de un miembro del espacio de nombres de la instalación.

La instalación debe pertenecer a la aplicación autenticada y haber aceptado namespace:user_tokens:write. Identifica al usuario mediante uno solo de estos campos: userId o userEmail. Si el usuario no existe, la identificación es ambigua o el usuario no cumple los requisitos, se devuelve PermissionDenied (HTTP 403) sin revelar cuál fue el motivo.

El acceso del token se limita a los permisos que comparten la instalación y el usuario. Si se especifican tanto scopes como repositoryIds, cada scope debe estar permitido para la instalación y el usuario en todos los repositorios enumerados; de lo contrario, se devuelve PermissionDenied (HTTP 403). Consulta Actuar en nombre de usuarios para conocer el flujo completo.

Parámetros de ruta

installationId cadena Obligatorio

El identificador único de la instalación a la que se limita el token. Se obtiene de la ruta de la URL; la instalación debe pertenecer a la aplicación autenticada.

Cuerpo de solicitud

userId cadena

El ID user_… del usuario, tal como aparece en los payloads de actor. Especifica uno solo de estos campos: userId o userEmail.

userEmail cadena

El correo electrónico de la cuenta del usuario. Debe corresponder a un único miembro del espacio de nombres que cumpla los requisitos.

scopes array

Cadenas de scope que limitan el token. Los valores deben ser únicos y estar incluidos en los scopes aceptados por la instalación. Solicitar namespace:user_tokens:write devuelve InvalidArgument (HTTP 400); este scope autoriza la emisión de tokens y no puede delegarse al token. Si el campo está vacío o se omite, no se aplica ningún límite de scope.

repositoryIds array

IDs de repositorios que limitan el token. Los valores deben ser únicos, corresponder a repositorios a los que la instalación tenga acceso y no superar las 50 entradas. Si el campo está vacío o se omite, no se aplica ningún límite de repositorios.

Campos de respuesta

token cadena

Token de usuario de instalación de corta duración. Trátalo como un secreto y no lo incluyas en los registros.

expiresAt cadena

Fecha y hora de expiración en formato RFC 3339; el token caduca en un máximo de 15 minutos y nunca permanece válido más allá del JWT de aplicación usado para emitirlo.
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"  ]}'

Estructura de la respuesta:

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

Listar repositorios de la instalación de la aplicación

GET/v1/origin/installation/repos
AuthInstallation token

Enumera los repositorios a los que puede acceder la instalación autenticada de la aplicación.

Requiere un token de acceso de instalación (oit_) emitido por CreateInstallationAccessToken.

Los partners descubren sus repositorios mediante este endpoint. Las entradas de la lista son resúmenes básicos de repositorios; usa Obtener repositorio para ver las marcas de tiempo completas. Obtener repositorio incluye el campo cloneUrl, disponible solo en la salida.

Los resultados incluyen repositorios espejo. Una réplica es de solo lectura hasta que se convierte en una réplica saliente estable: consulta Repositorios espejo.

Parámetros de consulta

pageSize entero

Número máximo de repositorios a devolver. Por defecto es 30 cuando no se especifica o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página. Debe usarse el mismo filtro al solicitar las páginas siguientes. El pageSize de una solicitud posterior se aplica a esa página; omítelo para conservar el tamaño de página anterior.

filter string

Filtro opcional de subcadena que no distingue mayúsculas de minúsculas, aplicado a los nombres de repositorio y a los espacios de nombres del propietario. Un valor owner/repo con una sola barra compara cada mitad con su campo correspondiente. Los espacios en blanco al inicio y al final se ignoran; un valor vacío no aplica ningún filtro.

Campos de respuesta

repositories array

Resúmenes parciales del repositorio; utiliza get-repository para obtener las marcas de tiempo completas.

repositories[].id string

Identificador del repositorio de origen.

repositories[].name string

Nombre del repositorio dentro de su propietario.

repositories[].fullName string

Nombre combinado del propietario y del repositorio, como acme/api.

repositories[].owner object

Referencia del propietario del repositorio.

repositories[].owner.slug string

Slug del propietario visible en la URL que se usa junto con la ID del propietario para identificar al propietario del repositorio.

repositories[].owner.id string

Identificador del propietario de origen.

repositories[].owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

repositories[].defaultBranch string

Nombre de la rama predeterminada del repositorio.

repositories[].mirror object

Metadatos del espejo. Ausentes para un repositorio nativo y antes de que esté lista la sincronización inicial de un espejo.

repositories[].mirror.source string

Origen del espejo. Valor permitido: github.

repositories[].mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

repositories[].mirror.status cadena

Dirección efectiva del espejo durante una transición, hasta que se complete el corte. Valores permitidos: inbound, outbound.

repositories[].visibility string

Visibilidad del repositorio. Valores permitidos: internal, private.

repositories[].allowMergeCommit boolean

Indica si los pull request pueden integrarse como merge commits.

repositories[].allowSquashMerge boolean

Si las solicitudes de incorporación de cambios pueden fusionarse mediante squash.

repositories[].deleteBranchOnMerge boolean

Indica si la rama de cabecera se elimina automáticamente al fusionar.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no hay más páginas.

repoSelectionMode string

Indica si la instalación concede acceso a todos los repositorios o solo a repositorios seleccionados.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/installation/repos' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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 de webhooks

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

Lista las entregas de webhook de la aplicación autenticada, de la más reciente a la más antigua.

Una entrega es un evento adeudado a una aplicación; su id es el valor del encabezado webhook-id que ve el receptor. delivered=false es el predicado de recuperación: selecciona todas las entregas que nunca recibieron un 2xx, incluidas las cuyo escalonado de reintentos se agotó durante una interrupción.

Las entregas se pueden listar durante siete días desde su creación, y solo mientras tu app tenga una instalación activa en el espacio de nombres de la entrega. Los eventos del ciclo de vida dirigidos a la app, como installation.deleted, siguen siendo visibles después de la desinstalación que describen.

Parámetros de consulta

delivered boolean

Se compara con delivered_at. delivered=false es el predicado de recuperación: se evalúa del lado del servidor, por lo que no puede pasar por alto una entrega cuya escalera de reintentos se agotó durante una interrupción, como puede ocurrir silenciosamente con una ventana de tiempo proporcionada por el llamador.

eventType string

Tipo de evento exacto, p. ej., pull_request.created.

installationId string

Filtra a una sola instalación (WebhookDelivery.installation.id).

createdAfter string

Acota la fecha y hora de creación de la entrega. Para explorar, no para recuperación.

createdBefore string

pageSize entero

El valor predeterminado es 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página.

Campos de respuesta

deliveries array

Entregas de webhooks para la aplicación autenticada, ordenadas de la más reciente a la más antigua. Cada ID de entrega es el webhook-id que ve el receptor.

deliveries[].id string

Identificador estable de la entrega y el valor webhook-id que ve el receptor; úsalo como clave de idempotencia.

deliveries[].event object

El evento incluido en esta entrega.

deliveries[].event.id string

Identificador del evento Origin subyacente. También puede aparecer junto con el ID de entrega estable, pero no es la clave de idempotencia.

deliveries[].event.type string

Slug del evento transportado por la entrega para el enrutamiento.

deliveries[].installation object

La instalación a la que pertenece esta entrega. id es la instalación activa actual del propietario objetivo; no establecida cuando no existe ninguna (posible solo para eventos del ciclo de vida dirigidos a la aplicación después de una desinstalación).

deliveries[].installation.id string

Identificador de instalación asociado a un elemento de la lista de entregas del webhook.

deliveries[].installation.target object

Propietario al que está dirigida la instalación.

deliveries[].installation.target.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

deliveries[].installation.target.id string

Identificador del propietario del origin.

deliveries[].installation.target.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

deliveries[].createdAt string

Marca de tiempo de creación de la entrega que usan los filtros de exploración createdAfter y createdBefore.

deliveries[].deliveredAt string

La ausencia corresponde a delivered=false: el receptor nunca ha confirmado esta entrega con una respuesta 2xx.

deliveries[].lastAttempt object

El intento HTTP más reciente, si existe: su código de estado de la response, latency, error de transport, trigger y hora.

deliveries[].lastAttempt.id string

Identificador del intento de entrega del webhook.

deliveries[].lastAttempt.deliveryId string

Identificador estable de entrega asociado con este intento.

deliveries[].lastAttempt.trigger string

Motivo por el que se envió este intento de entrega. Valores permitidos: automatic, manual.

deliveries[].lastAttempt.responseStatusCode entero

No establecido cuando la solicitud POST no produjo ninguna respuesta HTTP (error de transporte, tiempo de espera).

deliveries[].lastAttempt.latencyMs entero

Latencia del intento de entrega en milisegundos.

deliveries[].lastAttempt.errorMessage string

Detalle del error de transporte cuando no hubo respuesta HTTP; vacío en caso contrario.

deliveries[].lastAttempt.attemptedAt string

Marca de tiempo RFC 3339 de este intento de entrega.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no hay más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/app/webhook/deliveries' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"      }    }  ]}

Reenviar en lote entregas de webhooks

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

Solicita a Origin que vuelva a enviar las entregas.

La solicitud significa «garantizar que haya un envío en curso para cada una de estas», no «añadir otro envío». Devuelve un resultado por cada entrada única en lugar de hacer que el lote falle por una entrada no válida, de modo que un único ID vencido no pueda bloquear el resto de una página de recuperación. Un 202 significa que los envíos están en cola; la entrega en sí es asíncrona, por lo que consulta List Webhook Deliveries para conocer los resultados.

Cuerpo de la solicitud

deliveryIds array Obligatorio

Entregas que se volverán a enviar. Admite un máximo de 100 entradas únicas, igual que el límite de pageSize de List Webhook Deliveries. Se eliminan los duplicados y se conserva el orden de la primera aparición. Una lista vacía o más de 100 entradas únicas devuelve InvalidArgument (HTTP 400).

Campos de respuesta

results array

Resultados aceptados de reentrega asíncrona, uno por cada ID de entrega único, con los resultados queued, already_in_flight o not_found.

results[].deliveryId cadena

ID de entrega estable solicitado correspondiente a este resultado del lote.

results[].outcome cadena

Estado de la reentrega: queued cuando se creó un envío, already_in_flight cuando ya había un envío en curso y not_found en los demás casos. already_in_flight es un éxito, no un error. not_found abarca los ID desconocidos, los ID anteriores al período de retención de siete días y los espacios de nombres donde tu app ya no está instalada.
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"  ]}'

Estructura de la respuesta:

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

Ping del webhook

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

Envía una entrega de prueba a la URL del webhook de la app autenticada e informa de la respuesta del receptor.

Úsalo para verificar un receptor mientras configuras una app, en lugar de esperar a un evento real. Requiere autenticación mediante JWT de firma de la app, como Obtener la aplicación autenticada.

El receptor recibe la estructura de producción: los mismos encabezado y la firma v1ed, que puede verificarse con las claves de firma, con webhook-event-type establecido en ping y un payload que identifica la app. Un ping no pertenece a ninguna instalación, por lo que no se incluyen ni el encabezado webhook-installation-id ni el installationId del sobre.

Origin envía el ping una sola vez, de forma síncrona, e informa del resultado en la respuesta. No hay reintentos y un ping no es un evento de dominio: nunca aparece en List Webhook Deliveries y no se puede reenviar. Si un receptor falla, se informa en la respuesta en lugar de devolver un error. Una app sin una URL de webhook configurada devuelve FailedPrecondition (HTTP 400).

Cuerpo de la solicitud

La solicitud no acepta campos. Envía un objeto JSON vacío.

Campos de respuesta

deliveryId cadena

El webhook-id de la entrega de prueba, que coincide con el encabezado que recibió el receptor.

eventId cadena

El ID del evento dentro del sobre firmado; es el mismo valor que event.id.

delivered boolean

Es true si el receptor respondió con un estado 2xx antes de que venciera el tiempo de espera de entrega. Siempre está presente.

responseStatusCode entero

Estado HTTP con el que respondió el receptor, o 0 si no se recibió ninguna respuesta porque falló la conexión o se agotó el tiempo de espera. Siempre está 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 '{}'

Estructura de la respuesta:

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

Get App

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

Devuelve una sola app a partir de su identifier. Esta es la lectura de gestión para los publishers de apps; Get Authenticated App es el equivalent de autolectura para la credential JWT propia de la app.

Path Parameters

appId string Required

Identifier de la app, con el prefix app_.

Campos de respuesta

id string

Identifier de la app único globalmente, con el prefix app_.

displayName string

Nombre de la app orientado a personas.

webhookUrl string

URL HTTPS registrada que recibe las webhook deliveries de la app. Vacío cuando la app no recibe deliveries.

events array

Subscriptions a webhook events configuradas para la app. Los eventos installation.* se entregan siempre y nunca aparecen aquí.

createdAt string

Timestamp RFC 3339 de la creación de la app.

updatedAt string

Timestamp RFC 3339 de la última actualización de los metadata de la app.

installationRedirectUris array

Lista de permitidos del callback de instalación OAuth: URI de redirección a las que puede volver una instalación iniciada por la app, comparadas de forma exacta al autorizar.

namespaceSlug string

Slug del espacio de nombres propietario de la app.

description string

Descripción de la app proporcionada por el publisher. Vacío si no se ha establecido.

websiteUrl string

Sitio web del publisher. Vacío si no se ha establecido.

defaultScopes array

Scopes predeterminados que se ofrecen al instalar la app, como cadenas de scope del catalog.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/apps/{appId}' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"  ]}

Actualizar app

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

Actualiza los ajustes de una app. Los campos omitidos no se modifican y se debe proporcionar al menos un campo configurable. Borrar webhookUrl enviando una cadena vacía desactiva la entrega de webhooks salientes y cancela las entregas pendientes de la app; volver a establecer una URL no restaura las entregas canceladas.

Parámetros de ruta

appId cadena Obligatorio

Identificador de la app, con el prefijo app_.

Cuerpo de la solicitud

displayName cadena

Nuevo nombre visible de la app. No puede estar vacío si se proporciona.

webhookUrl cadena

Nueva URL de entrega del webhook saliente; debe ser una URL HTTPS absoluta. Una cadena vacía desactiva la entrega de webhooks y cancela las entregas pendientes de la app.

events objeto

Reemplazo completo de las suscripciones a eventos de webhook. Omítelo para dejarlas sin cambios.

events.events array

El nuevo conjunto completo de suscripciones a eventos de webhook de la app. Una lista vacía borra las suscripciones a eventos de repositorio; los eventos installation.* siempre se entregan y no se pueden enumerar aquí.

description cadena

Nueva descripción de la app. Omítela para dejarla sin cambios; una cadena vacía la borra.

websiteUrl cadena

Nuevo sitio web del publisher. Omítelo para dejarlo sin cambios; una cadena vacía lo borra.

installationRedirectUris objeto

Reemplazo completo de la lista de permitidos del callback de instalación de OAuth. Omite este campo para dejarla sin cambios.

installationRedirectUris.installationRedirectUris array

La nueva lista de permitidos completa. Una lista vacía la elimina.

defaultScopes objeto

Reemplazo completo de los scopes de instalación predeterminados de la app. Omítelo para dejarlos sin cambios.

defaultScopes.scopes array

El nuevo conjunto completo de ámbitos de instalación predeterminados. Una lista vacía los elimina.

Campos de respuesta

id cadena

Identificador de la app globalmente único, con el prefijo app_.

displayName cadena

Nombre de la app visible para los usuarios.

webhookUrl cadena

URL HTTPS registrada que recibe las entregas de webhook de la aplicación. Vacía cuando la aplicación no recibe entregas.

events array

Suscripciones a eventos de webhook configuradas para la app. Los eventos installation.* siempre se entregan y nunca aparecen aquí.

createdAt cadena

Marca de tiempo RFC 3339 de creación de la aplicación.

updatedAt cadena

Timestamp RFC 3339 de la última actualización de los metadatos de la app.

installationRedirectUris array

Lista de permitidos del callback de instalación de OAuth: URI de redirección a las que puede volver una instalación iniciada por la app, que se comparan de forma exacta en el momento de autorizar.

namespaceSlug cadena

Slug del espacio de nombres propietario de la app.

description cadena

Descripción de la aplicación proporcionada por el editor. Vacía si no se ha definido.

websiteUrl cadena

Sitio web del editor. Vacío si no se ha establecido.

defaultScopes array

Ámbitos predeterminados que se ofrecen al instalar la aplicación, como cadenas de ámbito del 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"    ]  }}'

Estructura de la respuesta:

{  "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"  ]}

Añadir clave de firma a una aplicación

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

Añade una clave de firma a una aplicación. Las aplicaciones admiten un número limitado de claves de firma activas; si añades una clave por encima del límite, se devuelve FailedPrecondition (HTTP 400) hasta que se revoque otra clave. Si la clave ya está registrada, se devuelve AlreadyExists (HTTP 409 Conflict).

Parámetros de ruta

appId cadena Obligatorio

Identificador de la aplicación, con el prefijo app_.

Cuerpo de la solicitud

publicKey cadena Obligatorio

Clave pública Ed25519 en formato PEM SPKI que se añadirá al conjunto de claves de firma de la aplicación.

Campos de respuesta

kid cadena

ID de clave: el resumen SHA-256 codificado en base64url de la codificación SPKI DER de la clave. Úsalo como header kid del JWT y para revocar la clave.

createdAt cadena

Marca de tiempo RFC 3339 del momento en que se registró la clave.
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-----"}'

Estructura de la respuesta:

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

Revocar la clave de firma de una aplicación

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

Revoca una clave de firma de una aplicación a partir de su key ID. Los JWT de aplicación firmados con una clave revocada dejan de autenticar. La última clave de firma activa no se puede revocar; esa solicitud devuelve FailedPrecondition (HTTP 400). El response body queda vacío.

Parámetros de ruta

appId cadena Obligatorio

Identificador de la aplicación, con el prefijo app_.

kid cadena Obligatorio

Key ID de la clave de firma que se va a revocar.

Campos de respuesta

Las solicitudes correctas no devuelven ningún response body.

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

Respuesta:

204 No Content

Listar aplicaciones del espacio de nombres

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

Lista las aplicaciones que pertenecen a un espacio de nombres, de la más reciente a la más antigua. Las respuestas solo incluyen metadata de visualización; para consultar la configuración de webhook de una aplicación, usa Get App.

Parámetros de ruta

namespaceSlug cadena Required

Slug del espacio de nombres cuyas aplicaciones se van a listar.

Parámetros de consulta

pageSize integer

Número máximo de aplicaciones a devolver. El valor predeterminado es 30 si no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página.

Campos de respuesta

apps array

Página de aplicaciones que pertenecen al espacio de nombres.

apps[].id cadena

Identificador de aplicación único globalmente, con el prefijo app_.

apps[].displayName cadena

Nombre de la aplicación visible para las personas.

apps[].description cadena

Descripción proporcionada por el publisher. Vacía cuando no se establece.

nextPageToken cadena

Cherri Code opaco para la siguiente página; vacío cuando no hay más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/namespaces/{namespaceSlug}/apps' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

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

Crear app

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

Crea una aplicación que pertenece a un espacio de nombres. Las aplicaciones se crean como privadas. Genera el par de claves Ed25519 de forma local y envía únicamente la clave pública; Origin la almacena para verificar los JWT de la aplicación. Si las URL de webhook, los tipos de evento, los URI de redirección o los scopes no son válidos, se devuelve InvalidArgument (HTTP 400).

El propietario del espacio de nombres debe cumplir los requisitos para escribir en Origin en el momento de realizar la solicitud, el mismo requisito que exige Crear repositorio. Un propietario que sea usuario debe tener un plan Pro, Pro Student, Pro+, Ultra o Start. Un propietario que sea equipo debe tener un plan de equipo de pago activo, no estar en modo de privacidad (heredado) y no tener Origin desactivado por un administrador de equipo. Si el propietario no cumple los requisitos, se devuelve FailedPrecondition (HTTP 400). Origin comprueba los requisitos del propietario del espacio de nombres, no los del usuario que realiza la llamada.

Parámetros de ruta

namespaceSlug cadena Obligatorio

Slug del espacio de nombres que será propietario de la app.

Cuerpo de la solicitud

displayName cadena Obligatorio

Nombre de la app visible para los usuarios. No puede estar vacío.

publicKey cadena Obligatorio

Clave pública Ed25519 en formato PEM SPKI para el par de claves de firma de la aplicación. Consulta Generate an app signing key.

webhookUrl cadena

URL de entrega del webhook saliente, una URL HTTPS absoluta. Si está vacía, la app no recibe ninguna entrega de webhook.

events array

Suscripciones a eventos de webhook, expresadas como slugs de evento de Events. Los tipos de evento desconocidos se rechazan. Una lista vacía no suscribe a ningún evento, por lo que la app solo recibe los eventos installation.*, que siempre se entregan y no pueden incluirse en esta lista.

description cadena

Descripción breve de la app.

websiteUrl cadena

Sitio web del publisher, una URL HTTPS absoluta.

installationRedirectUris array

Lista de permitidos del callback de instalación de OAuth: URI HTTPS absolutas sin fragmento, con coincidencia exacta al autorizar.

defaultScopes array

Scopes que se ofrecen por defecto al instalar la app, como cadenas de scope del catálogo, por ejemplo repository:contents:read. Las instalaciones siguen aceptando scopes de forma explícita.

Campos de respuesta

id string

Identificador de la app único globalmente, con el prefijo app_.

displayName cadena

Nombre de la app visible para los usuarios.

webhookUrl cadena

URL HTTPS registrada que recibe las entregas de webhook de la app. Vacía cuando la app no recibe entregas.

events array

Suscripciones a eventos de webhook configuradas para la app. Los eventos installation.* se entregan siempre y nunca aparecen aquí.

createdAt cadena

Marca de tiempo RFC 3339 para la creación de la app.

updatedAt cadena

Timestamp RFC 3339 de la última actualización de los metadatos de la app.

installationRedirectUris array

Lista de permitidos de devolución de llamada de instalación de OAuth: URI de redirección a las que puede volver una instalación iniciada por la aplicación; se comparan exactamente al autorizar.

namespaceSlug cadena

Slug del espacio de nombres propietario de la app.

description cadena

Descripción de la app proporcionada por el publisher. Vacía si no se ha establecido.

websiteUrl cadena

Sitio web del editor. Vacío si no se ha establecido.

defaultScopes array

Ámbitos predeterminados que se ofrecen al instalar la app, como cadenas de ámbito del 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"  ]}'

Estructura de la respuesta:

{  "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": "Publica el estado de CI en los pull request.",  "websiteUrl": "https://ci.acme.dev",  "defaultScopes": [    "repository:contents:read",    "repository:pull_requests:read"  ]}

Añadir repositorios de instalación de la aplicación

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

Añade repositorios a la selección de repositorios de una instalación y devuelve la instalación actualizada. La escritura es acumulativa: los repositorios listados se unen a la selección actual, una solicitud cuyos repositorios ya tienen acceso concedido se completa sin cambiar nada y los ámbitos de la instalación nunca cambian.

Todos los repositorios listados deben pertenecer al espacio de nombres de destino; de lo contrario, la solicitud devuelve FailedPrecondition (HTTP 400) y no concede nada. El mismo error se aplica a una instalación que ya incluye todos los repositorios del espacio de nombres (repoSelectionMode es all), a una que está suspendida y a una anterior a los ámbitos por instalación. Una instalación que no existe, o que pertenece a otro espacio de nombres, devuelve 404; el mensaje indica la página de consentimiento que hay que abrir cuando la app nunca se ha instalado en el espacio de nombres, ya que este endpoint no puede realizar una primera instalación.

El llamador debe ser una credencial de usuario de Cherri Code con acceso de gestión de instalaciones al espacio de nombres. Los tokens de app, los tokens de acceso de instalación y las cuentas de servicio no pueden cambiar los repositorios de una instalación.

Parámetros de ruta

namespaceSlug string Obligatorio

Slug del espacio de nombres al que pertenece la instalación.

installationId cadena Obligatorio

Identificador de instalación.

Cuerpo de la solicitud

repoIds array Obligatorio

IDs de repositorios que se añadirán a la selección de la instalación. Se requiere al menos uno; los valores se deduplican y los repositorios que ya forman parte de la selección se aceptan sin cambios. Cada repositorio listado debe pertenecer al espacio de nombres; de lo contrario, la solicitud falla y no se concede nada.

Campos de respuesta

id cadena

Identificador de instalación que la app almacena y usa para emitir tokens de acceso de instalación.

appId cadena

Identificador de la app instalada.

target objeto

Propietario seleccionado por el cliente para esta instalación.

target.slug cadena

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

target.id cadena

Identificador del propietario del origen.

target.type cadena

Tipo de espacio de nombres del propietario. Disponible solo en la salida. Valores permitidos: team, user. Se omite si se desconoce.

createdAt cadena

Marca de tiempo RFC 3339 de creación de la instalación.

updatedAt cadena

Marca de tiempo RFC 3339 de la última actualización de la instalación.

repoSelectionMode cadena

Modo de concesión del repositorio; exactamente todos o seleccionados.

scopes array

Ámbitos autorizados para la instalación.

installedBy objeto

El usuario que instaló originalmente la aplicación, no el actor que volvió a dar su consentimiento más recientemente. Solo de salida. Ausente cuando ya no se puede leer el registro de ese usuario.

installedBy.id cadena

Identificador público del usuario, con el prefijo user_.

installedBy.email cadena

Dirección de correo electrónico del usuario.

installedBy.displayName cadena

Nombre para mostrar del usuario: el nombre y los apellidos de la cuenta unidos por un espacio; es el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

installedBy.handle cadena

El handle del perfil afirmado por el usuario, sin el prefijo @. Solo aparece mientras ese perfil sea visible públicamente; en caso contrario, se omite.

suspendedAt cadena

Marca de tiempo RFC 3339 establecida mientras la instalación está suspendida. Se omite mientras la instalación está activa.

deletedAt cadena

Marca de tiempo RFC 3339 de la eliminación de la instalación. Solo se incluye en la instantánea del webhook installation.deleted; una instalación eliminada ya no se resuelve a través de la API, por lo que este endpoint nunca la devuelve.
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"  ]}'

Estructura de la respuesta:

{  "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"  ]}

Repositorios

cloneUrl es una URL HTTPS de clonación disponible solo en la salida. Obtener repositorio incluye cloneUrl.

Los partners descubren sus repositorios mediante Listar repositorios de la instalación de la aplicación. El listado de repositorios y su creación en todo el espacio de nombres no forman parte de la API para partners.

Listar espacios de nombres

GET/v1/origin/namespaces
AuthUser access token

Lista los espacios de nombres en los que puedes listar repositorios, ordenados por slug.

Los candidatos son los espacios de nombres de tus equipos, tu espacio de nombres personal y los espacios de nombres que contienen repositorios a los que se te ha concedido acceso. Solo se devuelven aquellos en los que tienes namespace:repositories:read, por lo que cada resultado es un ownerSlug válido para List Repos.

El llamador debe usar una credencial de usuario de Cursor; la llamada no requiere ningún scope propio. Los tokens de app, los tokens de acceso de instalación y las cuentas de servicio reciben PermissionDenied (HTTP 403).

Parámetros de consulta

pageSize entero

Número máximo de espacios de nombres que se devolverán. El valor predeterminado es 30 si no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco obtenido del next_page_token de una respuesta anterior. Vacío para la primera página. En una solicitud posterior, pageSize se aplica a esa página; omítelo para conservar el tamaño de página anterior.

Campos de respuesta

namespaces array

Espacios de nombres en los que puedes listar repositorios, ordenados por slug.

namespaces[].namespace objeto

Referencia al propietario del espacio de nombres.

namespaces[].namespace.slug cadena

Slug del propietario que se usa en las URL. Úsalo como ownerSlug con List Repos.

namespaces[].namespace.id cadena

Identificador del propietario en Origin.

namespaces[].namespace.type cadena

Tipo de espacio de nombres del propietario. Disponible solo en la salida. Valores permitidos: team, user. Se omite si se desconoce.

namespaces[].viewerCanCreateRepositories booleano

Indica si, en tu caso, Crear repositorio en este espacio de nombres superaría las comprobaciones de autorización, así como las del plan y los ajustes del propietario.

nextPageToken cadena

Cherri Code opaco para la siguiente página; vacío cuando no hay más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/namespaces' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

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

Listar repositorios

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

Enumera los repositorios de una entidad propietaria.

Parámetros de ruta

ownerSlug string Obligatorio

Slug de la entidad propietaria principal.

Parámetros de consulta

pageSize entero

Número máximo de repositorios que se devolverán. Por defecto es 30 cuando no se especifica o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco procedente del next_page_token de una respuesta anterior. Vacío para la primera página. El pageSize de una solicitud posterior se aplica a esa página; omítalo para mantener el tamaño de página anterior.

filter string

Filtro opcional por subcadena que no distingue entre mayúsculas y minúsculas.

Campos de respuesta

repositories arreglo

Repositorios pertenecientes al propietario solicitado.

repositories[].id string

Identificador del repositorio de origen.

repositories[].name string

Nombre del repositorio dentro de su propietario.

repositories[].fullName string

Nombre combinado del propietario y del repositorio, como acme/api.

repositories[].owner objeto

Referencia del propietario del repositorio.

repositories[].owner.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

repositories[].owner.id string

Identificador del propietario de origen.

repositories[].owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

repositories[].defaultBranch string

Nombre de la rama predeterminada del repositorio.

repositories[].createdAt string

Marca de tiempo de creación del repositorio en formato RFC 3339.

repositories[].updatedAt string

Marca de tiempo de actualización del repositorio (RFC 3339).

repositories[].pushedAt string

Marca de tiempo RFC 3339 del push más reciente mostrado por la respuesta completa del repositorio.

repositories[].cloneUrl string

URL HTTPS solo de salida para clonar; la respuesta de get-repository la incluye.

repositories[].mirror objeto

Metadatos del espejo. Ausentes para un repositorio nativo y antes de que la sincronización inicial del espejo esté lista.

repositories[].mirror.source string

Origen del espejo. Valor permitido: github.

repositories[].mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

repositories[].mirror.status string

Dirección efectiva del espejo durante una transición, hasta que se complete la conmutación. Valores permitidos: inbound, outbound.

repositories[].visibility string

Visibilidad del repositorio. Valores permitidos: internal, private.

repositories[].allowMergeCommit boolean

Indica si los pull request pueden integrarse como commits de fusión.

repositories[].allowSquashMerge boolean

Si los pull request pueden fusionarse mediante squash.

repositories[].deleteBranchOnMerge booleano

Indica si la rama de cabecera se elimina automáticamente al fusionar.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no haya más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"    }  ]}

Obtener repositorio

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

Devuelve un repositorio por su identificador (owner_id, name).

cloneUrl es una URL HTTPS de clonación solo de salida. La operación Get repository incluye cloneUrl.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Campos de respuesta

id string

Identificador del repositorio de origen.

name string

Nombre del repositorio dentro de su propietario.

fullName string

Nombre combinado del propietario y del repositorio, como acme/api.

owner object

Referencia del propietario del repositorio.

owner.slug string

Slug del propietario visible en la URL, usado junto con el ID del propietario para identificar al propietario del repositorio.

owner.id string

Identificador del propietario del origen.

owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

defaultBranch string

Nombre de la rama predeterminada del repositorio.

createdAt string

Marca de tiempo de creación del repositorio en formato RFC 3339.

updatedAt string

Marca de tiempo de actualización del repositorio en RFC 3339.

pushedAt string

Marca de tiempo RFC 3339 del push más reciente mostrado por la respuesta completa del repositorio.

cloneUrl string

URL HTTPS de clonación solo de salida; la respuesta de get-repository la incluye.

mirror object

Metadatos del espejo. Ausentes para un repositorio nativo y antes de que la sincronización inicial del espejo esté lista.

mirror.source string

Origen del repositorio espejo. Valor permitido: github.

mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

mirror.status string

Dirección efectiva del espejo durante una transición, hasta que se complete el corte. Valores permitidos: inbound, outbound.

visibility string

Visibilidad del repositorio. Valores permitidos: internal, private.

allowMergeCommit boolean

Indica si las pull request pueden incorporarse como commits de fusión.

allowSquashMerge boolean

Si las pull request pueden fusionarse mediante squash.

deleteBranchOnMerge boolean

Indica si la rama de cabecera se elimina automáticamente al fusionar.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"}

Actualizar repositorio

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

Actualiza la configuración del repositorio. Los campos omitidos no se modifican y se debe proporcionar al menos un campo que se pueda configurar.

Los ajustes se aplican como grupos independientes en un orden fijo: rama por defecto, eliminación automática de la rama cabecera, visibilidad y, por último, métodos de fusión. La actualización no es atómica entre grupos. Cuando se rechaza un grupo, los grupos anteriores en ese orden ya se han aplicado y siguen aplicados, así que vuelve a intentarlo con el grupo rechazado corregido para converger en el estado que solicitaste. La respuesta devuelve el repositorio tal como quedó tras el último grupo aplicado.

Una solicitud que no establece ningún campo devuelve InvalidArgument (HTTP 400). Un cambio concurrente en la rama predeterminada devuelve 409 Conflict.

Parámetros de ruta

ownerSlug cadena Obligatorio

slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Cuerpo de la solicitud

defaultBranch string

Nueva rama predeterminada. Debe indicar una rama existente. Solo se admite en repositorios que no hagan pull desde ni push hacia una fuente ascendente; otros repositorios devuelven FailedPrecondition (HTTP 400).

allowMergeCommit boolean

Indica si los pull request pueden integrarse mediante commits de fusión. Debe enviarse junto con allowSquashMerge, y al menos uno de los dos debe ser true. Enviar uno sin el otro devuelve InvalidArgument (HTTP 400).

allowSquashMerge boolean

Indica si las pull requests pueden incorporarse como fusiones squash. Debe enviarse junto con allowMergeCommit, y al menos uno de los dos debe ser true. Enviar uno sin el otro devuelve InvalidArgument (HTTP 400).

deleteBranchOnMerge boolean

Indica si la rama de cabecera se elimina automáticamente al fusionar. Solo se admite en repositorios cuyas pull requests residen en esta API; un repositorio que extrae cambios de una fuente upstream devuelve FailedPrecondition (HTTP 400).

visibility string

Nueva visibilidad del repositorio. Valores permitidos: internal, private. Omítelo para mantener la visibilidad sin cambios.

Campos de la respuesta

id string

Identificador del repositorio de origen.

name string

Nombre del repositorio dentro de su propietario.

fullName cadena

Nombre del propietario y del repositorio combinados, como acme/api.

owner objeto

Referencia del propietario del repositorio.

owner.slug string

Slug de propietario visible en la URL que se utiliza junto con el ID del propietario para identificar al propietario del repositorio.

owner.id string

Identificador del propietario del origen.

owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

defaultBranch string

Nombre de la rama predeterminada del repositorio.

createdAt string

Marca de tiempo RFC 3339 de creación del repositorio.

updatedAt string

Marca de tiempo de actualización del repositorio según RFC 3339.

pushedAt string

Marca de tiempo RFC 3339 del push más reciente mostrado por la respuesta completa del repositorio.

cloneUrl string

URL de clonado HTTPS disponible solo en la salida; la respuesta de get-repository la incluye.

mirror objeto

Metadatos de réplica. Ausente para un repositorio nativo y antes de que esté lista la sincronización inicial de una réplica.

mirror.source string

Origen del espejo. Valor permitido: github.

mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

mirror.status cadena

Dirección efectiva del espejo durante una transición, hasta que se complete el corte. Valores permitidos: inbound, outbound.

visibility string

Visibilidad del repositorio. Valores permitidos: internal, private.

allowMergeCommit boolean

Si las pull requests se pueden fusionar mediante commits de fusión.

allowSquashMerge boolean

Si los pull request pueden fusionarse mediante squash merge.

deleteBranchOnMerge boolean

Indica si la rama de origen se elimina automáticamente al fusionar.
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"}'

Estructura de la respuesta:

{  "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}

Crear repositorio

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

Crea un repo perteneciente a un owner.

El propietario debe poder escribir en Origin cuando se realice la solicitud. Un propietario usuario debe tener un plan Pro, Pro Student, Pro+, Ultra o Start. Un propietario de equipo debe tener un plan de equipo de pago activo, no debe estar en Modo de privacidad (heredado) y no debe tener Origin desactivado por un administrador del equipo. Un propietario no elegible devuelve FailedPrecondition (HTTP 400). La lectura de repositorios existentes no tiene este requisito.

Los nombres de repositorio se reservan sin distinguir entre mayúsculas y minúsculas. Se rechaza cualquier nombre que solo difiera en el uso de mayúsculas y minúsculas de otro repositorio que ya pertenezca al propietario, por lo que widgets y Widgets no pueden coexistir en un mismo espacio de nombres. El nombre enviado se almacena tal como se envía.

El primer push a un repositorio nuevo puede cambiar su rama predeterminada. Cuando ese push solo crea ramas y ninguna de ellas es la rama predeterminada almacenada del repositorio, Origin establece como rama predeterminada la rama creada, o main o master si el push crea varias y uno de esos nombres está entre ellas. En cualquier otro caso, la rama predeterminada no cambia. Consulta el valor actual en Get Repo.

Parámetros de ruta

ownerSlug string Obligatorio

Slug de la entidad propietaria principal.

Cuerpo de la solicitud

name string Obligatorio

El nombre del repositorio, único para su propietario. Obligatorio al crear.

defaultBranch string

Nombre de la rama predeterminada. Siempre aparece en las respuestas. Al crear, si se omite este campo o se deja vacío, por defecto se usa "main".

Campos de respuesta

id string

Identificador del repositorio de origen.

name string

Nombre del repositorio dentro de su propietario.

fullName string

Nombre combinado del propietario y del repositorio, por ejemplo acme/api.

owner object

Referencia del propietario del repositorio.

owner.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

owner.id string

Identificador del propietario del origen.

owner.type cadena

Tipo de espacio de nombres del propietario. Solo salida. Valores permitidos: team, user. Se omite si se desconoce.

defaultBranch string

Nombre de la rama predeterminada del repositorio.

createdAt string

Sello de fecha y hora de creación del repositorio en formato RFC 3339.

updatedAt string

Marca de tiempo de actualización del repositorio en RFC 3339.

pushedAt string

Marca de tiempo RFC 3339 del push más reciente que muestra la respuesta completa del repositorio.

cloneUrl string

URL de clonación HTTPS solo de salida; la respuesta de get-repository la incluye.

mirror object

Metadatos del espejo. Ausentes en un repositorio nativo y antes de que la sincronización inicial del espejo esté lista.

mirror.source string

Origen de la réplica. Valor permitido: github.

mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

mirror.status string

Dirección efectiva del espejo durante una transición, hasta que se complete el cambio. Valores permitidos: inbound, outbound.

visibility string

Visibilidad del repositorio. Valores permitidos: internal, private.

allowMergeCommit boolean

Indica si las pull requests se pueden fusionar mediante commits de fusión.

allowSquashMerge boolean

Indica si los pull request pueden fusionarse mediante squash.

deleteBranchOnMerge boolean

Indica si la rama de cabecera se elimina automáticamente al fusionar.
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"}'

Estructura de la respuesta:

{  "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 ramas

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

Lista las ramas del repositorio y sus commits de punta en orden alfabético ascendente, paginadas mediante page_size y page_token.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Parámetros de consulta

pageSize entero

Número máximo de ramas que se devolverán. El valor predeterminado es 30 si no se especifica o si es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del campo next_page_token de una respuesta anterior. Déjelo vacío para la primera página. Codifica la posición desde la que se reanuda la paginación. El valor de pageSize en una solicitud posterior se aplica a esa página; omítalo para mantener el tamaño de página anterior.

Campos de respuesta

branches array

Registros de ramas paginados que contienen el nombre de la rama y el SHA del commit de punta.

branches[].name cadena

Nombre de la rama.

branches[].commit objeto

El commit en la punta de la rama.

branches[].commit.sha cadena

SHA hexadecimal completo del commit en la punta de la rama.

nextPageToken cadena

Cherri Code opaco para la página siguiente; vacío cuando no hay más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/branches' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

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

Obtener el tarball del repositorio

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

Descarga un archivo tar comprimido con gzip del árbol del repositorio en ref.

Origin indexa el archivo según el repositorio y el commit al que se resuelve ref. La primera solicitud para un commit determinado responde con 200 y Content-Type: application/gzip, y transmite el archivo como cuerpo de la respuesta. Las solicitudes posteriores para el mismo commit responden con 302, un cuerpo vacío y una URL de descarga firmada en Location, válida durante 15 minutos; sigue la redirección para descargar los bytes. El archivo contiene un único directorio de nivel superior llamado {ownerSlug}-{repoName}-{shortSha}/, donde shortSha corresponde a los primeros 7 caracteres hexadecimales del commit resuelto, lo que coincide con la estructura del endpoint de tarball de GitHub. Un repositorio vacío devuelve ABORTED (HTTP 409 Conflict) y una referencia que no se resuelve devuelve 404.

Envía la referencia como parámetro de consulta en lugar de como segmento de ruta para indicar una referencia que contiene "/": GET /v1/origin/repos/{ownerSlug}/{repoName}/tarball?ref=refs/heads/main. Omítela para archivar la rama predeterminada del repositorio.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

ref cadena Obligatorio

SHA del commit (hexadecimal completo o abreviado), nombre simple de rama o etiqueta, refs/heads/... o refs/tags/... con nombre completo, o HEAD simbólico. No es un glob ni una revspec, por lo que se rechaza <rev>~3. Si está vacío, se usa la rama predeterminada del repositorio.

Campos de respuesta

sha cadena

ID del objeto de commit resuelto: hexadecimal de 40 o 64 caracteres. Se devuelve a los llamadores de Connect y JSON; mediante REST, léelo del nombre de archivo del tar o de la URL firmada.

downloadUrl cadena

URL de descarga firmada de corta duración, válida durante 15 minutos. Está vacía cuando la respuesta transmite el archivo en línea, lo que ocurre en la primera solicitud para este repositorio y commit. Mediante REST, la misma URL se envía como encabezado Location en la respuesta 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'

Estructura de la respuesta:

{  "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 réplica

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

Sincroniza una referencia de un repositorio replicado desde su origen. Devuelve HTTP 200 cuando se alcanza el objetivo de sincronización o HTTP 202 cuando la sincronización sigue pendiente. wait=false (el valor predeterminado) programa la sincronización y normalmente devuelve 202; devuelve 200 de inmediato cuando ya se puede acceder a sha desde ref. wait=true bloquea hasta que se alcance el objetivo o venza el tiempo máximo de espera (~2 minutos); al vencer, sigue devolviendo 202 y la sincronización continúa en segundo plano. Se rechazan los repositorios que no obtienen cambios de un origen.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Cuerpo de la solicitud

ref cadena Obligatorio

Nombre completo de la referencia de Git que se debe obtener. Debe comenzar con refs/ e indicar una referencia después de ese prefijo; por ejemplo, refs/heads/main o refs/tags/v1. Los nombres cortos, como main, se rechazan con INVALID_ARGUMENT.

wait boolean

Si es true, bloquea hasta que se complete la sincronización o venza el tiempo máximo de espera. El valor predeterminado es false.

sha cadena

ID completo opcional del objeto commit: un valor hexadecimal de 40 o 64 caracteres. Omítelo o déjalo vacío para esperar la punta de ref. Si se especifica y se puede acceder a él desde ref, la llamada devuelve antes sin esperar a que finalice otro trabajo de replicación. Otros valores se rechazan con INVALID_ARGUMENT.

Campos de respuesta

synced boolean

True cuando se sabe que se ha alcanzado el objetivo de sincronización, false mientras la sincronización sigue pendiente. Siempre está presente y refleja el estado HTTP: 200 cuando es true, 202 cuando es false.
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}'

Estructura de la respuesta:

{  "synced": true}

Los endpoints de transición de réplicas están documentados en la Origin Migration API. Sincronizar réplica permanece en esta página.

Desvincular la réplica del repositorio

Consulta Desvincular la réplica del repositorio.

Obtener trabajo de transición de réplica

Consulta Obtener trabajo de transición de réplica.

Obtener trabajo activo de transición de réplica

Consulta Obtener trabajo activo de transición de réplica.

Forzar el cambio de la réplica del repositorio

Consulta Forzar el cambio de la réplica del repositorio.

Transición de la réplica del repositorio

Consulta Transición de la réplica del repositorio.

Comprobaciones

  • La primera operación de crear o actualizar una ejecución crea automáticamente su suite.
  • Las comprobaciones obligatorias se corresponden con la app que realiza la instalación, la key de la suite y, opcionalmente, la key de una ejecución. name solo se muestra y no se usa para establecer la correspondencia.
  • Mantén los valores de key estables entre intentos y legibles para los usuarios, ya que la configuración de comprobaciones obligatorias se basa en ellos.
  • Reutiliza externalId para actualizar un intento, lo que descarta el resultado anterior de ese intento; usa un externalId nuevo para reintentar, de modo que el intento anterior se conserve como historial.
  • Usa checkRun.output para mostrar resultados legibles:
    • title: título breve del resultado, de hasta 255 caracteres.
    • summary: resumen principal en Markdown, de hasta 65 535 bytes UTF-8.
    • text: detalles ampliados en Markdown, de hasta 65 535 bytes UTF-8.
  • Usa detailsUrl para enlazar a la página de resultados externa del proveedor.

Ejecuciones de comprobación define qué intento es el actual, cómo externalUpdatedAt ordena las escrituras y qué informa outcome, además de las reglas de marcas de tiempo y plazos que comparten estos endpoints.

Publicar ejecución de verificación

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

Crea o actualiza una suite de comprobaciones y una ejecución de comprobación usando un token de acceso de instalación con repository:checks:write. La escritura se atribuye a la aplicación propietaria de la instalación autenticada. Una llamada repetida con los mismos (repo, head_sha, suite.key, check.key) actualiza la ejecución de comprobación existente en lugar de crear un duplicado.

El endpoint resuelve o crea de forma atómica el intento de suite y hace upsert de un intento de ejecución. externalUpdatedAt ordena las actualizaciones para la misma identidad de ejecución; los reintentos obsoletos no pueden sobrescribir un estado más reciente, y una finalización cancelled no puede reemplazar un resultado satisfactorio almacenado; consulta Orden de las escrituras. Tanto una publicación que se ignora por obsoleta como una publicación que repite los valores almacenados devuelven igualmente 200 con la suite y la ejecución almacenadas, así que consulta outcome para distinguir ignored_stale y unchanged de created y updated. updatedAt no cambia en ninguno de los dos casos, por lo que no sirve para diferenciarlos.

Dentro de una suite, el intento actual para una key de ejecución es la ejecución con el externalUpdatedAt más reciente; los empates se resuelven por createdAt y después por id, de más reciente a más antiguo. Cada (actor, key, externalId) informado para un commit constituye un intento de suite, y el intento actual para cada (actor, key) es aquel cuyas ejecuciones tienen el externalUpdatedAt más reciente; una suite sin ejecuciones se ordena según su propio createdAt. Una ejecución es la actual para su commit solo mientras su suite sea el intento actual del commit, por lo que una ejecución publicada bajo un externalId de suite más antiguo permanece oculta en los listados del commit mientras otro intento de esa suite tenga actividad más reciente. En ambos niveles, un intento cancelado no desplaza a uno aprobado; Intentos y el intento actual explica la regla. Los intentos reemplazados siguen siendo consultables por id.

deadlineAt registra una fecha límite opcional en la ejecución. Origin la almacena, la devuelve en las lecturas y la borra una vez que la ejecución alcanza completed. Una fecha límite a más de 24 horas en el futuro se rechaza con InvalidArgument (HTTP 400) en lugar de ajustarse.

Cuando vence el plazo de una ejecución que aún está in_progress, Origin completa la ejecución por sí mismo con la conclusión timed_out, estableciendo completedAt si la ejecución no lo tenía, y emite repository.check_run.completed. La expiración se realiza como una limpieza periódica en lugar de mediante un temporizador por ejecución, por lo que se produce algunos minutos después de la fecha límite y no justo en ella. La limpieza se ejecuta aproximadamente cada 30 minutos de forma predeterminada, un ajuste operativo que puede cambiar. Una ejecución queued nunca expira, ni tampoco una ejecución que no tenga deadlineAt. Completar la ejecución usted mismo antes de la fecha límite la anula. Origin deja intacto el externalUpdatedAt de la ejecución cuando la agota por tiempo, por lo que una finalización posterior de su proveedor aún puede sobrescribir la conclusión timed_out.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Cuerpo de la solicitud

headSha string Obligatorio

SHA del commit principal contra el que se informa la ejecución de la comprobación (hexadecimal de 40 o 64 caracteres).

checkSuite objeto Obligatorio

La suite a la que pertenece la ejecución de la verificación; se inserta o actualiza junto con dicha ejecución.

checkSuite.key string Obligatorio

Clave estable, elegida por la aplicación, que identifica la suite lógica a lo largo de los intentos.

checkSuite.name string Obligatorio

Nombre de la suite visible para el usuario.

checkSuite.detailsUrl cadena

Enlace opcional con más detalles sobre la suite en su conjunto.

checkSuite.externalId string Obligatorio

Identidad inmutable asignada por el proveedor para este intento de suite.

checkRun objeto Obligatorio

La ejecución de verificación que se debe crear o actualizar.

checkRun.key string Obligatorio

Clave estable, elegida por la aplicación, que identifica la comprobación lógica a lo largo de los intentos.

checkRun.name cadena Obligatorio

Nombre visible de la ejecución de la comprobación.

checkRun.status string Obligatorio

Valores que se pueden establecer: CHECK_RUN_LIFECYCLE_STATUS_UNSPECIFIED, queued, in_progress, completed. El esquema también incluye rerequested, que solo Origin establece al volver a solicitarse; una solicitud que lo incluya devuelve InvalidArgument (HTTP 400).

checkRun.conclusion string

Obligatorio si y solo si status == completed. Valores permitidos: CHECK_RUN_CONCLUSION_UNSPECIFIED, success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRun.externalUpdatedAt string Obligatorio

Hora de la última actualización del sistema externo. Se utiliza para ordenar las actualizaciones concurrentes, de modo que un reintento obsoleto no pueda sobrescribir un estado más reciente.

checkRun.startedAt string

Cuándo comenzó la ejecución de la comprobación. Un valor con más de 60 segundos en el futuro devuelve InvalidArgument (HTTP 400).

checkRun.completedAt cadena

Cuándo se completó la ejecución de la comprobación. Un valor a más de 60 segundos en el futuro devuelve InvalidArgument (HTTP 400), al igual que un valor anterior a startedAt cuando ambos se publican juntos.

checkRun.detailsUrl string

Enlace opcional a más detalles sobre esta ejecución de verificación específica (p. ej., la URL del trabajo/compilación del proveedor).

checkRun.externalId string Obligatorio

Identidad inmutable asignada por el proveedor para este intento de verificación.

checkRun.output objeto

Salida legible para humanos de esta ejecución de comprobación.

checkRun.output.title string

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRun.output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.deadlineAt cadena

Fecha límite para la ejecución de la comprobación, como marca de tiempo RFC 3339. Los valores con más de 24 horas en el futuro se rechazan con InvalidArgument (HTTP 400) en lugar de ajustarse. Omítala al crear para no registrar ninguna fecha límite; omítala al actualizar para dejar la fecha límite almacenada sin cambios.

checkRun.isRerequestable boolean

Declara que se puede volver a ejecutar cuando se solicite. Si lo estableces en true, tu aplicación se compromete a suscribirse a repository.check_run.rerequested y a responder a cada notificación publicando una nueva ejecución para el mismo SHA de head y key: ya sea una nueva ejecución con un externalId nuevo, que conserva el intento anterior como historial, o una actualización de la ejecución solicitada de nuevo con el mismo externalId, que la actualiza en el mismo lugar. Hasta que se publique esa nueva ejecución, la ejecución solicitada de nuevo aparece como pendiente en el último estado de comprobación del commit, por lo que una comprobación obligatoria bloquea la fusión y la solicitud de incorporación de cambios muestra la ejecución a la espera de volver a ejecutarse; declarar que se puede volver a solicitar la ejecución sin responder deja la comprobación pendiente. Origin no verifica que exista la suscripción al publicar. Omite este valor para conservar el valor almacenado, que es false en una ejecución nueva; envía false para retirar la declaración.

Campos de respuesta

checkSuite objeto

La suite de comprobación insertada o actualizada.

checkSuite.id string

Identificador de la suite de comprobaciones asignado por el servidor.

checkSuite.repository objeto

Referencia al repositorio de la suite.

checkSuite.repository.id string

Identificador del repositorio en una referencia de contenedor.

checkSuite.repository.name string

Nombre del repositorio en una referencia de contenedor.

checkSuite.repository.owner objeto

Referencia del propietario del repositorio.

checkSuite.repository.owner.slug string

Slug del propietario visible en la URL que se utiliza junto con el ID del propietario para identificar al propietario del repositorio.

checkSuite.repository.owner.id string

Identificador del propietario de Origin.

checkSuite.repository.owner.type cadena

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

checkSuite.sha cadena

SHA del commit al que está asociada la suite.

checkSuite.key string

Identidad estable de comprobación obligatoria elegida por la aplicación. Las comprobaciones obligatorias coinciden en la aplicación además de con esta clave, no con el nombre.

checkSuite.name string

Nombre de la suite solo para visualización; no se utiliza para la coincidencia de comprobaciones obligatorias.

checkSuite.detailsUrl cadena

Enlace opcional a los resultados a nivel de suite del proveedor.

checkSuite.createdAt string

Marca de tiempo de creación de la suite en formato RFC 3339.

checkSuite.updatedAt string

Marca de tiempo RFC 3339 de la actualización más reciente del conjunto de pruebas.

checkSuite.externalId string

Identidad del proveedor para este intento de suite.

checkSuite.actor objeto

Actor público que produjo la suite.

checkSuite.actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkSuite.actor.user.id string

Identificador público del usuario.

checkSuite.actor.user.email cadena

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

checkSuite.actor.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkSuite.actor.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; en caso contrario, se omite.

checkSuite.actor.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

checkSuite.actor.app.id cadena

Identificador público de la aplicación.

checkSuite.actor.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

checkSuite.actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkSuite.actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

checkRun objeto

La ejecución de comprobación insertada o actualizada.

checkRun.id cadena

Identificador de ejecución de comprobación asignado por el servidor.

checkRun.repository objeto

Referencia del repositorio para la ejecución.

checkRun.repository.id string

Identificador del repositorio en una referencia de contenedor.

checkRun.repository.name string

Nombre del repositorio en una referencia de contenedor.

checkRun.repository.owner objeto

Referencia del propietario del repositorio.

checkRun.repository.owner.slug string

Slug del propietario visible en la URL que se utiliza junto con el ID del propietario para identificar al propietario del repositorio.

checkRun.repository.owner.id string

Identificador del propietario de Origin.

checkRun.repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

checkRun.checkSuite objeto

Referencia a la suite de comprobación que la contiene.

checkRun.checkSuite.id string

Identificador asignado por el servidor de la suite de comprobación contenedora.

checkRun.sha cadena

SHA del commit al que está asociada la ejecución.

checkRun.key string

Identidad lógica estable seleccionada por la aplicación; las comprobaciones obligatorias pueden coincidir en la aplicación, en la clave de la suite y en esta clave.

checkRun.name cadena

Nombre de ejecución solo para visualización; no se utiliza para la coincidencia de comprobaciones obligatorias.

checkRun.status string

Estado del ciclo de vida: queued, in_progress, completed o rerequested. Una ejecución rerequested es una ejecución completed cuya re-ejecución se solicitó y la aplicación propietaria aún no ha respondido: trátela como pendiente y muéstrela como queued.

checkRun.conclusion string

Presente para una ejecución completada o solicitada de nuevo: success, failure, neutral, cancelled, skipped, timed_out, action_required o stale. En una ejecución solicitada de nuevo corresponde al veredicto del intento sustituido, así que consúltelo solo cuando status sea completed.

checkRun.detailsUrl string

Enlace separado a la página completa de resultados del proveedor.

checkRun.externalUpdatedAt cadena

Marca de tiempo de actualización externa utilizada para ordenar las actualizaciones, de modo que reintentos obsoletos no puedan reemplazar un estado más reciente.

checkRun.startedAt string

Hora de inicio en formato RFC 3339 informada por el proveedor cuando se proporciona.

checkRun.completedAt cadena

Hora de finalización en formato RFC 3339 indicada por el proveedor cuando se proporciona.

checkRun.createdAt string

Marca de tiempo RFC 3339 de creación de la ejecución.

checkRun.updatedAt string

Marca de tiempo RFC 3339 de la última actualización persistida de la ejecución.

checkRun.externalId cadena

Identidad del proveedor para un intento. Reutilícela para actualizar ese intento y use un valor nuevo para un reintento.

checkRun.actor objeto

Actor público que generó la ejecución. Siempre el actor de la suite de comprobación propietaria.

checkRun.actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkRun.actor.user.id string

Identificador público del usuario.

checkRun.actor.user.email cadena

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

checkRun.actor.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkRun.actor.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; en caso contrario, se omite.

checkRun.actor.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

checkRun.actor.app.id cadena

Identificador público de la aplicación.

checkRun.actor.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

checkRun.actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkRun.actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

checkRun.output objeto

Objeto de resultado legible por humanos que contiene título, resumen y texto más extenso cuando se proporciona.

checkRun.output.title string

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRun.output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.deadlineAt cadena

Fecha límite registrada para la ejecución de la comprobación, como una marca de tiempo RFC 3339. Ausente cuando la ejecución no tiene fecha límite, incluso después de completarse.

checkRun.isRerequestable boolean

Si la aplicación de informes declaró que esta ejecución puede volver a solicitarse.

checkRun.rerequestedAt string

Marca de tiempo RFC 3339 de la re-solicitud pendiente. Ausente cuando no hay ninguna re-solicitud pendiente y se borra cuando la aplicación propietaria de la ejecución publica de nuevo. Mientras esté establecida, status es rerequested y la ejecución permanece en el estado de comprobación más reciente del commit y aparece como pendiente, con conclusion y los tiempos aún conservando el resultado sustituido, por lo que una comprobación obligatoria bloquea la fusión hasta que la aplicación responda.

checkRun.rerequestedBy objeto

Principal que solicitó la nueva ejecución, con las mismas variantes de actor que actor. Presente siempre que rerequestedAt esté establecido y se borra junto con él.

outcome cadena

Qué hizo esta llamada con checkRun. Valores permitidos: created, updated, unchanged, ignored_stale. Una ejecución que fue ignorada por estar obsoleta y una ejecución que repitió los valores almacenados devuelven la ejecución guardada, por lo que este campo es la única forma de distinguirlas.
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."    }  }}'

Estructura de la respuesta:

{  "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"}

Crear o actualizar lotes de ejecuciones de verificación

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

Realiza upserts atómicos de varias ejecuciones de comprobación (check runs) que pertenecen a una misma suite. La solicitud acepta como máximo 10 ejecuciones y rechaza identidades duplicadas (external_id, key). Todas las ejecuciones se confirman o se revierte toda la solicitud.

Cada ejecución acepta el mismo deadlineAt opcional que Post Check Run.

Origin aplica la regla de ordenación de externalUpdatedAt a cada ejecución por separado. Una ejecución ignorada por obsoleta no hace fallar el lote: la respuesta incluye en su lugar la ejecución almacenada, y results[].outcome informa del veredicto de cada ejecución en el orden de la solicitud.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Cuerpo de la solicitud

headSha string Obligatorio

SHA del commit principal contra el que se informan las ejecuciones de comprobación (hexadecimal de 40 o 64 caracteres).

checkSuite objeto Obligatorio

La suite compartida por cada ejecución de comprobación en esta solicitud.

checkSuite.key string Obligatorio

Clave estable, elegida por la aplicación, que identifica la suite lógica a lo largo de los intentos.

checkSuite.name string Obligatorio

Nombre de la suite visible para el usuario.

checkSuite.detailsUrl string

Enlace opcional con más detalles sobre la suite en su conjunto.

checkSuite.externalId string Obligatorio

Identidad inmutable asignada por el proveedor para este intento de suite.

checkRuns array Obligatorio

Ejecuciones de comprobación para insertar o actualizar, en el orden de la respuesta. Debe contener entre 1 y 10 entradas con identidades (external_id, key) únicas.

checkRuns[0].key string Obligatorio

Clave estable, elegida por la aplicación, que identifica la comprobación lógica a lo largo de los intentos.

checkRuns[0].name string Obligatorio

Nombre de la ejecución de comprobación visible para el usuario.

checkRuns[0].status string Obligatorio

Valores que se pueden establecer: CHECK_RUN_LIFECYCLE_STATUS_UNSPECIFIED, queued, in_progress, completed. El esquema también enumera rerequested, que solo Origin establece al volver a solicitar; una solicitud que lo incluya devuelve InvalidArgument (HTTP 400).

checkRuns[0].conclusion string

Obligatorio si y solo si status == completed. Valores permitidos: CHECK_RUN_CONCLUSION_UNSPECIFIED, success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRuns[0].externalUpdatedAt string Obligatorio

La hora de la última actualización del sistema externo. Se utiliza para ordenar las actualizaciones concurrentes, de modo que un reintento obsoleto no pueda sobrescribir un estado más reciente.

checkRuns[0].startedAt cadena

Cuándo comenzó la ejecución de la comprobación. Un valor con más de 60 segundos en el futuro devuelve InvalidArgument (HTTP 400).

checkRuns[0].completedAt cadena

Cuando se completó la ejecución de la comprobación. Un valor con más de 60 segundos en el futuro devuelve InvalidArgument (HTTP 400), al igual que un valor que precede a startedAt cuando ambos se publican juntos.

checkRuns[0].detailsUrl string

Enlace opcional a más detalles sobre esta ejecución de verificación específica (p. ej., la URL del trabajo/compilación del proveedor).

checkRuns[0].externalId string Obligatorio

Identidad inmutable asignada por el proveedor para este intento de verificación.

checkRuns[0].output objeto

Salida legible para humanos de esta ejecución de comprobación.

checkRuns[0].output.title string

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRuns[0].output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[0].output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[0].deadlineAt string

Fecha límite del check run, como marca temporal RFC 3339. Los valores con más de 24 horas en el futuro se rechazan con InvalidArgument (HTTP 400) en lugar de ajustarse. Omítalo al crear para no registrar ninguna fecha límite; omítalo al actualizar para dejar la fecha límite almacenada sin cambios.

checkRuns[0].isRerequestable boolean

Declara que la ejecución puede solicitarse de nuevo. Establecerlo en true obliga a tu aplicación a suscribirse a repository.check_run.rerequested y a responder a cada entrega publicando una ejecución nueva para el mismo SHA de la rama y key: bien una nueva ejecución con un externalId distinto, que conserva el intento anterior como historial, o una actualización de la ejecución re-solicitada con el mismo externalId, que la actualiza en su lugar. Hasta que llegue esa nueva publicación, la ejecución re-solicitada aparece como pendiente en el estado de verificación más reciente del commit, por lo que una verificación obligatoria bloquea la fusión y la pull request muestra la ejecución como en espera de su re-ejecución; declarar que puede re-solicitarse sin responder deja la verificación varada. Origin no verifica la suscripción cuando publicas. Omítelo para mantener el valor almacenado, que es false en una ejecución nueva; envía false para retirar la declaración.

Campos de respuesta

checkSuite objeto

La suite persistida compartida por todas las ejecuciones de comprobación devueltas.

checkSuite.id string

Identificador de la suite de comprobaciones asignado por el servidor.

checkSuite.repository objeto

Referencia del repositorio para la suite.

checkSuite.repository.id string

Identificador del repositorio en una referencia de contenedor.

checkSuite.repository.name string

Nombre del repositorio en una referencia de contenedor.

checkSuite.repository.owner objeto

Referencia del propietario del repositorio.

checkSuite.repository.owner.slug cadena

Slug del propietario visible en la URL que se utiliza junto con el ID del propietario para identificar al propietario del repositorio.

checkSuite.repository.owner.id string

Identificador del propietario del origen.

checkSuite.repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkSuite.sha string

SHA del commit al que está asociada la suite.

checkSuite.key cadena

Identidad estable de comprobación obligatoria elegida por la aplicación. Las comprobaciones obligatorias coinciden por aplicación y por esta clave, no por nombre.

checkSuite.name string

Nombre de la suite solo para visualización; no se utiliza para la coincidencia de comprobaciones obligatorias.

checkSuite.detailsUrl string

Enlace opcional a los resultados a nivel de suite del proveedor.

checkSuite.createdAt string

Marca de tiempo de creación de la suite en formato RFC 3339.

checkSuite.updatedAt string

Marca de tiempo RFC 3339 de la última actualización de la suite.

checkSuite.externalId cadena

Identidad del proveedor para este intento de suite.

checkSuite.actor objeto

Actor público que produjo la suite.

checkSuite.actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkSuite.actor.user.id cadena

Identificador público del usuario.

checkSuite.actor.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante "user" está presente.

checkSuite.actor.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkSuite.actor.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Está presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

checkSuite.actor.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

checkSuite.actor.app.id string

Identificador público de la aplicación.

checkSuite.actor.app.displayName string

Nombre de visualización registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor administrado de primera parte de Cherri Code.

checkSuite.actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkSuite.actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

checkRuns array

Obsoleto: lea results[].checkRun en su lugar. Aún se completa, en el orden de la solicitud.

checkRuns[].id string

Identificador de ejecución de comprobación asignado por el servidor.

checkRuns[].repository object

Referencia del repositorio para la ejecución.

checkRuns[].repository.id string

Identificador del repositorio en una referencia de contenedor.

checkRuns[].repository.name string

Nombre del repositorio en una referencia de contenedor.

checkRuns[].repository.owner objeto

Referencia del propietario del repositorio.

checkRuns[].repository.owner.slug string

Slug del propietario visible en la URL que se utiliza junto con el ID del propietario para identificar al propietario del repositorio.

checkRuns[].repository.owner.id string

Identificador del propietario de Origin.

checkRuns[].repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkRuns[].checkSuite objeto

Referencia a la suite de comprobación contenedora.

checkRuns[].checkSuite.id string

Identificador asignado por el servidor de la suite de comprobación que la contiene.

checkRuns[].sha cadena

SHA del commit al que está asociada la ejecución.

checkRuns[].key cadena

Identidad lógica estable elegida por la aplicación; las comprobaciones obligatorias pueden coincidir en la aplicación, en la clave de la suite y en esta clave.

checkRuns[].name cadena

Nombre de ejecución solo para visualización; no se usa para la coincidencia de las comprobaciones obligatorias.

checkRuns[].status string

Estado del ciclo de vida: queued, in_progress, completed o rerequested. Una ejecución rerequested es una ejecución completada cuya reejecución se solicitó y cuya aplicación propietaria aún no ha respondido: trátala como pendiente y muéstrala como queued.

checkRuns[].conclusion string

Presente para una ejecución completada o re-solicitada: success, failure, neutral, cancelled, skipped, timed_out, action_required o stale. En una ejecución re-solicitada corresponde al veredicto del intento reemplazado, por lo que conviene leerlo solo cuando status sea completed.

checkRuns[].detailsUrl string

Enlace separado a la página completa de resultados del proveedor.

checkRuns[].externalUpdatedAt string

Marca de tiempo de actualización externa utilizada para ordenar las actualizaciones, de modo que los reintentos obsoletos no puedan reemplazar un estado más reciente.

checkRuns[].startedAt cadena

Hora de inicio en formato RFC 3339 informada por el proveedor, si se proporciona.

checkRuns[].completedAt cadena

Hora de finalización en formato RFC 3339 informada por el proveedor cuando se proporcione.

checkRuns[].createdAt string

Marca de tiempo de creación de la ejecución en formato RFC 3339.

checkRuns[].updatedAt string

Marca de tiempo RFC 3339 de la última actualización persistida de la ejecución.

checkRuns[].externalId cadena

Identidad del proveedor para un intento. Reutilícela para actualizar ese intento y use un valor nuevo para un reintento.

checkRuns[].actor object

Actor público que produjo la ejecución. Siempre el actor de la suite de comprobación propietaria.

checkRuns[].actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkRuns[].actor.user.id cadena

Identificador público del usuario.

checkRuns[].actor.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante "user" está presente.

checkRuns[].actor.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkRuns[].actor.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Está presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

checkRuns[].actor.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

checkRuns[].actor.app.id string

Identificador público de la aplicación.

checkRuns[].actor.app.displayName string

Nombre de visualización registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

checkRuns[].actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkRuns[].actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

checkRuns[].output objeto

Objeto de resultado legible para humanos que contiene título, resumen y texto más extenso cuando se proporciona.

checkRuns[].output.title string

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRuns[].output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[].output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[].deadlineAt cadena

Fecha límite registrada para la ejecución de la comprobación, como marca de tiempo RFC 3339. Ausente cuando la ejecución no tiene fecha límite, incluso después de completarse.

checkRuns[].isRerequestable boolean

Si la aplicación de informes declaró que esta ejecución puede volver a solicitarse.

checkRuns[].rerequestedAt string

Marca de tiempo RFC 3339 de la re-solicitud pendiente. Ausente cuando no hay ninguna re-solicitud pendiente y se borra cuando la aplicación que posee la ejecución vuelve a publicar. Mientras esté establecida, status es rerequested y la ejecución permanece en el estado de comprobación más reciente del commit y aparece como pendiente, con conclusion y los tiempos aún manteniendo el resultado reemplazado, por lo que una comprobación requerida bloquea la fusión hasta que la aplicación responda.

checkRuns[].rerequestedBy objeto

Principal que solicitó la reejecución, con las mismas variantes de actor que actor. Presente siempre que se establezca rerequestedAt y eliminado junto con él.

results array

Un resultado por cada ejecución publicada, en el orden de la solicitud.

results[].checkRun objeto

La ejecución de comprobación almacenada tras esta llamada: los valores enviados cuando outcome es created o updated, y la ejecución tal como estaba en caso contrario. Contiene los mismos campos que checkRuns[].

results[].outcome cadena

Indica qué hizo esta llamada con results[].checkRun. Valores permitidos: created, updated, unchanged, ignored_stale. Una ejecución ignorada por estar obsoleta y una ejecución que repitió los valores almacenados devuelven la ejecución almacenada, por lo que este campo es la única forma de distinguirlas.
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."      }    }  ]}'

Estructura de la respuesta:

{  "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"    }  ]}

Obtener ejecución de comprobación

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

Devuelve una única ejecución de comprobación por ID asignado por el servidor (cr_...).

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

checkRunId string Obligatorio

ID de ejecución de comprobación asignado por el servidor (cr_...).

Campos de respuesta

id string

Identificador de ejecución de comprobación asignado por el servidor.

repository objeto

Referencia del repositorio para la ejecución.

repository.id string

Identificador del repositorio en una referencia de contenedor.

repository.name string

Nombre del repositorio en una referencia de contenedor.

repository.owner object

Referencia del propietario del repositorio.

repository.owner.slug string

Slug del propietario visible en la URL, usado junto con el ID del propietario para identificar al propietario del repositorio.

repository.owner.id string

Identificador del propietario del origin.

repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkSuite objeto

Referencia a la suite de comprobación contenedora.

checkSuite.id string

Identificador asignado por el servidor de la suite de comprobación que la contiene.

sha cadena

SHA del commit al que está asociada la ejecución.

key string

Identidad lógica estable elegida por la aplicación; las comprobaciones requeridas pueden coincidir según la aplicación, la clave de la suite y esta clave.

name string

Nombre de ejecución solo de visualización; no se utiliza para la coincidencia de comprobaciones requeridas.

status string

Estado del ciclo de vida: en cola, en_progreso, completado o vuelto a solicitar. Una ejecución vuelto a solicitar es una ejecución completada cuya reejecución fue solicitada y cuya aplicación propietaria aún no ha respondido: trátala como pendiente y muéstrala como en cola.

conclusion string

Presente para una ejecución completada o solicitada de nuevo: success, failure, neutral, cancelled, skipped, timed_out, action_required o stale. En una ejecución solicitada de nuevo, es el veredicto del intento reemplazado, así que léelo solo cuando status sea completed.

detailsUrl string

Enlace separado a la página completa de resultados del proveedor.

externalUpdatedAt string

Marca de tiempo de actualización externa que se utiliza para ordenar las actualizaciones, de modo que los reintentos obsoletos no puedan reemplazar un estado más reciente.

startedAt string

Hora de inicio en formato RFC 3339 informada por el proveedor cuando se proporciona.

completedAt cadena

Hora de finalización en formato RFC 3339 informada por el proveedor cuando se proporciona.

createdAt string

Marca de tiempo de creación de la ejecución en formato RFC 3339.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización persistida de la ejecución.

externalId string

Identidad del proveedor para un intento. Reutilícela para actualizar ese intento y use un valor nuevo para un reintento.

actor objeto

Actor público que produjo la ejecución. Siempre es el actor de la suite de comprobación propietaria.

actor.user object

Variante del actor correspondiente a un usuario. Se establece cuando un usuario realizó la acción.

actor.user.id string

Identificador público del usuario.

actor.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante "user" está presente.

actor.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

actor.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; se omite en caso contrario.

actor.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

actor.app.id string

Identificador público de la aplicación.

actor.app.displayName string

Nombre visible registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

actor.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

output objeto

Objeto de resultado legible por humanos que contiene el título, el resumen y un texto más extenso cuando se proporciona.

output.title string

Titular breve para la salida. Longitud máxima: 255 caracteres.

output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

deadlineAt string

Fecha límite registrada para la ejecución de la comprobación, como marca de tiempo RFC 3339. Ausente cuando la ejecución no tiene fecha límite, incluso después de que la ejecución haya finalizado.

isRerequestable boolean

Si la aplicación de informes declaró que esta ejecución puede volver a solicitarse.

rerequestedAt string

Marca de tiempo RFC 3339 de la re-solicitud pendiente. Ausente cuando no hay ninguna re-solicitud pendiente y se borra cuando la aplicación que posee la ejecución publica de nuevo. Mientras está establecida, status es rerequested y la ejecución permanece en el último estado de verificación del commit y aparece como pendiente, con conclusion y los tiempos todavía reflejando el resultado sustituido, por lo que una verificación obligatoria bloquea la fusión hasta que la aplicación responda.

rerequestedBy objeto

Principal que solicitó la reejecución, con las mismas variantes de actor que actor. Está presente siempre que se establezca rerequestedAt y se borra junto con él.
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'

Estructura de la respuesta:

{  "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 anotaciones de una check run

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

Lista las anotaciones de un check run en orden ascendente de ID.

Los ID de anotación se pueden ordenar por tiempo, por lo que el orden ascendente de ID también corresponde al orden de creación. Un token de página fija el alcance para el resto de la secuencia.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repo, único dentro de la entidad propietaria.

checkRunId string Obligatorio

ID de ejecución de comprobación asignado por el servidor.

Parámetros de consulta

pageSize entero

Número máximo de anotaciones que se devolverán. Por defecto es 30 si se omite o es cero; los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco procedente del nextPageToken de una respuesta anterior. Omítelo en la primera página. Si indicas pageSize en una solicitud de seguimiento, se aplica a esa página; omítelo para mantener el tamaño de página anterior.

Campos de la respuesta

annotations array

Página de anotaciones, en orden ascendente de ID.

annotations[].id string

ID estable de la anotación de Origin. Los ID se pueden ordenar cronológicamente.

annotations[].checkRunId string

ID de la ejecución de comprobación a la que pertenece la anotación.

annotations[].annotationLevel string

Gravedad de la anotación. Valores permitidos: notice, warning, failure.

annotations[].message string

Mensaje de la anotación. Puede contener Markdown.

annotations[].title string

Título de la anotación. Ausente cuando la anotación no tiene ninguna.

annotations[].rawDetails string

Texto bruto de detalle. Ausente cuando la anotación no tiene ninguno.

annotations[].createdAt string

Cuándo se creó la anotación (RFC 3339).

annotations[].updatedAt string

Fecha de la última actualización de la anotación (RFC 3339).

annotations[].location objeto

Ubicación en el código fuente. No aparece en las anotaciones a nivel de ejecución.

annotations[].location.path string

Ruta canónica del archivo relativa al repositorio.

annotations[].location.startLine entero

Primera línea del rango. La numeración empieza en 1 y es inclusiva.

annotations[].location.endLine entero

Última línea del rango. La numeración comienza en 1 y es inclusiva.

annotations[].location.columns objeto

Rango de columnas. Ausente a menos que la anotación abarque una sola línea.

annotations[].location.columns.startColumn entero

Primera columna del rango. Numeración basada en 1 e inclusiva.

annotations[].location.columns.endColumn entero

Última columna del rango. Indexado desde 1 e inclusivo.

nextPageToken cadena

Cherri Code opaco para la página siguiente. Vacío cuando no hay más 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'

Estructura de la respuesta:

{  "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      }    }  ]}

Crear anotaciones de ejecución de comprobación

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

Añade entre 1 y 25 anotaciones a una ejecución de comprobación en un único lote atómico.

Un check run admite un máximo de 100 anotaciones. Todo lote que supere ese límite se rechaza con ResourceExhausted (HTTP 429) y no se escribe nada; un lote fuera del rango de 1 a 25 se rechaza con InvalidArgument (HTTP 400). La operación es append-only y no es idempotente, por lo que reintentarla tras un fallo de transporte ambiguo puede añadir duplicados y consumir capacidad. Se permite contenido idéntico.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

checkRunId string Obligatorio

ID de ejecución de comprobación asignado por el servidor.

Cuerpo de la solicitud

annotations array Obligatorio

El lote que se añadirá. Debe contener entre 1 y 25 entradas.

annotations[].annotationLevel string Obligatorio

Gravedad de la anotación. Valores permitidos: notice, warning, failure.

annotations[].message string Obligatorio

Mensaje de la anotación. Puede contener Markdown. Debe no estar vacío. Máximo 65.535 bytes en UTF-8.

annotations[].title string

Título de la anotación. Longitud máxima: 255 caracteres Unicode.

annotations[].rawDetails string

Texto de detalle sin procesar. Máximo 65.535 bytes en UTF-8.

annotations[].location object

Ubicación en el código fuente a la que apunta la anotación. Omítala para una anotación a nivel de ejecución que no esté vinculada a una línea de código.

annotations[].location.path string Obligatorio

Ruta canónica del archivo relativa al repositorio. Máximo 4.096 bytes en UTF-8.

annotations[].location.startLine entero Obligatorio

Primera línea del rango. La numeración empieza en 1 y es inclusiva.

annotations[].location.endLine entero Obligatorio

Última línea del rango. Indexada desde 1 e inclusiva; debe ser igual o posterior a startLine.

annotations[].location.columns object

Rango de columnas dentro de la línea. Solo se admite cuando startLine y endLine son la misma línea, y ambas columnas deben enviarse juntas.

annotations[].location.columns.startColumn entero

Primera columna del rango. Comienza en 1 y es inclusiva.

annotations[].location.columns.endColumn entero

Última columna del rango. Indexada desde 1 e inclusiva, y debe ser igual o posterior a startColumn.

Campos de la respuesta

annotations array

Las anotaciones creadas por esta solicitud.

annotations[].id string

ID estable de la anotación Origin. Los ID se pueden ordenar por tiempo.

annotations[].checkRunId string

ID del check run al que pertenece la anotación.

annotations[].annotationLevel string

Gravedad de la anotación. Valores permitidos: notice, warning, failure.

annotations[].message string

Mensaje de la anotación. Puede contener Markdown.

annotations[].title string

Título de la anotación. Ausente cuando la anotación no tiene título.

annotations[].rawDetails string

Texto de detalle sin procesar. Ausente cuando la anotación no tiene ninguna.

annotations[].createdAt string

Cuándo se creó la anotación (RFC 3339).

annotations[].updatedAt string

Fecha de la última actualización de la anotación (RFC 3339).

annotations[].location object

Ubicación en el código fuente. Ausente en las anotaciones a nivel de ejecución.

annotations[].location.path string

Ruta canónica del archivo relativa al repositorio.

annotations[].location.startLine entero

Primera línea del rango. La numeración empieza en 1 y es inclusiva.

annotations[].location.endLine entero

Última línea del rango. Numeración desde 1 e inclusiva.

annotations[].location.columns object

Rango de columnas. Ausente a menos que la anotación abarque una sola línea.

annotations[].location.columns.startColumn entero

Primera columna del rango. Comienza en 1 y es inclusiva.

annotations[].location.columns.endColumn entero

Última columna del rango. Índice basado en 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      }    }  ]}'

Estructura de la respuesta:

{  "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      }    }  ]}

Volver a solicitar la ejecución de comprobación

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

Solicita a la aplicación que informó una ejecución de comprobación que la ejecute de nuevo. Origin registra la solicitud en la ejecución como rerequestedAt y notifica a la aplicación propietaria con repository.check_run.rerequested. La aplicación responde publicando una nueva ejecución para el mismo head SHA y key, ya sea una ejecución nueva o una actualización de esta, lo que borra rerequestedAt y almacena el estado publicado. Mientras la solicitud está pendiente, el status de la ejecución es rerequested; su conclusion y sus tiempos siguen describiendo el intento suprimido. La llamada devuelve la ejecución con rerequestedAt establecido y status rerequested.

La ejecución debe estar completed, debe llevar isRerequestable, debe ser el intento actual de su key y debe situarse en la rama principal (head) de una solicitud de extracción abierta. Cualquier otra situación devuelve FailedPrecondition (HTTP 400).

Puede haber una re-solicitud pendiente por ejecución. Si se repite la solicitud mientras rerequestedAt está establecido, se devuelve AlreadyExists (HTTP 409 Conflict), y la ejecución puede volver a solicitarse una vez que la aplicación propietaria haya respondido. Cualquier entidad que tenga repository:contents:write puede volver a solicitar cualquier ejecución re-solicitable, sea cual sea la aplicación que la informó. Un checkRunId desconocido, o que pertenezca a otro repositorio, devuelve 404.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

checkRunId string Obligatorio

ID de ejecución de comprobación asignado por el servidor (cr_...).

Cuerpo de la solicitud

La solicitud no admite campos. Envía un objeto JSON vacío.

Campos de respuesta

id string

Identificador de ejecución de comprobación asignado por el servidor.

repository objeto

Referencia del repositorio para la ejecución.

repository.id string

Identificador del repositorio en una referencia de contenedor.

repository.name string

Nombre del repositorio en una referencia de contenedor.

repository.owner object

Referencia del propietario del repositorio.

repository.owner.slug string

Slug del propietario visible en la URL, usado junto con el ID del propietario para identificar al propietario del repositorio.

repository.owner.id string

Identificador del propietario del origen.

repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkSuite objeto

Referencia a la suite de comprobación contenedora.

checkSuite.id string

Identificador asignado por el servidor de la suite de comprobación que la contiene.

sha cadena

SHA del commit al que está asociada la ejecución.

key cadena

Identidad lógica estable elegida por la aplicación; las comprobaciones obligatorias pueden coincidir según la aplicación, la clave de la suite y esta clave.

name string

Nombre de ejecución solo de visualización; no se utiliza para la coincidencia de comprobaciones obligatorias.

status string

Estado del ciclo de vida: en cola, en_progreso, completado o solicitado de nuevo. Una ejecución solicitada de nuevo es una ejecución completada cuya reejecución se ha solicitado y cuya aplicación propietaria aún no ha respondido: trátala como pendiente y muéstrala como en cola.

conclusion string

Presente para una ejecución completada o reenviada; success, failure, neutral, cancelled, skipped, timed_out, action_required o stale. En una ejecución reenviada es el veredicto del intento sustituido, por lo que solo debe leerse cuando status es completed.

detailsUrl string

Enlace separado a la página completa de resultados del proveedor.

externalUpdatedAt string

Marca de tiempo de actualización externa que se utiliza para ordenar las actualizaciones, de modo que los reintentos obsoletos no puedan reemplazar un estado más reciente.

startedAt string

Hora de inicio en formato RFC 3339 informada por el proveedor cuando se proporciona.

completedAt cadena

Hora de finalización en formato RFC 3339 informada por el proveedor cuando se proporciona.

createdAt string

Marca de tiempo de creación de la ejecución en formato RFC 3339.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización persistida de la ejecución.

externalId string

Identidad del proveedor para un intento. Reutilícela para actualizar ese intento y use un valor nuevo para un reintento.

actor objeto

Actor público que produjo la ejecución. Siempre el actor de la suite de comprobación propietaria.

actor.user objeto

Variante del actor correspondiente a un usuario. Se establece cuando un usuario realizó la acción.

actor.user.id string

Identificador público del usuario.

actor.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante "user" está presente.

actor.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

actor.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; se omite en caso contrario.

actor.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

actor.app.id string

Identificador público de la aplicación.

actor.app.displayName string

Nombre visible registrado de la app. Se omite cuando no se puede resolver la app y en el actor gestionado de primera parte de Cherri Code.

actor.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

output objeto

Objeto de resultado legible por humanos que contiene el título, el resumen y un texto más extenso cuando se proporciona.

output.title string

Titular breve para la salida. Longitud máxima: 255 caracteres.

output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

output.text cadena

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

deadlineAt string

Fecha límite registrada para la ejecución de la comprobación, como marca de tiempo RFC 3339. Ausente cuando la ejecución no tiene fecha límite, incluso después de que la ejecución se haya completado.

isRerequestable boolean

Indica si la aplicación de informes declaró que esta ejecución puede solicitarse de nuevo.

rerequestedAt string

Marca de tiempo RFC 3339 de la re-solicitud pendiente. Ausente cuando no hay ninguna re-solicitud pendiente y se borra cuando la aplicación propietaria de la ejecución vuelve a publicar. Mientras esté establecida, status es rerequested y la ejecución permanece en el último estado de verificación del commit y aparece como pendiente, mientras que conclusion y los tiempos siguen mostrando el resultado reemplazado, por lo que una verificación obligatoria bloquea la fusión hasta que la aplicación responda.

rerequestedBy objeto

Principal que solicitó la reejecución, con las mismas variantes de actor que actor. Está presente siempre que se establece rerequestedAt y se elimina junto con este.
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 '{}'

Estructura de la respuesta:

{  "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]"    }  }}

Obtener suite de comprobación

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

Devuelve los metadatos de la suite de comprobaciones por el id asignado por el servidor (crg_...). No incluye los check runs; usa ListCheckRunsForSuite para obtener los runs de la suite.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

checkSuiteId string Obligatorio

ID de la suite de comprobación asignado por el servidor (crg_...).

Campos de la respuesta

id string

Identificador de la suite de comprobación asignado por el servidor.

repository object

Referencia del repositorio para la suite.

repository.id string

Identificador del repositorio en una referencia de contenedor.

repository.name string

Nombre del repositorio en una referencia de contenedor.

repository.owner objeto

Referencia del propietario del repositorio.

repository.owner.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

repository.owner.id string

Identificador del propietario del origen.

repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

sha string

SHA del commit al que está asociada la suite.

key string

Identidad estable de comprobación requerida elegida por la aplicación. Las comprobaciones requeridas coinciden en la aplicación y en esta clave, no en el nombre.

name cadena

Nombre de la suite solo para mostrar; no se utiliza para la coincidencia de comprobaciones obligatorias.

detailsUrl string

Enlace opcional a los resultados a nivel de suite del proveedor.

createdAt string

Marca de tiempo de creación de la suite en formato RFC 3339.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización de la suite.

externalId string

Identidad del proveedor para este intento de suite.

actor object

Actor público que produjo la suite.

actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

actor.user.id string

Identificador público del usuario.

actor.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

actor.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

actor.user.handle string

Identificador del perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

actor.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

actor.app.id string

Identificador público de la aplicación.

actor.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

actor.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

actor.serviceAccount.id string

Identificador público de la cuenta de servicio.
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'

Estructura de la respuesta:

{  "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 los check runs de una suite

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

Lista las ejecuciones de comprobación actuales de una suite. Cuando una clave de ejecución se informó más de una vez en la suite, solo se devuelve el intento más reciente para esa clave; los intentos sustituidos se omiten. Publicar ejecución de comprobación define qué intento es el más reciente. Una ejecución que haya sido solicitada de nuevo permanece en la lista y aparece como pendiente, con status rerequested y rerequestedAt establecidos, y su conclusion y sus tiempos de la versión anterior sin cambios, hasta que la aplicación que la posee responda. Obtén un intento sustituido por su propio id con Obtener ejecución de comprobación. Paginado.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

checkSuiteId string Obligatorio

ID de la suite de comprobaciones asignada por el servidor (crg_...).

Parámetros de consulta

pageSize entero

Número máximo de ejecuciones de comprobación que se devolverán. El valor predeterminado es 30 si no se establece o si es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página. Codifica el ID de la última ejecución de verificación vista, dentro del ámbito de esta suite. pageSize en una solicitud posterior se aplica a esa página; omítelo para conservar el tamaño de página anterior.

Campos de respuesta

checkRuns array

Ejecuciones de comprobación paginadas que pertenecen a la suite indicada.

checkRuns[].id string

Identificador de ejecución de verificación asignado por el servidor.

checkRuns[].repository objeto

Referencia del repositorio para la ejecución.

checkRuns[].repository.id string

Identificador del repositorio en una referencia de contenedor.

checkRuns[].repository.name string

Nombre del repositorio en una referencia de contenedor.

checkRuns[].repository.owner objeto

Referencia del propietario del repositorio.

checkRuns[].repository.owner.slug string

Slug del propietario visible en la URL que se utiliza junto con el ID del propietario para identificar al propietario del repositorio.

checkRuns[].repository.owner.id string

Identificador del propietario del origen.

checkRuns[].repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkRuns[].checkSuite objeto

Referencia a la suite de comprobación que la contiene.

checkRuns[].checkSuite.id string

Identificador asignado por el servidor de la suite de comprobación que la contiene.

checkRuns[].sha string

SHA del commit al que está asociada la ejecución.

checkRuns[].key string

Identidad lógica estable de la ejecución elegida por la aplicación; las comprobaciones requeridas pueden coincidir con la aplicación, la clave de la suite y esta clave.

checkRuns[].name string

Nombre de ejecución solo para visualización; no se utiliza para la coincidencia de comprobaciones obligatorias.

checkRuns[].status string

Estado del ciclo de vida: en cola, en_progreso, completado o vuelto a solicitar. Una ejecución vuelta a solicitar es una ejecución completada cuya reejecución se pidió y la aplicación propietaria aún no ha respondido: trátala como pendiente y muéstrala como en cola.

checkRuns[].conclusion string

Presente para una ejecución completada o solicitada nuevamente: success, failure, neutral, cancelled, skipped, timed_out, action_required o stale. En una ejecución solicitada nuevamente corresponde al veredicto del intento sustituido, así que léelo solo cuando status sea completed.

checkRuns[].detailsUrl string

Enlace independiente a la página de resultados completa del proveedor.

checkRuns[].externalUpdatedAt string

Marca de tiempo de actualización externa que se utiliza para ordenar las actualizaciones, de modo que los reintentos obsoletos no puedan reemplazar un estado más reciente.

checkRuns[].startedAt string

Hora de inicio en formato RFC 3339 informada por el proveedor cuando se proporciona.

checkRuns[].completedAt string

Hora de finalización en formato RFC 3339 informada por el proveedor cuando se proporciona.

checkRuns[].createdAt cadena

Marca de tiempo RFC 3339 de creación de la ejecución.

checkRuns[].updatedAt string

Marca de tiempo RFC 3339 de la última actualización persistente de la ejecución.

checkRuns[].externalId string

Identidad del proveedor para un intento. Reutilícela para actualizar ese intento y use un valor nuevo para un reintento.

checkRuns[].actor objeto

Actor público que produjo la ejecución. Siempre el actor de la suite de comprobaciones propietaria.

checkRuns[].actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkRuns[].actor.user.id string

Identificador público del usuario.

checkRuns[].actor.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

checkRuns[].actor.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkRuns[].actor.user.handle string

Identificador del perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

checkRuns[].actor.app object

Variante de la app del actor. Se establece cuando una app realizó la acción.

checkRuns[].actor.app.id string

Identificador público de la aplicación.

checkRuns[].actor.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

checkRuns[].actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkRuns[].actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

checkRuns[].output objeto

Objeto de resultado legible para humanos que contiene el título, el resumen y un texto más extenso cuando se proporciona.

checkRuns[].output.title string

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRuns[].output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[].output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[].deadlineAt string

Fecha límite registrada para la ejecución de la comprobación, como una marca de tiempo RFC 3339. Ausente cuando la ejecución no tiene fecha límite, incluso después de que finaliza.

checkRuns[].isRerequestable boolean

Indica si la aplicación de informes declaró que esta ejecución puede volver a solicitarse.

checkRuns[].rerequestedAt string

Marca de tiempo RFC 3339 de la re-solicitud pendiente. Ausente cuando no hay ninguna re-solicitud pendiente y se borra cuando la aplicación que es propietaria de la ejecución vuelve a publicar. Mientras esté establecida, status es rerequested y la ejecución permanece en el estado de comprobación más reciente del commit y aparece como pendiente, con conclusion y los tiempos que aún conservan el resultado reemplazado, por lo que una comprobación obligatoria bloquea la fusión hasta que la aplicación responda.

checkRuns[].rerequestedBy objeto

Principal que solicitó la nueva ejecución, con las mismas variantes de actor que actor. Está presente siempre que se establezca rerequestedAt y se borra junto con este.

nextPageToken cadena

Cherri Code opaco para la página siguiente; vacío cuando no hay más 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'

Estructura de la respuesta:

{  "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 ejecuciones de comprobación para un commit

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

Lista las ejecuciones de comprobación actuales de un commit en todas las suites: solo las ejecuciones que pertenecen al último intento de cada suite y, dentro de cada suite, solo el último intento por clave de ejecución. Los intentos reemplazados se omiten; Publicar ejecución de comprobación define cuál intento es el más reciente. Una ejecución que ha sido solicitada de nuevo permanece en la lista y aparece como pendiente, con status en rerequested y rerequestedAt establecido, y su conclusion y sus tiempos de la versión reemplazada sin cambios, hasta que la aplicación propietaria responda. Lea un intento reemplazado por su propio id con Obtener ejecución de comprobación. Opcionalmente filtrado por nombre y estado de la comprobación. Paginado.

Los filtros se aplican al conjunto colapsado, por lo que una ejecución coincide con el estado de su último intento y un filtro nunca vuelve a mostrar un intento sustituido. Los tokens de página incorporan los filtros con los que se emitieron, por lo que se rechaza un token reproducido con filtros distintos; reinicie la paginación cuando cambie un filtro.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

sha string Obligatorio

SHA del commit (hexadecimal de 40 o 64 caracteres) para listar las ejecuciones de comprobación.

Parámetros de consulta

pageSize entero

Número máximo de ejecuciones de comprobaciones a devolver. Por defecto: 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página. Codifica el id del último check-run visto con alcance en este commit y en los filtros que aparecen más abajo; reutilizar un token con filtros distintos devuelve InvalidArgument (HTTP 400). pageSize en una solicitud de seguimiento se aplica a esa página; omítalo para mantener el tamaño de página anterior.

checkName string

Filtro opcional por nombre exacto del check-run, que se compara con checkRuns[].name. Omítalo para listar las ejecuciones con cualquier nombre.

status string

Filtro de estado opcional. Valores permitidos: queued, in_progress, completed, rerequested. Cualquier otro valor devuelve InvalidArgument (HTTP 400). Omitir para listar ejecuciones en cualquier estado.

Campos de la respuesta

checkRuns matriz

Ejecuciones paginadas de comprobaciones adjuntas al SHA del commit resuelto.

checkRuns[].id string

Identificador de ejecución de comprobación asignado por el servidor.

checkRuns[].repository object

Referencia del repositorio para la ejecución.

checkRuns[].repository.id string

Identificador del repositorio en una referencia de contenedor.

checkRuns[].repository.name string

Nombre del repositorio en una referencia de contenedor.

checkRuns[].repository.owner object

Referencia del propietario del repositorio.

checkRuns[].repository.owner.slug string

Slug del propietario visible en la URL, utilizado junto con el ID del propietario para identificar al propietario del repositorio.

checkRuns[].repository.owner.id cadena

Identificador del propietario del origen.

checkRuns[].repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkRuns[].checkSuite objeto

Referencia a la suite de comprobación que la contiene.

checkRuns[].checkSuite.id string

Identificador asignado por el servidor de la suite de comprobación contenedora.

checkRuns[].sha string

SHA del commit al que está asociada la ejecución.

checkRuns[].key string

Identidad estable de ejecución lógica elegida por la aplicación; las comprobaciones obligatorias pueden coincidir en la aplicación, en la clave de la suite y en esta clave.

checkRuns[].name string

Nombre de ejecución solo para visualización; no se utiliza para la coincidencia de comprobaciones requeridas.

checkRuns[].status string

Estado del ciclo de vida; queued, in_progress, completed o rerequested. Una ejecución rerequested es una ejecución completada cuya reejecución se solicitó y cuya aplicación propietaria aún no ha respondido: trátela como pendiente y muéstrela como queued.

checkRuns[].conclusion string

Presente para una ejecución completada o reenviada: success, failure, neutral, cancelled, skipped, timed_out, action_required o stale. En una ejecución reenviada corresponde al veredicto del intento sustituido, así que consúltelo solo cuando status sea completed.

checkRuns[].detailsUrl string

Enlace separado a la página completa de resultados del proveedor.

checkRuns[].externalUpdatedAt string

Marca de tiempo externa de actualización utilizada para ordenar las actualizaciones, de modo que los reintentos obsoletos no puedan reemplazar un estado más reciente.

checkRuns[].startedAt string

Hora de inicio en formato RFC 3339 informada por el proveedor cuando se suministra.

checkRuns[].completedAt string

Hora de finalización en formato RFC 3339 informada por el proveedor cuando se proporciona.

checkRuns[].createdAt string

Marca de tiempo de creación de la ejecución en formato RFC 3339.

checkRuns[].updatedAt string

Marca de tiempo RFC 3339 de la última actualización persistida de la ejecución.

checkRuns[].externalId string

Identidad del proveedor para un intento. Reutilícela para actualizar ese intento y use un valor nuevo para un reintento.

checkRuns[].actor objeto

Actor público que produjo la ejecución. Siempre el actor de la suite de comprobación propietaria.

checkRuns[].actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkRuns[].actor.user.id string

Identificador público del usuario.

checkRuns[].actor.user.email string

Dirección de correo electrónico del usuario. Siempre debe establecerse cuando la variante de usuario está presente.

checkRuns[].actor.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkRuns[].actor.user.handle string

El alias de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

checkRuns[].actor.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

checkRuns[].actor.app.id string

Identificador público de la aplicación.

checkRuns[].actor.app.displayName string

Nombre de pantalla registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

checkRuns[].actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkRuns[].actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

checkRuns[].output object

Objeto de resultado legible para humanos que contiene título, resumen y un texto más extenso cuando se proporciona.

checkRuns[].output.title cadena

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRuns[].output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[].output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRuns[].deadlineAt string

Fecha límite registrada para la ejecución de la comprobación, como marca de tiempo RFC 3339. Ausente cuando la ejecución no tiene fecha límite, incluso después de completarse.

checkRuns[].isRerequestable boolean

Si la aplicación de informes declaró que esta ejecución puede volver a solicitarse.

checkRuns[].rerequestedAt string

Marca de tiempo RFC 3339 de la re-solicitud pendiente. Ausente cuando no hay ninguna re-solicitud pendiente, y eliminada cuando la aplicación propietaria de la ejecución vuelve a publicar. Mientras esté establecida, status es rerequested y la ejecución permanece en el estado de verificación más reciente del commit y figura como pendiente, con conclusion y los tiempos aún mostrando el resultado sustituido, por lo que una verificación obligatoria bloquea la fusión hasta que la aplicación responda.

checkRuns[].rerequestedBy objeto

Principal que solicitó volver a ejecutar, con las mismas variantes de actor que actor. Está presente siempre que rerequestedAt esté establecido y se elimina junto con él.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no hay más 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'

Estructura de la respuesta:

{  "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 suites de comprobación para el commit

GET/v1/origin/repos/{ownerSlug}/{repoName}/commits/{sha}/check-suites
Scoperepository:checks:readAuthInstallation tokenUser access token

Enumera las suites de comprobación asociadas a un commit. Devuelve solo el intento más reciente de cada suite, según el actor que la reporta y la clave de la suite; se omiten los intentos reemplazados, y Publicar ejecución de comprobación define cuál es el intento más reciente. Consulta un intento reemplazado mediante su propio identificador con Obtener suite de comprobación. Devuelve solo los metadatos de la suite (sin ejecuciones incluidas). Paginado.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

sha string Obligatorio

SHA del commit (hexadecimal de 40 o 64 caracteres) para el que se mostrarán las suites.

Parámetros de consulta

pageSize entero

Número máximo de suites a devolver. Por defecto es 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página. Codifica el id de la última check-suite vista en el ámbito de este commit. pageSize en una solicitud de seguimiento se aplica a esa página; omítelo para conservar el tamaño de página anterior.

Campos de la respuesta

checkSuites array

Conjuntos de comprobación paginados adjuntos al SHA del commit resuelto.

checkSuites[].id string

Identificador de la suite de comprobación asignado por el servidor.

checkSuites[].repository object

Referencia del repositorio para la suite.

checkSuites[].repository.id string

Identificador del repositorio en una referencia de contenedor.

checkSuites[].repository.name string

Nombre del repositorio en una referencia de contenedor.

checkSuites[].repository.owner objeto

Referencia del propietario del repositorio.

checkSuites[].repository.owner.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

checkSuites[].repository.owner.id string

Identificador del propietario de origen.

checkSuites[].repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

checkSuites[].sha string

SHA del commit al que está asociada la suite.

checkSuites[].key string

Identidad estable de comprobación obligatoria seleccionada por la aplicación. Las comprobaciones obligatorias coinciden según la aplicación y esta clave, no el nombre.

checkSuites[].name string

Nombre de la suite solo de visualización; no se utiliza para la coincidencia de comprobaciones obligatorias.

checkSuites[].detailsUrl string

Enlace opcional a los resultados a nivel de suite del proveedor.

checkSuites[].createdAt string

Marca de tiempo de creación de la suite en formato RFC 3339.

checkSuites[].updatedAt string

Marca de tiempo RFC 3339 de la última actualización del conjunto.

checkSuites[].externalId string

Identidad del proveedor para este intento de suite.

checkSuites[].actor objeto

Actor público que produjo el conjunto.

checkSuites[].actor.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

checkSuites[].actor.user.id string

Identificador público del usuario.

checkSuites[].actor.user.email string

Dirección de correo electrónico del usuario. Siempre debe establecerse cuando la variante de usuario esté presente.

checkSuites[].actor.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

checkSuites[].actor.user.handle string

El identificador reclamado del perfil del usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; en caso contrario, se omite.

checkSuites[].actor.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

checkSuites[].actor.app.id string

Identificador público de la aplicación.

checkSuites[].actor.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

checkSuites[].actor.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

checkSuites[].actor.serviceAccount.id string

Identificador público de la cuenta de servicio.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no quedan más 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'

Estructura de la respuesta:

{  "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 y contenido

Un commit separa los metadatos de los objetos Git en commit de las relaciones de nivel superior del repositorio. Las respuestas de lista omiten stats; Obtener commit incluye las stats agregadas de todo el commit. Los archivos modificados solo se devuelven mediante la colección paginada Listar archivos de commit. author y committer son identidades de Git registradas en el commit, no objetos de usuario de Origin.

Una comparación es solo un resumen: nunca incluye listas de commits ni diffs de archivos. status es exactamente identical, ahead, behind o diverged; aheadBy y behindBy son recuentos de commits. baseCommit, headCommit y mergeBaseCommit usan la proyección reducida del commit (sin stats ni archivos).

Listar commits

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

Lista los commits de una rama o a partir de una referencia inicial.

Los resultados de la lista omiten stats. Usa Obtener commit para las estadísticas agregadas y Listar archivos del commit para la diferencia de archivos paginada.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Parámetros de consulta

sha string

SHA, rama, etiqueta o referencia simbólica (por ejemplo HEAD) desde la que comenzar a listar. Si está vacío, se usa la rama predeterminada del repositorio.

pageSize entero

Número máximo de commits a devolver. Por defecto es 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco obtenido del nextPageToken de una respuesta anterior. Vacío para la primera página. Codifica la referencia inicial, la posición en el recorrido y los filtros de correo electrónico; sha, pageSize, authorEmails y committerEmails se ignoran cuando se proporciona un token. Una página filtrada puede contener menos confirmaciones que pageSize, o ninguna, aunque nextPageToken tenga un valor. Sigue solicitando páginas hasta que esté vacío.

authorEmails array

Filtro opcional por correo electrónico del autor de Git. Busca coincidencias con cualquiera de las direcciones indicadas, sin distinguir entre mayúsculas y minúsculas tras eliminar los espacios en blanco de los extremos. Se ignoran las entradas vacías y duplicadas. Se admiten como máximo 100 direcciones distintas; si está vacío, no se aplica ningún filtro. Son direcciones de correo electrónico de autores de Git, no IDs de actores de Origin. Cada página examina como máximo 1,000 commits en busca de coincidencias.

committerEmails array

Filtro opcional por correo electrónico del committer de Git. Usa la misma normalización y el mismo límite de 100 correos electrónicos que authorEmails; si está vacío, no se aplica ningún filtro. Cuando se establecen ambos filtros, un commit debe coincidir con ambas listas. Cada página examina como máximo 1000 commits en busca de coincidencias.

Campos de la respuesta

commits matriz

Commits escasos sin estadísticas; los archivos modificados no están incrustados.

commits[].sha string

SHA completo del commit.

commits[].commit objeto

Metadatos de objetos Git anidados por separado de las relaciones del repositorio de nivel superior.

commits[].commit.author objeto

Identidad del autor de Git registrada en el commit, no un objeto de usuario de Origin.

commits[].commit.author.name string

Nombre registrado en la identidad del autor de Git.

commits[].commit.author.email string

Correo electrónico registrado en la identidad del autor de Git.

commits[].commit.author.date string

Fecha RFC 3339 registrada en la identidad del autor de Git.

commits[].commit.committer objeto

Identidad del committer de Git registrada en el commit, no un objeto de usuario de Origin.

commits[].commit.committer.name string

Nombre registrado en la identidad de Git.

commits[].commit.committer.email string

Correo electrónico registrado en la identidad de Git.

commits[].commit.committer.date string

Marca de tiempo ISO-8601 que conserva el desfase horario original de la firma de git (p. ej., "2014-11-07T22:01:45+01:00").

commits[].commit.message string

Mensaje del commit.

commits[].commit.tree objeto

Árbol al que hace referencia el commit.

commits[].commit.tree.sha string

SHA del árbol al que hace referencia el commit.

commits[].parents array

Referencias a commits padre, cada una con un SHA.

commits[].parents[].sha string

SHA del commit padre.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no hay más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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      }    }  ]}

Obtener un commit

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

Devuelve un commit por SHA o referencia con las estadísticas agregadas de todo el commit. No incluye los archivos modificados; usa Listar archivos del commit.

author y committer son identidades de Git registradas en el commit, no objetos de usuario de Origin.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

sha string Obligatorio

SHA, rama, etiqueta o referencia simbólica (por ejemplo, HEAD) del commit que se va a obtener. Un SHA abreviado se resuelve igual que en Obtener un commit de Git.

Campos de respuesta

sha string

SHA completo del commit.

commit objeto

Metadatos del objeto Git anidados por separado de las relaciones del repositorio de nivel superior.

commit.author objeto

Identidad del autor de Git registrada en el commit, no como un objeto de usuario de Origin.

commit.author.name string

Nombre registrado en la identidad del autor de Git.

commit.author.email string

Correo electrónico registrado en la identidad del autor de Git.

commit.author.date string

Fecha RFC 3339 registrada en la identidad del autor de Git.

commit.committer objeto

Identidad del committer de Git registrada en el commit, no un objeto de usuario de Origin.

commit.committer.name string

Nombre registrado en la identidad de Git.

commit.committer.email string

Correo electrónico registrado en la identidad de Git.

commit.committer.date string

Marca de tiempo ISO 8601 que conserva el desfase horario original de la firma de git (p. ej., "2014-11-07T22:01:45+01:00").

commit.message string

Mensaje del commit.

commit.tree objeto

Árbol al que hace referencia el commit.

commit.tree.sha string

SHA del árbol al que hace referencia el commit.

parents array

Referencias a commits padre, cada una con un SHA.

parents[].sha string

SHA del commit padre.

stats objeto

Agregados del commit completo: inserciones, eliminaciones y total; incluidos por get-commit y omitidos en las proyecciones de lista.

stats.additions entero

Total acumulado de líneas añadidas para el commit.

stats.deletions entero

Total de líneas eliminadas para el commit.

stats.total entero

Suma de adiciones y eliminaciones para el commit.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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  }}

List Commit Files

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

Enumera los archivos modificados por un commit.

sha puede ser el SHA de un commit, una rama, una etiqueta o una referencia simbólica como HEAD. De forma predeterminada, se devuelven 30 archivos, con un máximo de 100. Un token de página fija el commit resuelto y el cursor de archivos; en solicitudes posteriores, sha debe coincidir con el token. Cada archivo incluye filename, status, additions, deletions, changes, patch y previousFilename cuando se ha renombrado o copiado. patch está vacío para los archivos binarios.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repo, único dentro de la entidad propietaria.

sha string Obligatorio

SHA, branch, tag o referencia simbólica (por ejemplo, HEAD) del commit cuyos archivos se quieren listar. Un SHA abreviado se resuelve igual que en Get Git Commit.

Parámetros de consulta

pageSize entero

Número máximo de archivos modificados que se devolverán. Por defecto es 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco procedente del next_page_token de una respuesta anterior. Vacío para la primera página. El token fija el commit resuelto y el cursor del archivo, por lo que sha en una solicitud posterior debe coincidir con el token. pageSize en una solicitud posterior se aplica a esa página; omítelo para mantener el tamaño de página anterior.

Campos de respuesta

files array

Archivos modificados paginados con nombre de archivo, estado, recuento de líneas, parche y previousFilename para archivos renombrados o copiados. Los parches binarios están vacíos.

files[].filename string

Ruta del archivo modificado.

files[].status string

Estado del cambio: añadido, eliminado, modificado, renombrado o copiado.

files[].additions entero

Se añadió el recuento de líneas del archivo.

files[].deletions entero

Número de líneas eliminadas del archivo.

files[].changes entero

Número total de líneas modificadas del archivo.

files[].patch string

Parche unificado; vacío para archivos binarios.

files[].previousFilename string

Ruta anterior cuando se cambió el nombre del archivo o se copió.

nextPageToken string

El token fija el commit resuelto y el cursor de archivo; los valores posteriores de sha deben coincidir con él.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/commits/SHA/files' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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, referencias o etiquetas con respecto a su base de fusión. basehead es "{base}...{head}"; las referencias que contienen "/" deben usar su SHA.

Tanto base como head pueden ser un SHA, una rama, un tag o una referencia simbólica como HEAD. La respuesta es un resumen sin paginación: status puede ser identical, ahead, behind o diverged; los tres objetos de commit son escuetos y omiten stats y los archivos. No se devuelven los campos totalCommits, commits incrustados ni files. Los historiales no relacionados devuelven 404.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

basehead string Obligatorio

"{base}...{head}", donde cualquiera de las dos revisiones puede ser un SHA, una rama, una etiqueta o una referencia simbólica como HEAD.

Campos de la respuesta

status string

Estado de la comparación: exactamente idéntico, adelantado, atrasado o divergente.

aheadBy entero

Número de commits por los que la rama principal está por delante.

behindBy entero

Número de commits con los que la referencia está retrasada.

baseCommit object

Commit base resuelto parcial, sin estadísticas ni archivos.

baseCommit.sha string

SHA completo del commit.

baseCommit.commit object

Metadatos de objetos Git anidados por separado de las relaciones de repositorio de nivel superior.

baseCommit.commit.author objeto

Identidad del autor de Git registrada en el commit, no un objeto de usuario de Origin.

baseCommit.commit.author.name string

Nombre registrado en la identidad del autor de Git.

baseCommit.commit.author.email string

Correo electrónico registrado en la identidad del autor de Git.

baseCommit.commit.author.date string

Fecha RFC 3339 registrada en la identidad del autor de Git.

baseCommit.commit.committer object

Identidad del committer de Git registrada en el commit, no un objeto user de Origin.

baseCommit.commit.committer.name string

Nombre registrado en la identidad de Git.

baseCommit.commit.committer.email string

Correo electrónico registrado en la identidad de Git.

baseCommit.commit.committer.date string

Marca de tiempo ISO-8601 que conserva el desfase horario original de la firma de git (por ejemplo, "2014-11-07T22:01:45+01:00").

baseCommit.commit.message string

Mensaje del commit.

baseCommit.commit.tree object

Árbol al que hace referencia el commit.

baseCommit.commit.tree.sha string

SHA del árbol al que hace referencia el commit.

baseCommit.parents array

Referencias a commits parent, cada una contiene un SHA.

baseCommit.parents[].sha string

SHA del commit principal.

headCommit object

Commit de cabecera resuelto de forma parcial, sin estadísticas ni archivos.

headCommit.sha string

SHA completo del commit.

headCommit.commit object

Metadatos de objetos Git anidados por separado de las relaciones de repositorio de nivel superior.

headCommit.commit.author object

Identidad del autor de Git registrada en el commit, no un objeto de usuario de Origin.

headCommit.commit.author.name string

Nombre registrado en la identidad del autor de Git.

headCommit.commit.author.email string

Correo electrónico registrado en la identidad del autor de Git.

headCommit.commit.author.date string

Fecha RFC 3339 registrada en la identidad del autor de Git.

headCommit.commit.committer object

Identidad del committer de Git registrada en el commit, no un objeto de usuario de Origin.

headCommit.commit.committer.name string

Nombre registrado en la identidad de Git.

headCommit.commit.committer.email string

Correo electrónico registrado en la identidad de Git.

headCommit.commit.committer.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de zona horaria original de la firma de git (por ejemplo, "2014-11-07T22:01:45+01:00").

headCommit.commit.message string

Mensaje del commit.

headCommit.commit.tree object

Árbol al que hace referencia el commit.

headCommit.commit.tree.sha string

SHA del árbol al que hace referencia el commit.

headCommit.parents array

Referencias a commits padre, cada una con un SHA.

headCommit.parents[].sha string

SHA del commit principal.

mergeBaseCommit object

Commit de merge-base parcial, sin estadísticas ni archivos.

mergeBaseCommit.sha string

SHA completo del commit.

mergeBaseCommit.commit object

Metadatos de objetos Git anidados de forma independiente de las relaciones de repositorio de nivel superior.

mergeBaseCommit.commit.author object

Identidad del autor de Git registrada en el commit, no un objeto de usuario de Origin.

mergeBaseCommit.commit.author.name string

Nombre registrado en la identidad del autor de Git.

mergeBaseCommit.commit.author.email string

Correo electrónico registrado en la identidad del autor de Git.

mergeBaseCommit.commit.author.date string

Fecha RFC 3339 registrada en la identidad del autor de Git.

mergeBaseCommit.commit.committer object

Identidad del committer de Git registrada en el commit, no un objeto de usuario de Origin.

mergeBaseCommit.commit.committer.name string

Nombre registrado en la identidad de Git.

mergeBaseCommit.commit.committer.email string

Email registrado en la identidad de Git.

mergeBaseCommit.commit.committer.date string

Marca de tiempo ISO 8601 que conserva el desfase horario original de la firma de git (por ejemplo, "2014-11-07T22:01:45+01:00").

mergeBaseCommit.commit.message string

Mensaje del commit.

mergeBaseCommit.commit.tree object

Árbol al que hace referencia el commit.

mergeBaseCommit.commit.tree.sha string

SHA del árbol al que hace referencia el commit.

mergeBaseCommit.parents array

Referencias a commits padre, cada una con un SHA.

mergeBaseCommit.parents[].sha string

SHA del commit principal.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/compare/BASE...HEAD' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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 archivos de comparación

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

Enumera los archivos modificados por una comparación: el diff de head con respecto a la base de fusión de base y head.

basehead es "{base}...{head}"; las referencias que contienen "/" deben usar su SHA. La lista de archivos siempre coincide con el resumen de Comparar commits, por lo que una comparación identical o behind devuelve una lista vacía, y los historiales no relacionados devuelven 404. Los resultados por defecto son 30 archivos y están limitados a 100. Cada archivo incluye los mismos campos que Listar archivos de un commit.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

basehead string Obligatorio

"{base}...{head}", donde cualquiera de las revisiones puede ser un SHA, una rama, una etiqueta o una referencia simbólica como HEAD.

Parámetros de consulta

pageSize entero

Número máximo de archivos modificados a devolver. Por defecto es 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página. El token está vinculado a la comparación resuelta y el cursor de archivos, por lo que basehead en una solicitud de seguimiento debe coincidir con el token. Origin vuelve a resolver la comparación en cada página; cuando sus commits se han movido desde que se emitió el token, la solicitud devuelve InvalidArgument (HTTP 400) y el listado debe reiniciarse desde la primera página. pageSize en una solicitud de seguimiento se aplica a esa página; omítelo para conservar el tamaño de página anterior.

Campos de respuesta

files arreglo

Archivos modificados paginados con nombre de archivo, estado, recuentos de líneas, parche y nombreAnterior para archivos renombrados o copiados. Los parches binarios están vacíos.

files[].filename string

Ruta del archivo modificado.

files[].status string

Cambiar estado; añadido, eliminado, modificado, renombrado o copiado.

files[].additions entero

Número de líneas añadidas al archivo.

files[].deletions entero

Número de líneas eliminadas del archivo.

files[].changes entero

Número total de líneas cambiadas en el archivo.

files[].patch string

Parche unificado; vacío para archivos binarios.

files[].previousFilename string

Ruta anterior cuando el archivo fue renombrado o copiado.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no hay más archivos.
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'

Estructura de la respuesta:

{  "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"    }  ]}

Obtener contenido

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

Devuelve el contenido de un archivo o directorio en una referencia. La ruta del archivo se proporciona mediante el parámetro de consulta path (admite rutas anidadas); omítalo o déjelo vacío para usar el directorio raíz del repositorio. Los archivos de más de 1 MiB (decodificados) se rechazan con FailedPrecondition (HTTP 400).

Los archivos contienen contenido en base64. Los directorios contienen elementos secundarios inmediatos en entries. Las entradas de directorio son elementos secundarios parciales que contienen type, name, path, sha y size; obtenga la ruta de un elemento secundario para leer su contenido.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Parámetros de consulta

path string

Ruta al archivo o directorio relativa a la raíz del repositorio. Si se deja vacío, se solicita el directorio raíz.

ref string

Commit, rama, etiqueta o referencia simbólica (por ejemplo, HEAD) desde la que leer. Si se deja vacío, se usa la rama predeterminada del repositorio.

Campos de respuesta

type string

Tipo de contenido: archivo o directorio.

encoding string

Codificación del archivo; las respuestas de archivos usan base64.

size string

Tamaño del contenido decodificado en bytes, codificado como una cadena JSON según la convención de enteros de 64 bits de la API. Los payloads de archivos de más de 1 MiB se rechazan.

name string

Nombre base del archivo o directorio.

path string

Ruta relativa a la raíz del repositorio.

sha string

SHA de blob para un archivo o SHA de árbol para un directorio.

content string

Cuerpo del archivo codificado en base64; presente para un archivo obtenido.

entries array

Elementos secundarios parciales inmediatos de un directorio. Las entradas contienen type, name, path, sha y size; obtenga la ruta de un elemento secundario para leer su contenido.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/contents' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "type": "file",  "encoding": "base64",  "size": "312",  "name": "telemetry.ts",  "path": "src/telemetry.ts",  "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",  "content": "Y29uc29sZS5sb2coImxhdW5jaCIpOwo="}

Obtener contenidos en lote

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

Devuelve el contenido de varias rutas explícitas en una referencia en una sola solicitud. Cada ruta solicitada produce un resultado que indica si se encontró; una ruta encontrada tiene la misma estructura Content que GetContents (archivos en base64, directorios como entries inmediatas, enlaces simbólicos como archivos). Las rutas se comparan exactamente, sin globs ni patrones, y se pueden solicitar como máximo 20; los duplicados se eliminan. Los resultados de la respuesta conservan el orden en que las solicitudes fueron vistas por primera vez. Un único archivo que supere el límite de 1 MiB de Get Contents hace que falle todo el lote con FailedPrecondition (HTTP 400). Usa POST porque la lista de rutas va en el cuerpo de la solicitud.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repo, único dentro de la entidad propietaria.

Cuerpo de la solicitud

paths array Obligatorio

Rutas exactas que se obtendrán, relativas a la raíz del repositorio (sin globs ni patrones). Máximo 20 entradas; se eliminan los duplicados. Una cadena vacía solicita el directorio raíz del repositorio.

ref string

Commit, rama, etiqueta o referencia simbólica (por ejemplo, HEAD) desde la que leer. Si se deja vacío, se usa la rama predeterminada del repositorio.

Campos de respuesta

results array

Un resultado por cada ruta exacta devuelta, preservando el orden de la primera solicitud vista.

results[].path string

Ruta solicitada que corresponde a este resultado.

results[].found boolean

Indica si la ruta solicitada existe en el commit resuelto.

results[].content object

Valor del contenido cuando found es true; se omite cuando found es false.

results[].content.type string

Tipo de contenido: archivo o directorio.

results[].content.encoding string

Codificación del archivo; las respuestas de archivo usan base64.

results[].content.size string

Tamaño del contenido decodificado en bytes, codificado como una cadena JSON según la convención de enteros de 64 bits de la API. Se rechazan las cargas de archivo de más de 1 MiB.

results[].content.name string

Nombre base del archivo o directorio.

results[].content.path string

Ruta relativa a la raíz del repositorio.

results[].content.sha string

SHA del blob para un archivo o SHA del árbol para un directorio.

results[].content.content string

Contenido del archivo codificado en Base64; presente para un archivo obtenido.

results[].content.entries array

Hijos inmediatos y escasos de un directorio. Las entradas contienen type, name, path, sha y size; obtén (fetch) la ruta de un hijo para leer su contenido.

resolvedCommitSha string

SHA del commit al que se resolvió la referencia solicitada.
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"}'

Estructura de la respuesta:

{  "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

Busca en el texto de los archivos del repositorio en una referencia y devuelve las líneas que coinciden, además de las líneas de contexto circundantes solicitadas. La búsqueda está orientada por líneas: un patrón nunca coincide a través de un salto de línea, y cada entrada devuelta es una sola línea. El repositorio se examina en cada solicitud, por lo que no hay paginación ni cursor; la respuesta está completa solo cuando limitHit es false. Un repositorio vacío sin referencias no devuelve coincidencias y limitHit es false. Usa POST porque los parámetros de búsqueda viajan en el cuerpo de la solicitud.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Cuerpo de solicitud

ref cadena

Commit, rama, etiqueta o referencia simbólica (por ejemplo, HEAD) donde buscar. Si se deja vacío, se usa la rama predeterminada del repositorio.

query cadena Obligatorio

El patrón que se va a buscar. De forma predeterminada es una expresión regular que admite clases de caracteres, cuantificadores, alternancia, grupos y anclas; en su lugar, establece literal para buscar el texto de forma exacta. Los espacios en blanco son significativos y se buscan tal cual. Cuando literal es false, la coincidencia sin distinguir mayúsculas de minúsculas se indica con (?i) al inicio del patrón (por ejemplo, (?i)launch) y la coincidencia de palabra completa con \b a su alrededor (por ejemplo, \blaunch\b). Un patrón vacío devuelve InvalidArgument (HTTP 400). Tamaño máximo en UTF-8: 4096 bytes.

literal boolean

Busca query como texto exacto en lugar de como una expresión regular.

caseInsensitive boolean

Tratar mayúsculas y minúsculas como equivalentes. Solo se aplica cuando literal es true. Se ignora en las búsquedas con expresiones regulares; en su lugar, escribe (?i) al principio de query.

wholeWord boolean

Coincidir solo con palabras completas. Se aplica únicamente cuando literal es true. Se ignora en las búsquedas con expresiones regulares; en su lugar, escribe \b alrededor del patrón.

contextBefore entero

Cuántas líneas inmediatamente antes de cada línea coincidente se deben devolver como contexto. Los valores superiores a 10 se reducen a 10.

contextAfter entero

Cuántas líneas inmediatamente posteriores a cada línea coincidente se devuelven como contexto. Los valores superiores a 10 se reducen a 10.

filterPath cadena

Limita la búsqueda a este archivo o directorio, respecto de la raíz del repositorio. Si está vacío, se busca en todo el repositorio. Tamaño máximo en UTF-8: 4096 bytes.

includes array

Patrones glob que nombran las rutas en las que buscar. La coincidencia no distingue entre mayúsculas y minúsculas; un patrón que no contiene / coincide a cualquier profundidad, * coincide dentro de un único segmento de ruta y ** coincide a través de varios segmentos. Cuando hay alguna inclusión, no se busca una ruta que no coincida con ninguna de ellas. Como máximo 20 entradas. Tamaño máximo por patrón en UTF-8: 4096 bytes.

excludes array

Patrones glob que indican las rutas que se deben excluir, con la misma sintaxis que includes. Una exclusión prevalece sobre una inclusión, y excluir un directorio excluye todo lo que hay dentro de él. Máximo 20 entradas. Tamaño máximo UTF-8 por patrón: 4096 bytes.

maxResults entero

El número máximo de coincidencias que se devuelven. Cero solicita el valor predeterminado de 1000 y los valores superiores a 1000 se reducen a 1000. Las líneas de contexto no cuentan para el límite.

Campos de respuesta

matches array

Las líneas coincidentes y sus líneas de contexto. El orden en que aparecen los archivos y las líneas no está definido y puede variar entre solicitudes idénticas.

matches[].path cadena

Ruta del archivo, relativa a la raíz del repositorio.

matches[].lineNumber entero

Número de esta línea en el archivo, empezando por uno.

matches[].line cadena

El texto de la línea, sin el terminador de línea final.

matches[].kind cadena

Indica si esta línea contiene coincidencias o si se devolvió como contexto. Valores permitidos: match, context.

matches[].submatches array

Indica dónde se encuentran las coincidencias dentro de line. Siempre está vacío en una línea de contexto. Cuando limitHit es true, la última línea con coincidencias puede contener solo algunas de ellas. Los rangos que quedan completamente después de line se omiten, y los que se extenderían más allá de line se reducen a los bytes que quedan.

matches[].submatches[].start entero

Desplazamiento en bytes del primer byte de la coincidencia dentro de la línea.

matches[].submatches[].end entero

Índice de bytes inmediatamente posterior al último byte de la coincidencia dentro de la línea.

limitHit boolean

Indica si la búsqueda alcanzó maxResults. Reduce query, filterPath o las listas de globs para buscar en un conjunto más pequeño de archivos.
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}

Datos de Git

Objetos Git de bajo nivel. Las lecturas requieren repository:contents:read, y un repositorio vacío devuelve 409. Create Commit From Files y Create Git Ref escriben objetos Git y requieren repository:contents:write.

Además de ramas y etiquetas, Obtener una referencia de Git lee la vista previa de fusión de una pull request en pull/{pullNumber}/merge (normalizada a refs/pull/{pullNumber}/merge): un commit que fusiona la cabecera actual de la pull request con la punta de su rama base en el momento de la última actualización. Origin la actualiza cuando se crea la pull request, cuando se hace push de su cabecera, cuando se cambia su destino y cuando se reabre, antes de que se publiquen los eventos de webhook pull_request.* correspondientes y dentro de un límite de tiempo acotado; si una actualización no termina a tiempo, se mantiene la referencia anterior y los eventos se publican igualmente. Origin no la actualiza por el hecho de que la rama base avance por su cuenta, y elimina la referencia cuando la fusión presenta conflictos, de modo que un 404 en una pull request abierta significa que hay conflictos o que la vista previa aún no se ha preparado. Cada versión de la pull request también indica su propia fusión de prueba en version.potentialMergeCommit, cuyo state permite distinguir entre esos dos casos; consulta Pull requests. El mergeCommitSha de la pull request es un commit distinto, que solo se establece una vez fusionada.

Obtener blob

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

Devuelve un objeto blob de Git mediante su SHA. La respuesta predeterminada es JSON con content codificado en base64 y encapsulado en MIME. En la API REST, envíe Accept: application/vnd.origin.raw+json (o application/vnd.origin.raw) para recibir los bytes sin procesar del blob. Se rechazan los blobs de más de 4 MiB (decodificados); obtenga archivos más grandes clonando el repositorio mediante Git por HTTPS. Los repositorios vacíos devuelven 409 Conflict.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

sha cadena Obligatorio

SHA hexadecimal completo o abreviado del objeto blob.

Campos de respuesta

sha cadena

SHA del objeto blob de Git.

size entero

Tamaño del blob decodificado como un número JSON; el endpoint JSON rechaza los blobs de más de 4 MiB.

encoding cadena

Las respuestas JSON de blobs usan codificación base64.

content cadena

Bytes del blob codificados en base64; quien realiza la llamada puede solicitar bytes sin procesar con 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'

Estructura de la respuesta:

{  "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",  "size": 312,  "encoding": "base64",  "content": "Y29uc29sZS5sb2coImxhdW5jaCIpOwo="}

Obtener un commit de Git

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

Devuelve un objeto de commit de Git por SHA (o revisión resoluble). Esta es la forma de commit de bajo nivel de la base de datos de Git (autor/mensaje/árbol en plano), no el recurso de mayor nivel GetCommit en /commits/{sha}. sha acepta un SHA de commit, una rama, una etiqueta o una referencia simbólica como HEAD. Los repositorios vacíos devuelven 409 Conflict.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

sha string Obligatorio

SHA hexadecimal completo o abreviado del objeto commit, o de una rama, etiqueta o referencia simbólica como HEAD. Una abreviatura debe tener al menos 5 caracteres hexadecimales y solo se resuelve entre objetos commit; falla si no coincide con ningún commit o si coincide con más de uno.

Campos de respuesta

sha string

SHA hexadecimal completo del commit.

author objeto

Firma del autor del objeto git.

author.name string

Nombre registrado en la identidad de Git.

author.email string

Correo electrónico registrado en la identidad de Git.

author.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de la zona horaria original de la firma de git (p. ej., "2014-11-07T22:01:45+01:00").

committer objeto

Firma del committer del objeto git.

committer.name string

Nombre registrado en la identidad de Git.

committer.email string

Correo electrónico registrado en la identidad de Git.

committer.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de la zona horaria original de la firma de git (p. ej., "2014-11-07T22:01:45+01:00").

message string

Mensaje completo del commit.

tree objeto

Árbol al que apunta este commit.

tree.sha string

SHA del árbol al que hace referencia el commit.

parents array

SHA de los commits padre (vacío para un commit raíz).

parents[].sha string

SHA del commit padre.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/commits/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"    }  ]}

Crear commit a partir de archivos

POST/v1/origin/repos/{ownerSlug}/{repoName}/git/commits:createFromFiles
Scoperepository:contents:writeAuthInstallation tokenUser access token

Crea un commit en una branch a partir de cambios de archivos inline y hace avanzar la branch hasta él.

Los cambios se aplican al tree en expectedHeadSha, que pasa a ser el parent del nuevo commit. Devuelven FailedPrecondition (HTTP 400) los siguientes casos: una branch que se ha movido o no existe, un conjunto de cambios que deja el tree sin modificar, un delete de un path que el tree no contiene, un write bloqueado por un ruleset de push y un repository cuyos contents se replican desde otro host.

Una solicitud admite como máximo 1000 cambios de archivo, 8 MiB por archivo y 32 MiB de contenido en total. Superar un límite, repetir una ruta o enviar un campo con formato incorrecto devuelve InvalidArgument (HTTP 400), con infracciones de campo de google.rpc.BadRequest que identifican la entrada files[i] conflictiva.

La branch ya debe existir. Créala primero con Create Git Ref y luego haz commit sobre ella.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repo, único dentro de la entidad propietaria.

Cuerpo de la solicitud

targetBranch string Obligatorio

Branch que recibe el commit, como <branch>, heads/<branch> o refs/heads/<branch>. La branch debe existir previamente. HEAD se rechaza en cualquier variante de escritura.

expectedHeadSha string Obligatorio

SHA hex completo al que debe apuntar actualmente la rama de destino. Pasa a ser el padre del nuevo commit. Se rechaza el SHA formado solo por ceros.

message string Obligatorio

Mensaje del commit.

author object Obligatorio

Autor del commit. Los timestamps los asigna el server.

author.name string Obligatorio

Name registrado en la identity de Git.

author.email string Obligatorio

Email registrado en la identity de Git.

committer object

Autor del commit (committer). Si se omite, el valor predeterminado es author.

committer.name string

Nombre registrado en la identidad de Git. Obligatorio cuando se incluye committer.

committer.email string

Email registrado en la identity de Git. Obligatorio cuando committer está presente.

files array Obligatorio

Cambios de archivos aplicados al tree de la punta de la branch. Se requiere al menos un cambio y los paths deben ser únicos dentro de una misma solicitud.

files[].path string Obligatorio

Ruta relativa al repositorio con separadores /, por ejemplo docs/changelog.md.

files[].content string

Nuevo contenido del archivo, codificado según files[].encoding. Crea el archivo o reemplaza su contenido. Establece exactamente uno de files[].content o files[].delete.

files[].delete booleano

Elimina el archivo. Debe ser true cuando se establece. Establece exactamente uno de estos dos: files[].content o files[].delete.

files[].encoding string

Codificación de files[].content. Valores permitidos: utf-8 (predeterminado), base64. Se ignora en las eliminaciones.

files[].mode string

Modo de archivo para files[].content. Valores permitidos: file (predeterminado), executable, symlink, donde el contenido es el destino del enlace. Se ignora en las eliminaciones.

Campos de respuesta

sha string

SHA del nuevo commit, ahora la punta de la rama.

treeSha string

SHA del tree root del nuevo commit.

previousHeadSha string

Punta de la branch antes del write; el parent del nuevo 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    }  ]}'

Estructura de la respuesta:

{  "sha": "5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d",  "treeSha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8",  "previousHeadSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4"}

Obtener una referencia de Git

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

Devuelve una referencia de Git por su nombre. ref suele ser heads/<branch> o tags/<tag> (con o sin el prefijo refs/), o el HEAD simbólico. Solo admite coincidencias exactas; usa ListMatchingGitRefs para prefijos. Los repositorios vacíos devuelven 409 Conflict.

pull/<number>/merge es la vista previa de fusión de un pull request: un commit que fusiona su cabecera actual en la punta de su base branch en el momento de la última actualización. Es un commit distinto del mergeCommitSha del pull request, que solo se establece una vez que el pull request se ha fusionado. El campo version.potentialMergeCommit del pull request indica la fusión de prueba de cada versión: mientras una versión sea la más reciente y su state sea prepared, su sha es el commit al que apunta esta referencia.

Origin actualiza la vista previa cuando se crea un pull request, cuando se hace push a su cabecera, cuando se cambia su destino y cuando se reabre, antes de que se publiquen los eventos de webhook pull_request.* correspondientes y dentro de un margen de tiempo limitado. Si una actualización no termina a tiempo, se mantiene la referencia anterior y los eventos se publican igualmente. Origin no la actualiza por el simple hecho de que la base branch avance, y elimina la referencia cuando la fusión tiene conflictos, por lo que un 404 en un pull request abierto significa que la fusión tiene conflictos o que la vista previa aún no está preparada.

Parámetros de ruta

ownerSlug cadena obligatorio

Slug único de la entidad propietaria.

repoName cadena obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

ref cadena obligatorio

Nombre de la referencia de Git. Suele ser heads/<branch> o tags/<tag>; se acepta y normaliza el prefijo refs/. También se acepta el HEAD simbólico (se devuelve como ref: "HEAD" con el commit de punta), así como pull/<number>/merge para la vista previa de fusión de un pull request. Debe coincidir exactamente con el nombre completo de la referencia.

Campos de respuesta

ref cadena

Nombre completo de la referencia, p. ej., "refs/heads/main".

object object

Objeto al que apunta directamente esta referencia (sin desreferenciar). En las etiquetas anotadas, object.type es "tag" y object.sha es el SHA del objeto de etiqueta.

object.sha cadena

SHA hexadecimal del objeto de destino.

object.type cadena

Uno de "commit", "tree", "blob" o "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'

Estructura de la respuesta:

{  "ref": "refs/heads/main",  "object": {    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "type": "commit"  }}

Crear referencia de Git

POST/v1/origin/repos/{ownerSlug}/{repoName}/git/refs
Scoperepository:contents:writeAuthInstallation tokenUser access token

Crea una referencia de rama que apunta a un commit existente.

Solo se pueden crear referencias de rama. Un tag o cualquier otro espacio de nombres de referencia, así como un sha que no sea el SHA hexadecimal completo de un commit del repositorio, devuelven InvalidArgument (HTTP 400). Crear una rama que ya apunta a sha se realiza correctamente y devuelve la referencia existente; si la rama existe en otro commit, se devuelve AlreadyExists (HTTP 409 Conflict). Una creación bloqueada por un ruleset de push, o realizada en un repositorio cuyo contenido se replica desde otro host, devuelve FailedPrecondition (HTTP 400).

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Cuerpo de la solicitud

ref string Obligatorio

Referencia de rama a crear, como refs/heads/<branch> o heads/<branch>.

sha string Obligatorio

SHA hexadecimal completo de un commit existente al que apunta la nueva rama.

Campos de la respuesta

ref string

Nombre completo de la referencia, p. ej. «refs/heads/main».

object object

Objeto al que esta referencia apunta directamente (unpeeled). En el caso de una rama, object.type es «commit».

object.sha string

SHA hexadecimal del objeto de destino.

object.type string

Uno de estos valores: «commit», «tree», «blob» o «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"}'

Estructura de la respuesta:

{  "ref": "refs/heads/feature/login",  "object": {    "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",    "type": "commit"  }}

Eliminar referencia de Git

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/git/refs/{ref}
Scoperepository:contents:writeAuthInstallation tokenUser access token

Elimina una referencia de rama. El cuerpo de respuesta está vacío.

Solo se pueden eliminar referencias de rama. Una rama que no existe devuelve 404. La rama predeterminada del repositorio, una rama protegida por una regla de eliminación y un repositorio cuyo contenido se replica desde otro host devuelven FailedPrecondition (HTTP 400). Los pull request cuya cabecera es la rama eliminada se cierran, igual que tras una eliminación enviada por push. Una rama cuya punta cambia mientras la eliminación está en curso falla con FailedPrecondition (HTTP 400) o Aborted (HTTP 409 Conflict); reintente para eliminar la nueva punta.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

ref cadena Obligatorio

Referencia de rama que se eliminará, como refs/heads/<branch> o heads/<branch>.

Campos de respuesta

Las solicitudes exitosas no devuelven cuerpo de respuesta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/refs/REF' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Respuesta:

204 No Content

Listar las referencias de Git cuyos nombres comienzan con el prefijo indicado

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/matching-refs
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista las referencias de Git cuyos nombres comienzan con el prefijo indicado. Las respuestas REST devuelven directamente un array JSON (mediante response_body). Se conserva la barra diagonal final de ref (heads/ → refs/heads/). El HEAD simbólico coincide exactamente (no está bajo refs/). Los repositorios vacíos devuelven 409 Conflict.

Parámetros de ruta

ownerSlug cadena obligatorio

Slug único de la entidad propietaria.

repoName cadena obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Parámetros de consulta

ref cadena

Prefijo con el que buscar coincidencias. Suele ser heads/<prefix> o tags/<prefix>; se acepta y normaliza el prefijo refs/. Si está vacío, enumera todas las referencias (vinculación REST sin un segmento de ruta final).

Campos de respuesta

La respuesta es un array. Cada elemento contiene:

ref cadena

Nombre completo de la referencia, p. ej., "refs/heads/main".

object objeto

Objeto al que apunta directamente esta referencia (sin desreferenciar). Para las etiquetas anotadas, object.type es "tag" y object.sha es el SHA del objeto de etiqueta.

object.sha cadena

SHA hexadecimal del objeto de destino.

object.type cadena

Uno de "commit", "tree", "blob" o "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'

Estructura de la respuesta:

{  "refs": [    {      "ref": "refs/heads/main",      "object": {        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "type": "commit"      }    }  ]}

Listar referencias de Git que coinciden por ruta

GET/v1/origin/repos/{ownerSlug}/{repoName}/git/matching-refs/{ref}
Scoperepository:contents:readAuthInstallation tokenUser access token

Lista las referencias de Git cuyos nombres comienzan con el prefijo indicado. Las respuestas REST se devuelven directamente como un array JSON (mediante response_body). Se conserva una barra diagonal final en ref (heads/ → refs/heads/). El HEAD simbólico coincide exactamente (no está bajo refs/). Los repositorios vacíos devuelven 409 Conflict.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

ref cadena Obligatorio

Prefijo que debe coincidir. Normalmente heads/<prefix> o tags/<prefix>; se acepta y normaliza el prefijo refs/. Si está vacío, se listan todas las referencias (vinculación REST sin un segmento de ruta final).

Campos de respuesta

La respuesta es un array. Cada elemento contiene:

ref cadena

Nombre completo de la referencia, p. ej., "refs/heads/main".

object object

Objeto al que apunta directamente esta referencia (sin desreferenciar). Para las etiquetas anotadas, object.type es "tag" y object.sha es el SHA del objeto de etiqueta.

object.sha cadena

SHA hexadecimal del objeto de destino.

object.type cadena

Uno de "commit", "tree", "blob" o "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'

Estructura de la respuesta:

{  "refs": [    {      "ref": "refs/heads/main",      "object": {        "sha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",        "type": "commit"      }    }  ]}

Obtener tag

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

Devuelve un objeto de tag de Git anotado mediante SHA. Los tags ligeros no son objetos de tag y devuelven NotFound. Los repositorios vacíos devuelven 409 Conflict.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

sha string Obligatorio

SHA hexadecimal completo o abreviado del objeto de tag anotado.

Campos de la respuesta

sha string

SHA del objeto de tag (hexadecimal).

tag string

Nombre del tag, p. ej., "v1.0".

message string

Mensaje del tag.

tagger object

Firma del tagger del objeto de tag.

tagger.name string

Nombre registrado en la identidad de Git.

tagger.email string

Correo electrónico registrado en la identidad de Git.

tagger.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de zona horaria original de la firma de git (p. ej., "2014-11-07T22:01:45+01:00").

object object

Objeto al que apunta este tag.

object.sha string

SHA hexadecimal del objeto de destino.

object.type string

Uno de "commit", "tree", "blob" o "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'

Estructura de la respuesta:

{  "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"  }}

Obtener árbol

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

Devuelve un objeto de árbol de Git por SHA o por una revisión resolvible. sha acepta un SHA de árbol, un SHA de commit, una rama, una etiqueta o una referencia simbólica como HEAD. Establece recursive=true (o 1) para recorrer todo el árbol; omitir el parámetro o pasar cualquier otro valor lista solo los hijos inmediatos. Los listados recursivos se truncan a 100.000 entradas o 7 MiB y establecen truncated=true. Los repositorios vacíos devuelven 409 Conflict.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

sha string Obligatorio

SHA del árbol, SHA del commit, rama, etiqueta o referencia simbólica como HEAD.

Parámetros de consulta

recursive boolean

Cuando es true, devuelve el recorrido recursivo completo del árbol. Los valores de consulta true y 1 habilitan la recursión; si se omite el parámetro o se pasa cualquier otro valor (incluidos false y 0), solo se listan los hijos inmediatos.

Campos de respuesta

sha string

SHA del objeto de árbol (hex).

tree array

Entradas bajo este árbol (hijos inmediatos o recorrido recursivo completo).

tree[].path string

Ruta relativa a la raíz del árbol solicitada.

tree[].mode string

Modo de Git como cadena octal: "100644", "100755", "040000", "120000", "160000".

tree[].type string

Uno de "blob", "tree" o "commit" (gitlink/submódulo).

tree[].sha string

SHA del objeto (hex).

tree[].size integer

Tamaño del blob en bytes. No establecido para árboles ni gitlinks. int32 garantiza que REST JSON emita un número; los blobs individuales de más de 2 GiB no son representables.

truncated boolean

Puede ser verdadero cuando se trunca un listado recursivo de árbol.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/git/trees/SHA' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "sha": "a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8",  "tree": [    {      "path": "src/telemetry.ts",      "mode": "100644",      "type": "blob",      "sha": "c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0",      "size": 312    }  ],  "truncated": false}

Grants

Un grant vincula un principal con un repositorio o un owner mediante un permiso. Estos endpoints permiten leer, establecer y eliminar los grants asignados directamente a un resource, de modo que los cambios de acceso se pueden automatizar con scripts y revisar como si fueran código. Las operaciones de escritura reutilizan las comprobaciones que respaldan la Codebase permissions UI y registran los mismos audit events repository.access_changed y namespace.access_changed. Para conocer los tipos de principal, los dos niveles de permisos y cómo interactúan los grants a nivel de owner con los de repositorio, consulta la API de grants de Origin.

Listar los grants del repositorio

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

Enumera los usuarios, grupos y grupos del equipo propietario que tienen un permiso concedido directamente sobre un repositorio. No se incluyen los permisos heredados del propietario del repositorio.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Parámetros de consulta

pageSize entero

Número máximo de concesiones a devolver. Por defecto es 30 cuando no se establece o es 0. Los valores superiores a 100 se ajustan a 100.

pageToken cadena

Cherri Code opaco obtenido del next_page_token de una respuesta anterior. Vacío para la primera página. El pageSize de una solicitud posterior se aplica a esa página; omítelo para conservar el tamaño de página anterior.

Campos de respuesta

grants array

Permisos otorgados directamente sobre el repositorio, ordenados por tipo de principal (groups, admins del equipo propietario, miembros del equipo propietario, users) y luego por id. Los principales que ya no correspondan a un usuario activo, un group o un equipo propietario se omiten, por lo que una página puede contener menos de pageSize permisos.

grants[].user objeto

Un principal de usuario. Solo uno de user, group o teamGroup está presente.

grants[].user.id cadena

Identificador público del usuario, con el prefijo user_.

grants[].user.email cadena

Dirección de correo electrónico del usuario.

grants[].user.displayName cadena

Nombre visible del usuario: el nombre y los apellidos de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

grants[].user.handle cadena

El identificador de perfil que declara el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

grants[].group objeto

Un principal de grupo de Cherri Code: un grupo que posee el equipo del propietario o un grupo en la organización de ese equipo.

grants[].group.id cadena

Identificador público del grupo, con el prefijo grp_.

grants[].teamGroup objeto

Uno de los grupos integrados del equipo propietario, concedido en el propio repositorio y distinto del heredado del owner.

grants[].teamGroup.kind cadena

Qué grupo incorporado posee la concesión. Valores permitidos: members, admins.

grants[].permission cadena

Permiso que tiene el principal en el repositorio. Valores permitidos: read, write, admin, custom. custom indica una política personalizada, que Crear o actualizar permiso de repositorio no acepta.

repository objeto

El repositorio al que pertenece cada grant de esta response. Incluye los mismos campos que Get Repo.

nextPageToken cadena

Cherri Code opaco para la página siguiente; vacío cuando no quedan más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/{ownerSlug}/{repoName}/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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": ""}

Crear o actualizar grant de repositorio

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

Establece el permiso que un usuario, un grupo o el grupo del equipo propietario tiene directamente sobre un repositorio y reemplaza cualquier permiso otorgado antes de forma directa a ese principal. Repetir una concesión que el principal ya tiene se completa correctamente y no produce ningún cambio. El usuario debe ser un miembro activo del equipo u organización del propietario del repositorio. El grupo debe ser uno que pertenezca al equipo del propietario, o un grupo activo en la organización de ese equipo; de lo contrario, la solicitud devuelve FailedPrecondition (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repo, único dentro de la entidad propietaria.

Cuerpo de la solicitud

user objeto

Un principal de usuario. Solo uno de user, group o teamGroup está presente.

user.id cadena

Identificador público del usuario, con el prefijo user_.

user.email cadena

Dirección de correo electrónico del usuario.

user.displayName cadena

Nombre visible del usuario: el nombre y los apellidos de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

user.handle cadena

El handle del perfil afirmado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

group objeto

Un principal de grupo de Cherri Code: un grupo propiedad del equipo del owner o un grupo de la organización de ese equipo.

group.id cadena

Identificador público del grupo, con el prefijo grp_.

teamGroup objeto

Uno de los grupos integrados del equipo propietario, concedido en el propio repositorio y distinto del que se hereda del propietario.

teamGroup.kind cadena

Qué grupo integrado posee el grant. Valores permitidos: members, admins.

permission cadena Obligatorio

Permiso que se otorgará. Valores permitidos: read, write, admin. custom devuelve InvalidArgument (HTTP 400); las políticas personalizadas quedan fuera de esta API.

Campos de respuesta

user objeto

Un principal de usuario. Exactamente uno de user, group o teamGroup está presente.

user.id cadena

Identificador público del usuario, con el prefijo user_.

user.email cadena

Dirección de correo electrónico del usuario.

user.displayName cadena

Nombre visible del usuario: el nombre y los apellidos de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

user.handle cadena

El handle del perfil afirmado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

group objeto

Un principal de grupo de Cherri Code: un grupo que pertenece al equipo del owner o un grupo de la organización de ese equipo.

group.id cadena

Identificador público del grupo, con el prefijo grp_.

teamGroup objeto

Uno de los grupos integrados del equipo propietario, concedido en el propio repositorio y distinto del que se hereda del propietario.

teamGroup.kind cadena

Qué grupo integrado contiene la concesión. Valores permitidos: members, admins.

permission cadena

Permiso que el principal tiene ahora sobre el repositorio.
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"}'

Estructura de la respuesta:

{  "user": {    "id": "user_01k2ja2000e0080000000000c3",    "email": "[email protected]"  },  "permission": "write"}

Eliminar permiso de repositorio

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

Elimina el permiso que un usuario, un grupo o un grupo del equipo propietario tiene directamente sobre un repositorio. Los permisos heredados del owner del repositorio no se ven afectados, por lo que un grupo del equipo propietario vuelve a su default a nivel de owner. Eliminar un permiso que el principal no tiene directamente se completa correctamente y sin cambios. El response body queda vacío.

Path Parameters

ownerSlug string Required

Unique slug de la owning entity.

repoName string Required

Repo name, unique to the owner entity.

Request Body

user object

Un principal de tipo usuario. Está presente exactamente uno de user, group o teamGroup.

user.id string

Public identifier del usuario, con el prefix user_.

user.email string

Email address del usuario.

user.displayName string

Display name del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

user.handle string

El handle de perfil afirmado por el usuario, sin el prefix @. Presente solo mientras ese perfil sea públicamente visible; en caso contrario, se omite.

group object

Un principal de tipo grupo de Cherri Code: un grupo propiedad del equipo del owner, o un grupo en la organization de ese equipo.

group.id string

Public identifier del grupo, con el prefix grp_.

teamGroup object

Uno de los grupos integrados del equipo propietario, otorgado sobre el repositorio en sí y distinto del heredado del owner.

teamGroup.kind string

Qué grupo integrado tiene el permiso. Valores permitidos: members, admins.

Campos de respuesta

Successful requests return no response body.

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"  }}'

Respuesta:

204 No Content

Listar concesiones del espacio de nombres

GET/v1/origin/owners/{ownerSlug}/grants
Scopenamespace:settings:readAuthInstallation tokenUser access token

Enumera quiénes han recibido acceso a un propietario: usuarios, grupos y los grupos integrados de administradores y miembros del equipo propietario. Cada concesión indica el permiso que otorga en todos los repositorios del propietario. No se incluyen las concesiones hechas en repositorios individuales; consúltalas en Lista de concesiones de repositorio.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug del propietario cuyos grants se desean listar.

Parámetros de consulta

pageSize entero

Número máximo de grants que se devolverán. Por defecto es 30 cuando no se especifica o es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío para la primera página. Si se indica pageSize en una solicitud posterior, se aplica a esa página; omítelo para mantener el tamaño de página anterior.

Campos de respuesta

grants array

Permisos en esta página. Los permisos de administrador aparecen primero; dentro de cada ejecución, los permisos se ordenan por tipo de entidad principal (grupos, administradores del equipo propietario, miembros del equipo propietario, usuarios) y luego por id. Si una entidad principal ya no corresponde a un usuario activo, grupo o equipo propietario, se omite, por lo que una página puede contener menos de pageSize permisos.

grants[].user objeto

Un principal de usuario. Solo uno de user, group o teamGroup está presente.

grants[].user.id cadena

Identificador público del usuario, con el prefijo user_.

grants[].user.email cadena

Dirección de correo electrónico del usuario.

grants[].user.displayName cadena

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

grants[].user.handle cadena

El identificador de perfil que afirma tener el usuario, sin el prefijo @. Solo aparece mientras ese perfil sea visible públicamente; en caso contrario, se omite.

grants[].group objeto

Un principal de grupo de Cherri Code: un grupo que pertenece al equipo del propietario o un grupo de la organización de ese equipo.

grants[].group.id cadena

Identificador público del grupo, con el prefijo grp_.

grants[].teamGroup objeto

Uno de los grupos integrados del equipo propietario: el acceso predeterminado del equipo al propietario.

grants[].teamGroup.kind cadena

Qué grupo integrado posee el permiso. Valores permitidos: members, admins.

grants[].permission cadena

Permiso que el principal tiene sobre cada repositorio del owner. Valores permitidos: PERMISSION_READ, PERMISSION_CONTRIBUTOR, PERMISSION_WRITE, PERMISSION_ADMIN, PERMISSION_CUSTOM. PERMISSION_CUSTOM indica una política personalizada, que Crear o actualizar grant de espacio de nombres no acepta.

nextPageToken cadena

Cherri Code opaco para la página siguiente; vacío cuando no quedan más páginas.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/owners/{ownerSlug}/grants' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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": ""}

Crear o actualizar grant de espacio de nombres

POST/v1/origin/owners/{ownerSlug}/grants
Scopenamespace:settings:writeAuthInstallation tokenUser access token

Establece el permiso que un user, un group o el group del owning-team tiene directamente sobre un owner, y reemplaza cualquier permiso concedido antes directamente a ese principal. Repetir un grant que el principal ya tiene se completa correctamente y sin cambios. La solicitud devuelve FailedPrecondition (HTTP 400) cuando el user no es un miembro active del owning team o de su organization, cuando el group no pertenece a ese team ni es un group active en su organization, o cuando la operación de write dejaría al owner sin ningún admin.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug del owner.

Cuerpo de la solicitud

user objeto

Un principal de usuario. Exactamente uno de user, group o teamGroup está presente.

user.id cadena

Identificador público del usuario, con el prefijo user_.

user.email cadena

Dirección de correo electrónico del usuario.

user.displayName cadena

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

user.handle cadena

El handle del perfil afirmado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

group objeto

Un principal de grupo de Cherri Code: un grupo que pertenece al equipo del propietario o a la organización de ese equipo.

group.id cadena

Identificador público del grupo, con el prefijo grp_.

teamGroup objeto

Uno de los grupos integrados del equipo propietario: el acceso predeterminado del equipo al propietario.

teamGroup.kind cadena

Qué grupo integrado posee la concesión. Valores permitidos: members, admins.

permission cadena Obligatorio

Permiso a conceder. Valores permitidos: PERMISSION_READ, PERMISSION_CONTRIBUTOR, PERMISSION_WRITE, PERMISSION_ADMIN. PERMISSION_READ, PERMISSION_CONTRIBUTOR y PERMISSION_WRITE otorgan ese nivel sobre los repositorios internos del propietario, y PERMISSION_ADMIN administra al propietario en sí. PERMISSION_CUSTOM devuelve InvalidArgument (HTTP 400).

Campos de respuesta

user objeto

Un principal de usuario. Solo está presente uno de estos campos: user, group o teamGroup.

user.id cadena

Identificador público del usuario, con el prefijo user_.

user.email cadena

Dirección de correo electrónico del usuario.

user.displayName cadena

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

user.handle cadena

El handle del perfil afirmado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

group objeto

Un principal de grupo de Cherri Code: un grupo que pertenece al equipo del propietario o un grupo de la organización de ese equipo.

group.id cadena

Public identifier del group, con el prefijo grp_.

teamGroup objeto

Uno de los grupos integrados del equipo propietario: el acceso predeterminado del equipo al propietario.

teamGroup.kind cadena

Qué grupo integrado tiene la concesión. Valores permitidos: members, admins.

permission cadena

Permiso que el principal tiene ahora sobre cada repositorio del propietario.
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"}'

Estructura de la respuesta:

{  "user": {    "id": "user_01k2ja2000e0080000000000c3",    "email": "[email protected]"  },  "permission": "PERMISSION_WRITE"}

Eliminar grant de espacio de nombres

DELETE/v1/origin/owners/{ownerSlug}/grants
Scopenamespace:settings:writeAuthInstallation tokenUser access token

Elimina el permiso que un user, un group o un grupo del equipo propietario tiene directamente sobre un owner. Los grants por repositorio no se ven afectados. Eliminar un permiso que el principal no tiene directamente se completa correctamente y sin cambios; una eliminación que dejaría al owner sin ningún admin devuelve FailedPrecondition (HTTP 400). El cuerpo de respuesta está vacío.

parámetro de ruta

ownerSlug cadena obligatorio

Slug del owner.

cuerpo de solicitud

user objeto

Un principal de tipo user. Solo uno de user, group o teamGroup está presente.

user.id cadena

Identificador público del user, con el prefijo user_.

user.email cadena

Dirección de email del user.

user.displayName cadena

Display name del user: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

user.handle cadena

El handle de perfil reclamado por el user, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

group objeto

Un principal de tipo group de Cherri Code: un grupo que pertenece al equipo del owner o un grupo de la organización de ese equipo.

group.id cadena

Identificador público del group, con el prefijo grp_.

teamGroup objeto

Uno de los grupos integrados del equipo propietario: el acceso predeterminado del equipo al owner.

teamGroup.kind cadena

Qué grupo integrado tiene el grant. Valores permitidos: members, admins.

Campos de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

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"  }}'

Response:

204 No Content

Etiquetas

Una definición de etiqueta pertenece a un repositorio y se identifica por su nombre. La asignación de etiquetas a un pull request se realiza en una superficie independiente; consulta Establecer etiquetas de pull request.

Listar etiquetas

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

Lista las etiquetas definidas en un repositorio, ordenadas por nombre.

Los tokens de página están vinculados al repositorio para el que se emitieron. Si se reutiliza un token con un repositorio distinto, o si el token tiene otro tipo de formato no válido, se devuelve InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Parámetros de consulta

pageSize entero

Número máximo de etiquetas que se devolverán. El valor predeterminado es 30 si se omite o es cero; los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco del nextPageToken de una respuesta anterior. Omítelo para la primera página. El pageSize de una solicitud posterior se aplica a esa página; omítelo para mantener el tamaño de página anterior.

Campos de respuesta

labels array

Página de definiciones de etiquetas, ordenadas por nombre.

labels[].id cadena

Identificador público de la etiqueta.

labels[].name cadena

Nombre de la etiqueta, único dentro del repositorio. Los nombres identifican la etiqueta en los endpoints de lectura y escritura.

labels[].color cadena

Color hexadecimal de seis caracteres sin un # inicial.

labels[].description cadena

Descripción de la etiqueta. Se omite si la etiqueta no tiene descripción.

nextPageToken cadena

Cherri Code opaco para la siguiente página. Vacío cuando no hay más resultados.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Crear etiqueta

POST/v1/origin/repos/{ownerSlug}/{repoName}/labels
Scoperepository:labels:writeAuthInstallation tokenUser access token

Crea una etiqueta en un repositorio.

Si otra etiqueta del repositorio ya usa un nombre, se devuelve AlreadyExists (HTTP 409 Conflict). Si color no tiene seis caracteres hexadecimales, name supera los 50 caracteres o description supera los 255 caracteres, se devuelve InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Cuerpo de la solicitud

name cadena Obligatorio

Nombre de la etiqueta. Se recortan los espacios en blanco al inicio y al final. Longitud máxima: 50 caracteres.

color cadena Obligatorio

Color hexadecimal de seis caracteres sin # inicial. Las mayúsculas se almacenan como minúsculas.

description cadena

Descripción de la etiqueta. Longitud máxima: 255 caracteres.

Campos de respuesta

id cadena

Identificador público de la etiqueta.

name cadena

Nombre de la etiqueta, único dentro del repositorio. Los nombres permiten identificar la etiqueta en los endpoints de lectura y escritura.

color cadena

Color hexadecimal de seis caracteres sin # inicial.

description cadena

Descripción de la etiqueta. No se incluye si la etiqueta no tiene descripción.
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"}'

Estructura de la respuesta:

{  "id": "lbl_01k2ja2000e0080000000000m1",  "name": "bug",  "color": "d73a4a",  "description": "Something isn't working"}

Obtener etiqueta

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

Devuelve una etiqueta de repositorio por su nombre.

Si el nombre no existe, devuelve 404. Si labelName está vacío, devuelve InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

labelName cadena Obligatorio

Nombre de la etiqueta. Se eliminan los espacios en blanco al principio y al final antes de realizar la búsqueda.

Campos de respuesta

id cadena

Identificador público de la etiqueta.

name cadena

Nombre de la etiqueta, único dentro del repositorio. Los nombres identifican la etiqueta en los endpoints de lectura y escritura.

color cadena

Color hexadecimal de seis caracteres sin # inicial.

description cadena

Descripción de la etiqueta. Se omite si la etiqueta no tiene descripción.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels/LABEL_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "id": "lbl_01k2ja2000e0080000000000m1",  "name": "bug",  "color": "d73a4a",  "description": "Something isn't working"}

Eliminar etiqueta

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/labels/{labelName}
Scoperepository:labels:writeAuthInstallation tokenUser access token

Elimina una etiqueta de un repositorio por su nombre. El cuerpo de la respuesta está vacío.

Al eliminar una etiqueta, también se elimina de todos los pull requests a los que estaba asignada. Un nombre desconocido devuelve 404. Un labelName vacío devuelve InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

labelName cadena Obligatorio

Nombre de la etiqueta. Los espacios en blanco al inicio y al final se eliminan antes de buscarla.

Campos de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/labels/LABEL_NAME' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Respuesta:

204 No Content

Actualizar etiqueta

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

Actualiza una etiqueta de repositorio identificada por su nombre actual.

Los campos omitidos no se modifican. Si se omiten los tres, la solicitud devuelve la etiqueta tal como está. Cambiar el nombre por uno que ya usa otra etiqueta devuelve AlreadyExists (HTTP 409 Conflict). Un labelName desconocido devuelve 404.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

labelName cadena Obligatorio

Nombre actual de la etiqueta. Los espacios en blanco iniciales y finales se eliminan antes de la búsqueda.

Cuerpo de la solicitud

name cadena

Nuevo nombre de la etiqueta. Se eliminan los espacios en blanco iniciales y finales. Longitud máxima: 50 caracteres. Omítelo para no modificarlo.

color cadena

Color hexadecimal de seis caracteres sin un # inicial. Omítelo para no modificarlo.

description cadena

Descripción de la etiqueta. Longitud máxima: 255 caracteres. Omítela para no modificarla.

Campos de respuesta

id cadena

Identificador público de la etiqueta.

name cadena

Nombre de la etiqueta, único dentro del repositorio. Los nombres se usan para identificar la etiqueta en los endpoints de lectura y escritura.

color cadena

Color hexadecimal de seis caracteres sin un # inicial.

description cadena

Descripción de la etiqueta. No se incluye si la etiqueta no tiene descripción.
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"}'

Estructura de la respuesta:

{  "id": "lbl_01k2ja2000e0080000000000m1",  "name": "bug",  "color": "b60205",  "description": "Something isn't working"}

Pull requests

Los pull requests cerrados o fusionados también pueden incluir closedAt, mergedAt y mergeCommitSha. Trate head.ref y base.ref como cadenas opacas de referencia de Origin; pueden ser nombres de rama cortos o valores refs/heads/… completos.

version es la última revisión numerada del pull request. Origin registra una nueva versión cuando se hace push de la cabecera, cuando el pull request se reapunta a otra base y cuando un pull request se reabre después de que su cabecera se haya movido mientras estaba cerrado, cada una con sus propios headSha, baseSha y estadísticas de diff. Una reapertura que registra una versión envía pull_request.head_ref.pushed, el mismo evento que envía un push. Que la rama base avance por su cuenta no registra nada, por lo que version.baseSha (y base.sha, que lo replica) es la punta de la base tal como se resolvió cuando se registró la versión y puede quedar por detrás de la punta actual de la rama hasta que se registre la siguiente versión. Consulte la punta actual de la rama con Get Git Ref.

mergeCommitSha es el commit que la fusión escribió en la rama base: se establece una vez fusionado y no está definido antes. La vista previa anterior a la fusión es la referencia pull/{pullNumber}/merge, un commit distinto; consulte Git data.

version.potentialMergeCommit indica el resultado de la fusión de prueba de Origin para esa versión: si está prepared, si se produjo un merge_conflict o si aún está unknown. Una vez preparada, también indica el sha del commit de fusión y el baseSha sobre el que se creó. Solo describe esa versión, por lo que sigue apareciendo incluso después de fusionar el pull request. Los payloads de webhook pull_request.* incluyen su estado en el momento del evento. Un evento solo espera a que termine la preparación durante un tiempo limitado, por lo que puede indicar unknown aunque una consulta posterior a Get Pull Request indique prepared; vuelva a consultar el pull request o espere al siguiente evento.

El verdict de la revisión puede ser approve, request_changes o comment. submittedAt no está presente en una revisión en borrador sin enviar. dismissal no está presente mientras el veredicto permanezca activo. Las revisiones descartadas siguen siendo visibles en los listados de revisiones. Las revisiones sustituidas automáticamente por una decisión más reciente incluyen un mensaje generado por el servidor.

Los comentarios exponen una referencia thread para agruparlos. Las solicitudes para crear comentarios siguen aceptando el parámetro escalar de comando threadId al responder. Resuelva o reabra un hilo con Actualizar hilo de pull request.

Listar solicitudes de incorporación

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

Enumera las solicitudes de extracción en un repositorio, opcionalmente filtradas por rama de origen, rama base, autor, rango de fecha de creación y estado. Cada solicitud de extracción incluye sus etiquetas asignadas.

Los resultados se ordenan por fecha de creación o por la última actualización, seleccionando con sortBy, mostrando primero los más recientes. Establece direction=asc para el orden inverso. Los tokens de página incorporan el orden y los filtros con los que se crearon, por lo que se rechaza cualquier token reproducido con un conjunto diferente de orden o filtros; reinicia la paginación cuando cualquiera de ellos cambie.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Parámetros de consulta

head cadena

Filtro opcional por rama exacta (head-ref). Omítalo para listar en todas las ramas.

state string

Filtro del ciclo de vida. Valores permitidos: open (el predeterminado), closed, merged, all. closed cubre todas las solicitudes de extracción que ya no están abiertas, incluidas las fusionadas; merged restringe al subconjunto fusionado. Cualquier otro valor devuelve InvalidArgument (HTTP 400).

pageSize entero

Máximo de resultados a devolver. Predeterminado: 30; máximo: 100.

pageToken string

Cherri Code opaco procedente del nextPageToken de una respuesta anterior. Omítelo para la primera página. El pageSize de una solicitud posterior se aplica a esa página; omítelo para conservar el tamaño de página anterior.

author string

Filtro opcional de autor. Proporcione un ID de actor público exactamente como lo devuelve este endpoint en pullRequests[].author.user.id, pullRequests[].author.app.id o pullRequests[].author.serviceAccount.id (user_…, app_… o sa_…), o la dirección de correo electrónico exacta de un usuario. La coincidencia de correo electrónico no distingue entre mayúsculas y minúsculas. Las aplicaciones y las cuentas de servicio no tienen una identidad de correo electrónico, por lo que solo se pueden seleccionar de esa manera autores que sean usuarios. Un autor sin solicitudes de incorporación de cambios devuelve una lista vacía, al igual que una dirección de correo electrónico que no corresponde a un único usuario. Cualquier otro valor, incluido el ID compartido origin-cursor-managed-actor, devuelve InvalidArgument (HTTP 400).

base cadena

Filtro opcional por rama base exacta. Acepta un nombre corto (main) o una referencia totalmente calificada (refs/heads/main). Omítalo para listar en todas las ramas base.

direction string

Dirección de orden según sortBy. "desc" es el valor predeterminado: con sortBy=created devuelve primero los más recientemente creados y con sortBy=updated los más recientemente actualizados. "asc" invierte cada uno. Cualquier otro valor devuelve InvalidArgument (HTTP 400).

since string

Límite inferior inclusivo opcional del momento de creación, como una marca de tiempo RFC 3339, por ejemplo, 2026-08-01T00:00:00Z. Devuelve solo las solicitudes de extracción creadas en ese instante o después. Una marca de tiempo no válida devuelve InvalidArgument (HTTP 400).

until string

Límite superior inclusivo opcional del momento de creación, en el mismo formato RFC 3339 que since. Devuelve solo las pull requests creadas en ese instante o antes. Una marca de tiempo malformada devuelve InvalidArgument (HTTP 400).

sortBy string

Clave de ordenamiento. Valores permitidos: created (orden de creación, valor predeterminado) o updated (momento de la última actualización). Cualquier otro valor devuelve InvalidArgument (HTTP 400).

headSha string

Filtro opcional por commit de cabecera: el SHA hexadecimal completo de 40 o 64 caracteres de la cabecera de una pull request, sin distinción entre mayúsculas y minúsculas. Selecciona una pull request cuando alguna de sus versiones registradas tiene ese commit de cabecera, ya sea actual o reemplazada; compara head.sha en cada resultado para diferenciarlas. Los demás filtros siguen aplicándose y state tiene por defecto open, así que pasa state=all para incluir pull requests fusionadas y cerradas. Los SHA malformados, abreviados o desconocidos no coinciden con nada.

stackId cadena

Filtro opcional de pila: un id de pila tal como se devuelve en pullRequests[].stack.id. Devuelve solo los miembros de esa pila, en el orden de clasificación solicitado en lugar del orden de la pila; por tanto, reconstruya la pila a partir de stack.parentPullRequest de cada miembro. state sigue teniendo por defecto open, lo que excluye a los miembros fusionados; pase state=all para toda la pila. Un id bien formado que no nombre ninguna pila en este repositorio devuelve una lista vacía, y cualquier otro valor devuelve InvalidArgument (HTTP 400).

Campos de respuesta

pullRequests array

Página de instantáneas de Pull Request; los números de respuesta y los números de versión son cadenas JSON.

pullRequests[].id cadena

Identificador de solicitud de extracción de Stable Origin.

pullRequests[].number string

Número de pull request local del repositorio codificado como una cadena JSON.

pullRequests[].state string

Estado de la solicitud de cambios: abierta o cerrada. Las solicitudes de cambios fusionadas están cerradas y tienen el valor de merged establecido en true.

pullRequests[].draft boolean

Si la solicitud de extracción está en estado de borrador.

pullRequests[].merged boolean

Indica si la solicitud de extracción se ha fusionado.

pullRequests[].title string

Título de la solicitud de extracción.

pullRequests[].body string

Cuerpo de la descripción de la solicitud de extracción.

pullRequests[].head objeto

El lado de origen del cambio: lo que se está fusionando.

pullRequests[].head.ref string

La referencia a la que apunta este lado, según la registra Origin.

pullRequests[].head.sha string

SHA del commit de la punta de este lado en la versión más reciente del cambio.

pullRequests[].base objeto

El lado de destino del cambio: aquello en lo que se fusiona.

pullRequests[].base.ref string

La referencia a la que apunta este lado, según la registra Origin.

pullRequests[].base.sha string

SHA del commit de la punta de este lado en la versión más reciente del cambio.

pullRequests[].author objeto

Actor público que abrió la solicitud de extracción.

pullRequests[].author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

pullRequests[].author.user.id string

Identificador público del usuario.

pullRequests[].author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

pullRequests[].author.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

pullRequests[].author.user.handle cadena

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

pullRequests[].author.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

pullRequests[].author.app.id string

Identificador público de la aplicación.

pullRequests[].author.app.displayName string

Nombre visible registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

pullRequests[].author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

pullRequests[].author.serviceAccount.id string

Identificador público de la cuenta de servicio.

pullRequests[].createdAt string

Marca de tiempo RFC 3339 de creación de la solicitud de extracción.

pullRequests[].updatedAt cadena

Marca de tiempo RFC 3339 de la última actualización de la solicitud de extracción.

pullRequests[].closedAt cadena

Marca de tiempo de cierre en formato RFC 3339; puede aparecer en solicitudes de incorporación de cambios cerradas o fusionadas.

pullRequests[].mergedAt string

Marca de tiempo de fusión RFC 3339; puede aparecer en solicitudes de extracción fusionadas.

pullRequests[].mergeCommitSha string

SHA del commit que la fusión escribió en la rama base. Se establece una vez que la pull request se fusiona y está ausente antes. La vista previa previa a la fusión es un commit distinto; consúltala mediante la referencia pull/<number>/merge con Obtener una referencia de Git.

pullRequests[].additions entero

Líneas añadidas en la versión actual de la solicitud de extracción.

pullRequests[].deletions entero

Líneas eliminadas en la versión actual de la solicitud de extracción.

pullRequests[].changedFiles entero

Número de archivos cambiados en la versión actual de la solicitud de extracción.

pullRequests[].labels array

Etiquetas actualmente asignadas a la solicitud de extracción, ordenadas por nombre. Vacío cuando no hay ninguna asignada.

pullRequests[].labels[].id string

Identificador público de la etiqueta.

pullRequests[].labels[].name string

Nombre de la etiqueta, único dentro del repositorio. Los nombres se refieren a la etiqueta en los endpoints de escritura.

pullRequests[].labels[].color string

Color hexadecimal de seis caracteres sin el # inicial.

pullRequests[].labels[].description string

Descripción de la etiqueta. Se omite cuando la etiqueta no tiene ninguna.

pullRequests[].stack objeto

Pertenencia a una pila: la cadena de pull requests dependientes a la que pertenece esta, cada una apilada sobre aquella en la que se basa. Se omite cuando la pull request no forma parte de una pila.

pullRequests[].stack.id string

Identificador estable de la pila, compartido por todos sus miembros. Pásalo como stackId a Listar pull requests para consultar los demás miembros.

pullRequests[].stack.parentPullRequest objeto

La solicitud de incorporación de cambios sobre la que se apila esta. No está presente en la raíz de la pila. Una solicitud de incorporación de cambios principal fusionada permanece referenciada hasta que la secundaria se redirige o se reasigna a otra solicitud principal.

pullRequests[].stack.parentPullRequest.id cadena

Identificador estable de Origin de la pull request principal.

pullRequests[].stack.parentPullRequest.number cadena

Número local en el repositorio de la solicitud de extracción principal, codificado como una cadena JSON.

pullRequests[].stack.parentPullRequest.repository objeto

Repositorio al que pertenece el elemento principal, con los mismos campos id, name y owner que el repository de una ejecución de comprobación. Las pilas nunca abarcan varios repositorios, por lo que este siempre es el propio repositorio de la solicitud de extracción.

pullRequests[].version objeto

La versión numerada actual de la solicitud de extracción y sus SHA de head/base.

pullRequests[].version.number string

Número de versión monotónico de la solicitud de extracción, codificado como una cadena JSON.

pullRequests[].version.headSha string

SHA de la cabecera capturado por esta versión de la solicitud de extracción.

pullRequests[].version.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

pullRequests[].version.createdAt string

Marca de tiempo RFC 3339 de la creación de esta versión de la solicitud de extracción.

pullRequests[].version.potentialMergeCommit objeto

La fusión de prueba de Origin para esta versión: un commit que fusiona su headSha con la punta de la rama base, junto con el estado de preparación de esa fusión. Está presente en todas las versiones. Solo describe esta versión y puede consultarse incluso después de que se fusione la pull request; es un commit distinto de mergeCommitSha. En una pull request apilada, la rama base es la de la pull request principal, por lo que la fusión de prueba solo incluye los cambios de esta pull request sobre esa rama.

pullRequests[].version.potentialMergeCommit.state cadena

Estado de preparación de la fusión de prueba. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que la fusión de prueba aún no está preparada: la versión está pendiente de preparación, se agotó el tiempo de espera o la preparación falló. Cada nueva versión comienza con el estado unknown, por lo que nunca conserva el commit de otra versión. prepared significa que la fusión de prueba existe y que sha y baseSha la describen. merge_conflict significa que se produjo un conflicto al fusionar headSha en la punta de la rama base, por lo que no hay fusión de prueba. Es la condición que Obtener la posibilidad de fusión de una pull request indica como impedimento merge_conflict; al reabrir la pull request, se vuelve a preparar la versión. Trata cualquier valor no reconocido como unknown.

pullRequests[].version.potentialMergeCommit.sha cadena

SHA del commit de fusión de prueba de dos padres: su primer padre es el baseSha de este objeto y su segundo padre es el headSha de la versión. Presente solo cuando state es prepared. La referencia pull/{pullNumber}/merge apunta a él mientras esta versión sea la más reciente. Después de eso, sigue siendo legible por SHA a través de Obtener commit, pero no se puede recuperar por SHA a través de Git.

pullRequests[].version.potentialMergeCommit.baseSha cadena

Punta de la rama base a partir de la cual se creó la fusión de prueba. Solo está presente cuando state es prepared. Puede ser más reciente que pullRequests[].version.baseSha, y Origin no la actualiza si la rama base simplemente avanza.

nextPageToken string

Token de continuación opaco devuelto por una respuesta de lista; una cadena vacía significa que no hay página siguiente. No lo inspecciones ni lo construyas, y reinicia la paginación cuando cambien el repositorio o los filtros.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"      }    }  ]}

Obtener solicitud de extracción

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Devuelve una única solicitud de extracción, incluidas las etiquetas asignadas.

Las solicitudes de extracción cerradas o fusionadas pueden además incluir closedAt, mergedAt y mergeCommitSha. Trate head.ref y base.ref como cadenas de referencia opacas de origen; pueden ser nombres de rama cortos o valores totalmente cualificados refs/heads/….

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Campos de respuesta

id string

Identificador estable de Origin para la solicitud de extracción.

number cadena

Número de solicitud de extracción local del repositorio codificado como una cadena JSON.

state string

Estado de la solicitud de extracción: abierta o cerrada. Las solicitudes de extracción fusionadas están cerradas y tienen merged establecido en true.

draft boolean

Indica si la solicitud de extracción es un borrador.

merged boolean

Si la solicitud de extracción se ha fusionado.

title cadena

Título del pull request.

body string

Cuerpo de la descripción de la solicitud de extracción.

head objeto

La parte de origen del cambio: lo que se está fusionando.

head.ref string

La referencia a la que apunta este lado, según la registra Origin.

head.sha cadena

SHA del commit de punta de este lado en la versión más reciente del cambio.

base objeto

El lado objetivo del cambio: en qué se fusiona.

base.ref cadena

La referencia a la que apunta este lado, según la registra Origin.

base.sha string

SHA del commit en la punta de este lado en la última versión del cambio.

author objeto

Actor público que abrió la solicitud de extracción.

author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

author.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; se omite en caso contrario.

author.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id cadena

Identificador público de la cuenta de servicio.

createdAt string

Marca de tiempo RFC 3339 de creación de la solicitud de extracción.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización de la solicitud de extracción.

closedAt cadena

Marca de tiempo de cierre en formato RFC 3339; puede aparecer en solicitudes de extracción cerradas o fusionadas.

mergedAt string

Marca de tiempo de fusión RFC 3339; puede aparecer en solicitudes de incorporación fusionadas.

mergeCommitSha string

SHA del commit que la fusión escribió en la rama base. Se establece una vez que la solicitud de extracción se fusiona y no aparece antes de eso. La vista previa previa a la fusión es un commit distinto, que se lee mediante la referencia pull/<number>/merge con Obtener una referencia de Git.

additions integer

Líneas añadidas en la versión actual de la solicitud de extracción.

deletions entero

Líneas eliminadas en la versión actual de la solicitud de extracción.

changedFiles entero

Cantidad de archivos modificados en la versión actual de la solicitud de extracción.

labels array

Etiquetas actualmente asignadas a la solicitud de extracción, ordenadas por nombre. Está vacío cuando no hay ninguna asignada.

labels[].id string

Identificador público de la etiqueta.

labels[].name string

Nombre de la etiqueta, único dentro del repositorio. Los nombres se refieren a la etiqueta en los endpoints de escritura.

labels[].color string

Color hexadecimal de seis caracteres sin el prefijo #.

labels[].description string

Descripción de la etiqueta. No aparece si la etiqueta no tiene descripción.

stack objeto

Membresía de la pila: la cadena de pull requests dependientes a la que pertenece esta, cada una apilada sobre aquella en la que se basa. No aparece cuando la pull request no forma parte de una pila.

stack.id cadena

Identificador estable de la pila, compartido por todos los miembros de la pila. Pásalo como stackId a Listar pull requests para leer a los demás miembros.

stack.parentPullRequest objeto

La solicitud de extracción sobre la que se apila esta. Ausente en la raíz de la pila. Un elemento principal fusionado permanece referenciado hasta que el secundario se reorienta o se reasigna a otro padre.

stack.parentPullRequest.id cadena

Identificador estable de Origin de la solicitud de extracción principal.

stack.parentPullRequest.number cadena

Número local de la solicitud de extracción principal del repositorio, codificado como una cadena JSON.

stack.parentPullRequest.repository objeto

Repositorio al que pertenece el padre, con los mismos campos id, name y owner que el repository de una ejecución de comprobación. Las pilas nunca abarcan varios repositorios, por lo que siempre es el propio repositorio de la pull request.

version objeto

Versión numerada actual de la solicitud de extracción y sus SHA de head/base.

version.number string

Número de versión monótona de la solicitud de extracción codificado como una cadena JSON.

version.headSha cadena

SHA de cabecera capturado por esta versión de la solicitud de extracción.

version.baseSha cadena

SHA base capturada por esta versión de la solicitud de extracción.

version.createdAt string

Marca de tiempo RFC 3339 de la creación de esta versión de la solicitud de extracción.

version.potentialMergeCommit objeto

La fusión de prueba de Origin para esta versión: un commit que fusiona su headSha con la punta de la rama base, y hasta dónde llegó su preparación. Está presente en todas las versiones. Describe solo esta versión y sigue siendo consultable después de que se fusione la solicitud de extracción; es un commit distinto de mergeCommitSha. En una solicitud de extracción apilada, la rama base es la rama de la solicitud principal, por lo que la fusión de prueba solo abarca los cambios de esta solicitud de extracción sobre esa rama.

version.potentialMergeCommit.state cadena

Hasta dónde llegó la preparación de la fusión de prueba. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que la fusión de prueba no está preparada: la versión está pendiente de preparación, o la preparación superó el tiempo de espera o falló. Cada nueva versión comienza como unknown, por lo que nunca lleva el commit de otra versión. prepared significa que la fusión de prueba existe y que sha y baseSha la describen. merge_conflict significa que se produjo un conflicto al fusionar headSha con la punta de la rama base, por lo que no hay fusión de prueba; es la condición que Obtener la capacidad de fusión de la solicitud de extracción indica como impedimento merge_conflict, y al reabrir la solicitud de extracción se prepara de nuevo la versión. Trate los valores no reconocidos como unknown.

version.potentialMergeCommit.sha cadena

SHA del commit de fusión de prueba con dos padres: su primer padre es el baseSha de este objeto y su segundo padre es el headSha de la versión. Solo está presente cuando state es prepared. La referencia pull/{pullNumber}/merge apunta a él mientras esta versión sea la más reciente. Después, se puede seguir consultando mediante su SHA a través de Obtener commit, pero no se puede obtener por SHA mediante Git.

version.potentialMergeCommit.baseSha cadena

Punta de la rama base sobre la que se creó la fusión de prueba. Solo está presente cuando state es prepared. Puede ser más reciente que version.baseSha, y Origin no la actualiza si la rama base simplemente avanza.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/pulls/PULL_NUMBER' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"    }  }}

Crear solicitud de extracción

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Crea una solicitud de extracción de head a base.

Opcional: parent_pull_number apila este cambio sobre otra solicitud de extracción abierta o en borrador en el mismo repositorio.

Un title de más de 256 caracteres o un body de más de 65.536 caracteres devuelve InvalidArgument (HTTP 400). Ambos límites cuentan puntos de código Unicode.

Una head sin historial en común con base devuelve InvalidArgument (HTTP 400) y no crea nada. Si un push posterior deja la head de un pull request abierto sin relación con su base, Origin cierra el pull request y emite pull_request.closed; un push relacionado posterior no lo reabre.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

Cuerpo de la solicitud

title string Obligatorio

Título de la solicitud de extracción. Longitud máxima: 256 caracteres.

body string

Cuerpo/descripción de la solicitud de incorporación. Puede estar vacío. Longitud máxima: 65.536 caracteres.

head string Obligatorio

Nombre de la rama de origen (la cabecera del cambio). Debe resolverse en el repositorio en el momento de la llamada.

base string Obligatorio

Nombre de la rama de destino (en la que se fusiona el cambio). Debe indicar una rama que exista en el repositorio en el momento de la llamada. Un SHA de commit, un nombre de etiqueta o una rama que no exista devuelve InvalidArgument (HTTP 400).

draft boolean

Si es true, créalo como borrador. Si es false o se omite, créalo como abierto (listo para revisión).

parentPullRequest objeto

Padre opcional de la pila: otra solicitud de extracción abierta o en borrador en el mismo repositorio. Establezca exactamente un elemento. Un selector vacío, más de un elemento o clear devuelve InvalidArgument (HTTP 400).

parentPullRequest.number string

Número de la pull request principal dentro del repositorio.

parentPullRequest.id cadena

ID de la pull request principal, tal como se devuelve en id.

Campos de la respuesta

id string

Identificador de solicitud de extracción de Stable Origin.

number string

Número de pull request local del repositorio codificado como una cadena JSON.

state cadena

Estado de la solicitud de extracción: abierta o cerrada. Las solicitudes de extracción fusionadas están cerradas con merged establecido en true.

draft boolean

Si la solicitud de extracción es un borrador.

merged boolean

Indica si la solicitud de extracción se ha fusionado.

title string

Título de la solicitud de extracción.

body string

Cuerpo de la descripción de la solicitud de extracción.

head objeto

El lado de origen del cambio: lo que se está fusionando.

head.ref cadena

La referencia a la que apunta este lado, tal como la registra Origin.

head.sha cadena

SHA del commit más reciente de este lado en la última versión del cambio.

base objeto

El lado de destino del cambio: en lo que se integra.

base.ref string

La referencia a la que apunta este lado, tal como la registra Origin.

base.sha string

SHA del commit más reciente de este lado en la última versión del cambio.

author objeto

Actor público que abrió la solicitud de extracción.

author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id cadena

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre debe establecerse cuando la variante de usuario está presente.

author.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

author.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor administrado propio de Cherri Code.

author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

createdAt cadena

Marca de tiempo de creación de la pull request según RFC 3339.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización de la solicitud de extracción.

closedAt cadena

Marca de tiempo de cierre en formato RFC 3339; puede aparecer en solicitudes de extracción cerradas o fusionadas.

mergedAt cadena

Marca de tiempo de fusión en formato RFC 3339; puede aparecer en solicitudes de extracción fusionadas.

mergeCommitSha string

SHA del commit que la fusión escribió en la rama base. Se establece una vez que se fusiona la pull request y no está presente antes de ese momento. La vista previa anterior a la fusión corresponde a otro commit; consúltala mediante la referencia pull/<number>/merge con Obtener una referencia de Git.

additions entero

Líneas añadidas en la versión actual de la solicitud de extracción.

deletions entero

Líneas eliminadas en la versión actual de la solicitud de extracción.

changedFiles entero

Número de archivos modificados en la versión actual de la solicitud de extracción.

labels arreglo

Etiquetas asignadas actualmente a la solicitud de extracción, ordenadas por nombre. Vacío cuando no hay ninguna asignada.

labels[].id string

Identificador público de la etiqueta.

labels[].name string

Nombre de la etiqueta, único dentro del repositorio. Los nombres hacen referencia a la etiqueta en los endpoints de escritura.

labels[].color string

Color hexadecimal de seis caracteres sin # inicial.

labels[].description cadena

Descripción de la etiqueta. No se muestra si no tiene ninguna.

stack objeto

Pertenencia a la pila: la cadena de solicitudes de extracción dependientes a la que pertenece esta, cada una apilada sobre la que sirve de base. Ausente cuando la solicitud de extracción no forma parte de una pila.

stack.id cadena

Identificador estable de pila, compartido por todos los miembros de la pila. Pásalo como stackId a Enumerar solicitudes de incorporación de cambios para consultar los demás miembros.

stack.parentPullRequest objeto

El pull request sobre el que se apila este. No está presente en la raíz de la pila. Un padre fusionado sigue referenciado hasta que se cambia el destino del hijo o se le asigna un nuevo padre.

stack.parentPullRequest.id cadena

Identificador estable de Origin de la solicitud de extracción principal.

stack.parentPullRequest.number cadena

Número local en el repositorio de la solicitud de extracción principal, codificado como una cadena JSON.

stack.parentPullRequest.repository objeto

Repositorio al que pertenece el elemento padre, con los mismos campos id, name y owner que el repository de una ejecución de comprobación. Las pilas nunca abarcan varios repositorios, por lo que este siempre es el repositorio de la propia solicitud de extracción.

version objeto

Versión numerada actual de la solicitud de extracción y sus SHA de head/base.

version.number string

Número de versión monótona de la solicitud de extracción codificado como una cadena JSON.

version.headSha cadena

SHA de cabecera capturado por esta versión de la solicitud de extracción.

version.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

version.createdAt string

Marca de tiempo RFC 3339 para la creación de esta versión de la solicitud de extracción.

version.potentialMergeCommit objeto

La fusión de prueba de Origin para esta versión: un commit que fusiona su headSha con la punta de la rama base, junto con el grado de avance de su preparación. Está presente en todas las versiones. Describe únicamente esta versión y puede consultarse incluso después de que se fusione el pull request; es un commit distinto de mergeCommitSha. En un pull request apilado, la rama base es la rama del elemento padre, por lo que la fusión de prueba solo incluye los cambios de este pull request sobre esa rama.

version.potentialMergeCommit.state cadena

Hasta dónde llegó la preparación de la fusión de prueba. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que la fusión de prueba no está preparada: la versión está pendiente de preparación, o la preparación superó el tiempo de espera o falló. Cada versión nueva comienza con el valor unknown, por lo que nunca contiene el commit de otra versión. prepared significa que la fusión de prueba existe y que sha y baseSha la describen. merge_conflict significa que se produjo un conflicto al fusionar headSha con la punta de la rama base, por lo que no hay fusión de prueba; esta es la condición que Obtener la capacidad de fusión de la solicitud de extracción indica como impedimento merge_conflict, y al reabrir la solicitud de extracción se vuelve a preparar la versión. Trate cualquier valor no reconocido como unknown.

version.potentialMergeCommit.sha cadena

SHA del commit de fusión de prueba con dos padres: el primero es el baseSha de este objeto y el segundo, el headSha de la versión. Solo está presente cuando state es prepared. La referencia pull/{pullNumber}/merge apunta a este commit mientras esta versión sea la más reciente. Después, sigue pudiéndose consultar por SHA mediante Obtener un commit, pero no se puede recuperar por SHA mediante Git.

version.potentialMergeCommit.baseSha cadena

Punta de la rama base sobre la que se generó la fusión de prueba. Solo está presente cuando state es prepared. Puede ser más reciente que version.baseSha, y Origin no la actualiza cuando la rama base simplemente avanza.
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}'

Estructura de la respuesta:

{  "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"  }}

Actualizar solicitud de extracción

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Actualiza el título, el cuerpo, la rama base, la rama padre de la pila y/o el estado del ciclo de vida de una solicitud de extracción.

Los campos omitidos permanecen sin cambios. Los campos presentes se aplican en este orden: metadatos, luego reabrir/borrador/listo para revisión, luego la base, luego el padre de la pila y, por último, cerrar. El cierre se ejecuta al final para que un cambio de destino en la misma solicitud aún pueda ver un cambio abierto; la reapertura se ejecuta antes de cambiar la base para que se pueda cambiar el destino de una solicitud de incorporación cerrada; el padre de la pila se ejecuta después de la base para que un padre explícito prevalezca sobre el que se deriva de un cambio de base. Si falla un paso posterior, es posible que los pasos anteriores ya se hayan confirmado.

Un title de más de 256 caracteres, o un body de más de 65.536 caracteres, devuelve InvalidArgument (HTTP 400). Ambos límites cuentan puntos de código Unicode.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Cuerpo de la solicitud

title string

Nuevo título. Los campos omitidos permanecen sin cambios. Longitud máxima: 256 caracteres.

body cadena

Nuevo cuerpo / descripción. Una cadena vacía borra el cuerpo. Longitud máxima: 65.536 caracteres.

state cadena

"open" o "closed". "closed" cierra la solicitud de extracción. "open" sin draft: true la marca como lista para revisión, incluida la publicación de un borrador existente. Al reabrir una solicitud de extracción cuyo head cambió mientras estaba cerrada, se registra una nueva version y se envía pull_request.head_ref.pushed. El estado fusionado no se puede modificar; usa MergePullRequest.

draft boolean

true marca la solicitud de extracción como borrador; false la marca como lista para revisión (y la reabre si actualmente está cerrada, lo que puede registrar una nueva version). Se ignora cuando state es "closed".

base string

Nueva rama base. Cambia el destino de la solicitud de extracción y puede actualizar las relaciones de parentesco de la pila cuando la nueva base sea la rama principal de otro cambio (o la rama predeterminada). Debe especificar una rama que exista en el repositorio en el momento de la llamada; un SHA de commit, un nombre de etiqueta o una rama inexistente devuelve InvalidArgument (HTTP 400).

parentPullRequest objeto

Edición del padre de la pila. Establezca exactamente un miembro: number o id apilan esta solicitud de extracción en ese padre, reemplazando cualquier padre actual, y clear elimina el padre. Omita el campo para dejar la pila sin cambios. Un selector vacío, clear: false o más de un miembro devuelve InvalidArgument (HTTP 400). Esto es solo una asociación: no se reescribe ninguna rama y base solo se vuelve a dirigir si usted también lo envía. Origin lo aplica después de base, por lo que un padre explícito prevalece sobre el que se deriva de un cambio de base.

parentPullRequest.number cadena

Número de la pull request principal dentro del repositorio.

parentPullRequest.id string

ID de la pull request principal, tal como se devuelve en id.

parentPullRequest.clear boolean

Elimina el padre actual de la pila. Solo se acepta true.

Campos de respuesta

id string

Identificador de solicitud de extracción de Stable Origin.

number string

Número de pull request local del repositorio codificado como una cadena JSON.

state cadena

Estado de la solicitud de extracción: abierta o cerrada. Las solicitudes de extracción fusionadas están cerradas y tienen el valor «merged» establecido en true.

draft boolean

Indica si la solicitud de extracción está en borrador.

merged booleano

Indica si la solicitud de extracción se ha fusionado.

title string

Título de la solicitud de extracción.

body cadena

Cuerpo de la descripción de la solicitud de extracción.

head objeto

El lado de origen del cambio: lo que se está incorporando.

head.ref string

La referencia a la que apunta este lado, tal como la registra Origin.

head.sha string

SHA del commit más reciente de este lado en la última versión del cambio.

base objeto

El lado de destino del cambio: en lo que se fusiona.

base.ref string

La referencia a la que apunta este lado, según la registra Origin.

base.sha string

SHA del commit en la punta de este lado en la versión más reciente del cambio.

author objeto

Actor público que abrió la solicitud de extracción.

author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

author.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Identificador del perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; se omite en caso contrario.

author.app objeto

Variante de la app del actor. Se establece cuando una app realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el caso de los actores administrados propios de Cherri Code.

author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

createdAt string

Marca de tiempo RFC 3339 de creación de la solicitud de extracción.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización de la solicitud de extracción.

closedAt cadena

Marca de tiempo de cierre en formato RFC 3339; puede aparecer en pull requests cerradas o fusionadas.

mergedAt string

Marca de tiempo de fusión según RFC 3339; puede aparecer en solicitudes de extracción fusionadas.

mergeCommitSha string

SHA del commit que la fusión escribió en la rama base. Se establece una vez que se fusiona la solicitud de extracción y no está disponible antes. La vista previa anterior a la fusión corresponde a un commit diferente; consúltalo mediante la referencia pull/<number>/merge con Obtener una referencia de Git.

additions entero

Líneas añadidas en la versión actual de la solicitud de extracción.

deletions entero

Líneas eliminadas en la versión actual de la solicitud de extracción.

changedFiles entero

Número de archivos cambiados en la versión actual de la solicitud de extracción.

labels arreglo

Etiquetas actualmente asignadas a la solicitud de extracción, ordenadas por nombre. Vacío cuando no hay ninguna asignada.

labels[].id string

Identificador público de la etiqueta.

labels[].name string

Nombre de la etiqueta, único dentro del repositorio. Los nombres se refieren a la etiqueta en los endpoints de escritura.

labels[].color string

Color hexadecimal de seis caracteres sin # al inicio.

labels[].description string

Descripción de la etiqueta. Se omite cuando la etiqueta no tiene ninguna.

stack objeto

Membresía de la pila: la cadena de pull requests dependientes a la que pertenece esta, cada una apilada sobre aquella en la que se basa. Ausente cuando la pull request no forma parte de una pila.

stack.id cadena

Identificador estable de la pila, compartido por todos sus miembros. Pásalo como stackId a List Pull Requests para consultar a los demás miembros.

stack.parentPullRequest objeto

La solicitud de incorporación de cambios de la que depende esta. No aparece en la raíz de la pila. Un elemento principal fusionado sigue referenciado hasta que el elemento secundario cambie de destino o de elemento principal.

stack.parentPullRequest.id string

Identificador estable de Origin de la solicitud de extracción principal.

stack.parentPullRequest.number string

Número local del pull request padre en el repositorio, codificado como una cadena JSON.

stack.parentPullRequest.repository objeto

Repositorio al que pertenece el elemento padre, con los mismos campos id, name y owner que el repository de una ejecución de comprobación. Los stacks nunca abarcan varios repositorios, por lo que este siempre es el repositorio de la propia solicitud de incorporación de cambios.

version objeto

Versión numerada actual de la solicitud de extracción y sus SHA de head/base.

version.number cadena

Número de versión monotónico de la solicitud de extracción codificado como una cadena JSON.

version.headSha cadena

SHA de cabecera capturado por esta versión de la solicitud de extracción.

version.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

version.createdAt string

Marca de tiempo RFC 3339 para la creación de esta versión de la solicitud de extracción.

version.potentialMergeCommit objeto

La fusión de prueba de Origin para esta versión: un commit que fusiona su headSha con la punta de la rama base, junto con el estado de su preparación. Está presente en todas las versiones. Describe solo esta versión y sigue siendo consultable después de que se fusione la solicitud de extracción; es un commit distinto de mergeCommitSha. En una solicitud de extracción apilada, la rama base es la rama del padre, por lo que la fusión de prueba solo incluye los cambios de esta solicitud de extracción sobre ella.

version.potentialMergeCommit.state cadena

Hasta qué punto avanzó la preparación de la fusión de prueba. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que la fusión de prueba no está preparada: la versión está a la espera de prepararse, o la preparación falló o agotó el tiempo de espera. Toda versión nueva comienza como unknown, por lo que nunca incluye el commit de otra versión. prepared significa que la fusión de prueba existe y que sha y baseSha la describen. merge_conflict significa que fusionar headSha sobre la punta de la rama base generó un conflicto, por lo que no hay fusión de prueba; es la condición que Get Pull Request Mergeability informa como un bloqueo merge_conflict, y al reabrir la pull request se vuelve a preparar la versión. Trata cualquier valor no reconocido como unknown.

version.potentialMergeCommit.sha cadena

SHA del commit de prueba de fusión con dos padres: su primer padre es el baseSha de este objeto y su segundo padre es el headSha de la versión. Solo está presente cuando state es prepared. La referencia pull/{pullNumber}/merge apunta a ese commit mientras esta versión sea la más reciente. Después, se puede consultar por SHA mediante Obtener commit, pero no se puede obtener por SHA a través de Git.

version.potentialMergeCommit.baseSha cadena

Punta de la rama base sobre la que se creó la fusión de prueba. Solo está presente cuando state es prepared. Puede ser más reciente que version.baseSha, y Origin no la actualiza cuando la rama base simplemente avanza.
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"}'

Estructura de la respuesta:

{  "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 comentarios de solicitudes de extracción

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/comments
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Enumera todos los comentarios de una solicitud de extracción en orden cronológico, opcionalmente acotados a una ventana de tiempo de creación. Cada comentario incluye su hilo completo: id, ancla del diff y estado de resolución. Agrupa la respuesta plana por thread.id sin necesidad de una segunda solicitud.

Los tokens de página incorporan los filtros con los que se emitieron, por lo que se rechaza un token reutilizado con filtros distintos; reinicia la paginación cuando cambie un filtro.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Parámetros de consulta

pageSize entero

Número máximo de comentarios a devolver. Predeterminado: 30; máximo: 100.

pageToken string

Cherri Code opaco del nextPageToken de una respuesta anterior. Omítalo en la primera página. El pageSize en una solicitud posterior se aplica a esa página; omítalo para conservar el tamaño de página anterior.

since string

Límite inferior inclusivo opcional para la fecha de creación del comentario, expresado como una marca de tiempo RFC 3339, por ejemplo, 2026-08-01T00:00:00Z. Devuelve únicamente los comentarios creados en ese instante o después. Una marca de tiempo mal formada devuelve InvalidArgument (HTTP 400).

until string

Límite superior inclusivo opcional para la hora de creación del comentario, en el mismo formato RFC 3339 que since. Devuelve solo los comentarios creados en ese instante o antes. Una marca de tiempo no válida devuelve InvalidArgument (HTTP 400).

threadIds array

IDs de hilo opcionales que restringen la lista a los comentarios de esos hilos. Omítalos para devolver todos los comentarios de la solicitud de extracción. Los duplicados se ignoran, por lo que el límite de 20 se aplica a los IDs distintos. Una lista que supere ese límite o un ID vacío devuelve InvalidArgument (HTTP 400).

Campos de respuesta

comments array

Comentarios generales y en línea visibles en una sola lista cronológica; agrúpalos por thread.id.

comments[].id string

Identificador estable del comentario de la solicitud de extracción.

comments[].thread objeto

El hilo al que pertenece este comentario, incluida su ancla de diff y su estado de resolución.

comments[].thread.id string

Identificador estable del hilo. Agrupa los comentarios de una misma discusión por este valor.

comments[].thread.version objeto

Versión de la solicitud de extracción contra la que se presentó el hilo, incluidos los SHA de head y base. El ancla está fijada a esta versión y no se desplaza a medida que la solicitud de extracción recibe nuevas versiones.

comments[].thread.version.number string

Número de versión monotónica de la solicitud de extracción codificada como una cadena JSON.

comments[].thread.version.headSha cadena

SHA de HEAD capturado por esta versión de la solicitud de incorporación de cambios.

comments[].thread.version.baseSha cadena

SHA base capturado por esta versión de la solicitud de extracción.

comments[].thread.path string

Ruta del archivo del ancla de diferencias del hilo. Vacía para los hilos de discusión general.

comments[].thread.side string

Lado del diff al que pertenece el ancla. Valores permitidos: left, right. No se establece para hilos de discusión general.

comments[].thread.startLine entero

Primera línea del rango anclado en la versión side del archivo. 0 para hilos a nivel de archivo y de discusión general.

comments[].thread.endLine entero

Última línea inclusiva del rango anclado. 0 cuando el ancla está en una sola línea o no tiene rango de líneas.

comments[].thread.resolvedAt string

Marca de tiempo RFC 3339 de cuándo se resolvió el hilo. No establecido mientras el hilo esté abierto.

comments[].thread.createdAt string

Marca de tiempo RFC 3339 de creación del hilo.

comments[].thread.updatedAt string

Marca de tiempo RFC 3339 de la última actualización del hilo.

comments[].body string

Texto del comentario.

comments[].author objeto

Actor público que redactó el comentario.

comments[].author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

comments[].author.user.id cadena

Identificador público del usuario.

comments[].author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

comments[].author.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

comments[].author.user.handle string

Identificador de perfil reclamado del usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

comments[].author.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

comments[].author.app.id string

Identificador público de la aplicación.

comments[].author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

comments[].author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

comments[].author.serviceAccount.id string

Identificador público de la cuenta de servicio.

comments[].createdAt cadena

Marca de tiempo RFC 3339 de creación del comentario.

comments[].updatedAt string

Marca de tiempo RFC 3339 de la última edición del comentario.

pullRequest objeto

Se incluye Container PullRequestReference junto con la página de comentarios.

pullRequest.id string

Identificador estable de la solicitud de extracción.

pullRequest.number cadena

Número de pull request local del repositorio codificado como una cadena JSON.

pullRequest.repository objeto

Referencia del contenedor del repositorio para la solicitud de extracción.

pullRequest.repository.id string

Identificador del repositorio en una referencia de contenedor.

pullRequest.repository.name string

Nombre del repositorio en una referencia de contenedor.

pullRequest.repository.owner objeto

Referencia del propietario del repositorio.

pullRequest.repository.owner.slug string

Slug del propietario visible en la URL, utilizado junto con el ID del propietario para identificar al propietario del repositorio.

pullRequest.repository.owner.id string

Identificador del propietario de origen.

pullRequest.repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite si se desconoce.

nextPageToken string

Cherri Code opaco para la página siguiente; vacío cuando no hay más comentarios.
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'

Estructura de la respuesta:

{  "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"      }    }  }}

Obtener comentario de pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Devuelve un único comentario de pull request por su identificador estable de Origin. Un comentario que esté fuera del repositorio autorizado, o un comentario de revisión pendiente que no sea visible para quien realiza la llamada, devuelve 404.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

commentId string Obligatorio

Campos de respuesta

id string

Identificador estable del comentario de pull request.

thread object

El hilo al que pertenece este comentario, incluida su ancla de diff y su estado de resolución.

thread.id string

Identidad estable del hilo. Agrupa los comentarios de una discusión por este valor.

thread.version object

Versión de la solicitud de extracción contra la que se presentó el hilo, incluidos los SHA de su head y base. El ancla está fijada a esta versión y no se mueve a medida que la solicitud de extracción gana versiones.

thread.version.number string

Número de versión monotónica de la solicitud de extracción codificado como una cadena JSON.

thread.version.headSha string

SHA de cabecera capturado en esta versión de la solicitud de extracción.

thread.version.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

thread.path string

Ruta del archivo del ancla del diff del hilo. Vacía para los hilos de discusión general.

thread.side string

Lado del diff del ancla. Valores permitidos: left, right. No establecido para los hilos de discusión general.

thread.startLine entero

Primera línea del rango anclado en la versión side del archivo. 0 para hilos a nivel de archivo y de discusión general.

thread.endLine integer

Última línea incluida del rango anclado. 0 cuando el ancla abarca una sola línea o no tiene rango de líneas.

thread.resolvedAt string

Marca de tiempo RFC 3339 en que se resolvió el hilo. No está establecida mientras el hilo esté abierto.

thread.createdAt string

Marca de tiempo de creación del hilo RFC 3339.

thread.updatedAt string

Marca de tiempo RFC 3339 de la última actualización del hilo.

body string

Texto del comentario.

author object

Actor público que creó el comentario.

author.user object

Variante de usuario del actor. Se establece cuando un usuario realiza la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

author.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Alias de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

author.app object

Variante de la app del actor. Se establece cuando una app realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado propio de Cherri Code.

author.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

createdAt string

Marca de tiempo RFC 3339 de creación del comentario.

updatedAt string

Marca de tiempo RFC 3339 de la última edición del comentario.
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'

Estructura de la respuesta:

{  "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"}

Eliminar comentario de pull request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Elimina un comentario de pull request mediante su ID estable de Origin. El cuerpo de respuesta está vacío.

El autor del comentario siempre puede eliminarlo. Cualquier otra persona que realice la llamada debe tener acceso de escritura al repositorio, que concede repository:contents:write; de lo contrario, recibe PermissionDenied (HTTP 403). Eliminar el último comentario de un hilo elimina el hilo; eliminar cualquier otro comentario, incluido el que inicia el hilo, mantiene el hilo y sus comentarios restantes. La resolución del hilo no es un requisito. Las reacciones al comentario y su historial de ediciones se eliminan junto con él.

Un ID desconocido, un comentario ya eliminado y un comentario de otro repositorio devuelven 404. Un ID con formato incorrecto devuelve InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

nombre del repositorio, único dentro de la entidad propietaria.

commentId cadena Obligatorio

Campo de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

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'

Respuesta:

204 No Content

Crear comentario en un pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/comments
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Crea un comentario en una solicitud de extracción (pull request) de Origin. El comentario se dirige exactamente a una de cuatro opciones: threadId responde a un hilo existente, ya sea de discusión general o en línea; inline abre un nuevo hilo anclado a un rango de líneas en el diff de la versión de la solicitud de extracción; file abre un nuevo hilo sobre un archivo completo en ese diff; no proporcionar ninguno de ellos abre un nuevo hilo de discusión general. Los cuerpos con más de 65.536 caracteres se rechazan con InvalidArgument (HTTP 400).

Un ancla inline debe hacer referencia al diff de la versión. El path debe formar parte de ese diff, y el side debe tener contenido allí, por lo que anclar left en un archivo añadido o right en un archivo eliminado se rechaza con InvalidArgument (HTTP 400). Cualquier línea de un archivo modificado sirve como ancla, y el rango no está restringido a los hunks del diff. El rango debe encajar en el archivo del lado anclado, que left lee en el commit base y right en el head: un rango que sobrepase la última línea se rechaza con InvalidArgument (HTTP 400). Origin nunca recurre a un comentario de discusión general cuando un ancla es inválido.

Un ancla file solo contiene la ruta. Origin determina el lado según el tipo de cambio del archivo: usa la versión base para los archivos eliminados y la versión head en los demás casos, y lo devuelve en thread.side. En caso de eliminación, envíe la ruta del archivo eliminado; para cualquier otro cambio, envíe la ruta head. Se rechaza una ruta que no esté incluida en el diff con InvalidArgument (HTTP 400); también se rechaza la ruta de origen de un archivo renombrado antes del cambio de nombre.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Cuerpo de la solicitud

body string Obligatorio

Texto del comentario. Longitud máxima: 65.536 caracteres, contados como puntos de código Unicode.

threadId string

ID de un hilo existente al que responder. Omita para abrir un hilo nuevo. No se puede combinar con versionNumber.

inline object

Ancla de diff para un nuevo hilo en línea. No se puede combinar con threadId.

inline.path string Obligatorio

Ruta del archivo en el diff de la versión del pull request.

inline.side string Obligatorio

Lado del diff donde se ancla. Valores permitidos: left para la versión base del archivo, right para la versión más reciente.

inline.startLine entero Obligatorio

Primera línea, numerada desde 1, del rango anclado en la versión side del archivo. El rango no debe extenderse más allá del final de ese archivo.

inline.endLine integer

Última línea inclusiva del rango anclado. Debe ser mayor o igual que startLine. Omítala para un ancla de una sola línea.

file object

Ancla para un nuevo hilo a nivel de archivo sobre un archivo completo en el diff de la versión de la solicitud de extracción. No se puede combinar con threadId ni con inline.

file.path string Obligatorio

Ruta del archivo en el diff de la versión del pull request: la ruta eliminada para una eliminación, la ruta del head en caso contrario.

versionNumber string

Número de versión del pull request contra el que presentar un nuevo hilo. 0 o sin establecer significa la versión más reciente en el momento de la llamada. Solo tiene sentido para hilos nuevos.

Campos de respuesta

id string

Identificador estable del comentario de la solicitud de extracción.

thread object

El hilo al que pertenece este comentario. Una respuesta solo lleva el id del hilo, y un nuevo hilo de discusión general lleva el id y las marcas de tiempo; un nuevo hilo en línea lleva el ancla completa. Lee Get Pull Request Comment o List Pull Request Comments para ver el estado completo del hilo.

thread.id string

Identidad estable del hilo. Agrupa los comentarios de una discusión según este valor.

thread.version object

Versión de la solicitud de extracción contra la que se abrió el hilo, incluidos los SHA de head y base. El ancla queda fija en esta versión y no cambia a medida que la solicitud de extracción acumula versiones.

thread.version.number string

Número de versión monotónica del pull request, codificada como una cadena JSON.

thread.version.headSha string

SHA de la cabecera capturada por esta versión del pull request.

thread.version.baseSha string

SHA base capturada por esta versión de la solicitud de extracción.

thread.path string

Ruta del archivo del ancla del diff del hilo. Vacía para hilos de discusión general.

thread.side string

Lado del diff donde se ancla. Valores permitidos: left, right. No establecido para los hilos de discusión general.

thread.startLine integer

Primera línea del rango anclado en la versión side del archivo. 0 para hilos a nivel de archivo y de discusión general.

thread.endLine entero

Última línea incluida del rango anclado. 0 cuando el ancla abarca una sola línea o no tiene rango de líneas.

thread.resolvedAt string

Sello de tiempo RFC 3339 de cuándo se resolvió el hilo. No establecido mientras el hilo esté abierto.

thread.createdAt string

Marca de tiempo RFC 3339 de creación del hilo.

thread.updatedAt string

Marca de tiempo RFC 3339 de la última actualización del hilo.

body string

Texto del comentario.

author object

Actor público que creó el comentario.

author.user object

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante "user" está presente.

author.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

author.app object

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no puede resolverse y en el actor gestionado de primera parte de Cherri Code.

author.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

createdAt string

Marca de tiempo RFC 3339 de creación del comentario.

updatedAt string

Marca de tiempo RFC 3339 de la última edición del comentario.
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?"}'

Estructura de la respuesta:

{  "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"}

Actualizar comentario de solicitud de extracción

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/comments/{commentId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Actualiza un comentario de un pull request mediante su id estable de Origin.

Reemplaza el cuerpo del comentario. El comentario debe pertenecer al repositorio indicado en la ruta, ser visible para el llamador y haber sido creado por ese mismo llamador. Los comentarios de otros repositorios y los comentarios ocultos pendientes de revisión devuelven 404; un comentario visible que pertenece a otro actor devuelve 403. Los cuerpos de más de 65.536 caracteres se rechazan con InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

commentId string Obligatorio

Cuerpo de la solicitud

body string Obligatorio

Texto de reemplazo del comentario. Longitud máxima: 65.536 caracteres, contados como puntos de código Unicode.

Campos de respuesta

id string

Identificador estable del comentario de la solicitud de extracción.

thread object

El hilo al que pertenece este comentario, incluida su ancla de diferencia y su estado de resolución.

thread.id string

Identidad estable del hilo. Agrupa los comentarios de una discusión según este valor.

thread.version object

Versión de la solicitud de extracción contra la que se creó el hilo, incluidos los SHA de sus ramas head y base. El ancla queda fijada a esta versión y no cambia a medida que la solicitud de extracción adquiere nuevas versiones.

thread.version.number string

Número de versión monótona del pull request codificado como cadena JSON.

thread.version.headSha string

SHA de cabecera capturado por esta versión de la solicitud de extracción.

thread.version.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

thread.path string

Ruta de archivo del ancla diff del hilo. Vacía para hilos de discusión general.

thread.side string

Lado del diff al que pertenece el ancla. Valores permitidos: left, right. No se establece para hilos de discusión general.

thread.startLine entero

Primera línea del rango anclado en la versión side del archivo. 0 para hilos a nivel de archivo y de discusión general.

thread.endLine entero

Última línea del rango anclado, incluida. 0 cuando el ancla es una sola línea o no tiene rango de líneas.

thread.resolvedAt string

Marca de tiempo RFC 3339 correspondiente al momento en que se resolvió el hilo. No se establece mientras el hilo esté abierto.

thread.createdAt string

Marca de tiempo RFC 3339 de creación del hilo.

thread.updatedAt string

Marca de tiempo RFC 3339 de la última actualización del hilo.

body string

Texto del comentario.

author object

Actor público que redactó el comentario.

author.user object

Variante de usuario del actor. Se establece cuando un usuario realiza la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante "user" está presente.

author.user.displayName string

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Está presente solo mientras ese perfil sea visible públicamente; en caso contrario, se omite.

author.app object

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

author.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

createdAt string

Marca de tiempo de creación del comentario (RFC 3339).

updatedAt string

Marca de tiempo RFC 3339 de la última edición del comentario.
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?"}'

Estructura de la respuesta:

{  "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"}

Actualizar el hilo del pull request

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/threads/{threadId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Resuelve o reabre un hilo de comentarios de una solicitud de incorporación de cambios y devuelve el estado actualizado del hilo. Resolver un hilo ya resuelto, o reabrir uno que ya está abierto, no tiene ningún efecto.

El hilo debe pertenecer al repositorio indicado en la ruta; un hilo almacenado en otro repositorio devuelve 404. Responder a un hilo resuelto con Create Pull Request Comment está permitido y no lo reabre.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

threadId string Obligatorio

ID estable del hilo de Origin.

Cuerpo de la solicitud

resolved boolean Obligatorio

Estado de resolución objetivo. true resuelve el hilo; false lo reabre.

Campos de respuesta

id string

Identidad estable del hilo. Agrupa los comentarios de una discusión por este valor.

version object

Versión del pull request contra la que se presentó el hilo, incluidos sus SHA del head y de la base. El ancla queda fijada a esta versión y no se mueve a medida que el pull request adquiere nuevas versiones.

version.number string

Número de versión monotónica del pull request codificado como cadena JSON.

version.headSha string

SHA del encabezado capturado por esta versión del pull request.

version.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

path string

Ruta del archivo del ancla del diff del hilo. Vacía para hilos de discusión general.

side string

Lado del diff donde se ancla. Valores permitidos: left, right. Sin establecer en los hilos de discusión general.

startLine entero

Primera línea del rango anclado en la versión side del archivo. 0 para threads a nivel de archivo y de discusión general.

endLine entero

Última línea del rango anclado, incluida. 0 when the anchor is a single line or has no line range.

resolvedAt string

Marca de tiempo RFC 3339 del momento en que se resolvió el hilo. No establecido mientras el hilo esté abierto.

createdAt string

Marca de tiempo RFC 3339 de creación del hilo.

updatedAt string

Marca de tiempo RFC 3339 de la última actualización del hilo.
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}'

Estructura de la respuesta:

{  "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 los commits de un pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/commits
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Enumera los commits de un pull request.

Devuelve los commits de la solicitud de incorporación de cambios como objetos Commit con datos limitados (sin stats). De forma predeterminada, se devuelven 30 resultados y el máximo es 100, con un máximo de 250 commits visibles en total. Un token de página fija la versión de la solicitud de incorporación de cambios y el cursor de commits; si un token ya no coincide con el head o la base actuales, se devuelve 400.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Parámetros de consulta

pageSize entero

Número máximo de commits a devolver. Por defecto es 30 cuando no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken cadena

Cherri Code opaco obtenido del next_page_token de una respuesta anterior. Vacío para la primera página. El token está vinculado al repositorio, la versión del pull request y el desplazamiento del commit. pageSize en una solicitud posterior se aplica a esa página; omítelo para mantener el tamaño de página anterior.

Campos de respuesta

commits array

Commits escasos sin estadísticas, con un máximo de 250 commits visibles en total.

commits[].sha string

SHA completo del commit.

commits[].commit object

Metadatos de objetos Git anidados por separado de las relaciones de repositorio de nivel superior.

commits[].commit.author object

Identidad del autor de Git registrada en el commit, no un objeto user de Origin.

commits[].commit.author.name string

Nombre registrado en la identidad del autor de Git.

commits[].commit.author.email string

Correo electrónico registrado en la identidad del autor de Git.

commits[].commit.author.date string

Fecha en formato RFC 3339 registrada en la identidad del autor de Git.

commits[].commit.committer object

Identidad del committer de Git registrada en el commit, no un objeto de usuario de Origin.

commits[].commit.committer.name string

Nombre registrado en la identidad de Git.

commits[].commit.committer.email string

Correo electrónico registrado en la identidad de Git.

commits[].commit.committer.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de zona horaria original de la firma de Git (p. ej., "2014-11-07T22:01:45+01:00").

commits[].commit.message string

Mensaje del commit.

commits[].commit.tree object

Tree al que hace referencia el commit.

commits[].commit.tree.sha string

SHA del árbol al que hace referencia el commit.

commits[].parents array

Referencias a commits padres, cada una con un SHA.

commits[].parents[].sha string

SHA del commit padre.

nextPageToken string

El token fija la versión del pull request y el cursor de commit; un token obsoleto con respecto al head o a la base actuales devuelve 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'

Estructura de la respuesta:

{  "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 archivos del pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/files
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Enumera los archivos modificados en una solicitud de extracción.

Devuelve el nombre del archivo, el estado, el recuento de líneas, el parche y, de forma opcional, el nombre del archivo anterior. De forma predeterminada, los resultados incluyen 30 archivos, con un máximo de 100. Un token de página fija la versión de la solicitud de incorporación de cambios y el cursor de archivos; un token que ya no coincide con el head o la base actuales devuelve 400.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

pullNumber string Obligatorio

Parámetros de consulta

pageSize entero

Número máximo de archivos modificados que se devuelven. El valor predeterminado es 30 si no se establece o es 0. Los valores superiores a 100 se limitan a 100.

pageToken string

Cherri Code opaco del next_page_token de una respuesta anterior. Vacío en la primera página. El token está vinculado al repositorio, a la versión del pull request y al cursor de archivos modificados. El pageSize de una solicitud posterior se aplica a esa página; omítelo para conservar el tamaño de página anterior.

Campos de respuesta

files array

Registros de archivos modificados de la versión actual del pull request.

files[].filename string

Ruta del archivo modificado de la solicitud de extracción.

files[].status string

Estado del cambio: añadido, eliminado, modificado, renombrado o copiado.

files[].additions entero

Se añadió el número de líneas del archivo.

files[].deletions entero

Número de líneas eliminadas del archivo.

files[].changes entero

Número total de líneas modificadas del archivo.

files[].patch cadena

Parche unificado para el archivo.

files[].previousFilename string

Ruta anterior cuando se cambió el nombre del archivo o se copió.

nextPageToken cadena

El token fija la versión de la pull request y el cursor del archivo; si el token está obsoleto respecto al head o la base actuales, devuelve 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'

Estructura de la respuesta:

{  "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 etiquetas de pull requests

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:readAuthInstallation tokenUser access token

Enumera todas las etiquetas asignadas a un pull request, ordenadas por nombre.

La respuesta incluye la lista completa de etiquetas asignadas, no una página de resultados, por lo que este endpoint no admite parámetros de paginación. Un pull request puede tener como máximo 100 etiquetas. Un pull request inexistente devuelve 404.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Campos de respuesta

labels array

Todas las etiquetas asignadas actualmente al pull request, ordenadas por nombre.

labels[].id string

Identificador público de la etiqueta.

labels[].name string

Nombre de la etiqueta, único dentro del repositorio. Los nombres identifican la etiqueta en los endpoints de escritura.

labels[].color string

Color hexadecimal de seis caracteres sin un # inicial.

labels[].description string

Descripción de la etiqueta. Se omite si la etiqueta no tiene descripción.
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'

Estructura de la respuesta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Establecer etiquetas del pull request

PUT/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Reemplaza todas las etiquetas asignadas al pull request por las etiquetas que especifique.

Una lista vacía elimina todas las etiquetas asignadas. Las etiquetas ya deben existir en el repositorio; un nombre desconocido o un pull request desconocido devuelve 404. Un pull request puede tener como máximo 100 etiquetas, por lo que indicar más de 100 devuelve FailedPrecondition (HTTP 400). La respuesta enumera las etiquetas asignadas después del reemplazo, ordenadas por nombre.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Cuerpo de la solicitud

labels array

Nombres de las etiquetas que se asignarán. Máximo 100. Una lista vacía elimina todas las etiquetas asignadas. Los nombres duplicados se ignoran.

Campos de respuesta

labels array

Etiquetas asignadas después del reemplazo, ordenadas por nombre. Cada entrada incluye id, name, color y 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"  ]}'

Estructura de la respuesta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Añadir etiquetas a un pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Añade etiquetas de repositorio existentes a un pull request.

Las etiquetas ya asignadas al pull request permanecen asignadas. Las etiquetas deben existir ya en el repositorio; un nombre desconocido o un pull request desconocido devuelve 404. La solicitud debe incluir entre 1 y 100 etiquetas, y un pull request puede tener como máximo 100 etiquetas en total, por lo que una solicitud que supere ese límite devuelve FailedPrecondition (HTTP 400). La respuesta enumera las etiquetas que indicó, no el conjunto completo del pull request; lea el conjunto completo con Listar etiquetas de pull requests.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Cuerpo de la solicitud

labels array Obligatorio

Nombres de las etiquetas que se añadirán. Máximo 100. Los nombres duplicados se ignoran.

Campos de respuesta

labels array

Etiquetas indicadas en la solicitud. Cada entrada incluye id, name, color y 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"  ]}'

Estructura de la respuesta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Eliminar todas las etiquetas de los pull requests

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Elimina todas las etiquetas de un pull request.

La solicitud se realiza correctamente cuando el pull request no tiene etiquetas. Un pull request desconocido devuelve 404. El cuerpo de la respuesta está vacío.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Campos de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

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'

Respuesta:

204 No Content

Eliminar etiqueta del pull request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/labels/{labelName}
Scoperepository:pull_requests:writeAuthInstallation tokenUser access token

Elimina una etiqueta de un pull request.

Si la etiqueta no está asignada al pull request, se devuelve un 404, al igual que si el pull request es desconocido. La respuesta incluye las etiquetas restantes del pull request, ordenadas por nombre.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

labelName string Obligatorio

Nombre de la etiqueta que se va a eliminar.

Campos de respuesta

labels array

Etiquetas restantes del pull request, ordenadas por nombre. Cada entrada incluye id, name, color y 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'

Estructura de la respuesta:

{  "labels": [    {      "id": "lbl_01k2ja2000e0080000000000m1",      "name": "bug",      "color": "d73a4a",      "description": "Something isn't working"    }  ]}

Fusionar pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/merge
Scoperepository:contents:writeAuthInstallation tokenUser access token

Fusiona una solicitud de incorporación de cambios en su rama base.

En el caso de un pull request apilado, fusiona todo el prefijo desde la raíz hasta el destino que termina en este número de pull, no solo este pull. Solo se admite en repositorios Origin nativos; se rechazan los repositorios replicados.

La fusión integra el commit de cabecera de la última version del pull request. Si la rama de cabecera ha avanzado más allá de ese commit, por ejemplo, porque se integraron cambios enviados mediante push que Origin aún no ha registrado como una nueva versión, la solicitud devuelve Aborted (HTTP 409 Conflict), la misma respuesta que para un expectedHeadSha obsoleto, y no se realiza ninguna fusión. Vuelve a intentarlo cuando Obtener un pull request indique la nueva cabecera en version.headSha.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Número del pull request que se va a fusionar. Cuando este pull request está apilado, la fusión incluye todos los pull requests desde la raíz de la pila hasta este número.

Cuerpo de la solicitud

expectedHeadSha string

Evita fusionar una referencia (head) que tu aplicación no haya visto: el SHA completo del commit (40 o 64 caracteres hexadecimales) que se espera sea la referencia actual del pull request. Si la referencia se ha movido, la fusión se rechaza con ABORTED (HTTP 409 Conflict) y no se realiza ninguna fusión. Los valores que no sean un SHA completo de commit se rechazan con InvalidArgument (HTTP 400). Omítelo para fusionar la referencia actual, sea la que sea. No se evalúa cuando el pull request ya está fusionado, en cuyo caso devuelve un éxito idempotente.

mergeMethod string

Cómo se integra el pull request. Valores permitidos: merge, que crea un commit de fusión, y squash, que crea un único commit squash. Un método que el repositorio no permita se rechazará con FailedPrecondition (HTTP 400), y cualquier otro valor con InvalidArgument (HTTP 400). Omítelo para usar el valor predeterminado del repositorio: un commit de fusión cuando el repositorio lo permita; en caso contrario, un squash; y un squash cuando la rama base requiera un historial lineal.

Campos de respuesta

mergeCommitSha string

SHA del commit que la fusión escribió en la rama base. La vista previa anterior a la fusión corresponde a un commit distinto, que se obtiene mediante la referencia pull/<number>/merge con Obtener referencia de Git.

mergedPullNumbers array

Números de pull request en forma de cadena JSON fusionados desde la raíz de la pila hasta el objetivo.

pullRequest object

PullRequest de destino tras la fusión; el tipo de respuesta declarado es el recurso completo, aunque el ejemplo esté abreviado.

pullRequest.id string

Identificador de solicitud de extracción de Stable Origin.

pullRequest.number string

Número de pull request local del repositorio codificado como una cadena JSON.

pullRequest.state string

Estado de la solicitud de extracción: abierta o cerrada. Las solicitudes de extracción fusionadas están cerradas y tienen el valor merged establecido en true.

pullRequest.draft booleano

Indica si la solicitud de extracción es un borrador.

pullRequest.merged boolean

Si la solicitud de extracción se ha fusionado.

pullRequest.title string

Título del pull request.

pullRequest.body string

Cuerpo de la descripción del pull request.

pullRequest.head objeto

El lado de origen del cambio: lo que se está fusionando.

pullRequest.head.ref string

La referencia a la que apunta este lado, según la registra Origin.

pullRequest.head.sha string

SHA del commit sugerido de este lado en la versión más reciente del cambio.

pullRequest.base objeto

El lado de destino del cambio — en lo que se fusiona.

pullRequest.base.ref string

La referencia a la que apunta este lado, según la registra Origin.

pullRequest.base.sha string

SHA del commit más reciente de este lado en la última versión del cambio.

pullRequest.author object

Actor público que abrió la solicitud de extracción.

pullRequest.author.user object

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

pullRequest.author.user.id string

Identificador público del usuario.

pullRequest.author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando está presente la variante "user".

pullRequest.author.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

pullRequest.author.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

pullRequest.author.app object

Variante de la app del actor. Se establece cuando una app realizó la acción.

pullRequest.author.app.id string

Identificador público de la app.

pullRequest.author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

pullRequest.author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

pullRequest.author.serviceAccount.id string

Identificador público de la cuenta de servicio.

pullRequest.createdAt string

Marca de tiempo RFC 3339 de creación de la solicitud de extracción.

pullRequest.updatedAt string

Marca de tiempo RFC 3339 de la última actualización del pull request.

pullRequest.closedAt string

Marca de tiempo de cierre en formato RFC 3339; puede aparecer en pull requests cerrados o fusionados.

pullRequest.mergedAt string

Marca de tiempo de fusión en formato RFC 3339; puede aparecer en solicitudes de extracción fusionadas.

pullRequest.mergeCommitSha string

SHA del commit que la fusión escribió en la rama base. Se establece una vez que se fusiona el pull request y está ausente antes. La vista previa previa a la fusión es un commit diferente; consúltela mediante la referencia pull/<number>/merge con Obtener una referencia de Git.

pullRequest.additions entero

Líneas añadidas en la versión actual de la pull request.

pullRequest.deletions entero

Líneas eliminadas en la versión actual de la solicitud de extracción.

pullRequest.changedFiles entero

Número de archivos modificados en la versión actual de la pull request.

pullRequest.labels array

Etiquetas asignadas actualmente a la solicitud de extracción, ordenadas por nombre. Vacía cuando no hay ninguna asignada.

pullRequest.labels[].id string

Identificador público de la etiqueta.

pullRequest.labels[].name string

Nombre de la etiqueta, único dentro del repositorio. Los nombres se refieren a la etiqueta en los endpoints de escritura.

pullRequest.labels[].color string

Color hexadecimal de seis caracteres sin el # inicial.

pullRequest.labels[].description string

Descripción de la etiqueta. No aparece si la etiqueta no tiene descripción.

pullRequest.stack objeto

Pertenencia a la pila: la cadena de solicitudes de extracción dependientes a la que pertenece esta, cada una apilada sobre la que la precede. Ausente cuando la solicitud de extracción no forma parte de una pila.

pullRequest.stack.id string

Identificador estable de la pila, compartido por todos sus miembros. Pásalo como stackId a Listar solicitudes de extracción para consultar los demás miembros.

pullRequest.stack.parentPullRequest object

La solicitud de incorporación de cambios sobre la que se apila esta. No aparece en la raíz de la pila. Un elemento principal fusionado sigue referenciado hasta que se cambia el destino del elemento secundario o se le asigna otro elemento principal.

pullRequest.stack.parentPullRequest.id string

Identificador de Origin estable del pull request principal.

pullRequest.stack.parentPullRequest.number cadena

Número local del repositorio del pull request principal, codificado como una cadena JSON.

pullRequest.stack.parentPullRequest.repository objeto

Repositorio al que pertenece el padre, con los mismos campos id, name y owner que el repository de una ejecución de comprobación. Las pilas nunca abarcan varios repositorios, por lo que este es siempre el propio repositorio de la solicitud de incorporación de cambios.

pullRequest.version object

Versión numerada actual del pull request y sus SHA de head/base.

pullRequest.version.number string

Número de versión monotónica de la solicitud de extracción codificada como una cadena JSON.

pullRequest.version.headSha string

SHA de la cabecera capturada por esta versión de la solicitud de incorporación de cambios.

pullRequest.version.baseSha string

SHA base capturada por esta versión de la solicitud de extracción.

pullRequest.version.createdAt string

Marca de tiempo RFC 3339 para la creación de esta versión de la solicitud de extracción.

pullRequest.version.potentialMergeCommit objeto

La fusión de prueba de Origin para esta versión: un commit que fusiona su headSha con la punta de la rama base, y el grado de avance de su preparación. Está presente en todas las versiones. Describe solo esta versión y puede seguir consultándose después de que se fusione la solicitud de extracción; es un commit distinto de mergeCommitSha. En una solicitud de extracción apilada, la rama base es la rama de la solicitud de extracción padre, por lo que la fusión de prueba solo abarca los cambios de esta solicitud de extracción sobre esa rama.

pullRequest.version.potentialMergeCommit.state string

Estado de preparación de la fusión de prueba. Valores permitidos: unknown, prepared, merge_conflict. unknown significa que la fusión de prueba aún no está preparada: la versión está esperando a que se prepare, o la preparación superó el tiempo de espera o falló. Cada nueva versión comienza con unknown, por lo que nunca conserva un commit de otra versión. prepared significa que la fusión de prueba existe y que sha y baseSha la describen. merge_conflict significa que se produjo un conflicto al fusionar headSha con la punta de la rama base, por lo que no hay fusión de prueba; es la condición que Obtener la posibilidad de fusionar un pull request indica como bloqueo merge_conflict, y al reabrir el pull request se prepara la versión de nuevo. Trata cualquier valor no reconocido como unknown.

pullRequest.version.potentialMergeCommit.sha string

SHA del commit de fusión de prueba con dos padres: el primer padre es el baseSha de este objeto y el segundo padre es el headSha de la versión. Solo está presente cuando state es prepared. La referencia pull/{pullNumber}/merge apunta a él mientras esta versión sea la más reciente. Después, se puede consultar por SHA mediante Obtener un commit, pero no se puede obtener por SHA a través de Git.

pullRequest.version.potentialMergeCommit.baseSha string

Último commit de la rama base sobre el que se creó la fusión de prueba. Solo está presente cuando state es prepared. Puede ser más reciente que pullRequest.version.baseSha, y Origin no lo actualiza si lo único que ocurre es que la rama base avanza.
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"}'

Estructura de la respuesta:

{  "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"    }  }}

Obtener la fusionabilidad de un 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.

Devuelve si el pull request se puede fusionar y, si no es posible, las condiciones que lo bloquean. El verdict se evalúa con las mismas condiciones que aplica Merge Pull Request, por lo que un verdict mergeable significa que una fusión sobre la misma cabecera debería completarse correctamente. En un pull request apilado, el verdict abarca todos los pull requests desde la raíz de la pila hasta este, y cada blocker indica el pull request al que pertenece.

Una pila con más de 200 pull request en total, incluidos los ancestros fusionados, devuelve FailedPrecondition (HTTP 400).

Esta operación está en versión preliminar y su forma puede cambiar mientras se estabiliza el contrato. Decodifica las respuestas tolerando campos y valores de enumeración desconocidos, trata un verdict no reconocido como blocked y renderiza blockers[].message cuando no reconozcas blockers[].kind.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

pullNumber string Obligatorio

Número de pull request local del repositorio.

Parámetros de consulta

expectedHeadSha cadena

Protección opcional: el SHA completo del commit, de 40 o 64 caracteres hexadecimales, que se espera que sea la cabecera actual del pull request. Si se establece y la cabecera evaluada es distinta, la solicitud devuelve Aborted (HTTP 409 Conflict) en lugar de un resultado. Un valor que no sea un SHA completo de commit devuelve InvalidArgument (HTTP 400).

Campos de respuesta

pullRequest objeto

El pull request al que se refiere el veredicto.

pullRequest.id cadena

Identificador estable del pull request.

pullRequest.number cadena

Número de pull request local del repositorio codificado como una cadena JSON.

pullRequest.repository objeto

Referencia del contenedor del repositorio para la solicitud de extracción.

pullRequest.repository.id cadena

Identificador del repositorio en una referencia de contenedor.

pullRequest.repository.name cadena

Nombre del repositorio en una referencia de container.

pullRequest.repository.owner objeto

Referencia del propietario del repositorio.

pullRequest.repository.owner.slug cadena

Slug del propietario apto para URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

pullRequest.repository.owner.id cadena

Identificador del propietario en Origin.

pullRequest.repository.owner.type cadena

Tipo de espacio de nombres del propietario. Disponible solo en la salida. Valores permitidos: team, user. Se omite si se desconoce.

verdict cadena

Respuesta global para cada pull request de evaluatedPullRequests. Valores permitidos: mergeable, que significa que fusionar pullRequest los integra todos, y blocked. Trata cualquier valor no reconocido como blocked.

blockers array

Todo lo que impide la fusión, ordenado según la pull request a la que pertenece, empezando por la raíz de la pila, y luego por tipo. Vacío cuando verdict es mergeable. Como máximo un bloqueador por pull request y por tipo, excepto required_checks, que incluye uno por estado, y rule_failure y ruleset_error, que incluyen uno por cada mensaje distinto.

blockers[].pullRequest objeto

Pull request de evaluatedPullRequests al que pertenece este blocker. Incluye los mismos campos que pullRequest.

blockers[].kind cadena

Categoría del bloqueador. 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. Con el tiempo se añaden nuevos tipos; un bloqueador cuyo tipo sea posterior a la versión de tu cliente se decodifica con kind sin establecer y sigue bloqueando.

blockers[].message cadena

Descripción legible para las personas del bloqueo y de cómo resolverlo. Nunca está vacía, por lo que se muestra cuando no se reconoce kind.

blockers[].requiredChecks objeto

Se establece en un blocker required_checks.

blockers[].requiredChecks.state cadena

Estado compartido por todas las comprobaciones de este bloqueador. Valores permitidos: missing, pending, failing, action_required.

blockers[].requiredChecks.checks array

Comprobaciones obligatorias en ese estado.

blockers[].requiredChecks.checks[].name cadena

Nombre que requiere la regla del repositorio.

blockers[].requiredChecks.checks[].owner objeto

Principal que debe reportar la comprobación, con las mismas variantes de actor que el actor de una ejecución de comprobación.

blockers[].requiredChecks.checks[].checkRun objeto

La ejecución de verificación en headSha que cumple este requisito, por referencia. Se omite si no se ha informado ninguna, caso en el que el estado es missing. Solo incluye id, name y checkSuite.id, porque esta operación se puede leer únicamente con repository:pull_requests:read, mientras que el estado, la conclusión, la salida y la URL de detalles de una ejecución necesitan repository:checks:read; consúltelos con Get Check Run.

blockers[].requiredApprovals objeto

Configúralo para un bloqueador required_approvals.

blockers[].requiredApprovals.requiredCount entero

Aprobaciones requeridas por las reglas del repositorio.

blockers[].requiredApprovals.approvedCount entero

Revisiones aprobatorias que actualmente cuentan para cumplir el requisito.

blockers[].codeownerApproval objeto

Configúralo con un bloqueador codeowner_approval.

blockers[].codeownerApproval.requirements array

Conjuntos del propietario que aún necesitan aprobación.

blockers[].codeownerApproval.requirements[].owners array

Owners del código; basta con que cualquiera de ellos cumpla el requisito.

blockers[].codeownerApproval.requirements[].paths array

Rutas modificadas que abarca este conjunto de propietarios.

blockers[].mergeConflict objeto

Se activa ante un bloqueador merge_conflict.

blockers[].mergeConflict.conflictedPaths array

Rutas que entran en conflicto con la rama base. Se muestran como máximo 100.

blockers[].mergeConflict.truncated booleano

Si hay más paths en conflicto de los que se enumeran.

blockers[].mergeConflict.inheritedFromDownstack booleano

Indica si el conflicto proviene de un pull request anterior a este en la pila, por lo que este pull request está a la espera de aquel en lugar de tener un conflicto propio.

blockers[].stackShape objeto

Se establece en un blocker invalid_stack.

blockers[].stackShape.reason cadena

Por qué no se puede evaluar la pila. Valores permitidos: partially_merged, cycle, missing_parent, cross_repository_parent, base_branch_missing.

blockers[].stackShape.relatedPullRequests array

Otros pull requests involucrados, cuando el motivo menciona alguno. Cada uno incluye los mismos campos que pullRequest.

evaluatedPullRequests array

Pull requests que se integrarían al fusionar pullRequest, empezando por la raíz de la pila y terminando con pullRequest. Los ancestros ya fusionados forman parte del historial y no se incluyen en la lista. Exactamente un elemento si el pull request no está apilado. Cada uno incluye los mismos campos que pullRequest.

headSha cadena

Commit de cabecera de pullRequest que se evaluó.

baseRef cadena

Rama en la que se fusionan los pull requests evaluados: la base de la raíz de la pila, no la base propia de este pull request cuando está apilado.

baseSha cadena

Commit de punta de baseRef en evaluatedAt. Un push posterior a baseRef puede cambiar el veredicto. Vacío cuando no se pudo determinar la rama base, por ejemplo en una pila no válida.

evaluatedAt cadena

Timestamp en formato RFC 3339 que indica cuándo se evaluó este resultado. Los cambios posteriores a ese momento no se reflejan; vuelve a consultar para incorporarlos.
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": "El número de reviews con aprobación es 0; se necesita 1. Solicita reviews y espera las aprobaciones necesarias.",      "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": "Las comprobaciones de estado obligatorias están pendientes. Espera a que finalicen o soluciona las que han fallado.",      "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 los revisores solicitados de un pull request

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Lista los usuarios y grupos a los que se les ha solicitado actualmente una revisión en un pull request.

Una solicitud directa se cancela cuando ese usuario envía una revisión, y una solicitud a un grupo se cancela cuando cualquier miembro actual del grupo la envía. Las revisiones en borrador sin enviar dejan la solicitud pendiente, y volver a solicitar una revisión después de un envío devuelve al revisor a esta lista. Los grupos sin un identificador público legible se omiten.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

pullNumber string Obligatorio

Número de pull request local del repositorio.

Campos de la respuesta

users array

Usuarios a los que se ha solicitado una revisión. Vacío si no hay ninguna pendiente.

users[].id string

Identificador de usuario codificado (user_…), el mismo formato que usa la API de organización.

users[].email string

Dirección de correo electrónico del usuario. Vacío si la cuenta no tiene ninguna.

users[].displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos con un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

users[].handle string

El identificador de perfil afirmado del usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; de lo contrario, se omite.

groups array

Grupos a los que se ha solicitado una revisión. Vacío si no hay ninguna pendiente.

groups[].id string

Identificador público del 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'

Estructura de la respuesta:

{  "users": [    {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  ],  "groups": [    {      "id": "grp_01k2ja2000e0080000000000n2"    }  ]}

Solicitar revisores del pull request

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Solicita revisiones a los usuarios y grupos indicados en un pull request y devuelve los revisores solicitados en esta llamada.

Los identificadores se resuelven respecto a los candidatos a revisor del repositorio por id público, correo electrónico del usuario o slug del grupo. Los nombres para mostrar no se resuelven. Un identificador desconocido o ambiguo devuelve InvalidArgument (HTTP 400) que nombra el identificador, y se requiere al menos una entrada no vacía en users o groups.

Volver a solicitar a un revisor ya solicitado actualiza la marca de tiempo de la solicitud, por lo que un revisor que ya había enviado una revisión vuelve a aparecer como pendiente. Un revisor que no es candidato del repositorio devuelve PermissionDenied (HTTP 403).

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

pullNumber string Obligatorio

Número de pull request local del repositorio.

Cuerpo de la solicitud

users array

Identificadores de usuario a solicitar. Cada entrada debe coincidir de forma única con un candidato de usuario del repositorio mediante el id público user_… o el correo electrónico.

groups array

Identificadores de grupo a solicitar. Cada entrada debe coincidir de forma única con un candidato a grupo del repositorio mediante el ID público grp_…, el slug de grupo calificado o el slug del grupo.

Campos de respuesta

users array

Usuarios solicitados en esta llamada.

users[].id string

Identificador de usuario codificado (user_…), con el mismo formato que utiliza la API de la organización.

users[].email string

Dirección de correo electrónico del usuario. Vacía cuando la cuenta no tiene ninguna.

users[].displayName string

Nombre para mostrar del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

users[].handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; se omite en caso contrario.

groups array

Grupos solicitados por esta llamada.

groups[].id string

Identificador público del 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"  ]}'

Estructura de la respuesta:

{  "users": [    {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  ],  "groups": [    {      "id": "grp_01k2ja2000e0080000000000n2"    }  ]}

Eliminar revisores solicitados de un pull request

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/requested_reviewers
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Elimina las revisiones solicitadas a los usuarios y grupos indicados en un pull request. El cuerpo de la respuesta está vacío.

Los identificadores se resuelven contra los candidatos a revisor del repositorio por id público, correo electrónico del usuario o slug del grupo. Los nombres para mostrar no se resuelven. Un identificador desconocido o ambiguo devuelve InvalidArgument (HTTP 400) indicando el identificador, y se requiere al menos una entrada no vacía entre users y groups.

Eliminar a un usuario o grupo que no tiene una revisión solicitada no tiene ningún efecto. Un identificador que ya no sea candidato a revisor se sigue aceptando si es un id público estable (user_… o grp_…), de modo que se puede quitar a un revisor que haya dejado el repositorio.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

pullNumber string Obligatorio

Número de pull request local del repositorio.

Cuerpo de la solicitud

users array

Identificadores de usuario que se van a eliminar. Cada entrada debe coincidir de forma única con un candidato a usuario del repositorio por id público user_… o por correo electrónico.

groups array

Identificadores de grupo que se van a eliminar. Cada entrada debe coincidir de forma única con un candidato a grupo del repositorio por id público grp_…, slug de grupo cualificado o slug de grupo.

Campos de la respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

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"  ]}'

Respuesta:

204 No Content

Listar revisiones de solicitudes de extracción

GET/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews
Scoperepository:pull_requests:reviews:readAuthInstallation tokenUser access token

Enumera las revisiones enviadas de una solicitud de extracción, ordenadas de forma ascendente por submitted_at. Se omiten las revisiones pendientes.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Parámetros de consulta

pageSize entero

Número máximo de reseñas a devolver. Por defecto 30; máximo 100.

pageToken string

Cherri Code opaco del nextPageToken de una respuesta anterior. Omítelo en la primera página. El pageSize de una solicitud posterior se aplica a esa página; omítelo para mantener el tamaño de página anterior.

Campos de respuesta

reviews matriz

Revisiones enviadas ordenadas por submittedAt en orden ascendente; se omiten los borradores no enviados.

reviews[].id string

Identificador estable de la revisión.

reviews[].author objeto

Actor público que redactó la reseña.

reviews[].author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

reviews[].author.user.id string

Identificador público del usuario.

reviews[].author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

reviews[].author.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

reviews[].author.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

reviews[].author.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

reviews[].author.app.id string

Identificador público de la aplicación.

reviews[].author.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

reviews[].author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

reviews[].author.serviceAccount.id string

Identificador público de la cuenta de servicio.

reviews[].verdict string

Decisión de revisión: approve, request_changes o comment.

reviews[].body string

Texto del resumen de la reseña.

reviews[].submittedAt string

Marca de tiempo de envío en formato RFC 3339; ausente para una revisión de borrador no enviada.

reviews[].pullRequestVersion objeto

Versión de la solicitud de extracción a la que corresponde la revisión.

reviews[].pullRequestVersion.number string

Número de versión monotónica de la solicitud de extracción codificado como una cadena JSON.

reviews[].pullRequestVersion.headSha string

SHA del HEAD capturado por esta versión de la solicitud de extracción.

reviews[].pullRequestVersion.baseSha string

SHA base capturada por esta versión de la solicitud de extracción.

reviews[].dismissal objeto

Se muestra después de que se descarta una revisión; las revisiones descartadas siguen visibles en las listas.

reviews[].dismissal.dismissedBy objeto

Figura pública que desestimó la reseña al quedar expuesta.

reviews[].dismissal.dismissedBy.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

reviews[].dismissal.dismissedBy.user.id cadena

Identificador público del usuario.

reviews[].dismissal.dismissedBy.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

reviews[].dismissal.dismissedBy.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

reviews[].dismissal.dismissedBy.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Presente solo mientras ese perfil sea visible públicamente; se omite en caso contrario.

reviews[].dismissal.dismissedBy.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

reviews[].dismissal.dismissedBy.app.id string

Identificador público de la aplicación.

reviews[].dismissal.dismissedBy.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y para el actor administrado propio de Cherri Code.

reviews[].dismissal.dismissedBy.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

reviews[].dismissal.dismissedBy.serviceAccount.id string

Identificador público de la cuenta de servicio.

reviews[].dismissal.dismissedAt string

Marca de tiempo de desestimación RFC 3339.

reviews[].dismissal.message string

Motivo de desestimación; la sustitución automática utiliza un mensaje generado por el servidor.

pullRequest objeto

El contenedor PullRequestReference se incluye junto con la página de revisiones.

pullRequest.id string

Identificador estable de la solicitud de extracción.

pullRequest.number cadena

Número de solicitud de incorporación de cambios local del repositorio codificado como una cadena JSON.

pullRequest.repository objeto

Referencia del contenedor del repositorio para la solicitud de extracción.

pullRequest.repository.id string

Identificador del repositorio en una referencia de contenedor.

pullRequest.repository.name string

Nombre del repositorio en una referencia de contenedor.

pullRequest.repository.owner objeto

Referencia del propietario del repositorio.

pullRequest.repository.owner.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

pullRequest.repository.owner.id string

Identificador del propietario del origen.

pullRequest.repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.

nextPageToken string

Token opaco para la página siguiente; vacío cuando no hay más reseñas.
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'

Estructura de la respuesta:

{  "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"      }    }  }}

Crear una revisión de solicitud de extracción

POST/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Crea y envía una revisión de una pull request, opcionalmente junto con sus comentarios en una única solicitud atómica. Cada comentario acepta los mismos destinos que acepta Crear comentario de pull request: comments[].inline para un rango de líneas, comments[].file para un archivo completo, comments[].threadId para una respuesta y ninguno de ellos para una discusión general.

La revisión se envía de inmediato. Una nueva revisión approve o request_changes sustituye la revisión de decisión activa previa del llamante en la misma solicitud de extracción, la cual queda descartada. Los autores de la solicitud de extracción no pueden usar approve en su propia solicitud de extracción. Falla con FAILED_PRECONDITION mientras el llamante tenga una revisión en borrador sin enviar en la solicitud de extracción.

Cuando se establece comments, cada ancla se valida con respecto al diff de la versión revisada antes de escribir nada, usando la misma comprobación de que el ancla esté dentro del diff que Create Pull Request Comment. Si falla un comentario, falla toda la solicitud con InvalidArgument (HTTP 400) y no se publica nada. Los comentarios se hacen visibles de forma atómica junto con la revisión: ningún comentario ni evento es observable hasta que se envía la revisión; entonces, cada comentario emite su propio webhook pull_request.comment.created, junto con el evento de la revisión.

La operación no incluye una clave de idempotencia, por lo que reintentar tras una falla de transporte ambigua puede crear una segunda revisión. Llame a List Pull Request Reviews antes de volver a intentarlo.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

Cuerpo de la solicitud

verdict string Obligatorio

La decisión de la revisión. Valores permitidos: PULL_REQUEST_REVIEW_VERDICT_UNSPECIFIED, approve, request_changes, comment.

body string

Resumen de la reseña en texto libre. Puede estar vacío.

versionNumber cadena

Número de versión de la solicitud de extracción a la que se aplica la revisión (véase PullRequestVersion.number). Omítala para revisar la versión más reciente en el momento de la llamada. Los comentarios se anclan a esta misma versión.

comments arreglo

Comentarios publicados de forma atómica con la revisión. Máximo 50 por solicitud.

comments[].body string Obligatorio

Texto del comentario. Debe contener al menos un carácter que no sea espacio en blanco.

comments[].inline objeto

Ancla del diff para un nuevo hilo en línea en el diff de la versión revisada. Misma estructura y validación que inline en Crear comentario de solicitud de extracción. No se puede combinar con comments[].threadId.

comments[].inline.path string Obligatorio

Ruta del archivo en el diff de la versión revisada.

comments[].inline.side string Obligatorio

Lado del diff al que corresponde el ancla. Valores permitidos: left para la versión base del archivo, right para la versión head.

comments[].inline.startLine entero Obligatorio

Primera línea (indexada desde 1) del rango anclado en la versión side del archivo. El rango no debe sobrepasar el final de ese archivo.

comments[].inline.endLine entero

Última línea (inclusiva) del rango anclado. Debe ser mayor o igual que startLine. Omítala para un ancla de una sola línea.

comments[].threadId string

Identificador del hilo existente en esta solicitud de extracción al que responder. La respuesta permanece oculta hasta que se publique la revisión. Omita comments[].inline, comments[].file y este campo para abrir un nuevo hilo de discusión general.

comments[].file objeto

Ancla para un nuevo hilo a nivel de archivo en un archivo completo del diff de la versión revisada. Misma estructura, derivación del lado y validación que file en Crear comentario de solicitud de extracción. No se puede combinar con comments[].inline ni comments[].threadId.

comments[].file.path string Obligatorio

Ruta del archivo en el diff de la versión revisada: la ruta eliminada en caso de eliminación; en caso contrario, la ruta del head.

Campos de la respuesta

id string

Identificador estable de la revisión.

author objeto

Actor público que redactó la reseña.

author.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

author.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Identificador de perfil declarado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

author.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

author.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

verdict string

Decisión de la revisión: aprobar, solicitar_cambios o comentar.

body string

Texto resumido de la reseña.

submittedAt cadena

Marca de tiempo de envío RFC 3339; ausente para una revisión de borrador no enviada.

pullRequestVersion objeto

Versión de la solicitud de extracción a la que se aplica la revisión.

pullRequestVersion.number string

Número de versión monotónica de la solicitud de extracción codificado como una cadena JSON.

pullRequestVersion.headSha string

SHA de cabecera capturado por esta versión de la solicitud de extracción.

pullRequestVersion.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

dismissal objeto

Se muestra después de que se descarta una revisión; las revisiones descartadas siguen siendo visibles en los listados.

dismissal.dismissedBy object

Figura pública que desestimó la reseña cuando quedó expuesto.

dismissal.dismissedBy.user objeto

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

dismissal.dismissedBy.user.id string

Identificador público del usuario.

dismissal.dismissedBy.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

dismissal.dismissedBy.user.displayName string

Nombre visible del usuario: el nombre y el apellido de la cuenta unidos por un espacio, el mismo que muestra el producto. Se omite cuando la cuenta no tiene nombre.

dismissal.dismissedBy.user.handle string

Identificador de perfil declarado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; en caso contrario, se omite.

dismissal.dismissedBy.app objeto

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

dismissal.dismissedBy.app.id string

Identificador público de la aplicación.

dismissal.dismissedBy.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando la aplicación no se puede resolver y en el actor gestionado de primera parte de Cherri Code.

dismissal.dismissedBy.serviceAccount objeto

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

dismissal.dismissedBy.serviceAccount.id string

Identificador público de la cuenta de servicio.

dismissal.dismissedAt cadena

Marca de tiempo de desestimación RFC 3339.

dismissal.message cadena

Motivo de desestimación; la sustitución automática utiliza un mensaje generado por el 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"}'

Estructura de la respuesta:

{  "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"  }}

Actualizar revisión de solicitud de incorporación de cambios

PATCH/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews/{reviewId}
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Actualiza el cuerpo de una revisión. Solo el autor de la revisión puede actualizarla; quienes realicen otras llamadas recibirán PERMISSION_DENIED. Una revisión que no pertenezca a la pull request indicada devuelve NOT_FOUND.

Las revisiones en borrador sin enviar también pueden actualizarse; la respuesta de un borrador no tiene submitted_at.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

reviewId string Obligatorio

Cuerpo de la solicitud

body string Obligatorio

Texto de resumen de revisión de reemplazo; reemplaza por completo el cuerpo anterior. Debe contener un carácter que no sea un espacio en blanco; de lo contrario, INVALID_ARGUMENT.

Campos de respuesta

id string

Identificador estable de la revisión.

author object

Actor público que redactó la reseña.

author.user object

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id string

Identificador público del usuario.

author.user.email cadena

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

author.user.displayName cadena

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio; es el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; de lo contrario, se omite.

author.app object

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

El nombre visible registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor gestionado de primera parte de Cherri Code.

author.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

verdict string

Veredicto de la revisión: aprobar, solicitar_cambios o comentar.

body cadena

Texto del resumen de la reseña.

submittedAt cadena

Marca de tiempo de envío RFC 3339; ausente para una revisión de borrador no enviada.

pullRequestVersion object

Versión de la solicitud de extracción a la que corresponde la revisión.

pullRequestVersion.number string

Número de versión monotónica de la pull request codificada como una cadena JSON.

pullRequestVersion.headSha string

SHA de cabecera capturado por esta versión de la solicitud de extracción.

pullRequestVersion.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

dismissal object

Presente después de que se descarta una revisión; las revisiones descartadas siguen siendo visibles en las listas.

dismissal.dismissedBy object

Actor público que descartó la reseña cuando fue expuesto.

dismissal.dismissedBy.user object

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

dismissal.dismissedBy.user.id cadena

Identificador público del usuario.

dismissal.dismissedBy.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando la variante de usuario está presente.

dismissal.dismissedBy.user.displayName cadena

Nombre para mostrar del usuario: el nombre y el apellido de la cuenta unidos por un espacio; es el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

dismissal.dismissedBy.user.handle string

Identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; de lo contrario, se omite.

dismissal.dismissedBy.app object

Variante de la aplicación del actor. Se establece cuando una aplicación realizó la acción.

dismissal.dismissedBy.app.id string

Identificador público de la aplicación.

dismissal.dismissedBy.app.displayName cadena

El nombre visible registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor propio administrado por Cherri Code.

dismissal.dismissedBy.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

dismissal.dismissedBy.serviceAccount.id string

Identificador público de la cuenta de servicio.

dismissal.dismissedAt cadena

Marca de tiempo RFC 3339 de desestimación.

dismissal.message string

Motivo de la desestimación; la sustitución automática utiliza un mensaje generado por el 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."}'

Estructura de la respuesta:

{  "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 revisión de pull request

PUT/v1/origin/repos/{ownerSlug}/{repoName}/pulls/{pullNumber}/reviews/{reviewId}/dismissals
Scoperepository:pull_requests:reviews:writeAuthInstallation tokenUser access token

Descarta una revisión enviada para que su veredicto deje de contarse en el estado de revisión de la solicitud de extracción. La revisión en sí se conserva y sigue apareciendo en ListPullRequestReviews, con dismissal establecido.

Para descartar una revisión no es necesario haberla creado; basta con tener permiso de escritura en las revisiones de pull request del repositorio.

Solo se pueden descartar las revisiones approve y request_changes, y solo una vez: una revisión comment, una revisión en borrador sin enviar o una revisión ya descartada devuelve FAILED_PRECONDITION, y repetir la llamada mantiene vigente el primer descarte. Una revisión que no pertenece al pull request indicado devuelve NOT_FOUND.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único para la entidad propietaria.

pullNumber string Obligatorio

reviewId string Obligatorio

Identificador de revisión de Stable Origin, tal como lo devuelve ListPullRequestReviews.

Cuerpo de la solicitud

message string Obligatorio

Motivo registrado con la desestimación. Debe contener al menos un carácter que no sea un espacio en blanco; de lo contrario, INVALID_ARGUMENT.

Campos de respuesta

id string

Identificador estable de la revisión.

author object

Actor público que escribió la reseña.

author.user object

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

author.user.id string

Identificador público del usuario.

author.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando está presente la variante de usuario.

author.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

author.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; de lo contrario, se omite.

author.app object

Variante de la app del actor. Se establece cuando una app realizó la acción.

author.app.id string

Identificador público de la aplicación.

author.app.displayName string

El nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el caso del actor administrado de primera parte de Cherri Code.

author.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

author.serviceAccount.id string

Identificador público de la cuenta de servicio.

verdict string

Veredicto de la revisión: aprobar, solicitar_cambios o comentar.

body string

Texto del resumen de la reseña.

submittedAt string

Marca de tiempo de envío RFC 3339; ausente para una revisión de borrador no enviada.

pullRequestVersion object

Versión del pull request a la que se aplica la revisión.

pullRequestVersion.number string

Número de versión monotónica de la pull request codificada como una cadena JSON.

pullRequestVersion.headSha string

SHA de la cabecera capturado por esta versión de la solicitud de extracción.

pullRequestVersion.baseSha string

SHA base capturado por esta versión de la solicitud de extracción.

dismissal object

Se muestra después de que se descarta una revisión; las revisiones descartadas siguen siendo visibles en los listados.

dismissal.dismissedBy object

Figura pública que desestimó la reseña cuando quedó expuesta.

dismissal.dismissedBy.user object

Variante de usuario del actor. Se establece cuando un usuario realizó la acción.

dismissal.dismissedBy.user.id string

Identificador público del usuario.

dismissal.dismissedBy.user.email string

Dirección de correo electrónico del usuario. Siempre se establece cuando está presente la variante de usuario.

dismissal.dismissedBy.user.displayName string

Nombre visible del usuario: el nombre y apellido de la cuenta unidos por un espacio, el mismo nombre que muestra el producto. Se omite cuando la cuenta no tiene nombre.

dismissal.dismissedBy.user.handle string

El identificador de perfil reclamado por el usuario, sin el prefijo @. Solo está presente mientras ese perfil sea visible públicamente; de lo contrario, se omite.

dismissal.dismissedBy.app object

Variante de la app del actor. Se establece cuando una app realizó la acción.

dismissal.dismissedBy.app.id string

Identificador público de la aplicación.

dismissal.dismissedBy.app.displayName string

Nombre para mostrar registrado de la aplicación. Se omite cuando no se puede resolver la aplicación y en el actor administrado propio de Cherri Code.

dismissal.dismissedBy.serviceAccount object

Variante de cuenta de servicio del actor. Se establece cuando una cuenta de servicio realizó la acción.

dismissal.dismissedBy.serviceAccount.id string

Identificador público de la cuenta de servicio.

dismissal.dismissedAt string

Marca de tiempo RFC 3339 de desestimación.

dismissal.message string

Motivo de la desestimación; la sustitución automática utiliza un mensaje generado por el 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."}'

Estructura de la respuesta:

{  "id": "rev_01k2ja2000e0080000000000f6",  "author": {    "user": {      "id": "user_01k2ja2000e0080000000000c3",      "email": "[email protected]"    }  },  "verdict": "approve",  "body": "Aprobado. El esquema de telemetría coincide con la especificación.",  "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": "Reemplazada por una revisión más reciente."  }}

Conjuntos de reglas

Listar conjuntos de reglas

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

Enumera todos los conjuntos de reglas configurados en un repositorio.

Los conjuntos de reglas por repositorio constituyen una configuración acotada, por lo que el conjunto completo se devuelve en una única respuesta y este endpoint no está paginado. repository se incluye una sola vez y describe el repositorio compartido por todos los conjuntos de reglas de la respuesta.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Campos de respuesta

rulesets matriz

Conjuntos de reglas configurados en el repositorio.

rulesets[].id string

ID estable del conjunto de reglas de Origin.

rulesets[].name cadena

Nombre del conjunto de reglas.

rulesets[].description string

Descripción del conjunto de reglas.

rulesets[].enforcement string

Cómo Origin aplica el conjunto de reglas. Valores permitidos: active, evaluate, disabled.

rulesets[].kind string

La operación que protege el conjunto de reglas. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

rulesets[].includedRefNames arreglo

Patrones de nombres de referencia incluidos en este conjunto de reglas. Admite globs y los tokens ~ALL y ~DEFAULT_BRANCH.

rulesets[].excludedRefNames array

Patrones de nombres de referencias que excluye este conjunto de reglas. Usa el mismo lenguaje de patrones que rulesets[].includedRefNames.

rulesets[].rules matriz

Reglas de protección en este conjunto de reglas.

rulesets[].rules[].id string

ID de origen estable para esta regla.

rulesets[].rules[].ruleType string

Tipo de regla, por ejemplo pull_request, require_status_checks, require_branch_up_to_date, deletion o non_fast_forward.

rulesets[].rules[].parameters object

Parámetros específicos del tipo en un objeto JSON. La estructura depende de rulesets[].rules[].ruleType.

rulesets[].bypassActors array

Principales que pueden omitir este conjunto de reglas. Se omite de la respuesta cualquier actor de omisión cuya identidad almacenada no pueda leerse.

rulesets[].bypassActors[].id string

ID de origen estable para este actor de bypass.

rulesets[].bypassActors[].bypassMode cadena

Cuándo se aplica la excepción. Valores permitidos: always, pull_request_only.

rulesets[].bypassActors[].user objeto

Una entidad principal de usuario. Exactamente uno de user, team, app u originRole está presente.

rulesets[].bypassActors[].user.id string

ID numérico de usuario de Cherri Code codificado como cadena decimal.

rulesets[].bypassActors[].team objeto

Un director de equipo.

rulesets[].bypassActors[].team.organizationPublicId string

ID público inmutable de la organización.

rulesets[].bypassActors[].team.groupPublicId string

ID público inmutable del grupo.

rulesets[].bypassActors[].app objeto

Una entidad principal de la app.

rulesets[].bypassActors[].app.id string

ID de la app, con el prefijo app_.

rulesets[].bypassActors[].originRole objeto

Una entidad principal con el rol Origin.

rulesets[].bypassActors[].originRole.role string

Valores permitidos: namespace_admin, repository_admin, repository_write.

repository objeto

Repositorio compartido por todos los conjuntos de reglas de esta respuesta.

repository.id string

Identificador de repositorio en una referencia de contenedor.

repository.name string

Nombre del repositorio en una referencia de contenedor.

repository.owner objeto

Referencia del propietario del repositorio.

repository.owner.slug string

Slug del propietario visible en la URL que se usa junto con el ID del propietario para identificar al propietario del repositorio.

repository.owner.id string

Identificador del propietario del origen.

repository.owner.type string

Tipo de espacio de nombres del propietario. Solo de salida. Valores permitidos: team, user. Se omite cuando se desconoce.
curl --request GET \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Estructura de la respuesta:

{  "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"    }  }}

Crear conjunto de reglas

POST/v1/origin/repos/{ownerSlug}/{repoName}/rulesets
Scoperepository:rulesets:writeAuthInstallation tokenUser access token

Crea un conjunto de reglas del repositorio.

La respuesta incluye el conjunto de reglas almacenado, incluidos los ID que Origin asigna a cada regla y actor de omisión. Se rechaza un name vacío con InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

Cuerpo de la solicitud

name string Obligatorio

Nombre del conjunto de reglas.

description cadena

Descripción del conjunto de reglas.

enforcement string Obligatorio

Cómo Origin aplica el conjunto de reglas. Valores permitidos: active, evaluate, disabled.

kind string Obligatorio

La operación que protege el conjunto de reglas. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames array

Patrones de nombres de referencia que incluye este conjunto de reglas. Admite globs y los tokens ~ALL y ~DEFAULT_BRANCH. Los valores con más de 64 entradas se rechazan con InvalidArgument (HTTP 400).

excludedRefNames array

Patrones de nombres de referencias que este conjunto de reglas excluye. Mismo lenguaje de patrones y límite de 64 entradas que includedRefNames.

rules array

Reglas de protección para almacenar. Cada entrada contiene ruleType y parameters opcionales; Origin asigna el id de cada regla. Se rechazan los valores con más de 20 entradas con InvalidArgument (HTTP 400).

bypassActors array

Principales de omisión para almacenar. Cada entrada contiene bypassMode y exactamente uno de user, team, app u originRole; Origin asigna el id de cada actor. Los valores con más de 15 entradas se rechazan con InvalidArgument (HTTP 400).

Campos de respuesta

id string

ID estable del conjunto de reglas de Origin.

name string

Nombre del conjunto de reglas.

description cadena

Descripción del conjunto de reglas.

enforcement string

Cómo Origin aplica el conjunto de reglas. Valores permitidos: active, evaluate, disabled.

kind cadena

La operación que protege el conjunto de reglas. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames array

Patrones de nombres de referencia incluidos en este conjunto de reglas. Compatible con comodines (globs) y los tokens ~ALL y ~DEFAULT_BRANCH.

excludedRefNames array

Patrones de nombres de referencias que este conjunto de reglas excluye. Mismo lenguaje de patrones que includedRefNames.

rules array

Reglas de protección de este conjunto de reglas.

rules[].id string

ID de origen estable para esta regla.

rules[].ruleType string

Tipo de regla, por ejemplo pull_request, require_status_checks, require_branch_up_to_date, deletion o non_fast_forward.

rules[].parameters objeto

Parámetros específicos del tipo en forma de objeto JSON. La estructura depende de rules[].ruleType.

bypassActors array

Principales que pueden omitir este conjunto de reglas. Un actor con permiso de omisión cuya identidad almacenada no se puede leer se omite de la respuesta.

bypassActors[].id cadena

ID de Origin estable de este actor de omisión.

bypassActors[].bypassMode string

Cuándo se aplica la exclusión. Valores permitidos: always, pull_request_only.

bypassActors[].user objeto

Una entidad principal de usuario. Se incluye exactamente uno de user, team, app u originRole.

bypassActors[].user.id string

ID de usuario numérico de Cherri Code codificado como cadena decimal.

bypassActors[].team objeto

Un director de equipo.

bypassActors[].team.organizationPublicId string

ID público inmutable de la organización.

bypassActors[].team.groupPublicId string

ID público inmutable del grupo.

bypassActors[].app objeto

Un principal de la aplicación.

bypassActors[].app.id string

ID de la app, con el prefijo app_.

bypassActors[].originRole objeto

Un principal que desempeña el rol 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"      }    }  ]}'

Estructura de la respuesta:

{  "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"      }    }  ]}

Obtener conjunto de reglas

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

Devuelve un único conjunto de reglas del repositorio a partir de su ID de Origin estable.

Tanto un repositorio como un conjunto de reglas desconocidos devuelven 404; el mensaje permite distinguirlos.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

rulesetId string Obligatorio

ID estable del conjunto de reglas de Origin.

Campos de respuesta

id string

ID estable del conjunto de reglas de Origin.

nombre string

Nombre del conjunto de reglas.

descripción string

Descripción del conjunto de reglas.

enforcement string

Cómo Origin aplica el conjunto de reglas. Valores permitidos: active, evaluate, disabled.

kind string

La operación que protege el conjunto de reglas. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames matriz

Patrones de nombres de referencias que incluye este conjunto de reglas. Admite globs y los tokens ~ALL y ~DEFAULT_BRANCH.

excludedRefNames matriz

Patrones de nombres de referencia que excluye este conjunto de reglas. Usa el mismo lenguaje de patrones que includedRefNames.

rules array

Reglas de protección en este conjunto de reglas.

rules[].id string

ID de origen estable para esta regla.

rules[].ruleType string

Tipo de regla, por ejemplo, pull_request, require_status_checks, require_branch_up_to_date, deletion o non_fast_forward.

rules[].parameters objeto

Parámetros específicos del tipo en un objeto JSON. La estructura depende de rules[].ruleType.

bypassActors array

Entidades que pueden omitir este conjunto de reglas. Se omite de la respuesta cualquier actor de omisión cuya identidad almacenada no se pueda leer.

bypassActors[].id cadena

ID de origen estable para este actor de bypass.

bypassActors[].bypassMode string

Cuándo se aplica la excepción. Valores permitidos: always, pull_request_only.

bypassActors[].user objeto

Un principal de usuario. Se especifica exactamente uno de user, team, app u originRole.

bypassActors[].user.id string

ID numérico de usuario de Cherri Code codificado como una cadena decimal.

bypassActors[].team objeto

Un director de equipo.

bypassActors[].team.organizationPublicId string

ID público inmutable de la organización.

bypassActors[].team.groupPublicId string

ID público inmutable del grupo.

bypassActors[].app objeto

Una entidad principal de la app.

bypassActors[].app.id string

ID de aplicación, con el prefijo app_.

bypassActors[].originRole objeto

Un principal con el rol 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'

Estructura de la respuesta:

{  "id": "rs_01k2ja2000e0080000000000t7",  "name": "require-review",  "description": "Exige una revisión aprobatoria antes de fusionar con 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"      }    }  ]}

Actualizar el conjunto de reglas

PUT/v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}
Scoperepository:rulesets:writeAuthInstallation tokenUser access token

Actualiza un conjunto de reglas existente del repositorio.

La solicitud reemplaza toda la configuración del conjunto de reglas. rules y bypassActors se reemplazan por completo en lugar de fusionarse, y Origin asigna nuevos ID a las entradas almacenadas, así que envía todas las reglas y los actores de omisión que quieras conservar.

Parámetros de ruta

ownerSlug string Obligatorio

Slug único de la entidad propietaria.

repoName string Obligatorio

Nombre del repositorio, único dentro de la entidad propietaria.

rulesetId string Obligatorio

ID estable del conjunto de reglas de Origin.

Cuerpo de la solicitud

name string Obligatorio

Nombre del conjunto de reglas.

description cadena

Descripción del conjunto de reglas.

enforcement cadena Obligatorio

Cómo Origin aplica el conjunto de reglas. Valores permitidos: active, evaluate, disabled.

kind string Obligatorio

La operación que protege el conjunto de reglas. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames array

Patrones de nombres de referencia incluidos en este conjunto de reglas. Admite patrones glob y los tokens ~ALL y ~DEFAULT_BRANCH. Los valores con más de 64 entradas se rechazan con InvalidArgument (HTTP 400).

excludedRefNames matriz

Patrones de nombres de referencia que excluye este conjunto de reglas. Usa el mismo lenguaje de patrones y tiene el mismo límite de 64 entradas que includedRefNames.

rules array

Reglas de protección para almacenar. Cada entrada contiene ruleType y parameters opcionales; Origin asigna el id de cada regla. Se rechazan las solicitudes con más de 20 entradas con InvalidArgument (HTTP 400).

bypassActors array

Principales de bypass para almacenar. Cada entrada contiene bypassMode y exactamente uno de user, team, app u originRole; Origin asigna el id de cada actor. Los valores con más de 15 entradas se rechazan con InvalidArgument (HTTP 400).

Campos de respuesta

id string

ID estable del conjunto de reglas de Origin.

name string

Nombre del conjunto de reglas.

description cadena

Descripción del conjunto de reglas.

enforcement string

Cómo Origin aplica el conjunto de reglas. Valores permitidos: active, evaluate, disabled.

kind string

La operación que protege el conjunto de reglas. Valores permitidos: merge_branch, push_branch, push_tag, push_repository.

includedRefNames array

Patrones de nombres de referencia que incluye este conjunto de reglas. Admite globs y los tokens ~ALL y ~DEFAULT_BRANCH.

excludedRefNames matriz

Patrones de nombres de referencias que excluye este conjunto de reglas. Utiliza el mismo lenguaje de patrones que includedRefNames.

rules array

Reglas de protección en este conjunto de reglas.

rules[].id string

ID de origen estable para esta regla.

rules[].ruleType string

Tipo de regla, por ejemplo pull_request, require_status_checks, require_branch_up_to_date, deletion o non_fast_forward.

rules[].parameters objeto

Parámetros específicos de cada tipo en un objeto JSON. La estructura depende de rules[].ruleType.

bypassActors array

Entidades que pueden omitir este conjunto de reglas. Si no se puede leer la identidad almacenada de un actor de omisión, se omite en la respuesta.

bypassActors[].id string

ID de origen estable para este actor de bypass.

bypassActors[].bypassMode string

Cuándo se aplica la omisión. Valores permitidos: always, pull_request_only.

bypassActors[].user objeto

Una entidad principal de usuario. Debe estar presente exactamente uno de user, team, app u originRole.

bypassActors[].user.id cadena

ID numérico de usuario de Cherri Code codificado como una cadena decimal.

bypassActors[].team objeto

Un director de equipo.

bypassActors[].team.organizationPublicId string

ID público inmutable de la organización.

bypassActors[].team.groupPublicId string

ID público inmutable del grupo.

bypassActors[].app objeto

Un principal de aplicación.

bypassActors[].app.id string

ID de la aplicación, con el prefijo app_.

bypassActors[].originRole objeto

Una entidad principal con el rol 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": "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"      }    }  ]}'

Estructura de la respuesta:

{  "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"      }    }  ]}

Eliminar conjunto de reglas

DELETE/v1/origin/repos/{ownerSlug}/{repoName}/rulesets/{rulesetId}
Scoperepository:rulesets:writeAuthInstallation tokenUser access token

Elimina un conjunto de reglas del repositorio mediante su ID estable de Origin. El cuerpo de respuesta está vacío.

Tanto un repositorio desconocido como un conjunto de reglas desconocido devuelven 404; el mensaje los distingue. Un conjunto de reglas almacenado en otro repositorio se considera desconocido. Un rulesetId vacío devuelve InvalidArgument (HTTP 400).

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug único de la entidad propietaria.

repoName cadena Obligatorio

Nombre del repositorio, único para la entidad propietaria.

rulesetId cadena Obligatorio

ID estable del conjunto de reglas de Origin.

Campos de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

curl --request DELETE \  --url 'https://api.cursor.com/v1/origin/repos/OWNER_SLUG/REPO_NAME/rulesets/RULESET_ID' \  --header 'Authorization: Bearer YOUR_ORIGIN_TOKEN'

Respuesta:

204 No Content

Autoridades de certificación SSH

Una autoridad de certificación SSH es una clave pública en la que confía un propietario: los certificados de usuario que firma autentican git sobre SSH en los repositorios del propietario, de modo que los miembros del equipo propietario pueden usar git sobre SSH sin registrar una clave SSH. Estos endpoints permiten enumerar las autoridades en las que confía un propietario, añadirlas y eliminarlas, así como establecer si el propietario exige certificados. Las autoridades pertenecen a propietarios que son propiedad de un equipo, y la comprobación de duplicados al añadir se limita al propietario, no a Origin en su conjunto, por lo que varios propietarios pueden confiar en la misma autoridad.

El listado acepta tokens de acceso de instalación y tokens de usuario. Para añadir y eliminar autoridades, y para establecer el requisito, se necesita una credencial de usuario de Cherri Code con namespace:settings:write; no se aceptan tokens de aplicación ni tokens de acceso de instalación.

Listar autoridades de certificación SSH

GET/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities
Scopenamespace:settings:readAuthInstallation tokenUser access token

Lista las autoridades de certificación SSH en las que confía un propietario para git sobre SSH, de la más reciente a la más antigua, e indica si el propietario exige certificados. La respuesta no está paginada: se devuelven todas las autoridades.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug del propietario cuyas autoridades se quieren listar.

Campos de respuesta

certificateAuthorities array

Todas las autoridades en las que confía el propietario, de la más reciente a la más antigua.

certificateAuthorities[].id cadena

Identificador de la autoridad; Eliminar autoridad de certificación SSH lo recibe como certificateAuthorityId.

certificateAuthorities[].name cadena

Etiqueta asignada al añadir la autoridad.

certificateAuthorities[].keyType cadena

Tipo de clave OpenSSH de la clave pública de la autoridad; por ejemplo, ssh-ed25519.

certificateAuthorities[].fingerprint cadena

Huella digital SHA-256 de la clave pública con el formato SHA256:<base64>, el mismo que muestra ssh-keygen -l.

certificateAuthorities[].publicKey cadena

Clave pública de la autoridad con el formato <key_type> <base64>, sin comentario.

certificateAuthorities[].createdAt cadena

Marca de tiempo RFC 3339 del momento en que se añadió la autoridad.

requireCertificates boolean

Indica si el propietario exige certificados SSH; consulta Establecer requisito 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'

Estructura de la respuesta:

{  "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}

Añadir autoridad de certificación SSH

POST/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities
Scopenamespace:settings:writeAuthUser access token

Añade una autoridad de certificación SSH de confianza para el propietario y la devuelve. A partir de ese momento, los miembros del equipo propietario pueden usar git sobre SSH en los repositorios del propietario con certificados de usuario firmados por la autoridad, sin necesidad de registrar una clave SSH.

publicKey es la clave pública de la propia autoridad, en forma de una línea de authorized_keys de OpenSSH. Si se envía un certificado, un tipo de clave no compatible o una clave RSA de menos de 2048 bits, se devuelve InvalidArgument (HTTP 400). Si el propietario ya tiene registrada la clave, se devuelve AlreadyExists (HTTP 409 Conflict); la comprobación se limita al propietario, por lo que varios propietarios pueden confiar en la misma autoridad. Solo se pueden añadir autoridades a propietarios que sean propiedad de un equipo; con cualquier otro propietario se devuelve FailedPrecondition (HTTP 400).

El llamador debe ser una credencial de usuario de Cherri Code con namespace:settings:write. No se aceptan tokens de aplicación ni tokens de acceso de instalación.

Parámetros de ruta

ownerSlug string Obligatorio

Slug del propietario.

Cuerpo de solicitud

publicKey string Obligatorio

La clave pública de la autoridad, en forma de una línea de authorized_keys de OpenSSH (<key_type> <base64> [comment]). Los tipos de clave aceptados son ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521 y ssh-rsa con un módulo de al menos 2048 bits. No se aceptan certificados.

name string Obligatorio

Etiqueta de la autoridad, de 255 caracteres como máximo.

Campos de respuesta

id string

Identificador de la autoridad; Eliminar autoridad de certificación SSH lo recibe como certificateAuthorityId.

name string

Etiqueta asignada al añadir la autoridad.

keyType string

Tipo de clave OpenSSH de la clave pública de la autoridad, por ejemplo, ssh-ed25519.

fingerprint string

Huella digital SHA-256 de la clave pública con el formato SHA256:<base64>, el mismo que muestra ssh-keygen -l.

publicKey string

La clave pública de la autoridad con el formato <key_type> <base64>, sin comentario.

createdAt string

Marca de tiempo RFC 3339 del momento en que se añadió la autoridad.
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"}'

Estructura de la respuesta:

{  "id": "nsca_01k2ja2000e0080000000000s5",  "name": "Acme production CA",  "keyType": "ssh-ed25519",  "fingerprint": "SHA256:D5vlIclvaSZlwq4gmckavfLE7n7F542Eyhk/PvXkRq0",  "publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPwoQNzBuiWhDF4EKwRyt8h48XRY7Bc4yWbQ9s3Tnj7Q",  "createdAt": "2026-08-02T14:45:00Z"}

Eliminar autoridad de certificación SSH

DELETE/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities/{certificateAuthorityId}
Scopenamespace:settings:writeAuthUser access token

Elimina una autoridad de certificación SSH del propietario. Todos los certificados firmados por esa autoridad dejan de funcionar. Si el propietario exige certificados, no se puede eliminar su última autoridad; en ese caso, la solicitud devuelve FailedPrecondition (HTTP 400). El cuerpo de respuesta está vacío.

El llamador debe ser una credencial de usuario de Cherri Code con el permiso namespace:settings:write. No se aceptan tokens de aplicación ni tokens de acceso de instalación.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug del propietario.

certificateAuthorityId cadena Obligatorio

id de la autoridad que se va a eliminar.

Campos de respuesta

Las solicitudes correctas no devuelven cuerpo de respuesta.

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'

Respuesta:

204 No Content

Establecer el requisito de certificado SSH

POST/v1/origin/owners/{ownerSlug}/ssh-certificate-authorities:setRequirement
Scopenamespace:settings:writeAuthUser access token

Establece si el propietario exige certificados SSH y devuelve el ajuste del propietario. Mientras el requisito esté activo, git sobre SSH en los repositorios del propietario solo acepta certificados emitidos por las autoridades del propietario: se rechazan las claves SSH registradas por los usuarios, así como las claves de API de usuario sobre HTTPS. Para exigir certificados, debe haber al menos una autoridad registrada; de lo contrario, la solicitud devuelve FailedPrecondition (HTTP 400). Si se establece el valor actual, la operación se completa correctamente sin realizar ningún cambio.

El llamador debe ser una credencial de usuario de Cherri Code con namespace:settings:write. No se aceptan tokens de aplicación ni tokens de acceso de instalación.

Parámetros de ruta

ownerSlug cadena Obligatorio

Slug del propietario.

Cuerpo de solicitud

requireCertificates boolean Obligatorio

True para exigir certificados SSH en los repositorios del propietario; false para dejar de exigirlos.

Campos de respuesta

requireCertificates boolean

Indica si el propietario exige certificados SSH para git sobre 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}'

Estructura de la respuesta:

{  "requireCertificates": true}

Webhooks

Origin envía solicitudes HTTP POST firmadas a la URL HTTPS del webhook registrada de la app con content-type: application/json.

La entrega se realiza al menos una vez. Elimina duplicados en los reintentos con webhook-id, acepta la solicitud de forma persistente, devuelve 2xx rápidamente y procesa el evento de forma asíncrona.

Origin espera 10 segundos los encabezados de respuesta del receptor. Ese plazo cubre la resolución DNS, la conexión, el protocolo de enlace TLS y el tiempo hasta la respuesta, y se aplica a cada intento. Un intento que lo supere se registra como error de transporte y se reintenta según la programación de Reintentos. Los fallos repetidos pueden desactivar la entrega automáticamente.

Para confirmar que un receptor funciona antes de que le llegue algún evento real, llama a Ping Webhook.

Origin entrega eventos para repositorios replicados, y los payloads de eventos de instalación los enumeran en los arrays de repositorios seleccionados. La entrega no amplía lo que la instalación puede invocar: consulta Repositorios replicados.

Encabezados

EncabezadoDescripción
content-typeapplication/json
user-agentCherri Code-Origin-Webhook/1.0
webhook-idID de entrega estable y clave de idempotencia.
webhook-timestampMarca de tiempo Unix incluida en la firma.
webhook-signaturev1ed,BASE64_SIGNATURE
webhook-event-typeSlug de evento para el enrutamiento.
webhook-event-idID del evento de Origin subyacente, reflejado en el cuerpo firmado.
webhook-app-idID de la app de destino.
webhook-installation-idID de la instalación de destino.

Los encabezados de enrutamiento son solo una ayuda. Tras verificar la firma, el cuerpo es la fuente de autoridad.

Verificación de firmas

Usa el cuerpo sin procesar de la solicitud antes de analizarlo. Construye:

lowercaseHex(SHA-256("<webhook-id>.<webhook-timestamp>.<raw-request-body>"))

Verifica la firma Ed25519 de los bytes UTF-8 de ese resumen hexadecimal con una clave JWKS activa de Origin. Rechaza las marcas de tiempo que se desvíen más de cinco minutos de la hora actual.

Las bibliotecas de Standard Webhooks no verifican las entregas de Origin. Los encabezados usan los nombres de Standard Webhooks, pero Origin firma el resumen SHA-256 en lugar del propio contenido firmado, con una etiqueta de versión v1ed que la especificación de Standard Webhooks no define. Verifica la firma con la construcción anterior, como se muestra en el siguiente ejemplo.

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");  // En producción, guarda esta respuesta en caché.  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;    }  });}

Envoltorio de entrega

Cada solicitud incluye el payload del evento junto con la identidad de la entrega, la aplicación y la instalación:

{  "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 es estable entre reintentos. event.id identifica el evento de dominio subyacente.

Reintentos

Origin reintenta los errores de transporte y las respuestas 429 y 5xx hasta un máximo de siete intentos. Las demás respuestas 4xx son definitivas.

El primer intento es el envío original. Los seis reintentos esperan 5 segundos, 30 segundos, 1 minuto, 2 minutos, 4 minutos y 8 minutos, en ese orden.

Un receptor que falle en todos los intentos recibirá siete POST a lo largo de unos 16 minutos. El webhook-id es el mismo en cada intento. Elimina duplicados con él.

Desactivación automática

Un propietario puede pausar la entrega de webhooks de una aplicación desde los ajustes de la aplicación. Origin también la desactiva por su cuenta cuando el receptor falla al menos 20 rondas de entrega dentro de una ventana de 72 horas, sin ninguna entrega correcta en ese periodo, y los fallos afectan a más de un espacio de nombres de instalador.

La entrega se detiene hasta que un propietario la reanude. Batch Redeliver Webhook Deliveries devuelve FailedPrecondition (HTTP 400) y no encola nada. La API no expone ningún campo para el estado pausado, así que toma ese FailedPrecondition como señal.

Borrar el webhookUrl de la aplicación mediante Update App es una acción aparte: cancela las entregas pendientes y volver a establecer una URL no las recupera.

Recuperación

Usa un JWT de aplicación para consultar GET /app/webhook/deliveries. Filtra por estado de entrega, tipo de evento, instalación, intervalo de tiempo o token de página. delivered=false devuelve todas las entregas que el receptor nunca ha confirmado con un código 2xx. Las entregas permanecen disponibles para listar durante siete días, así que recupéralas dentro de ese plazo.

Usa POST /app/webhook/deliveries:batchRedeliver para poner en cola la reentrega de hasta 100 ID de entrega. La operación elimina los ID duplicados e informa el resultado de cada entrega. Una aplicación pausada o desactivada automáticamente rechaza la llamada con FailedPrecondition (HTTP 400) y no pone nada en cola.

Referencia de webhooks

Todos los eventos que entrega Origin, con el payload de cada evento documentado campo por campo. Para conocer el funcionamiento de las suscripciones, los encabezados, la verificación de firma, el envoltorio de entrega, la programación de reintentos y la desactivación automática, consulta Webhooks.

Eventos

EventoSe envía cuando
repository.createdSe crea un repositorio.
repository.deletedSe elimina un repositorio.
repository.pushedUna o varias referencias cambian tras un push.
repository.metadata.updatedCambia la rama predeterminada de un repositorio.
pull_request.createdSe abre una pull request.
pull_request.head_ref.pushedLa cabecera de la pull request avanza.
pull_request.base_ref.updatedCambia la referencia base o el commit base resuelto.
pull_request.metadata.updatedCambia el título o la descripción.
pull_request.closedSe cierra una pull request sin fusionarse, incluso cuando Origin la cierra porque un push dejó su cabecera sin historial en común con su base.
pull_request.mergedSe fusiona una pull request.
pull_request.reopenedSe vuelve a abrir una pull request cerrada.
pull_request.publishedUn borrador pasa a estar abierto.
pull_request.label.addedSe asigna una etiqueta a una pull request.
pull_request.label.removedSe desasigna una etiqueta de una pull request, incluso cuando se elimina la definición de la etiqueta.
pull_request.comment.createdSe crea un comentario visible en una pull request.
pull_request.comment.reaction.addedSe añade una reacción a un comentario de una pull request. Volver a añadir una reacción que quien reacciona ya tiene envía este evento de nuevo.
pull_request.comment.reaction.removedSe elimina una reacción de un comentario de una pull request. Eliminar una reacción que quien reacciona no tiene no envía nada.
pull_request.review.submittedSe envía una revisión con cualquier veredicto.
pull_request.review.dismissedSe descarta una revisión enviada, explícitamente o por haber sido reemplazada.
pull_request.reviewer.addedSe solicita un revisor.
pull_request.reviewer.removedSe elimina un revisor.
pull_request.reviewer.rerequestedSe vuelve a solicitar un revisor.
repository.check_run.createdSe crea una ejecución de comprobación.
repository.check_run.completedFinaliza una ejecución de comprobación.
repository.check_run.rerequestedSe vuelve a solicitar una ejecución de comprobación finalizada. Solo se envía a la app propietaria de la ejecución.
installation.createdSe instala la app.
installation.updatedCambian los ámbitos, la selección de repositorio o el slug del espacio de nombres del propietario.
installation.suspendedSe suspende la instalación.
installation.unsuspendedSe restablece una instalación suspendida.
installation.deletedSe desinstala la app.

La estructura del payload de cada evento está documentada campo por campo en Payloads de eventos.

Los cinco eventos installation.* se envían a la propia app en lugar de a una suscripción de repositorio. Origin siempre los envía, por lo que no aparecen en la lista de eventos seleccionables de la app. Todos los demás eventos de esta tabla corresponden a suscripciones con ámbito de repositorio.

Una app nueva no está suscrita a ninguno de los eventos con ámbito de repositorio. Selecciona los que necesites en la configuración de la app o establécelos con el campo events de Create App o Update App. Origin solo envía un evento a las apps que estén suscritas a él, tengan configurada una URL de webhook y cuya instalación abarque el repositorio y disponga del ámbito que requiere el evento. Si no se cumplen estas condiciones, no hay entrega ni error: no se envía nada y no aparece nada en List Webhook Deliveries.

Origin no envía repository.pushed para un repositorio que replica desde GitHub. Esos pushes pertenecen a GitHub, que envía sus propios webhooks de push, por lo que una entrega de Origin los duplicaría. Los pushes a repositorios nativos de Origin y a réplicas salientes se envían con normalidad, y el estado de la réplica no afecta a ningún otro evento. repository.deleted sí se envía para un repositorio replicado desde GitHub: al detener la sincronización solo se elimina el repositorio del lado de Cherri Code, y GitHub no envía nada al respecto.

Payloads de eventos

El envoltorio de cada evento incluye el objeto de payload del evento en payload. Los eventos que comparten una misma estructura pertenecen a la misma familia de payloads; cada familia que se describe a continuación documenta los eventos que la entregan, sus campos y un payload de ejemplo, generados a partir de la especificación de OpenAPI. En la especificación, la extensión x-origin-webhook-events de cada esquema de payload enumera los eventos que lo entregan.

Repositorio creado

EVENTOrepository.created

Campos del payload

repository object

El repositorio creado.

repository.id string

repository.name string Obligatorio

El nombre del repositorio, único para su propietario. Obligatorio al crear.

repository.fullName string

"{owner.login}/{name}". Generado automáticamente.

repository.owner object

La entidad propietaria. Se determina según el parent al crear; no se puede establecer directamente.

repository.owner.slug string

Nombre único y apto para URL del owner.

repository.owner.id string

ID único del espacio de nombres propietario.

repository.owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

repository.defaultBranch string

Nombre de la rama predeterminada. Siempre se establece en las respuestas. Al crear, si se omite este campo o se deja vacío, el valor predeterminado es "main".

repository.createdAt string

Timestamp en formato RFC 3339.

repository.updatedAt string

Timestamp en formato RFC 3339.

repository.pushedAt string

Timestamp del push más reciente en cualquier branch; ausente hasta el primer push. Timestamp en formato RFC 3339.

repository.cloneUrl string

URL HTTPS para clonar el repositorio.

repository.mirror objeto

Metadatos de la réplica. Ausente en repositorios nativos y hasta que la sincronización inicial de la réplica esté lista.

repository.mirror.source string

Uno de github.

repository.mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

repository.mirror.status string

Dirección efectiva durante una transición, hasta que se complete el cambio. Uno de estos valores: inbound, outbound.

repository.visibility string

Visibilidad del repositorio, internal o private. Uno de estos valores: internal, private.

repository.allowMergeCommit boolean

Si las pull request pueden integrarse como merge commits.

repository.allowSquashMerge boolean

Si los pull request pueden fusionarse mediante squash.

repository.deleteBranchOnMerge boolean

Indica si el branch de cabecera se elimina automáticamente al fusionar.

Ejemplo 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"  }}

Repositorio eliminado

EVENTrepository.deleted

Campos del payload

repository object

El repositorio que se eliminó. Solo una referencia: una vez eliminado, el repositorio ya no se resuelve a través de la API.

repository.id string

repository.name string

repository.owner object

El propietario de un repositorio.

repository.owner.slug string

Nombre único y apto para URL del propietario.

repository.owner.id string

ID único del espacio de nombres del propietario.

repository.owner.type string

team o user. Disponible solo en la salida; sin valor cuando se desconoce. Uno de team, user.

deletedAt string

Cuándo se eliminó el repositorio. Marca de tiempo RFC 3339.

Ejemplo de event.payload:

{  "repository": {    "id": "repo_01k2ja2000e0080000000000q4",    "name": "rocket",    "owner": {      "slug": "acme",      "id": "ns_01k2ja2000e0080000000000p3",      "type": "team"    }  },  "deletedAt": "2026-08-03T08:15:00Z"}

Envío al repositorio

EVENTOrepository.pushed

Un envío atómico, que puede actualizar varias referencias. No hay un arreglo de commits; cada actualización de referencia solo incluye metadatos de la punta como mejor esfuerzo.

Campos del payload

repository object

El repositorio al que se dirigió el push.

repository.id string

repository.name string

repository.owner object

El propietario de un repositorio.

repository.owner.slug string

Nombre único y compatible con URL del owner.

repository.owner.id string

ID único del espacio de nombres propietario.

repository.owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de: team, user.

refUpdates array

Referencias incluidas en este push, con un máximo de 100.

refUpdates[].ref string

La referencia completa de Git que se envió. Ejemplo: refs/heads/main o refs/tags/v3.14.1.

refUpdates[].before string

El SHA del commit más reciente en ref antes del push. Todo ceros (0000000000000000000000000000000000000000) cuando la referencia se acaba de crear.

refUpdates[].after string

El SHA del commit más reciente en ref después del push. Una cadena de ceros (0000000000000000000000000000000000000000) cuando se eliminó la referencia.

refUpdates[].created boolean

Indica si este push creó la referencia.

refUpdates[].deleted boolean

Indica si este envío eliminó la referencia.

refUpdates[].forced boolean

Indica si este envío reescribió el historial: una actualización que no es de avance rápido de una referencia existente (la nueva punta no desciende de la anterior). Es falso en las creaciones y eliminaciones de referencias, en las actualizaciones de avance rápido y en los envíos observados antes de que Origin registrara el estado de los envíos forzados.

refUpdates[].headCommit objeto

Metadata de mejor esfuerzo del commit en la nueva punta desreferenciada. Sin establecer en eliminaciones, referencias que no son commits, pushes históricos y fallos de extracción.

refUpdates[].headCommit.sha string

refUpdates[].headCommit.author object

Identidad de Git y marca de tiempo del autor o del committer de un commit. Es la identidad registrada en el objeto del commit, no una cuenta de usuario vinculada.

refUpdates[].headCommit.author.name string

refUpdates[].headCommit.author.email string

refUpdates[].headCommit.author.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de zona horaria original de la firma de git (p. ej. "2014-11-07T22:01:45+01:00").

refUpdates[].headCommit.committer objeto

Identidad de Git y marca de tiempo del autor o del committer de un commit. Es la identidad registrada en el objeto del commit, no una cuenta de usuario vinculada.

refUpdates[].headCommit.committer.name string

refUpdates[].headCommit.committer.email string

refUpdates[].headCommit.committer.date string

Marca de tiempo ISO-8601 que conserva el desplazamiento de zona horaria original de la firma de git (p. ej. "2014-11-07T22:01:45+01:00").

refUpdates[].headCommit.message string

pushedAt string

Momento en que Origin observó el push. Marca de tiempo RFC 3339.

pusher object

La entidad que realizó el push, según lo verificado por Origin. Está ausente cuando el propio Origin realizó el push, como ocurre con el push de fusión que avanza la referencia base cuando se fusiona una solicitud de incorporación de cambios.

pusher.user object

pusher.user.id string

pusher.user.email string Obligatorio

pusher.user.displayName string

Nombre visible legible por personas: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio; exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el identificador ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se haya podido resolver.

pusher.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea público; se omite para los usuarios que no hayan reclamado un identificador y para los perfiles no públicos.

pusher.user.performedVia objeto

Se establece cuando una aplicación actúa en nombre de este usuario mediante un token de usuario de instalación para realizar la acción que describe este campo de actor. Por ejemplo, en el campo de autor de un comentario, indica qué aplicación creó el comentario, no quién lo editó o eliminó después. Está ausente cuando el usuario actúa directamente y también puede estarlo si no se dispone de datos de delegación.

pusher.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

pusher.user.performedVia.app.id string

pusher.user.performedVia.app.displayName string

El nombre para mostrar registrado de la app; nunca está vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor de fachada propio de Cherri Code.

pusher.app object

pusher.app.id string

pusher.app.displayName string

El nombre para mostrar registrado de la app; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya app no se pudo resolver y en el actor de fachada propio de Cherri Code.

pusher.serviceAccount object

pusher.serviceAccount.id string

refUpdatesCount entero

Número de actualizaciones de referencias en el push atómico. ref_updates puede ser más corto cuando el productor limitó la lista.

Ejemplo 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}

Metadatos del repositorio actualizados

EVENTrepository.metadata.updated

Incluye la instantánea completa del repositorio, sin delta ni actor que la actualice. Compara instantáneas sucesivas o vuelve a obtener el repositorio para ver qué cambió.

Campos del payload

repository object

La instantánea completa del repositorio tras la actualización.

repository.id string

repository.name string Obligatorio

El nombre del repositorio, único para su propietario. Obligatorio al crear.

repository.fullName string

"{owner.login}/{name}". Derivado.

repository.owner object

La entidad propietaria. Se determina según el parent al crear; no se puede establecer directamente.

repository.owner.slug string

Nombre único y apto para URL del owner.

repository.owner.id string

ID único del espacio de nombres propietario.

repository.owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

repository.defaultBranch string

Nombre de la rama predeterminada. Siempre se establece en las respuestas. Al crear, si omites este campo o lo dejas vacío, se usa "main" por defecto.

repository.createdAt string

Timestamp en formato RFC 3339.

repository.updatedAt string

Timestamp en formato RFC 3339.

repository.pushedAt string

Timestamp del push más reciente en cualquier branch; ausente hasta el primer push. Timestamp en formato RFC 3339.

repository.cloneUrl string

URL HTTPS para clonar el repositorio.

repository.mirror object

Metadatos de la réplica. Ausente en repositorios nativos y antes de que la sincronización inicial de una réplica esté lista.

repository.mirror.source string

Uno de github.

repository.mirror.sourceId string

Identificador opaco del repositorio asignado por la fuente.

repository.mirror.status string

Dirección efectiva durante una transición, hasta que se complete el cambio. Uno de estos valores: inbound, outbound.

repository.visibility string

Visibilidad del repositorio, internal o private. Uno de estos valores: internal, private.

repository.allowMergeCommit boolean

Si las pull request pueden integrarse como merge commits.

repository.allowSquashMerge boolean

Si los pull request pueden fusionarse mediante squash merge.

repository.deleteBranchOnMerge boolean

Si la head branch se elimina automáticamente al fusionar.

Ejemplo 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

Un cambio en el ciclo de vida de una solicitud de incorporación de cambios. La acción del ciclo de vida es event.type del sobre; no hay un campo de acción separado.

Campos de la carga útil

pullRequest object

La instantánea del pull request. Las etiquetas asignadas se omiten; consúltalas con GetPullRequest.

pullRequest.id string

Identificador estable de la solicitud de extracción de Origin.

pullRequest.number string

Número del pull request dentro de su repositorio.

pullRequest.state string

"abierto" o "cerrado". Un borrador está "abierto"; las solicitudes de incorporación fusionadas y cerradas están ambas "cerradas".

pullRequest.draft boolean

Si la solicitud de extracción sigue siendo un borrador.

pullRequest.merged boolean

Indica si se ha fusionado la solicitud de incorporación de cambios.

pullRequest.title string

Título del pull request.

pullRequest.body string

Descripción del pull request.

pullRequest.head objeto

El lado de origen del pull request: lo que se va a fusionar.

pullRequest.head.ref string

La referencia a la que apunta este lado, tal como la registra Origin.

pullRequest.head.sha cadena

SHA del commit que está en la punta de este lado en la última versión del cambio. Para base, este es el base_sha de la versión, que puede estar por detrás de la punta actual de la rama (consulta PullRequestVersion).

pullRequest.base object

El lado de destino de la solicitud de extracción: aquello en lo que se integra.

pullRequest.base.ref string

La referencia a la que apunta este lado, tal como la registra Origin.

pullRequest.base.sha string

SHA del commit en la punta de este lado en la última versión del cambio. Para base, este es el base_sha de la versión, que puede estar por detrás de la punta actual de la rama (consulta PullRequestVersion).

pullRequest.author object

El principal que abrió la solicitud de extracción.

pullRequest.author.user object

pullRequest.author.user.id string

pullRequest.author.user.email string Obligatorio

pullRequest.author.user.displayName string

Nombre para mostrar legible para humanos: el nombre y el apellido de la cuenta, cada uno sin espacios al principio ni al final, unidos por un espacio — exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se pudo resolver.

pullRequest.author.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Presente solo mientras el perfil del usuario sea visible públicamente; se omite para usuarios sin un identificador reclamado y para perfiles no públicos.

pullRequest.author.user.performedVia objeto

Se establece cuando una aplicación actúa en nombre de este usuario mediante un token de usuario de la instalación para realizar la acción descrita por este campo de actor. Por ejemplo, en el campo de autor de un comentario, identifica a la aplicación que creó el comentario, no a un actor que lo editó o eliminó después. Se omite cuando el usuario actúa directamente y también puede omitirse si los datos de delegación no están disponibles.

pullRequest.author.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

pullRequest.author.user.performedVia.app.id cadena

pullRequest.author.user.performedVia.app.displayName cadena

El nombre de visualización registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada de primera parte de Cherri Code.

pullRequest.author.app objeto

pullRequest.author.app.id string

pullRequest.author.app.displayName string

El nombre de visualización registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada de primera parte de Cherri Code.

pullRequest.author.serviceAccount object

pullRequest.author.serviceAccount.id string

pullRequest.createdAt string

Cuándo se abrió el pull request. Marca de tiempo RFC 3339.

pullRequest.updatedAt string

Cuándo se actualizó por última vez la solicitud de cambios. Marca de tiempo RFC 3339.

pullRequest.closedAt string

Momento en que el pull request se cerró o se fusionó; no establecido mientras esté abierto. Marca de tiempo RFC 3339.

pullRequest.mergedAt string

Fecha y hora en que se fusionó la solicitud de extracción; sin definir si no se ha fusionado. Marca de tiempo RFC 3339.

pullRequest.mergeCommitSha string

SHA del commit que la fusión escribió en la rama base; se establece una vez fusionado y no tiene valor antes. La vista previa anterior a la fusión es la referencia pull/\<number>/merge (consulta GetGitRef), que es un commit distinto.

pullRequest.additions entero

Líneas añadidas por la última versión del pull request.

pullRequest.deletions entero

Líneas eliminadas por la versión más reciente del pull request.

pullRequest.changedFiles entero

Archivos modificados por la última versión del pull request.

pullRequest.stack object

Pertenencia a una pila. Sin definir cuando el pull request no forma parte de una pila.

pullRequest.stack.id string

Identificador estable de la pila. Pásalo como stack_id a ListPullRequests para listar los miembros de la pila.

pullRequest.stack.parentPullRequest objeto

La solicitud de cambios sobre la que se apila esta. Déjala sin establecer si es la raíz de la pila. Se sigue haciendo referencia a la solicitud de cambios principal fusionada hasta que se cambie el destino de la secundaria o se le asigne otra solicitud principal.

pullRequest.stack.parentPullRequest.id cadena

ID de cambio inmutable de Origin.

pullRequest.stack.parentPullRequest.number string

pullRequest.stack.parentPullRequest.repository objeto

Referencia del repositorio para esta solicitud de extracción.

pullRequest.stack.parentPullRequest.repository.id cadena

pullRequest.stack.parentPullRequest.repository.name string

pullRequest.stack.parentPullRequest.repository.owner objeto

El propietario de un repositorio.

pullRequest.stack.parentPullRequest.repository.owner.slug cadena

Nombre único del propietario, compatible con URL.

pullRequest.stack.parentPullRequest.repository.owner.id cadena

ID único del espacio de nombres del propietario.

pullRequest.stack.parentPullRequest.repository.owner.type cadena

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

pullRequest.version object

La última versión del pull request.

pullRequest.version.number string

Número de versión monotónica dentro del cambio (basado en 1).

pullRequest.version.headSha string

SHA del commit principal de esta versión.

pullRequest.version.baseSha string

SHA del commit base contra el que se compara esta versión: la punta de la rama base tal como se determinó cuando se registró la versión. Puede estar desactualizada con respecto a la punta actual de la rama hasta el siguiente push a la rama head o cambio de destino.

pullRequest.version.createdAt string

Cuándo se creó esta versión. Marca de tiempo RFC 3339.

pullRequest.version.potentialMergeCommit objeto

La fusión de prueba de Origin para esta versión y hasta dónde llegó su preparación (state). Se calcula para esta versión: el segundo padre del commit es head_sha; su primer padre es el base_sha de la fusión de prueba, es decir, la punta de la rama base al momento de la preparación, que puede ser más reciente que el base_sha de esta versión. La referencia pull/\<number>/merge solo apunta al commit de la versión más reciente; los commits anteriores siguen siendo accesibles por SHA mediante la API (GetCommit), aunque no se pueden obtener por SHA a través de git. Es distinto de PullRequest.merge_commit_sha, que solo se establece una vez que se ha fusionado. Se establece en PullRequest.version y PullRequestWebhook.version.

pullRequest.version.potentialMergeCommit.state cadena

Hasta dónde llegó la preparación de esta versión; una versión nueva comienza como unknown hasta que se completa su propia preparación. Los valores no reconocidos deben tratarse como unknown. Uno de unknown, prepared, merge_conflict.

pullRequest.version.potentialMergeCommit.sha cadena

Se establece solo cuando state es prepared: el commit de fusión de prueba con dos padres, cuyo segundo padre es el head_sha de la versión y el primero, base_sha; la punta de pull/\<number>/merge mientras esta versión sea la más reciente; después se puede consultar por SHA.

pullRequest.version.potentialMergeCommit.baseSha cadena

Se establece solo cuando state es prepared: la punta de la rama base en el momento de la preparación; puede ser más reciente que el base_sha de la versión, no se actualiza si la rama base simplemente avanza; se vuelve a preparar al reabrirse.

repository objeto

El repositorio al que pertenece la solicitud de extracción.

repository.id string

repository.name string

repository.owner object

El propietario de un repositorio.

repository.owner.slug string

Nombre único del propietario, compatible con URL.

repository.owner.id string

ID único del espacio de nombres del propietario.

repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

Ejemplo 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 etiquetas de solicitudes de incorporación de cambios

EVENTpull_request.label.addedpull_request.label.removed

Un cambio en las etiquetas asignadas al pull request. Consulta el conjunto actual con ListPullRequestLabels.

Campos de la carga útil

pullRequest objeto

La pull request cuyas etiquetas asignadas cambiaron.

pullRequest.id cadena

ID inmutable del cambio de Origin.

pullRequest.number cadena

pullRequest.repository objeto

Referencia al repositorio de esta pull request.

pullRequest.repository.id cadena

pullRequest.repository.name cadena

pullRequest.repository.owner objeto

El propietario de un repositorio.

pullRequest.repository.owner.slug cadena

Nombre único del propietario, apto para usarse en una URL.

pullRequest.repository.owner.id cadena

ID único del espacio de nombres del propietario.

pullRequest.repository.owner.type cadena

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

label objeto

La etiqueta de la que trata el evento.

label.id cadena

label.name cadena

label.color cadena

Color hexadecimal de seis caracteres, sin # inicial.

label.description string

actor objeto

El principal que asignó o eliminó la etiqueta, cuando se conoce.

actor.user objeto

actor.user.id cadena

actor.user.email cadena Obligatorio

actor.user.displayName cadena

Nombre legible por personas: el nombre y los apellidos de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que muestra la UI del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del email, el id ni ningún otro campo. También puede faltar en los payloads de webhook cuyo actor no se haya podido resolver.

actor.user.handle cadena

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite en el caso de los usuarios sin un identificador reclamado y de los perfiles no públicos.

actor.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario con un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el campo de autor de un comentario, indica qué aplicación creó el comentario, no qué actor lo editó o eliminó después. Se omite cuando el usuario actuó directamente y puede omitirse cuando los datos de delegación no están disponibles.

actor.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

actor.user.performedVia.app.id cadena

actor.user.performedVia.app.displayName cadena

El nombre visible registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

actor.app objeto

actor.app.id cadena

actor.app.displayName cadena

El nombre visible registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

actor.serviceAccount objeto

actor.serviceAccount.id cadena

Ejemplo 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]"    }  }}

Comentario de pull request

EVENTOpull_request.comment.created

Un comentario creado en una solicitud de incorporación. Los comentarios incluidos en una revisión se entregan cuando se envía la revisión, con un evento por cada comentario.

Campos de la carga útil

pullRequest objeto

El pull request en el que se dejó el comentario.

pullRequest.id string

Id. inmutable del cambio de Origin.

pullRequest.number string

pullRequest.repository object

Referencia del repositorio de esta solicitud de extracción.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner object

El propietario de un repositorio.

pullRequest.repository.owner.slug string

Nombre único del propietario compatible con la URL.

pullRequest.repository.owner.id string

ID único del espacio de nombres del propietario.

pullRequest.repository.owner.type string

team o user. Solo de salida; sin establecer cuando se desconoce. Uno de team, user.

comment object

El comentario creado. Un comentario que abrió su hilo incluye en línea el ancla de diff del hilo; una respuesta solo incluye comment.thread.id. El estado de resolución del hilo no forma parte del evento; consúltalo con GetPullRequestComment.

comment.id string

comment.thread object

El hilo al que pertenece este comentario, incluidos su ancla de diff y su estado de resolución.

comment.thread.id cadena

comment.thread.version object

La versión de la pull request contra la que se registró el hilo, incluidos sus SHA de head y base (ver PullRequestReview.pull_request_version).

comment.thread.version.number string

Número de versión monotónico dentro del pull request (empieza en 1).

comment.thread.version.headSha string

SHA del commit principal de esta versión.

comment.thread.version.baseSha string

SHA del commit base con el que se compara esta versión.

comment.thread.path string

Ruta del archivo del ancla de diff del hilo. Vacía para los hilos de discusión general.

comment.thread.side string

Lado del diff donde está el ancla. No establecido para hilos de discusión general. Uno de left, right.

comment.thread.startLine entero

Primera línea del rango anclado en la versión side del archivo. 0 para los hilos a nivel de archivo y de discusión general.

comment.thread.endLine entero

Última línea (incluida) del rango anclado. 0 cuando el ancla es una sola línea o no tiene rango de líneas.

comment.thread.resolvedAt string

Cuando se resolvió el hilo. Sin establecer mientras el hilo está abierto. Marca de tiempo RFC 3339.

comment.thread.createdAt string

Marca de tiempo en formato RFC 3339.

comment.thread.updatedAt string

Marca de tiempo en formato RFC 3339.

comment.body string

comment.author object

Un usuario, una aplicación o una cuenta de servicio que realizó una acción visible desde el exterior.

comment.author.user object

comment.author.user.id string

comment.author.user.email string Obligatorio

comment.author.user.displayName string

Nombre visible legible para las personas: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio; exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se haya podido resolver.

comment.author.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo aparece mientras el perfil del usuario sea visible públicamente; se omite en el caso de usuarios sin un identificador reclamado y de perfiles no públicos.

comment.author.user.performedVia objeto

Se establece cuando una aplicación actúa en nombre de este usuario con un token de usuario de la instalación para realizar la acción descrita por este campo de actor. Por ejemplo, en el autor de un comentario, identifica a la aplicación que creó el comentario, no a un actor que lo editó o eliminó después. Se omite cuando el usuario actúa directamente y también puede omitirse si los datos de delegación no están disponibles.

comment.author.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

comment.author.user.performedVia.app.id cadena

comment.author.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

comment.author.app object

comment.author.app.id string

comment.author.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

comment.author.serviceAccount objeto

comment.author.serviceAccount.id string

comment.createdAt string

Marca de tiempo en formato RFC 3339.

comment.updatedAt cadena

Marca de tiempo en formato RFC 3339.

Ejemplo 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 reacciones a comentarios de pull request

EVENTOpull_request.comment.reaction.addedpull_request.comment.reaction.removed

Una reacción añadida a un comentario de pull request o eliminada de él. El event.type del sobre indica la acción. Una adición se entrega al menos una vez: añadir al comentario una reacción que el reactor ya tiene genera otro pull_request.comment.reaction.added para el mismo (comment, reactor, content); eliminar una reacción que el reactor no tiene no genera nada.

Campos del payload

pullRequest objeto

El pull request en el que se dejó el comentario.

pullRequest.id string

Id inmutable del cambio de Origin.

pullRequest.number string

pullRequest.repository object

Referencia del repositorio para esta solicitud de extracción.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner object

El propietario de un repositorio.

pullRequest.repository.owner.slug string

Nombre único del owner, compatible con URL.

pullRequest.repository.owner.id string

ID único del espacio de nombres propietario.

pullRequest.repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de: team, user.

comment object

El comment al que corresponde la reacción.

comment.id string

comment.thread objeto

El thread al que pertenece el comment.

comment.thread.id string

reaction objeto

La reacción que se añadió o eliminó.

reaction.content cadena

La reacción colocada en el comentario. El conjunto es cerrado; un valor no reconocido debe interpretarse como una reacción que el receptor no puede mostrar. Uno de: thumbs_up, thumbs_down, laugh, hooray, confused, heart, rocket, eyes.

reaction.reactor object

El principal que añadió la reacción. Solo quien reaccionó puede eliminarla, por lo que este es el principal que actúa tanto en el evento de añadido como en el de eliminado.

reaction.reactor.user objeto

reaction.reactor.user.id string

reaction.reactor.user.email string Obligatorio

reaction.reactor.user.displayName string

Nombre visible legible para las personas: el nombre y el apellido de la cuenta, cada uno sin espacios al principio ni al final, unidos por un espacio; exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se haya podido resolver.

reaction.reactor.user.handle string

El nombre de usuario reclamado en el perfil (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite en el caso de usuarios sin un nombre de usuario reclamado y de perfiles no públicos.

reaction.reactor.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un installation user token, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo editara o eliminara después. Está ausente cuando el usuario actuó directamente y puede estar ausente si los datos de delegación no están disponibles.

reaction.reactor.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

reaction.reactor.user.performedVia.app.id cadena

reaction.reactor.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

reaction.reactor.app object

reaction.reactor.app.id string

reaction.reactor.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

reaction.reactor.serviceAccount objeto

reaction.reactor.serviceAccount.id string

Ejemplo 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 revisión de pull request

EVENTpull_request.review.submittedpull_request.review.dismissed

Campos de carga útil

pullRequest object

La solicitud de incorporación de cambios en la que se registró la revisión.

pullRequest.id string

Id inmutable del cambio de Origin.

pullRequest.number string

pullRequest.repository object

Referencia del repositorio para esta solicitud de extracción.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner object

El propietario de un repositorio.

pullRequest.repository.owner.slug string

Nombre único y apto para URL del propietario.

pullRequest.repository.owner.id string

ID único del espacio de nombres propietario.

pullRequest.repository.owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

review object

La revisión que se envió o se descartó. Al descartarse, se establece review.dismissal.

review.id string

Identificador de revisión de Stable Origin.

review.author object

El principal que creó la revisión.

review.author.user object

review.author.user.id string

review.author.user.email string Obligatorio

review.author.user.displayName string

Nombre para mostrar legible para las personas: el nombre y el apellido de la cuenta, ambos sin espacios al principio ni al final y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, del id ni de ningún otro campo. También puede faltar en las cargas útiles de los webhooks cuyo actor no se haya podido resolver.

review.author.user.handle string

El identificador de perfil que el usuario ha reclamado (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite en el caso de usuarios sin un identificador reclamado y de perfiles no públicos.

review.author.user.performedVia object

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de la instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado después. Ausente cuando el usuario actuó directamente; también puede estar ausente cuando no hay datos de delegación disponibles.

review.author.user.performedVia.app object

La aplicación que actuó en nombre del usuario.

review.author.user.performedVia.app.id string

review.author.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada de primera parte de Cherri Code.

review.author.app object

review.author.app.id string

review.author.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada de primera parte de Cherri Code.

review.author.serviceAccount object

review.author.serviceAccount.id string

review.verdict string

Uno de estos valores: approve, request_changes, comment.

review.body string

Resumen de la revisión en texto libre. Vacío cuando el revisor no dejó ningún resumen.

review.submittedAt string

Cuándo se envió la revisión. No establecido para una revisión en borrador no enviada. Marca de tiempo RFC 3339.

review.pullRequestVersion object

La versión del pull request y el SHA del head a los que se aplica el veredicto.

review.pullRequestVersion.number string

Número de versión monótono dentro del pull request (basado en 1).

review.pullRequestVersion.headSha string

SHA del commit HEAD de esta versión.

review.pullRequestVersion.baseSha string

SHA del commit base contra el que se compara esta versión.

review.dismissal objeto

Se establece una vez que se ha descartado la revisión; está ausente mientras el veredicto siga contando en el estado de revisión del pull request.

review.dismissal.dismissedBy object

El principal que descartó la revisión. Ausente cuando el descarte se registró bajo un tipo de actor que esta API no expone.

review.dismissal.dismissedBy.user object

review.dismissal.dismissedBy.user.id string

review.dismissal.dismissedBy.user.email string Obligatorio

review.dismissal.dismissedBy.user.displayName string

Nombre para mostrar legible: el nombre y el apellido de la cuenta, ambos sin espacios al principio ni al final y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, del id ni de ningún otro campo. También puede faltar en las cargas útiles de los webhooks cuyo actor no se haya podido resolver.

review.dismissal.dismissedBy.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Presente solo mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un identificador reclamado y para perfiles no públicos.

review.dismissal.dismissedBy.user.performedVia object

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de la instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado después. Ausente cuando el usuario actuó directamente; también puede estar ausente si no hay datos de delegación disponibles.

review.dismissal.dismissedBy.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

review.dismissal.dismissedBy.user.performedVia.app.id string

review.dismissal.dismissedBy.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada de primera parte de Cherri Code.

review.dismissal.dismissedBy.app object

review.dismissal.dismissedBy.app.id string

review.dismissal.dismissedBy.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada de primera parte de Cherri Code.

review.dismissal.dismissedBy.serviceAccount object

review.dismissal.dismissedBy.serviceAccount.id string

review.dismissal.dismissedAt string

Cuándo se descartó la revisión. Marca de tiempo RFC 3339.

review.dismissal.message string

Motivo registrado junto con el rechazo. Las revisiones que se retiran automáticamente porque su autor envió un veredicto más reciente incluyen un motivo generado por el servidor.

Ejemplo 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": "Aprobado. El schema de telemetría coincide con la spec.",    "submittedAt": "2026-08-02T15:00:00Z",    "pullRequestVersion": {      "number": "3",      "headSha": "9a41f0c3d2b8e7f6a5c4d3e2f1b0a9c8d7e6f5a4",      "baseSha": "3b1f9c2d8a7e6f5049c8b7a6d5e4f3a2b1c0d9e8"    }  }}

Eventos del revisor de solicitudes de incorporación de cambios

EVENTpull_request.reviewer.addedpull_request.reviewer.removedpull_request.reviewer.rerequested

Un cambio en los revisores solicitados del pull request. Consulta el conjunto pendiente actual con ListPullRequestRequestedReviewers.

Campos de la carga útil

pullRequest object

El pull request cuyos requested reviewers cambiaron.

pullRequest.id string

Identificador del cambio de Origin inmutable.

pullRequest.number string

pullRequest.repository object

Referencia del repositorio de este pull request.

pullRequest.repository.id string

pullRequest.repository.name string

pullRequest.repository.owner objeto

El owner de un repo.

pullRequest.repository.owner.slug string

Nombre único del propietario, compatible con URL.

pullRequest.repository.owner.id string

ID único del espacio de nombres propietario.

pullRequest.repository.owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de estos valores: team, user.

reviewer object

El revisor solicitado al que hace referencia el evento.

reviewer.user objeto

reviewer.user.id string

reviewer.user.email string Obligatorio

reviewer.user.displayName string

Nombre visible legible por humanos: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que renderiza la UI del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del email, el id ni ningún otro campo. También puede estar ausente en payloads de webhook cuyo actor no se haya podido resolver.

reviewer.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite en el caso de los usuarios sin un identificador reclamado y de los perfiles no públicos.

reviewer.user.performedVia objeto

Se establece cuando una aplicación actúa en nombre de este usuario con un token de usuario de instalación, para la acción descrita en este campo de actor. Por ejemplo, en el campo de autor de un comentario, identifica a la aplicación que creó el comentario, no a un actor que lo editó o eliminó después. Se omite cuando el usuario actúa directamente y también puede omitirse si no hay datos de delegación disponibles.

reviewer.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

reviewer.user.performedVia.app.id string

reviewer.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

reviewer.group object

Identidad pública del group de Origin (grp_…). Actualmente solo incluye el id.

reviewer.group.id string

createdVia string

Cómo se creó la solicitud de revisión. Uno de estos valores: manual, codeowners.

createdBy object

El principal que creó la solicitud de revisión, si se conoce.

createdBy.user object

createdBy.user.id string

createdBy.user.email string Obligatorio

createdBy.user.displayName string

Nombre visible legible por humanos: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se haya podido resolver.

createdBy.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite en el caso de los usuarios sin un identificador reclamado y de los perfiles no públicos.

createdBy.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un installation user token, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado después. Está ausente cuando el usuario actuó directamente y puede estar ausente cuando no hay datos de delegación disponibles.

createdBy.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

createdBy.user.performedVia.app.id string

createdBy.user.performedVia.app.displayName string

El display name registrado de la app; nunca está vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor de fachada first-party de Cherri Code.

createdBy.app object

createdBy.app.id string

createdBy.app.displayName string

El nombre visible registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no pudo resolverse y en el actor de fachada propio de Cherri Code.

createdBy.serviceAccount object

createdBy.serviceAccount.id string

createdAt string

Cuándo se creó la solicitud de revisión. Marca de tiempo RFC 3339.

Ejemplo 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 ejecución de comprobaciones

EVENTrepository.check_run.createdrepository.check_run.updatedrepository.check_run.completed

Instantánea confirmada de un evento del ciclo de vida de una ejecución de verificación de Origin.

Campos de carga útil

repository objeto

El repositorio al que pertenece la ejecución de comprobación.

repository.id string

repository.name string

repository.owner object

El propietario de un repositorio.

repository.owner.slug string

Nombre único y compatible con URL del propietario.

repository.owner.id string

ID único del espacio de nombres del propietario.

repository.owner.type string

team o user. Solo de salida; no se establece cuando se desconoce. Uno de team, user.

checkSuite objeto

La suite a la que pertenece la ejecución de la comprobación.

checkSuite.id string

ID único de la suite asignado por el servidor.

checkSuite.repository object

Repositorio al que pertenece la suite.

checkSuite.repository.id string

checkSuite.repository.name string

checkSuite.repository.owner object

El propietario de un repositorio.

checkSuite.repository.owner.slug string

Nombre único y compatible con URL del propietario.

checkSuite.repository.owner.id string

ID único del espacio de nombres del propietario.

checkSuite.repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

checkSuite.sha string

SHA del commit HEAD resuelto al que está asociada la suite (hex en minúsculas).

checkSuite.key string

Clave de idempotencia elegida por la aplicación para la suite.

checkSuite.name string

Nombre de la suite visible para el usuario.

checkSuite.detailsUrl string

Enlace con más detalles sobre la suite en su conjunto, si se ha establecido.

checkSuite.createdAt string

Marca de tiempo RFC 3339.

checkSuite.updatedAt string

Marca de tiempo RFC 3339.

checkSuite.externalId string

Identidad inmutable asignada por el proveedor para este intento de suite.

checkSuite.actor objeto

Principal que produjo la suite.

checkSuite.actor.user objeto

checkSuite.actor.user.id string

checkSuite.actor.user.email string Obligatorio

checkSuite.actor.user.displayName string

Nombre visible legible para las personas: el nombre y el apellido de la cuenta, cada uno sin espacios al principio ni al final y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el identificador ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se haya podido resolver.

checkSuite.actor.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un identificador reclamado y para los perfiles no públicos.

checkSuite.actor.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo editara o eliminara después. Está ausente cuando el usuario actuó directamente y también puede estarlo si no hay datos de delegación disponibles.

checkSuite.actor.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

checkSuite.actor.user.performedVia.app.id string

checkSuite.actor.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de la fachada de Cherri Code de primera parte.

checkSuite.actor.app objeto

checkSuite.actor.app.id string

checkSuite.actor.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor fachada Cherri Code de primera parte.

checkSuite.actor.serviceAccount objeto

checkSuite.actor.serviceAccount.id string

checkRun objeto

La instantánea de la ejecución de verificación en este punto del ciclo de vida.

checkRun.id string

ID único de la ejecución de comprobación asignado por el servidor.

checkRun.repository object

Repositorio al que pertenece la ejecución de comprobación.

checkRun.repository.id string

checkRun.repository.name string

checkRun.repository.owner object

El propietario de un repositorio.

checkRun.repository.owner.slug string

Nombre único y compatible con URL del propietario.

checkRun.repository.owner.id string

ID único del espacio de nombres del propietario.

checkRun.repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

checkRun.checkSuite objeto

Suite a la que pertenece esta ejecución de verificación.

checkRun.checkSuite.id string

checkRun.sha cadena

SHA del commit principal resuelto al que está asociada la ejecución de comprobación (hexadecimal en minúsculas).

checkRun.key string

Clave de idempotencia elegida por la app para la ejecución de comprobación.

checkRun.name string

Nombre del check-run visible para el usuario.

checkRun.status string

Estado del ciclo de vida. failing es una ejecución que aún está en curso y cuya aplicación ya sabe que no superará la comprobación: pendiente para las barreras y las comprobaciones obligatorias, aún sin conclusion, y un aviso anticipado para quienes consultan su estado. rerequested es una ejecución completada cuya repetición se solicitó y a la que la aplicación responsable aún no ha respondido: pendiente para quienes consultan su estado (se muestra como queued), con conclusion y los tiempos que siguen describiendo el intento sustituido. Solo Origin puede establecerlo al volver a solicitarla (RerequestCheckRun); las aplicaciones no pueden publicarlo. Uno de estos valores: queued, in_progress, completed, rerequested, failing.

checkRun.conclusion string

Presente solo si status es completed o rerequested. Para una ejecución rerequested, es el veredicto del intento sustituido: trate la ejecución como pendiente y lea conclusion solo cuando status == completed. Uno de los siguientes valores: success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRun.detailsUrl string

Enlace a más detalles sobre esta ejecución de comprobación específica, si se ha establecido.

checkRun.externalUpdatedAt string

La hora de la última actualización del sistema externo utilizada para el ordenamiento. Marca de tiempo RFC 3339.

checkRun.startedAt string

Cuándo comenzó la ejecución de la comprobación, si se informa. Marca de tiempo RFC 3339.

checkRun.completedAt cadena

Cuando se completó la ejecución de la comprobación, si se informó. Marca de tiempo RFC 3339.

checkRun.createdAt string

Marca de tiempo RFC 3339.

checkRun.updatedAt string

La última vez que Origin escribió la ejecución. No se actualiza por una publicación que se ignoró por obsoleta o que repitió los valores almacenados (véase PostCheckRunResponse.outcome), por lo que no puede distinguir entre ambas. Marca de tiempo RFC 3339.

checkRun.externalId cadena

Identidad inmutable asignada por el proveedor para este intento de comprobación (ver CheckRunInput.external_id: se recomienda una por ejecución).

checkRun.actor objeto

Principal que generó la ejecución de comprobación; siempre el actor de la suite propietaria.

checkRun.actor.user objeto

checkRun.actor.user.id string

checkRun.actor.user.email string Obligatorio

checkRun.actor.user.displayName string

Nombre para mostrar legible para humanos: el nombre y el apellido de la cuenta, cada uno sin espacios al principio ni al final y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el identificador ni ningún otro campo. También puede estar ausente en las cargas útiles de los webhooks cuyo actor no se haya podido resolver.

checkRun.actor.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un identificador reclamado y para los perfiles no públicos.

checkRun.actor.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo editara o eliminara después. Está ausente cuando el usuario actuó directamente y también puede estarlo si no hay datos de delegación disponibles.

checkRun.actor.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

checkRun.actor.user.performedVia.app.id cadena

checkRun.actor.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de la fachada de Cherri Code de primera parte.

checkRun.actor.app object

checkRun.actor.app.id string

checkRun.actor.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor fachada Cherri Code de primera parte.

checkRun.actor.serviceAccount objeto

checkRun.actor.serviceAccount.id string

checkRun.output object

Salida legible por humanos de esta ejecución de comprobación, si se ha establecido.

checkRun.output.title string

Título breve para la salida. Longitud máxima: 255 caracteres.

checkRun.output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.deadlineAt string

Fecha límite opcional. Si se omite o no se establece, no hay caducidad. Se elimina cuando se completa la ejecución, incluso cuando vence como timed_out (consulte CheckRunInput.deadline_at). Marca de tiempo RFC 3339.

checkRun.isRerequestable boolean

Indica si la app que genera el informe declaró que esta ejecución se puede volver a solicitar (CheckRunInput.is_rerequestable).

checkRun.rerequestedAt string

Se establece mientras hay una nueva solicitud pendiente; se borra cuando el proveedor vuelve a publicar. Si no está establecido, significa que no hay ninguna nueva solicitud pendiente. Mientras esté establecido, status es rerequested y la ejecución permanece pendiente en el estado de CI del commit (conclusion y los tiempos corresponden al resultado sustituido); la aplicación propietaria responde publicando la ejecución que decidió mantener al declarar is_rerequestable: una nueva ejecución para la misma key o una actualización de esta ejecución (que borra este campo). Después, la ejecución podrá volver a solicitarse. Marca de tiempo RFC 3339.

checkRun.rerequestedBy object

Principal que volvió a solicitar la ejecución. Está presente únicamente si rerequested_at está definido; se elimina junto con este cuando responde la aplicación propietaria.

checkRun.rerequestedBy.user object

checkRun.rerequestedBy.user.id string

checkRun.rerequestedBy.user.email string Obligatorio

checkRun.rerequestedBy.user.displayName string

Nombre para mostrar legible para humanos: el nombre y el apellido de la cuenta, cada uno sin espacios al principio ni al final y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el identificador ni ningún otro campo. También puede estar ausente en las cargas útiles de los webhooks cuyo actor no se haya podido resolver.

checkRun.rerequestedBy.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un identificador reclamado y para los perfiles no públicos.

checkRun.rerequestedBy.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, identifica a la aplicación que creó el comentario, no a un actor que lo editó o eliminó posteriormente. Está ausente cuando el usuario actuó directamente y puede estar ausente si los datos de delegación no están disponibles.

checkRun.rerequestedBy.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

checkRun.rerequestedBy.user.performedVia.app.id string

checkRun.rerequestedBy.user.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de la fachada de Cherri Code de primera parte.

checkRun.rerequestedBy.app objeto

checkRun.rerequestedBy.app.id string

checkRun.rerequestedBy.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de la fachada de Cherri Code de primera parte.

checkRun.rerequestedBy.serviceAccount objeto

checkRun.rerequestedBy.serviceAccount.id string

Ejemplo 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."    }  }}

Ejecución de verificación solicitada nuevamente

EVENTrepository.check_run.rerequested

Carga útil del webhook repository.check_run.rerequested, entregada solo a la aplicación propietaria de la ejecución de verificación. Responda publicando una ejecución nueva para el mismo SHA de head y la misma clave: una ejecución nueva (con un external_id nuevo) o una actualización de la ejecución cuya solicitud se volvió a realizar. La ejecución marcada muestra status: rerequested (su conclusión y sus tiempos corresponden al resultado reemplazado) hasta que la publicación de respuesta borra rerequested_at. Cada nueva solicitud aceptada emite un evento, y se puede volver a solicitar una ejecución una vez respondida; por lo tanto, deduplique las entregas repetidas usando únicamente el ID del evento. check_run.rerequested_at contiene la marca de la solicitud pendiente. La carga útil no incluye contexto de solicitud de incorporación de cambios (las ejecuciones de verificación se vinculan a (repository, sha)): un consumidor que necesite la solicitud de incorporación de cambios puede resolverla a partir de check_run.sha mediante su propio mapeo de ramas head, o mediante ListPullRequests filtrado por la rama head que compiló.

Campos de carga útil

repository objeto

El repositorio al que pertenece la ejecución de comprobación.

repository.id string

repository.name string

repository.owner object

El propietario de un repositorio.

repository.owner.slug string

Nombre único del propietario, apto para URL.

repository.owner.id string

ID único del espacio de nombres propietario.

repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

checkSuite objeto

La suite a la que pertenece la ejecución de la comprobación.

checkSuite.id string

ID único de la suite asignado por el servidor.

checkSuite.repository object

Repositorio al que pertenece la suite.

checkSuite.repository.id string

checkSuite.repository.name string

checkSuite.repository.owner object

El propietario de un repositorio.

checkSuite.repository.owner.slug string

Nombre único compatible con la URL del propietario.

checkSuite.repository.owner.id string

ID único del espacio de nombres propietario.

checkSuite.repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

checkSuite.sha string

SHA del commit de cabecera resuelto al que está asociada la suite (hexadecimal en minúsculas).

checkSuite.key string

Clave de idempotencia elegida por la aplicación para la suite.

checkSuite.name string

Nombre de la suite visible para el usuario.

checkSuite.detailsUrl string

Enlace con más detalles sobre la suite en su conjunto, si se ha establecido.

checkSuite.createdAt string

Marca de tiempo RFC 3339.

checkSuite.updatedAt string

Marca de tiempo RFC 3339.

checkSuite.externalId string

Identidad inmutable asignada por el proveedor para este intento de la suite.

checkSuite.actor objeto

Director que produjo la suite.

checkSuite.actor.user objeto

checkSuite.actor.user.id string

checkSuite.actor.user.email string Obligatorio

checkSuite.actor.user.displayName string

Nombre legible para humanos: el nombre y el apellido de la cuenta, cada uno recortado, unidos por un espacio — exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se sintetiza a partir del correo electrónico, el id ni de ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se pudo resolver.

checkSuite.actor.user.handle string

El nombre de usuario reclamado del usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo aparece mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un nombre de usuario reclamado y para los perfiles no públicos.

checkSuite.actor.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado después. Se omite cuando el usuario actuó directamente y puede omitirse cuando no hay datos de delegación disponibles.

checkSuite.actor.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

checkSuite.actor.user.performedVia.app.id string

checkSuite.actor.user.performedVia.app.displayName string

El nombre visible registrado de la app, nunca vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

checkSuite.actor.app objeto

checkSuite.actor.app.id string

checkSuite.actor.app.displayName string

El nombre visible registrado de la app, nunca vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

checkSuite.actor.serviceAccount objeto

checkSuite.actor.serviceAccount.id string

checkRun objeto

La ejecución de comprobación solicitada nuevamente (status: rerequested); check_run.rerequested_at registra la marca temporal y check_run.rerequested_by registra la entidad que la solicitó.

checkRun.id string

ID único de la ejecución de la comprobación asignado por el servidor.

checkRun.repository object

Repositorio al que pertenece la ejecución de comprobación.

checkRun.repository.id string

checkRun.repository.name string

checkRun.repository.owner objeto

El propietario de un repositorio.

checkRun.repository.owner.slug string

Nombre único del propietario apto para URL.

checkRun.repository.owner.id string

ID único del espacio de nombres propietario.

checkRun.repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

checkRun.checkSuite objeto

Conjunto de pruebas al que pertenece esta ejecución de comprobación.

checkRun.checkSuite.id string

checkRun.sha string

SHA del commit head resuelto al que está asociado el check run (hexadecimal en minúsculas).

checkRun.key string

Clave de idempotencia elegida por la aplicación para la ejecución de comprobación.

checkRun.name cadena

Nombre de la ejecución de verificación visible para el usuario.

checkRun.status string

Estado del ciclo de vida. failing es una ejecución todavía en curso que su aplicación ya sabe que no se superará: pendiente para los controles y las comprobaciones obligatorias, aún sin conclusion, y un aviso anticipado para los lectores. rerequested es una ejecución completada cuya re-ejecución se solicitó y que la aplicación propietaria aún no ha respondido: pendiente para los lectores (se representa como queued), con conclusion y las marcas de tiempo describiendo todavía el intento sustituido. Solo lo establece Origin al volver a solicitarla (RerequestCheckRun); las aplicaciones no pueden publicarlo. Uno de queued, in_progress, completed, rerequested, failing.

checkRun.conclusion cadena

Presente solo si status es completed o rerequested. Para una ejecución rerequested, es el veredicto del intento reemplazado: trata la ejecución como pendiente y lee conclusion solo cuando status == completed. Uno de success, failure, neutral, cancelled, skipped, timed_out, action_required, stale.

checkRun.detailsUrl string

Enlace con más detalles sobre esta ejecución de verificación específica, si está establecido.

checkRun.externalUpdatedAt string

La hora de la última actualización del sistema externo utilizada para el ordenamiento. Marca de tiempo RFC 3339.

checkRun.startedAt string

Cuando se inició la ejecución de la comprobación, si se informó. Marca de tiempo RFC 3339.

checkRun.completedAt string

Cuando se completó la ejecución de la comprobación, si se informó. Marca de tiempo RFC 3339.

checkRun.createdAt string

Marca de tiempo RFC 3339.

checkRun.updatedAt string

Cuándo Origin escribió la ejecución por última vez. No se actualiza con una publicación que se ignoró por obsoleta o que repitió los valores almacenados (véase PostCheckRunResponse.outcome), por lo que no permite distinguir entre ambas. Marca de tiempo RFC 3339.

checkRun.externalId string

Identidad inmutable asignada por el proveedor para este intento de comprobación (véase CheckRunInput.external_id: se recomienda una por ejecución).

checkRun.actor objeto

Principal que generó la ejecución de comprobación; siempre el actor de la suite propietaria.

checkRun.actor.user objeto

checkRun.actor.user.id string

checkRun.actor.user.email string Obligatorio

checkRun.actor.user.displayName string

Nombre legible para humanos: el nombre y el apellido de la cuenta, cada uno recortado, unidos por un espacio — exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se sintetiza a partir del correo electrónico, el id ni de ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se pudo resolver.

checkRun.actor.user.handle string

El nombre de usuario reclamado del perfil (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo aparece mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un nombre de usuario reclamado y para los perfiles no públicos.

checkRun.actor.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado después. Se omite cuando el usuario actuó directamente, y puede omitirse cuando no hay datos de delegación disponibles.

checkRun.actor.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

checkRun.actor.user.performedVia.app.id cadena

checkRun.actor.user.performedVia.app.displayName string

El nombre visible registrado de la app, nunca vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

checkRun.actor.app object

checkRun.actor.app.id string

checkRun.actor.app.displayName string

El nombre visible registrado de la app, nunca vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

checkRun.actor.serviceAccount objeto

checkRun.actor.serviceAccount.id string

checkRun.output object

Salida legible para humanos de esta ejecución de comprobación, si se establece.

checkRun.output.title string

Título breve de la salida. Longitud máxima: 255 caracteres.

checkRun.output.summary string

Resumen de la salida. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.output.text string

Salida detallada. Puede contener Markdown. Tamaño máximo en UTF-8: 65535 bytes.

checkRun.deadlineAt string

Fecha límite opcional. Omitir o dejar sin establecer significa que no hay caducidad. Se elimina cuando la ejecución finaliza, incluso si caduca como timed_out (véase CheckRunInput.deadline_at). Marca de tiempo RFC 3339.

checkRun.isRerequestable boolean

Indica si la app que genera el informe declaró que esta ejecución se puede volver a solicitar (CheckRunInput.is_rerequestable).

checkRun.rerequestedAt string

Se establece mientras hay una re-solicitud pendiente; se borra cuando el proveedor vuelve a publicar. No establecido significa que no hay ninguna re-solicitud pendiente. Mientras esté establecido, status es rerequested y la ejecución permanece en el estado de CI del commit como pendiente (conclusion y los tiempos son el resultado reemplazado); la aplicación propietaria responde publicando la ejecución a la que se comprometió declarando is_rerequestable — una nueva ejecución para la misma key, o una actualización de esta ejecución (que borra este campo) — tras lo cual la ejecución puede volver a solicitarse. Marca de tiempo RFC 3339.

checkRun.rerequestedBy object

Principal que volvió a solicitar la ejecución. Presente solo si rerequested_at está establecido; se borra junto con él cuando la aplicación propietaria responde.

checkRun.rerequestedBy.user objeto

checkRun.rerequestedBy.user.id string

checkRun.rerequestedBy.user.email string Obligatorio

checkRun.rerequestedBy.user.displayName string

Nombre legible para humanos: el nombre y el apellido de la cuenta, cada uno recortado, unidos por un espacio — exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se sintetiza a partir del correo electrónico, el id ni de ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se pudo resolver.

checkRun.rerequestedBy.user.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea público; se omite para los usuarios sin un identificador reclamado y para los perfiles no públicos.

checkRun.rerequestedBy.user.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado después. Se omite cuando el usuario actuó directamente, y puede omitirse cuando no hay datos de delegación disponibles.

checkRun.rerequestedBy.user.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

checkRun.rerequestedBy.user.performedVia.app.id string

checkRun.rerequestedBy.user.performedVia.app.displayName string

El nombre visible registrado de la app, nunca vacío cuando está presente. Se omite en los payloads cuya app no se pudo resolver y en el actor fachada de Cherri Code de primera parte.

checkRun.rerequestedBy.app object

checkRun.rerequestedBy.app.id string

checkRun.rerequestedBy.app.displayName string

El nombre para mostrar registrado de la aplicación, que nunca está vacío cuando aparece. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

checkRun.rerequestedBy.serviceAccount objeto

checkRun.rerequestedBy.serviceAccount.id string

Ejemplo 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]"      }    }  }}

Instalación creada

EVENTOinstallation.created

Campos del payload

installation object

La instantánea de la instalación en el momento del evento.

installation.id string

installation.appId string

El identificador de la app instalada; el mismo valor que app.id en el payload.

installation.target objeto

El owner de un repo.

installation.target.slug string

Nombre único del propietario, apto para URL.

installation.target.id string

ID único del espacio de nombres del owner.

installation.target.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.repoSelectionMode string

Uno de estos valores: all, selected.

installation.repositories array

Vacío cuando repository_selection es "all". Limitado a 5000; consulta repositories_count para conocer el total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

El owner de un repo.

installation.repositories[].owner.slug string

Nombre único del owner compatible con URL.

installation.repositories[].owner.id string

ID único del espacio de nombres del propietario.

installation.repositories[].owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.scopes array

installation.repositoriesCount entero

Total real; 0 cuando repository_selection es "all".

installation.createdAt string

Timestamp en formato RFC 3339.

installation.updatedAt string

Timestamp en formato RFC 3339.

installation.deletedAt string

Marca de tiempo en formato RFC 3339.

installation.suspendedAt string

Se establece mientras la instalación está suspendida; queda sin establecer cuando está activa. Marca de tiempo RFC 3339.

installation.installedBy object

Usuario que instaló originalmente la app.

installation.installedBy.id string

installation.installedBy.email string Obligatorio

installation.installedBy.displayName string

Nombre visible legible por humanos: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en los payloads de webhook cuyo actor no se haya podido resolver.

installation.installedBy.handle string

El handle de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un handle reclamado y para los perfiles no públicos.

installation.installedBy.performedVia objeto

Se establece cuando una app actuó en nombre de este usuario con un installation user token, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, identifica la app que creó el comentario, no un actor que lo haya editado o eliminado después. Está ausente cuando el usuario actuó directamente y puede estar ausente si no hay datos de delegación disponibles.

installation.installedBy.performedVia.app object

La aplicación que actuó en nombre del usuario.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

El display name registrado de la app; nunca está vacío cuando está presente. Se omite en los payloads cuya app no se haya podido resolver y en el actor de fachada propio de Cherri Code.

app object

La app a la que pertenece la instalación.

app.id string

app.displayName string

El display name registrado de la app; nunca está vacío cuando está presente. Se omite cuando la hidratación en el momento del enqueue no pudo resolver la app.

Ejemplo 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"  }}

Instalación actualizada

EVENTOinstallation.updated

Campos de la carga útil

installation object

La instantánea de la instalación en el momento del evento.

installation.id string

installation.appId string

El identifier de la app instalada; el mismo valor que app.id en el payload.

installation.target objeto

El propietario de un repositorio.

installation.target.slug string

Nombre único del owner compatible con URL.

installation.target.id string

ID único del espacio de nombres del propietario.

installation.target.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.repoSelectionMode string

Uno de estos valores: all, selected.

installation.repositories array

Vacío cuando repository_selection es "all". Limitado a 5000; consulta repositories_count para conocer el total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

El owner de un repo.

installation.repositories[].owner.slug string

Nombre único del propietario compatible con URL.

installation.repositories[].owner.id string

ID único del espacio de nombres del propietario.

installation.repositories[].owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.scopes array

installation.repositoriesCount entero

Total real; 0 cuando repository_selection es "all".

installation.createdAt string

Marca de tiempo en formato RFC 3339.

installation.updatedAt string

Timestamp en formato RFC 3339.

installation.deletedAt string

Marca de tiempo en formato RFC 3339.

installation.suspendedAt string

Se establece mientras la instalación está suspendida; queda sin establecer cuando está activa. Marca de tiempo RFC 3339.

installation.installedBy object

Usuario que instaló originalmente la app.

installation.installedBy.id string

installation.installedBy.email string Obligatorio

installation.installedBy.displayName string

Nombre visible legible por humanos: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que muestra la UI del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del email, el id ni ningún otro campo. También puede estar ausente en los payloads de webhook cuyo actor no se haya podido resolver.

installation.installedBy.handle string

El handle de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un handle reclamado y para los perfiles no públicos.

installation.installedBy.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario indica la aplicación que creó el comentario, no un actor que lo haya editado o eliminado posteriormente. Está ausente cuando el usuario actuó directamente y también puede estar ausente si no se dispone de datos de delegación.

installation.installedBy.performedVia.app objeto

La app que actuó en nombre del usuario.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de la fachada propia de Cherri Code.

app object

La app a la que pertenece la instalación.

app.id string

app.displayName string

El nombre para mostrar registrado de la app; nunca está vacío cuando está presente. Se omite cuando la hidratación en el momento de encolar no pudo resolver la app.

Ejemplo 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"  }}

Instalación suspendida

EVENTOinstallation.suspended

Campos de la carga útil

installation object

La instantánea de la instalación en el momento del evento.

installation.id string

installation.appId string

El identificador de la app instalada; el mismo valor que app.id en el payload.

installation.target objeto

El dueño de un repo.

installation.target.slug string

Nombre único del owner compatible con URL.

installation.target.id string

ID único del espacio de nombres del owner.

installation.target.type string

team o user. Solo de salida; sin establecer cuando se desconoce. Uno de team, user.

installation.repoSelectionMode string

Uno de estos valores: all, selected.

installation.repositories array

Vacío cuando repository_selection es "all". Limitado a 5000; consulta repositories_count para conocer el total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

El propietario de un repositorio.

installation.repositories[].owner.slug string

Nombre único del propietario compatible con URL.

installation.repositories[].owner.id string

ID único del espacio de nombres del propietario.

installation.repositories[].owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.scopes array

installation.repositoriesCount entero

Total real; 0 cuando repository_selection es "all".

installation.createdAt string

Marca de tiempo en formato RFC 3339.

installation.updatedAt string

Timestamp en formato RFC 3339.

installation.deletedAt string

Marca de tiempo en formato RFC 3339.

installation.suspendedAt string

Se establece mientras la instalación está suspendida; se desactiva cuando está activa. Marca de tiempo RFC 3339.

installation.installedBy object

Usuario que instaló originalmente la app.

installation.installedBy.id string

installation.installedBy.email string Obligatorio

installation.installedBy.displayName string

Nombre para mostrar legible para las personas: el nombre y el apellido de la cuenta, cada uno sin espacios al inicio ni al final y unidos por un espacio; exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se pudo resolver.

installation.installedBy.handle string

El nombre de usuario reclamado del perfil (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo aparece mientras el perfil del usuario sea público; se omite en el caso de usuarios que no hayan reclamado un nombre de usuario y de perfiles no públicos.

installation.installedBy.performedVia objeto

Se establece cuando una aplicación actuó en nombre de este usuario mediante un token de usuario de instalación para realizar la acción que describe este campo de actor. Por ejemplo, en el autor de un comentario, identifica la aplicación que creó el comentario, no a un actor que lo editó o eliminó posteriormente. Está ausente cuando el usuario actuó directamente y también puede estarlo cuando los datos de delegación no están disponibles.

installation.installedBy.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

El nombre visible registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de fachada propio de Cherri Code.

app object

La app a la que pertenece la instalación.

app.id string

app.displayName string

El nombre para mostrar registrado de la app, que nunca está vacío cuando está presente. Se omite cuando la hidratación al momento de encolar no pudo resolver la app.

Ejemplo 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"  }}

Instalación reactivada

EVENTOinstallation.unsuspended

Campos de carga útil

installation object

La instantánea de la instalación en el momento del evento.

installation.id string

installation.appId string

El identificador de la app instalada; el mismo valor que app.id en el payload.

installation.target objeto

El propietario de un repositorio.

installation.target.slug string

Nombre único del propietario, apto para URL.

installation.target.id string

ID único del espacio de nombres del propietario.

installation.target.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.repoSelectionMode string

Uno de estos valores: all, selected.

installation.repositories array

Vacío cuando repository_selection es "all". Limitado a 5,000; consulta repositories_count para conocer el total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

El propietario de un repositorio.

installation.repositories[].owner.slug string

Nombre único del propietario compatible con URL.

installation.repositories[].owner.id string

ID único del espacio de nombres del propietario.

installation.repositories[].owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.scopes array

installation.repositoriesCount entero

Total real; 0 cuando repository_selection es "all".

installation.createdAt string

Timestamp en formato RFC 3339.

installation.updatedAt string

Timestamp en formato RFC 3339.

installation.deletedAt string

Timestamp en formato RFC 3339.

installation.suspendedAt string

Se establece mientras la instalación está suspendida; se elimina cuando está activa. Marca de tiempo RFC 3339.

installation.installedBy object

Usuario que instaló originalmente la app.

installation.installedBy.id string

installation.installedBy.email string Obligatorio

installation.installedBy.displayName string

Nombre visible legible por humanos: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que muestra la interfaz del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del correo electrónico, el id ni ningún otro campo. También puede estar ausente en las cargas útiles de webhook cuyo actor no se haya podido resolver.

installation.installedBy.handle string

El identificador de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo se muestra mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un identificador reclamado y para los perfiles no públicos.

installation.installedBy.performedVia objeto

Se establece cuando una app actúa en nombre de este usuario mediante un token de usuario de instalación para realizar la acción descrita en este campo de actor. Por ejemplo, en el campo de autor de un comentario, identifica a la app que creó el comentario, no a un actor que lo editó o eliminó después. Se omite cuando el usuario actúa directamente y también puede omitirse si los datos de delegación no están disponibles.

installation.installedBy.performedVia.app objeto

La aplicación que actuó en nombre del usuario.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

El nombre para mostrar registrado de la aplicación; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya aplicación no se pudo resolver y en el actor de la fachada propia de Cherri Code.

app object

La app a la que pertenece la instalación.

app.id string

app.displayName string

El display name registrado de la app; nunca está vacío cuando está presente. Se omite cuando la hidratación en el momento del enqueue no pudo resolver la app.

Ejemplo 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"  }}

Instalación eliminada

EVENTOinstallation.deleted

Campos del payload

installation object

La instantánea de la instalación en el momento del evento.

installation.id string

installation.appId string

El identificador de la app instalada; el mismo valor que app.id en el payload.

installation.target objeto

El propietario de un repositorio.

installation.target.slug string

Nombre único del propietario compatible con URL.

installation.target.id string

ID único del espacio de nombres del propietario.

installation.target.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.repoSelectionMode string

Uno de estos valores: all, selected.

installation.repositories array

Vacío cuando repository_selection es "all". Limitado a 5,000; consulta repositories_count para conocer el total real.

installation.repositories[].id string

installation.repositories[].name string

installation.repositories[].owner object

El propietario de un repositorio.

installation.repositories[].owner.slug string

Nombre único del propietario compatible con las URL.

installation.repositories[].owner.id string

ID único del espacio de nombres del propietario.

installation.repositories[].owner.type string

team o user. Disponible solo en la salida; sin establecer cuando se desconoce. Uno de team, user.

installation.scopes array

installation.repositoriesCount entero

Total real; 0 cuando repository_selection es "all".

installation.createdAt string

Timestamp en formato RFC 3339.

installation.updatedAt string

Marca de tiempo en formato RFC 3339.

installation.deletedAt string

Marca de tiempo en formato RFC 3339.

installation.suspendedAt string

Se establece mientras la instalación está suspendida; queda sin establecer cuando está activa. Marca de tiempo RFC 3339.

installation.installedBy object

Usuario que instaló originalmente la app.

installation.installedBy.id string

installation.installedBy.email string Obligatorio

installation.installedBy.displayName string

Nombre visible legible por humanos: el nombre y el apellido de la cuenta, cada uno sin espacios sobrantes y unidos por un espacio: exactamente el nombre que muestra la UI del producto. Se omite cuando la cuenta no tiene nombre; nunca se genera a partir del email, el id ni ningún otro campo. También puede estar ausente en los payloads de webhook cuyo actor no se haya podido resolver.

installation.installedBy.handle string

El handle de perfil reclamado por el usuario (la identidad detrás de cursor.com /@handle), sin el prefijo @. Solo está presente mientras el perfil del usuario sea visible públicamente; se omite para los usuarios sin un handle reclamado y para los perfiles no públicos.

installation.installedBy.performedVia object

Se establece cuando una app actuó en nombre de este usuario con un token de usuario de instalación, para la acción que describe este campo de actor. Por ejemplo, en el campo de autor de un comentario, indica qué app creó el comentario, no un actor que lo editó o eliminó después. No está presente cuando el usuario actuó directamente y también puede faltar si no hay datos de delegación disponibles.

installation.installedBy.performedVia.app objeto

La app que actuó en nombre del usuario.

installation.installedBy.performedVia.app.id string

installation.installedBy.performedVia.app.displayName string

El nombre para mostrar registrado de la app; nunca está vacío cuando está presente. Se omite en las cargas útiles cuya app no se haya podido resolver y en el actor de la fachada propia de Cherri Code.

app object

La app a la que pertenece la instalación.

app.id string

app.displayName string

El nombre para mostrar registrado de la app, nunca vacío cuando está presente. Se omite cuando la hidratación al momento de encolar no pudo resolver la app.

Ejemplo 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"  }}

Anotaciones de ejecución de verificación

EVENTrepository.check_run.annotations.created

Una solicitud de CreateCheckRunAnnotations añadió anotaciones a una ejecución de comprobación (repository.check_run.annotations.created). Las anotaciones solo se pueden añadir (nunca se editan ni se eliminan por separado), así que .created representa todo su ciclo de vida y cada solicitud genera un evento. check_run es una referencia, no una instantánea: consulte GetCheckRun para conocer el estado, la conclusión y la salida de la ejecución. annotations conserva el orden de la solicitud y puede incluir menos elementos que los indicados por annotations_count si Origin limitó la lista para poder entregar el cuerpo; obtenga el resto por páginas con ListCheckRunAnnotations. Como en los demás webhooks de ejecuciones de comprobación, el payload no incluye contexto de pull request: identifique el pull request a partir de sha.

Campos de carga útil

repository objeto

El repositorio al que pertenece la ejecución de comprobación.

repository.id string

repository.name string

repository.owner object

El propietario de un repositorio.

repository.owner.slug string

Nombre único y compatible con URL del propietario.

repository.owner.id string

ID único del espacio de nombres del propietario.

repository.owner.type string

team o user. Solo de salida; no establecido cuando se desconoce. Uno de team, user.

checkRun objeto

La ejecución de comprobación a la que se añadieron las anotaciones, junto con su suite.

checkRun.id string

checkRun.name cadena

checkRun.checkSuite objeto

Suite a la que pertenece la ejecución de la comprobación.

checkRun.checkSuite.id string

sha cadena

SHA del commit principal resuelto al que está asociada la ejecución de comprobación (hexadecimal en minúsculas).

annotations array

Las anotaciones añadidas, en el orden de la solicitud. La lista puede contener menos elementos que annotations_count si Origin limitó su longitud.

annotations[].id string

annotations[].checkRunId cadena

annotations[].annotationLevel cadena

Uno de notice, warning, failure.

annotations[].message cadena

annotations[].title cadena

annotations[].rawDetails cadena

annotations[].createdAt cadena

Marca de tiempo RFC 3339.

annotations[].updatedAt cadena

Marca de tiempo RFC 3339.

annotations[].location objeto

Ubicación de origen opcional para una anotación de ejecución de comprobación. path, start_line y end_line son obligatorios siempre que la anotación que los contiene incluya este mensaje. path es una ruta canónica relativa al repositorio; las líneas y columnas son coordenadas positivas e inclusivas que comienzan en 1, y columns solo se admite para un intervalo de una sola línea.

annotations[].location.path cadena Obligatorio

Tamaño máximo en UTF-8: 4096 bytes.

annotations[].location.startLine entero Obligatorio

annotations[].location.endLine entero Obligatorio

annotations[].location.columns objeto

Pares de columnas opcionales para un rango de anotación de una sola línea.

annotations[].location.columns.startColumn entero

annotations[].location.columns.endColumn entero

annotationsCount entero

Número de anotaciones que añadió la solicitud.

createdAt string

Momento en que se añadió el lote. Marca de tiempo RFC 3339.

Ejemplo 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"}