Speakeasy Logo
Skip to Content

Enabling JSON lines responses

JSON Lines (JSONL) or Newline Delimited JSON (NDJSON) is a simple and efficient format for streaming structured data. Each line in the stream is a valid JSON object, making it ideal for streaming large datasets, log files, or real-time data feeds. This format is particularly useful for processing data line by line without loading the entire response into memory.

Here’s an example of using an SDK to stream log data in JSONL/NDJSON format:

Modeling JSONL/NDJSON in OpenAPI

To implement line-delimited JSON streaming in generated SDKs, model an API endpoint that serves a stream in the OpenAPI document. Each line in the response will be a JSON object matching the specified schema. Either application/jsonl or application/x-ndjson can be used as the content type.

Basic implementation

The example below shows an operation that streams log events:

paths: /logs: get: summary: Stream log events operationId: stream tags: - logs parameters: - name: query in: query required: true schema: type: string responses: "200": description: Log events stream content: # Either content type can be used: application/jsonl: schema: $ref: "#/components/schemas/LogEvent" # OR application/x-ndjson: schema: $ref: "#/components/schemas/LogEvent" components: schemas: LogEvent: description: A log event in line-delimited JSON format type: object properties: timestamp: type: string message: type: string

Endpoints with multiple response types

For APIs that support both batch and streaming responses, use URL fragments to define separate paths for each response type:

paths: /analytics: get: summary: > Get analytics events as a batch response operationId: getBatch tags: [analytics] parameters: - name: start_date in: query required: true schema: type: string format: date responses: "200": description: Analytics events batch content: application/json: schema: type: array items: $ref: "#/components/schemas/AnalyticsEvent" /analytics#stream: get: summary: > Stream analytics events in real-time operationId: stream tags: [analytics] parameters: - name: start_date in: query required: true schema: type: string format: date responses: "200": description: Analytics events stream content: application/x-ndjson: schema: $ref: "#/components/schemas/AnalyticsEvent"

Use the appropriate method based on the requirements:

Last updated on