> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mirurobotics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List

> List git commits.

| Scope              | Required |
| ------------------ | -------- |
| `git_commits:read` | Yes      |


## OpenAPI

````yaml /references/platform-api/2026-05-06.yaml get /git_commits
openapi: 3.0.3
info:
  title: Miru Platform API
  description: The API between Miru and any external client
  version: 2026-05-06.rainier
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  x-release-version: 2026-05-06.rainier-beta.3
  x-git-commit:
    sha: 79734a65778aea4131f502774643d1d69a262542
    url: >-
      https://github.com/mirurobotics/openapi/commit/79734a65778aea4131f502774643d1d69a262542
    message: >-
      fix(release/stainless): publish stainless.yml asset for platform and
      device (#57)


      ## Summary


      The release workflow publishes a `stainless.yml` asset alongside each

      spec release for downstream Stainless SDK pipelines. It worked for `cli`

      and `frontend` audiences but silently skipped `platform` and `device`.


      **Root cause:** `STAINLESS_CONFIG` in `tools/release/stainless.py`

      pointed `device` and `platform` at a nested layout

      (`tools/stainless/{device,platform}/stainless.yml`) that never existed.

      The actual files have lived at the flat

      `tools/stainless/{device,platform}.yml` since commit `214bf44`

      (2026-03-04, "refactor(stainless): simplify config names to platform.yml

      and device.yml"). The mismatch was masked by `build_stainless_target`

      silently returning `None` when the source file was missing, so every

      platform and device release shipped without its `stainless.yml` asset.


      ## Changes


      1. **Fix the two paths in `STAINLESS_CONFIG`** to point at the flat

      `tools/stainless/{platform,device}.yml` layout that exists on disk.

      2. **Replace the silent `if not src.exists(): return None`** with `raise

      FileNotFoundError(...)` so a future mapped-but-missing config fails

      loudly. Audiences not in the dict (agent, mqtt, webhooks) still return

      `None` cleanly — that's the legitimate "no Stainless SDK for this

      audience" case.

      3. **Add regression tests:**

      - `test_known_audiences_have_real_files_on_disk` — parametrized over

      `STAINLESS_CONFIG.items()`, asserts each path resolves to an existing

      file. This is the test that would have caught the original bug.

      - `test_missing_src_for_mapped_audience_raises` — replaces the old

      `test_missing_src_returns_none`, pins the new loud-error contract.

      - `test_unmapped_audience_returns_none_cleanly` — pins the preserved

      clean-skip behaviour for unmapped audiences.


      Two existing build-target tests in

      `tools/release/tests/test_release_build.py` were rewired to mock

      `build_stainless_target`; they had been silently riding on the old

      skip-on-missing-source behaviour and would have failed under the new

      contract. The functional integration is already covered by

      `test_build_target_calls_stainless`.


      No CI workflow edits, no file restructuring under `tools/stainless/`, no

      historical-tag backfilling.


      ## Test plan


      - [ ] Unit tests pass (`tools/release/tests/`)

      - [ ] Preflight passes

      - [ ] Manual `./build/build-release.sh --snapshot` validation produces

      `platform.stainless.yml` and `device.stainless.yml` under `build/dist/`


      ---------


      Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    author: ben-miru
    branch: HEAD
    dirty: false
  x-build:
    built_at: '2026-05-06T22:31:02.715859+00:00'
servers:
  - url: https://api.mirurobotics.com/beta
    description: Miru Platform API
security:
  - ApiKeyAuth: []
paths:
  /git_commits:
    parameters:
      - $ref: '#/components/parameters/MiruVersion'
    get:
      tags:
        - Git Commits
      summary: List
      description: List git commits.
      operationId: listGitCommits
      parameters:
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/git_commit_order_bys'
        - $ref: '#/components/parameters/git_commit_list_expansions'
        - $ref: '#/components/parameters/git_commit_search_id'
        - $ref: '#/components/parameters/git_commit_search_sha'
      responses:
        '200':
          description: Successfully listed the git commits.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GitCommitList'
      x-codeSamples:
        - lang: Python
          source: |-
            import os
            from miru_platform_sdk import Miru

            client = Miru(
                api_key=os.environ.get("MIRU_API_KEY"),  # This is the default and can be omitted
            )
            git_commit_list = client.git_commits.list()
            print(git_commit_list)
components:
  parameters:
    MiruVersion:
      name: Miru-Version
      in: header
      required: true
      schema:
        type: string
        example: 2026-05-06.rainier
      description: The API version the client was built against.
    offset:
      name: offset
      in: query
      required: false
      description: >-
        The offset of the items to return. An offset of 10 with a limit of 10
        returns items 11-20.
      schema:
        type: integer
        default: 0
        minimum: 0
        example: 0
    limit:
      name: limit
      in: query
      required: false
      description: >-
        The maximum number of items to return. A limit of 15 with an offset of 0
        returns items 1-15.
      schema:
        type: integer
        default: 10
        minimum: 1
        maximum: 100
        example: 10
    git_commit_order_bys:
      name: order_by
      in: query
      required: false
      style: form
      explode: false
      description: Sort order for the git commit results.
      schema:
        type: array
        items:
          $ref: '#/components/schemas/GitCommitOrderBy'
        example:
          - created_at:desc
    git_commit_list_expansions:
      name: expand
      in: query
      required: false
      description: Fields to expand on each git commit in the list.
      x-miru-example-exempt: true
      schema:
        type: array
        items:
          $ref: '#/components/schemas/GitCommitListExpansion'
    git_commit_search_id:
      name: id
      in: query
      required: false
      style: form
      explode: false
      description: The git commit IDs to filter by.
      schema:
        type: array
        items:
          type: string
        example:
          - git_cmt_123
    git_commit_search_sha:
      name: sha
      in: query
      required: false
      style: form
      explode: false
      description: The git commit SHAs to filter by.
      schema:
        type: array
        items:
          type: string
        example:
          - a1b2c3d4e5f6
  schemas:
    GitCommitList:
      title: Git Commit List
      allOf:
        - $ref: '#/components/schemas/PaginatedList'
        - type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/GitCommit'
              description: The list of git commits.
    GitCommitOrderBy:
      type: string
      enum:
        - id:asc
        - id:desc
        - created_at:desc
        - created_at:asc
      x-enum-varnames:
        - GIT_COMMIT_ORDER_BY_ID_ASC
        - GIT_COMMIT_ORDER_BY_ID_DESC
        - GIT_COMMIT_ORDER_BY_CREATED_AT_DESC
        - GIT_COMMIT_ORDER_BY_CREATED_AT_ASC
      default: created_at:desc
    GitCommitListExpansion:
      type: string
      enum:
        - total_count
      x-enum-varnames:
        - GIT_COMMIT_LIST_EXPAND_TOTAL_COUNT
    PaginatedList:
      title: Paginated List
      type: object
      required:
        - object
        - limit
        - offset
        - has_more
      properties:
        object:
          type: string
          enum:
            - list
          example: list
          x-stainless-const: true
          description: The object type, which is always `list`.
        total_count:
          type: integer
          format: int64
          description: >-
            The total number of items in the list. By default the total count is
            not returned. The total count must be expanded (using
            expand=total_count) to get the total number of items in the list.
        limit:
          type: integer
          description: >-
            The maximum number of items to return. A limit of 15 with an offset
            of 0 returns items 1-15.
          default: 10
          minimum: 1
          maximum: 100
        offset:
          type: integer
          description: >-
            The offset of the items to return. An offset of 10 with a limit of
            10 returns items 11-20.
          default: 0
          minimum: 0
        has_more:
          type: boolean
          description: >-
            True if there are more items in the list to return. False if there
            are no more items to return.
          example: false
    GitCommit:
      title: Git Commit
      allOf:
        - $ref: '#/components/schemas/BaseGitCommit'
      example:
        object: git_commit
        id: git_commit_123
        sha: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
        message: Add basic motion configurations
        repository_owner: user
        repository_name: repo
        repository_type: github
        repository_url: https://github.com/user/repo
        commit_url: >-
          https://github.com/user/repo/commit/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
        created_at: '2021-01-01T00:00:00Z'
    BaseGitCommit:
      title: Base Git Commit
      type: object
      required:
        - object
        - id
        - sha
        - message
        - repository_owner
        - repository_name
        - repository_type
        - repository_url
        - commit_url
        - created_at
      properties:
        object:
          type: string
          enum:
            - git_commit
          example: git_commit
          x-stainless-const: true
          description: The object type, which is always `git_commit`.
        id:
          type: string
          example: git_commit_123
          description: ID of the git commit.
        sha:
          type: string
          example: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
          description: The SHA hash of the git commit.
        message:
          type: string
          example: Add basic motion configurations
          description: The commit message.
        repository_owner:
          type: string
          example: user
          description: The owner of the git repository.
        repository_name:
          type: string
          example: repo
          description: The name of the git repository.
        repository_type:
          $ref: '#/components/schemas/GitRepositoryType'
        repository_url:
          type: string
          example: https://github.com/user/repo
          description: The URL of the git repository.
        commit_url:
          type: string
          example: >-
            https://github.com/user/repo/commit/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
          description: The URL of the git commit.
        created_at:
          type: string
          format: date-time
          example: '2021-01-01T00:00:00Z'
          description: Timestamp of when the git commit was created.
    GitRepositoryType:
      type: string
      enum:
        - github
        - gitlab
        - bitbucket
      x-enum-varnames:
        - GIT_REPO_TYPE_GITHUB
        - GIT_REPO_TYPE_GITLAB
        - GIT_REPO_TYPE_BITBUCKET
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: The API key to use for authentication.

````