Fwozen Branches API

Watched branches. Watching a branch is what tells Fwozen where to write the `fwozen` check and whose rules to read, and a branch id (`wbr_…`) is what a branch-scoped freeze names.

GitHub OpenAPI

Operations 7

GET /v1/repos/{repoId}/branches List watched branches of a repository #
POST /v1/repos/{repoId}/branches Watch a branch #
GET /v1/repos/{repoId}/remote-branches List branches live from GitHub (cached 60s, budget-gated) #
GET /v1/branches List watched branches #
GET /v1/branches/{branchId} Get a watched branch #
PATCH /v1/branches/{branchId} Update watched-branch settings #
DELETE /v1/branches/{branchId} Stop watching a branch #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fwozen-com:fwozen-com-branches-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fwozen-com-branches-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Fwozen Com Branches API
  version: 1.0.0
  contact:
    name: Fwozen support
    url: https://fwozen.com/docs
    email: hello@fwozen.com
  license:
    name: Fwozen Terms of Service
    url: https://fwozen.com/legal/terms
  description: 'Operations tagged Branches across 2 of this provider''s published API definitions: fwozen-com-openapi.json, fwozen-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.fwozen.com
security:
- bearerApiKey: []
tags:
- name: Branches
  description: Watched branches. Watching a branch is what tells Fwozen where to write the `fwozen` check and whose rules to read, and a branch id (`wbr_…`) is what a branch-scoped freeze names.
paths:
  /v1/repos/{repoId}/branches:
    get:
      operationId: listRepoBranches
      summary: List watched branches of a repository
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:read
      - bearerJwt: []
      parameters:
      - name: repoId
        in: path
        required: true
        schema:
          type: string
          pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
      responses:
        '200':
          description: List watched branches of a repository
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BranchList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 1
      x-fwozen-scopes:
      - repo:read
    post:
      operationId: watchBranch
      summary: Watch a branch
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:write
      - bearerJwt: []
      parameters:
      - name: repoId
        in: path
        required: true
        schema:
          type: string
          pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
      responses:
        '201':
          description: Watch a branch
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 1
      x-fwozen-permissions:
      - repo:configure
      x-fwozen-scopes:
      - repo:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WatchBranchInputInput'
    servers:
    - url: https://api.fwozen.com
  /v1/repos/{repoId}/remote-branches:
    get:
      operationId: listRemoteBranches
      summary: List branches live from GitHub (cached 60s, budget-gated)
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:read
      - bearerJwt: []
      parameters:
      - name: repoId
        in: path
        required: true
        schema:
          type: string
          pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
      - name: q
        in: query
        required: false
        schema:
          type: string
          maxLength: 200
      - name: limit
        in: query
        required: false
        schema:
          default: 100
          type: integer
          minimum: 1
          maximum: 200
      responses:
        '200':
          description: List branches live from GitHub (cached 60s, budget-gated)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RemoteBranches'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 5
      x-fwozen-scopes:
      - repo:read
    servers:
    - url: https://api.fwozen.com
  /v1/branches:
    get:
      operationId: listBranches
      summary: List watched branches
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:read
      - bearerJwt: []
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          default: 50
          type: integer
          minimum: 1
          maximum: 200
      - name: cursor
        in: query
        required: false
        schema:
          type: string
          maxLength: 512
      - name: repoId
        in: query
        required: false
        schema:
          type: string
          pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
      - name: frozen
        in: query
        required: false
        schema:
          type: string
      - name: paused
        in: query
        required: false
        schema:
          type: string
      - name: enforcement
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              type: string
              enum:
              - green
              - yellow
              - red
              - unknown
          - type: string
            enum:
            - green
            - yellow
            - red
            - unknown
      - name: q
        in: query
        required: false
        schema:
          type: string
          maxLength: 120
      responses:
        '200':
          description: List watched branches
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BranchPage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 1
      x-fwozen-scopes:
      - repo:read
    servers:
    - url: https://api.fwozen.com
  /v1/branches/{branchId}:
    get:
      operationId: getBranch
      summary: Get a watched branch
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:read
      - bearerJwt: []
      parameters:
      - name: branchId
        in: path
        required: true
        schema:
          type: string
          pattern: ^wbr_[1-9A-HJ-NP-Za-km-z]{16}$
      responses:
        '200':
          description: Get a watched branch
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 1
      x-fwozen-scopes:
      - repo:read
    patch:
      operationId: updateBranch
      summary: Update watched-branch settings
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:write
      - bearerJwt: []
      parameters:
      - name: branchId
        in: path
        required: true
        schema:
          type: string
          pattern: ^wbr_[1-9A-HJ-NP-Za-km-z]{16}$
      responses:
        '200':
          description: Update watched-branch settings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Branch'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 1
      x-fwozen-permissions:
      - repo:configure
      x-fwozen-scopes:
      - repo:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBranchInputInput'
    delete:
      operationId: unwatchBranch
      summary: Stop watching a branch
      tags:
      - Branches
      security:
      - bearerApiKey:
        - repo:write
      - bearerJwt: []
      parameters:
      - name: branchId
        in: path
        required: true
        schema:
          type: string
          pattern: ^wbr_[1-9A-HJ-NP-Za-km-z]{16}$
      responses:
        '200':
          description: Stop watching a branch
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ok'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-fwozen-rate-cost: 1
      x-fwozen-permissions:
      - repo:configure
      x-fwozen-scopes:
      - repo:write
    servers:
    - url: https://api.fwozen.com
components:
  schemas:
    EnforcementDetailView:
      type: object
      properties:
        checkedAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        probedAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        verifiedAt:
          anyOf:
          - type: string
            format: date-time
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
          - type: 'null'
        probeStatus:
          type: string
          enum:
          - ok
          - forbidden
          - not_found
          - error
        configuration:
          type: string
          enum:
          - verified
          - needs_attention
          - missing
          - unknown
        bypassAssurance:
          type: string
          enum:
          - present
          - known_none
          - unknown
        required:
          type: boolean
        pinnedIntegrationId:
          anyOf:
          - type: integer
            minimum: -9007199254740991
            maximum: 9007199254740991
          - type: 'null'
        ourAppId:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        contextName:
          type: string
        requiredChecks:
          type: array
          items:
            type: object
            properties:
              context:
                type: string
              integrationId:
                anyOf:
                - type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                - type: 'null'
              sourceType:
                type: string
                enum:
                - Repository
                - Organization
                - Enterprise
                - ClassicBranchProtection
              rulesetId:
                anyOf:
                - type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                - type: 'null'
            required:
            - context
            - integrationId
            - sourceType
            - rulesetId
            additionalProperties: false
        sources:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                - Repository
                - Organization
                - Enterprise
                - ClassicBranchProtection
              rulesetId:
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
              rulesetName:
                type: string
              enforcement:
                type: string
                enum:
                - active
                - evaluate
                - disabled
              contributesRequirement:
                type: boolean
              detailProbe:
                type: string
                enum:
                - ok
                - forbidden
                - failed
                - not_attempted
              bypassField:
                type: string
                enum:
                - present
                - absent
              bypassActorCount:
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
            required:
            - type
            - contributesRequirement
            - detailProbe
            - bypassField
            - bypassActorCount
            additionalProperties: false
        evidence:
          type: object
          properties:
            pagesRead:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            complete:
              type: boolean
            truncated:
              type: boolean
            rulesetPathObserved:
              type: boolean
            setupKind:
              type: string
              enum:
              - unknown
              - organization_ruleset
              - repository_ruleset
              - classic
              - unavailable
            stale:
              type: boolean
          required:
          - pagesRead
          - complete
          - truncated
          - rulesetPathObserved
          - setupKind
          - stale
          additionalProperties: false
        bypassActors:
          type: array
          items:
            type: object
            properties:
              actorId:
                anyOf:
                - type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                - type: 'null'
              actorType:
                type: string
              actorName:
                type: string
              bypassMode:
                type: string
            required:
            - actorId
            - actorType
            - actorName
            - bypassMode
            additionalProperties: false
        enforceAdmins:
          anyOf:
          - type: boolean
          - type: 'null'
        strictPolicy:
          type: boolean
        mergeQueue:
          anyOf:
          - type: object
            properties:
              enabled:
                type: boolean
              checkResponseTimeoutMinutes:
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
              groupingStrategy:
                type: string
            required:
            - enabled
            - checkResponseTimeoutMinutes
            - groupingStrategy
            additionalProperties: false
          - type: 'null'
        warnings:
          type: array
          items:
            type: string
            enum:
            - not_required
            - not_pinned
            - bypass_actors_present
            - enforce_admins_disabled
            - classic_and_ruleset_conflict
            - status_and_check_same_name
            - strict_policy_enabled
            - ruleset_evaluate_mode
            - merge_queue_timeout_low
            - probe_forbidden
            - pinned_wrong_app
            - conflicting_required_entries
            - evidence_truncated
            - evidence_stale
            - classic_guidance_only
            - bypass_unknown
            - bypass_evidence_incomplete
            - no_rules_observed
            - probe_not_found
            - probe_failed
        branchId:
          type: string
          pattern: ^wbr_[1-9A-HJ-NP-Za-km-z]{16}$
        repoFullName:
          type: string
        branch:
          type: string
        level:
          type: string
          enum:
          - green
          - yellow
          - red
          - unknown
        display:
          type: string
          enum:
          - enforced
          - advisory_unpinned
          - advisory_bypass
          - advisory_classic_conflict
          - advisory_other
          - unenforced
          - unknown
        problems:
          type: array
          items:
            $ref: '#/components/schemas/EnforcementProblem'
      required:
      - checkedAt
      - probedAt
      - verifiedAt
      - probeStatus
      - configuration
      - bypassAssurance
      - required
      - pinnedIntegrationId
      - ourAppId
      - contextName
      - requiredChecks
      - sources
      - evidence
      - bypassActors
      - enforceAdmins
      - strictPolicy
      - mergeQueue
      - warnings
      - branchId
      - repoFullName
      - branch
      - level
      - display
      - problems
      additionalProperties: false
    EnforcementProblem:
      type: object
      properties:
        code:
          type: string
        severity:
          type: string
          enum:
          - error
          - warn
          - info
        message:
          type: string
        fix:
          anyOf:
          - type: string
            enum:
            - auto
            - manual
            - iac
          - type: 'null'
      required:
      - code
      - severity
      - message
      - fix
      additionalProperties: false
    RemoteBranches:
      type: object
      properties:
        branches:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              isDefault:
                type: boolean
              protected:
                type: boolean
              watched:
                type: boolean
            required:
            - name
            - isDefault
            - protected
            - watched
            additionalProperties: false
        cachedAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        truncated:
          type: boolean
      required:
      - branches
      - cachedAt
      - truncated
      additionalProperties: false
    BranchPage:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Branch'
        nextCursor:
          anyOf:
          - type: string
          - type: 'null'
      required:
      - data
      - nextCursor
      additionalProperties: false
    UpdateBranchInputInput:
      type: object
      properties:
        freezeMethod:
          type: string
          enum:
          - check_run
          - commit_status
        exceptionPolicy:
          type: string
          enum:
          - sticky
          - strict
        allowDeploymentsWhileFrozen:
          type: boolean
        paused:
          type: boolean
        deployGateEnabled:
          type: boolean
        usesClassicProtection:
          type: boolean
    Ok:
      type: object
      properties:
        ok:
          type: boolean
          const: true
      required:
      - ok
      additionalProperties: false
    WatchBranchInputInput:
      type: object
      properties:
        branch:
          type: string
          minLength: 1
          maxLength: 255
        freezeMethod:
          type: string
          enum:
          - check_run
          - commit_status
        deployGateEnabled:
          default: false
          type: boolean
      required:
      - branch
    Branch:
      type: object
      properties:
        id:
          type: string
          pattern: ^wbr_[1-9A-HJ-NP-Za-km-z]{16}$
        repoId:
          type: string
          pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
        repoFullName:
          type: string
        branch:
          type: string
        freezeMethod:
          type: string
          enum:
          - check_run
          - commit_status
        exceptionPolicy:
          anyOf:
          - type: string
            enum:
            - sticky
            - strict
          - type: 'null'
        allowDeploymentsWhileFrozen:
          type: boolean
        deployGateEnabled:
          type: boolean
        paused:
          type: boolean
        frozen:
          type: boolean
        activeFreezeId:
          anyOf:
          - type: string
            pattern: ^frz_[1-9A-HJ-NP-Za-km-z]{16}$
          - type: 'null'
        enforcement:
          type: string
          enum:
          - green
          - yellow
          - red
          - unknown
        enforcementStatus:
          type: string
          enum:
          - enforcing
          - enrolled_not_enforcing
          - unknown
        enforcementDetail:
          anyOf:
          - $ref: '#/components/schemas/EnforcementDetailView'
          - type: 'null'
        enforcementVerifiedAt:
          anyOf:
          - type: string
            format: date-time
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
          - type: 'null'
        lastReconciledAt:
          anyOf:
          - type: string
            format: date-time
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
          - type: 'null'
        reconcileDriftCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        nextScheduledFreezeAt:
          anyOf:
          - type: string
            format: date-time
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
          - type: 'null'
        warnings:
          default: []
          type: array
          items:
            type: string
      required:
      - id
      - repoId
      - repoFullName
      - branch
      - freezeMethod
      - exceptionPolicy
      - allowDeploymentsWhileFrozen
      - deployGateEnabled
      - paused
      - frozen
      - activeFreezeId
      - enforcement
      - enforcementStatus
      - enforcementDetail
      - enforcementVerifiedAt
      - lastReconciledAt
      - reconcileDriftCount
      - nextScheduledFreezeAt
      - warnings
      additionalProperties: false
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
                required:
                - path
                - message
                additionalProperties: false
            docsUrl:
              type: string
            requestId:
              type: string
            warnings:
              type: array
              items:
                type: string
          required:
          - type
          - code
          - message
          - requestId
          additionalProperties: false
      required:
      - error
      additionalProperties: false
    BranchList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Branch'
      required:
      - data
      additionalProperties: false
  responses:
    Forbidden:
      description: Authenticated, but not permitted.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    NotFound:
      description: No such resource — also returned for another organization's id.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    BadRequest:
      description: Malformed request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    RateLimited:
      description: Rate limit exceeded. Honour the `Retry-After` header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: Missing or invalid credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    ValidationFailed:
      description: The request failed schema validation; see `error.details`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    bearerApiKey:
      type: http
      scheme: bearer
      bearerFormat: fwz_<env>_<40 base58>
      description: 'Org-scoped, never user-scoped: the scope list IS the authorization. Calling a

        session-only route with a key returns **403 `credential_type_not_allowed`**, never 401,

        so scripts get an actionable message.


        **Where one comes from.** Sign in at

        [https://fwozen.com/app/settings/api-keys](https://fwozen.com/app/settings/api-keys) as an owner or an

        admin, press **Create key**, tick the narrowest scopes that do the job (`freeze:read`

        for a deploy gate, `freeze:write` to freeze and thaw), pick an expiry, and copy the

        secret, which is shown once. `POST /v1/api-keys` is the same thing programmatically and

        takes a **session** credential only, so a key can never mint another key. Scopes are

        fixed at creation and cannot be widened.


        - `freeze:read` — List freezes, freeze targets and freeze state, including GET /v1/freeze-state.

        - `freeze:write` — Start a freeze, lift one, extend one, create a thaw override, retry targets.

        - `schedule:read` — List schedules, occurrences and previews.

        - `schedule:write` — Create, edit, delete, skip and import schedules.

        - `exception:read` — List per-PR exceptions and exception requests.

        - `exception:write` — Grant, decide and revoke per-PR exceptions.

        - `repo:read` — List repositories, watched branches and enforcement state.

        - `repo:write` — Enable or disable repositories and change watched-branch settings.

        - `audit:read` — Read the audit log and stream the CSV export.

        - `billing:read` — Read the billing summary, plan, trial state and resolved entitlements.

        - `billing:write` — Start the 14-day no-card trial, and ask for a Stripe Checkout or Customer Portal link. It cannot pay for anything: those routes return a URL for a human to open and take no card details of any kind.'
    bearerJwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: A short-lived RS256 session token from `GET /api/auth/token` on the web origin. Used by the dashboard, the CLI and agents; audience-bound to this API.
x-refined-from:
- fwozen-com-openapi.json
- fwozen-com-openapi.yml
x-provenance:
  method: harvested
  publisher: Fwozen
  source: https://fwozen.com/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)