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

# List world activity

> Requests made to any twin in this world, newest first, each with the service, twin ID, and a summary of the records it changed. Use the twin activity detail endpoint for full payloads.

Use the [SDK setup](/api-reference/languages/overview#use-the-guide-examples) with CHRONICLE_API_KEY and CHRONICLE_API_URL. The Go and Rust samples are complete entry points; Rust also needs Tokio (see [Rust setup](/api-reference/languages/rust)). Set WORLD_ID to the world.id returned by a launch or world-list result. Read full request and mutation data in [Twin activity](/api-reference/twins#read-what-happened).

The schema below is the HTTP representation. SDKs normalize field names and list wrappers; see [SDK and HTTP fields](/api-reference/worldsmith#sdk-and-http-fields).



## OpenAPI

````yaml /api-reference/worldsmith-openapi.json get /v1/worldsmith/worlds/{worldId}/activity
openapi: 3.1.0
info:
  title: Chronicle Labs Worldsmith API
  version: 1.0.0
  description: >-
    Compile blueprints, launch worlds, and read the twins and tasks they create.
    Authenticate every request with your Chronicle API key as a bearer token.
  x-source-contracts: >-
    packages/chronicle/src/json-schema/worldsmith;
    backend/crates/api/src/platform/worldsmith
servers: []
security:
  - ApiKey: []
tags:
  - name: Worldsmith
    description: >-
      Compile blueprints into worlds of connected service twins, launch them,
      and read what they created.
paths:
  /v1/worldsmith/worlds/{worldId}/activity:
    parameters:
      - name: worldId
        in: path
        required: true
        description: The world version ID, from world.id.
        schema:
          type: string
    get:
      tags:
        - Worldsmith
      summary: List world activity
      description: >-
        Requests made to any twin in this world, newest first, each with the
        service, twin ID, and a summary of the records it changed. Use the twin
        activity detail endpoint for full payloads.


        Use the [SDK
        setup](/api-reference/languages/overview#use-the-guide-examples) with
        CHRONICLE_API_KEY and CHRONICLE_API_URL. The Go and Rust samples are
        complete entry points; Rust also needs Tokio (see [Rust
        setup](/api-reference/languages/rust)). Set WORLD_ID to the world.id
        returned by a launch or world-list result. Read full request and
        mutation data in [Twin
        activity](/api-reference/twins#read-what-happened).


        The schema below is the HTTP representation. SDKs normalize field names
        and list wrappers; see [SDK and HTTP
        fields](/api-reference/worldsmith#sdk-and-http-fields).
      operationId: listWorldActivity
      parameters:
        - name: limit
          in: query
          description: Page size, 1 to 100. Default 50.
          schema:
            type: integer
            minimum: 0
            default: 50
        - name: cursor
          in: query
          description: The nextCursor from the previous page. Omit for the newest page.
          schema:
            type: string
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListWorldActivitiesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from chronicle import Chronicle
            import os

            world_id = os.environ["WORLD_ID"]
            with Chronicle() as client:
                result = client.worlds.activity.list(world_id, limit=100)
                print(result.items)
                print(result.has_next_page())
        - lang: typescript
          label: TypeScript
          source: >-
            import { Chronicle } from "@chroniclelabs/sdk";


            const client = new Chronicle();

            const worldId = process.env.WORLD_ID;

            if (!worldId) throw new Error("Set WORLD_ID");

            const result = await client.worlds.activity.list(worldId, { limit:
            100 });

            console.log(result.items);

            console.log(result.hasNextPage());
        - lang: javascript
          label: JavaScript
          source: >-
            import { Chronicle } from "@chroniclelabs/sdk";


            const client = new Chronicle();

            const worldId = process.env.WORLD_ID;

            if (!worldId) throw new Error("Set WORLD_ID");

            const result = await client.worlds.activity.list(worldId, { limit:
            100 });

            console.log(result.items);

            console.log(result.hasNextPage());
        - lang: go
          label: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\tchronicle \"github.com/chronicle-labs/chronicle-go\"\n)\n\nfunc main() {\n\tif err := example(); err != nil { log.Fatal(err) }\n}\n\nfunc example() error {\n\tctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)\n\tdefer cancel()\n\tclient := chronicle.NewClient()\n\tworldID := os.Getenv(\"WORLD_ID\")\n\tif worldID == \"\" { return fmt.Errorf(\"set WORLD_ID\") }\n\tresult, err := client.Worlds.Activity.List(ctx, worldID, chronicle.PageParams{Limit: 100})\n\tif err != nil {\n\t\treturn err\n\t}\n\tfmt.Println(result.Items)\n\tfmt.Println(result.HasNextPage())\n\treturn nil\n}"
        - lang: rust
          label: Rust
          source: |-
            use chronicle_sdk::Chronicle;
            use chronicle_sdk::types::PageParams;

            #[tokio::main]
            async fn main() -> Result<(), Box<dyn std::error::Error>> {
                let client = Chronicle::from_env()?;
                let world_id = std::env::var("WORLD_ID")?;
                let result = client.worlds().activity().list(&world_id, PageParams { limit: Some(100), ..Default::default() }).await?;
                println!("{:?}", result.items);
                println!("{}", result.has_next_page());
                Ok(())
            }
components:
  schemas:
    ListWorldActivitiesResponse:
      properties:
        activities:
          items:
            $ref: '#/components/schemas/WorldActivitySummary'
          type: array
        hasMore:
          type: boolean
        nextCursor:
          type:
            - string
            - 'null'
      required:
        - activities
        - hasMore
      type: object
    WorldActivitySummary:
      properties:
        activity:
          $ref: '#/components/schemas/TwinActivitySummary'
        mutations:
          description: >-
            Timing and changed-field metadata; before/after documents are
            available from request detail.
          items:
            $ref: '#/components/schemas/TwinActivityMutation'
          type: array
        mutationsTruncated:
          description: >-
            Some recorded or reported mutations did not fit this page's bounded
            metadata capture.
          type: boolean
        service:
          type: string
        twinInstanceId:
          type: string
      required:
        - activity
        - mutations
        - mutationsTruncated
        - service
        - twinInstanceId
      type: object
    ApiError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
      example:
        error: World not found
    TwinActivitySummary:
      properties:
        durationMs:
          format: double
          type: number
        endedAt:
          format: date-time
          type: string
        method:
          type: string
        mutationCount:
          format: uint32
          minimum: 0
          type: integer
        path:
          type: string
        requestBytes:
          format: uint32
          minimum: 0
          type:
            - integer
            - 'null'
        requestId:
          type: string
        responseBytes:
          format: uint32
          minimum: 0
          type:
            - integer
            - 'null'
        sessionId:
          type:
            - string
            - 'null'
        startedAt:
          format: date-time
          type: string
        status:
          format: uint16
          minimum: 0
          type: integer
        traceId:
          type: string
        truncated:
          type: boolean
      required:
        - durationMs
        - endedAt
        - method
        - mutationCount
        - path
        - requestId
        - startedAt
        - status
        - traceId
        - truncated
      type: object
    TwinActivityMutation:
      properties:
        after: true
        before: true
        changedFields:
          items:
            type: string
          type: array
        collection:
          type: string
        durationMs:
          format: double
          type: number
        endedAt:
          format: date-time
          type: string
        entityId:
          type: string
        operation:
          $ref: '#/components/schemas/TwinMutationOperation'
        parentSpanId:
          type: string
        source:
          enum:
            - collection
            - snapshot
          type:
            - string
            - 'null'
        spanId:
          type: string
        startedAt:
          format: date-time
          type: string
        truncated:
          type: boolean
      required:
        - changedFields
        - collection
        - durationMs
        - endedAt
        - entityId
        - operation
        - parentSpanId
        - spanId
        - startedAt
        - truncated
      type: object
    TwinMutationOperation:
      enum:
        - insert
        - update
        - delete
      type: string
  responses:
    BadRequest:
      description: Invalid blueprint, cursor, or idempotency key format.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
        text/plain:
          schema:
            type: string
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    NotFound:
      description: No world with this ID in your organization.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    InternalError:
      description: >-
        Chronicle could not complete the request. Retry, and quote the request
        ID if it persists.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: Your Chronicle API key (chr_...). Create one in Settings > API keys.

````