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

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# Get app code files

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the text of up to 32 files in the app's source in one call.

Get paths from [List app code files](/api-reference/list-app-code-files). `files` is keyed by each path as Base44 normalized it, so `./src/App.jsx` comes back as `src/App.jsx`, and a path you send twice comes back once. Each file holds either its `content` or an `error`, so one unreadable file doesn't fail the call. Only UTF-8 text files up to 5 MB can be read.

`max_bytes` caps the total size of the files returned. Files are read in the order you send them, and a file that would take the total over `max_bytes` comes back with the error `batch_limit_exceeded` and no content, while later files that still fit are read. Read the ones left out in another call. The other errors are `file_not_found`, `file_too_large` for a file over 5 MB, `not_text` for a folder or a file that isn't UTF-8 text, `file_forbidden`, `invalid_path` and `file_read_failed`.

A path outside the app, the app root, the app's `.git` folder and `.agents/.env` fail the whole call rather than a single file.

Reads come from the app's live sandbox, the same files the app editor shows, including changes that haven't been published yet. If no sandbox is running, the call starts one, so the first call after a quiet period takes noticeably longer than later ones.

Internally this route can follow a feature branch, but the parameter that selects one isn't part of the public API, so reads come from the app's main line.

This is limited to 120 requests per minute per app for each workspace's personal API keys, so every key in a workspace shares one allowance. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key belonging to a user with editor access to the app. A read-only key is refused even though this endpoint only reads, and workspace API keys are not accepted.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/code/content/batch
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/code/content/batch:
    post:
      summary: Get app code files
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns the text of up to 32 files in the app's source in one call.


        Get paths from [List app code
        files](/api-reference/list-app-code-files). `files` is keyed by each
        path as Base44 normalized it, so `./src/App.jsx` comes back as
        `src/App.jsx`, and a path you send twice comes back once. Each file
        holds either its `content` or an `error`, so one unreadable file doesn't
        fail the call. Only UTF-8 text files up to 5 MB can be read.


        `max_bytes` caps the total size of the files returned. Files are read in
        the order you send them, and a file that would take the total over
        `max_bytes` comes back with the error `batch_limit_exceeded` and no
        content, while later files that still fit are read. Read the ones left
        out in another call. The other errors are `file_not_found`,
        `file_too_large` for a file over 5 MB, `not_text` for a folder or a file
        that isn't UTF-8 text, `file_forbidden`, `invalid_path` and
        `file_read_failed`.


        A path outside the app, the app root, the app's `.git` folder and
        `.agents/.env` fail the whole call rather than a single file.


        Reads come from the app's live sandbox, the same files the app editor
        shows, including changes that haven't been published yet. If no sandbox
        is running, the call starts one, so the first call after a quiet period
        takes noticeably longer than later ones.


        Internally this route can follow a feature branch, but the parameter
        that selects one isn't part of the public API, so reads come from the
        app's main line.


        This is limited to 120 requests per minute per app for each workspace's
        personal API keys, so every key in a workspace shares one allowance.
        Some workspaces have a different limit.


        <Note>This endpoint accepts a personal API key belonging to a user with
        editor access to the app. A read-only key is refused even though this
        endpoint only reads, and workspace API keys are not accepted.</Note>
      operationId: batch_api_apps__app_id__code_content_batch_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose code to read.
            title: App Id
          description: ID of the app whose code to read.
          example: 6820f3a4e7b91d003c45a1f2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReadBatch'
      responses:
        '200':
          description: Each file's text, or why it couldn't be read.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResult'
        '400':
          description: A path is empty, points outside the app, or is the app root.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have editor access to this app, your API key is read-only,
            or you used a workspace API key, or a path is in the app's `.git`
            folder or is `.agents/.env`.
        '404':
          description: App not found.
        '422':
          description: >-
            `paths` is missing, empty, or holds more than 32 paths, or
            `max_bytes` is outside 1 to 5242880.
        '429':
          description: >-
            Rate limit exceeded. The base limit is 120 requests per minute. See
            [Rate
            limits](/developers/references/apps-api/get-started/rate-limits) for
            the multiplier your plan gets.
components:
  schemas:
    ReadBatch:
      properties:
        paths:
          items:
            type: string
          type: array
          maxItems: 32
          minItems: 1
          title: Paths
          description: Paths of up to 32 files, relative to the app root.
          example:
            - src/App.jsx
            - src/pages/Home.jsx
        max_bytes:
          type: integer
          maximum: 5242880
          exclusiveMinimum: 0
          title: Max Bytes
          description: >-
            Most bytes of file text to return across all the files, up to
            5242880 (5 MB).
          default: 5242880
          example: 1048576
      type: object
      required:
        - paths
      title: ReadBatch
      description: The files to read.
    BatchResult:
      properties:
        files:
          additionalProperties:
            $ref: '#/components/schemas/FileResult'
          type: object
          title: Files
          description: Each file, keyed by its path relative to the app root.
          example:
            src/pages/Home.jsx:
              content: |
                export default function Home() {
                  return <h1>Home</h1>;
                }
            src/pages/Missing.jsx:
              error: file_not_found
      type: object
      required:
        - files
      title: BatchResult
      description: The text of each file you asked for.
    FileResult:
      properties:
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
          description: The file's full text. Left out when `error` is set.
          example: |
            export default function Home() {
              return <h1>Home</h1>;
            }
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
          description: >-
            Why the file couldn't be read: `file_not_found`, `file_too_large`,
            `batch_limit_exceeded`, `not_text`, `file_forbidden`, `invalid_path`
            or `file_read_failed`. Left out when the file was read.
          example: file_not_found
      type: object
      title: FileResult
      description: One file's text, or why it couldn't be read.
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.