Skip to content

SDK throws 'Unexpected end of JSON input' on empty response bodies #7889

Closed

Description

@coleleavitt

Bug Description

The SDK crashes with SyntaxError: Unexpected end of JSON input when the server returns an empty response body without proper Content-Length: 0 header or 204 status code.

Steps to Reproduce

  1. Make an API call that returns an empty body with status 200
  2. SDK attempts to parse the empty body as JSON
  3. Crashes at client.gen.ts:167

Error Message

SyntaxError: Unexpected end of JSON input
    at json (unknown)
    at <anonymous> (../sdk/js/src/v2/gen/client/client.gen.ts:167:33)

Expected Behavior

  • Empty responses should be handled gracefully (return {})
  • Malformed JSON should provide actionable error messages with status code and URL

Root Cause

  1. Client-side: SDK only checks for status === 204 or Content-Length === "0" before attempting JSON parse. Empty body with 200 status and no Content-Length header falls through to response.json() which throws.

  2. Server-side: OPTIONS handler in /packages/console/app/src/routes/zen/v1/models.ts returns status: 200 with null body instead of status: 204.

Proposed Fix

  • Read response as text first, only parse if non-empty
  • Add try-catch with contextual error messages for malformed JSON
  • Fix server to return proper 204 status for empty responses

Related Issues

Not Related (different root causes)

Activity

  1. github-actions commented on Jan 12, 2026

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

    Feel free to ignore if none of these address your specific case.

  2. jimgrubb commented on Jan 12, 2026

    @jimgrubb

    Affected Model: Zen GLM-4.7
    Reproduced: 2 times
    Rate limit error before crash:
    High concurrency usage of this API, please reduce concurrency or contact customer... retrying in 17s attempt #5
    Additional context: The JSON parsing error occurred after seeing rate limiting messages. May be related to truncated/retry responses under load.

  3. dhruvkej9 commented on Jan 12, 2026

    @dhruvkej9

    @thdxr any easy temp. way to fix it ??

    Have to restart opencode mid-session due to this.

  4. added a commit that references this issue on Jan 16, 2026
    927c494
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions