API / create-origin-ruleset-via-api

API

Create Origin Ruleset via the API

Create a repository ruleset with POST https://api.cursor.com/v1/origin/repos/{ownerSlug}/{repoName}/rulesets. Official reference: Origin API and changelog (OpenAPI OriginService_CreateRuleset; added 2026-08-21).

Origin is in Early Beta and subject to change. Authenticate with an installation access token (oit_…) or a user access token that carries repository:rulesets:write. Availability: Early Beta per the API overview.

Required body fields are name, enforcement (active, evaluate, or disabled), and kind (merge_branch, push_branch, push_tag, or push_repository). Optional fields: description, includedRefNames and excludedRefNames (globs plus ~ALL and ~DEFAULT_BRANCH), rules (RulesetRuleInput entries with ruleType and optional parameters), and bypassActors (RulesetBypassActorInput with bypassMode and one of user, team, app, or originRole). Create rejects more than 64 patterns per include/exclude list, 20 rules, or 15 bypass actors with InvalidArgument (HTTP 400).

Cost: 5 points against the principal budget (ordinary write).

Path parameters

Param Required Meaning
ownerSlug yes Owning entity's unique slug
repoName yes Repo name, unique to the owner

Request body

Field Required Meaning
name yes Ruleset display name
enforcement yes active, evaluate, or disabled
kind yes merge_branch, push_branch, push_tag, or push_repository
description no Human-readable summary
includedRefNames no Ref patterns this ruleset includes
excludedRefNames no Ref patterns this ruleset excludes
rules no Protection rules (ruleType + parameters)
bypassActors no Bypass principals (bypassMode + typed actor)
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"
      }
    }
  ]
}'

Response

200 returns a Ruleset including server-assigned id, rule ids (rsr_…), and bypass-actor ids (rsba_…).

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

Example ruleType strings from the OpenAPI schema include pull_request, require_status_checks, require_branch_up_to_date, deletion, and non_fast_forward. Base URL: https://api.cursor.com/v1/origin.