Show HN: Typesafe Java SDK (Unofficial) A developer has released an unofficial, community-built Java 21+ SDK for TypeSafe AI's System One API (POST /v1/systemone), offering sync and async calls, automatic retries with exponential backoff and jitter on 429/5xx responses, and client-side validation via InvalidRequestException. The Maven-built client uses java.net.http.HttpClient for transport with Jackson as its only runtime dependency, and requires a model to be set per-request or via defaultModel. The project is not affiliated with, endorsed by, or sponsored by TypeSafe AI, and its author warns the API may change without notice. Unofficial community SDK. This project is not affiliated with, endorsed by, or sponsored by TypeSafe AI. "TypeSafe" and all related names, marks, and logos are trademarks of TypeSafe AI - used here solely to identify the API this client targets. Use at your own risk; the API may change without notice. Java client for TypeSafe AI https://api.typesafe.ai 's System One API POST /v1/systemone . - Java 21+, Maven build - java.net.http.HttpClient transport - no extra HTTP dependency - Jackson for JSON only runtime dependency - Sync + async CompletableFuture APIs - Automatic retries with exponential backoff + jitter on 429/5xx, honoring Retry-After - Sealed Question / Answer hierarchies; unknown answer types degrade to a forward-compatible UnknownAnswer python import dev.dosa.typesafe.TypeSafeClient; import dev.dosa.typesafe.model. ; TypeSafeClient client = TypeSafeClient.builder .apiKey System.getenv "TYPESAFE API KEY" .defaultModel "jev-latest" // used when a request sets no model .requestTimeout Duration.ofSeconds 10 .build ; SystemOneRequest request = SystemOneRequest.builder .state Map.of "ticket", "I want a refund now " .question "urgent", Question.noul "Does this convey urgency?" .whenTrue "Explicitly time-sensitive" .whenFalse "No time pressure" .question "dept", Question.choice "Which team?" .option "billing", "Payment issues" .option "technical", "Bugs" .question "frustration", Question.score "How frustrated?" .level "Calm" .level "Frustrated" .level "Very angry" .build ; SystemOneResponse resp = client.systemOne request ; // sync // CompletableFuture