> ## 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.

# Get backend function logs

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

Returns recent log lines from one of the app's backend functions, newest first.

A line is anything the function wrote to the console, plus the errors it didn't catch. The lines hold whatever the function logged, so they can include data about the app's users.

By default you get up to 500 lines from the last 7 days. Set `since` and `until` to pick a different window, `level` to keep one severity, and `limit` for fewer lines. Logs are kept for a limited time, so a window far in the past can come back empty.

To page back, send the `time` of the oldest line you have, plus one millisecond, as `until`, and drop the lines you already have. Several lines can share a millisecond, and this keeps you from skipping any.

A function that doesn't exist, or that has never run, returns an empty list rather than an error.

Some older apps whose functions haven't moved to Base44's current function runtime can window and filter their lines differently.

This is limited to 60 requests a 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, including a read-only one, from anyone with access to the app, viewers included. Workspace API keys are not authorized for it.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/functions-mgmt/{function_name}/logs
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}/functions-mgmt/{function_name}/logs:
    get:
      summary: Get backend function logs
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns recent log lines from one of the app's backend functions, newest
        first.


        A line is anything the function wrote to the console, plus the errors it
        didn't catch. The lines hold whatever the function logged, so they can
        include data about the app's users.


        By default you get up to 500 lines from the last 7 days. Set `since` and
        `until` to pick a different window, `level` to keep one severity, and
        `limit` for fewer lines. Logs are kept for a limited time, so a window
        far in the past can come back empty.


        To page back, send the `time` of the oldest line you have, plus one
        millisecond, as `until`, and drop the lines you already have. Several
        lines can share a millisecond, and this keeps you from skipping any.


        A function that doesn't exist, or that has never run, returns an empty
        list rather than an error.


        Some older apps whose functions haven't moved to Base44's current
        function runtime can window and filter their lines differently.


        This is limited to 60 requests a 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, including a read-only
        one, from anyone with access to the app, viewers included. Workspace API
        keys are not authorized for it.</Note>
      operationId: >-
        get_backend_functions_logs_api_apps__app_id__functions_mgmt__function_name__logs_get
      parameters:
        - name: function_name
          in: path
          required: true
          schema:
            type: string
            description: >-
              Name of the backend function, without a file extension. Nested
              functions have slashes in their name, and you send those as they
              are.
            title: Function Name
          description: >-
            Name of the backend function, without a file extension. Nested
            functions have slashes in their name, and you send those as they
            are.
          example: sendWelcomeEmail
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app the function belongs to.
            title: App Id
          description: ID of the app the function belongs to.
          example: 6820f3a4e7b91d003c45a1f2
        - name: env
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Whose traffic to show. `prod` returns lines from the deployment
              serving the published app, and `preview` returns lines from the
              builder's preview. Leave it out for every line from the function's
              latest deployment. Any other value is ignored.
            title: Env
          description: >-
            Whose traffic to show. `prod` returns lines from the deployment
            serving the published app, and `preview` returns lines from the
            builder's preview. Leave it out for every line from the function's
            latest deployment. Any other value is ignored.
          example: prod
        - name: since
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Start of the window, as an ISO 8601 timestamp. A timestamp without
              an offset is read as UTC. Defaults to 7 days before `until`.
            title: Since
          description: >-
            Start of the window, as an ISO 8601 timestamp. A timestamp without
            an offset is read as UTC. Defaults to 7 days before `until`.
          example: '2026-01-14T00:00:00Z'
        - name: until
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              End of the window, as an ISO 8601 timestamp. A timestamp without
              an offset is read as UTC. Defaults to now.
            title: Until
          description: >-
            End of the window, as an ISO 8601 timestamp. A timestamp without an
            offset is read as UTC. Defaults to now.
          example: '2026-01-15T09:23:41Z'
        - name: level
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Keep only lines at this severity. Send `debug`, `info`, `warn`, or
              `error`, and `warning` is read as `warn`.
            title: Level
          description: >-
            Keep only lines at this severity. Send `debug`, `info`, `warn`, or
            `error`, and `warning` is read as `warn`.
          example: error
        - name: limit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: >-
              Maximum number of lines to return, from 1 to 500. Defaults to 500,
              and a larger value is treated as 500.
            title: Limit
          description: >-
            Maximum number of lines to return, from 1 to 500. Defaults to 500,
            and a larger value is treated as 500.
          example: 50
      responses:
        '200':
          description: The log lines, newest first.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FunctionLogLine'
                title: >-
                  Response 200 Get Backend Functions Logs Api Apps  App Id 
                  Functions Mgmt  Function Name  Logs Get
        '400':
          description: >-
            `since` or `until` isn't a valid timestamp, `since` isn't before
            `until`, or `level` isn't one of the accepted values.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: You don't have access to this app, or you used a workspace API key.
        '404':
          description: App not found.
        '422':
          description: '`limit` isn''t a whole number.'
        '429':
          description: >-
            Too many requests for this app in the last minute from personal API
            keys in your workspace.
components:
  schemas:
    FunctionLogLine:
      properties:
        time:
          type: string
          title: Time
          description: When the line was logged, as a UTC timestamp in ISO 8601 format.
          example: '2026-01-15T09:23:41.482000+00:00'
        level:
          type: string
          title: Level
          description: Severity of the line, such as `info`, `warn`, or `error`.
          example: info
        message:
          type: string
          title: Message
          description: >-
            What the function wrote. An uncaught error carries its name, message
            and stack trace. Each invocation also gets a line of its own with
            the request method and response status, like `POST → 200`.
          example: Sent welcome email to jane@acme.com
      type: object
      required:
        - time
        - level
        - message
      title: FunctionLogLine
      description: One line a backend function logged.
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````