Paste a JSON sample, for example a response copied from the browser's network panel, and read the types it implies. The same inferred shape is written five ways: TypeScript interfaces or type aliases, a Zod schema with z.infer types, a JSON Schema (draft 2020-12), Go structs with json tags, and Python dataclasses. Nothing is uploaded; the JSON is parsed in your browser by the same strict parser as the JSON formatter, so a syntax error is reported with its line and column.
Names that collide
Two objects with exactly the same fields share one type, however many times they appear. Two different objects that want the same name are numbered: a user with id and another user with name become User and User2, so rename the second one to something meaningful. Names that would clash with built-in types are suffixed: a key called date gives DateType, because interface Date would silently merge with JavaScript's own Date and add fields to every date in your program.
Limits worth knowing
A sample shows what one response contained, not every response the API can send. A field missing from all your samples is missing from the types; a status string is string, not a union of its allowed values; a date is a string. Paste several records as an array to merge them, then tighten the result by hand: turn status: string into "pending" | "paid" | "shipped". For values coming from the network, the Zod output also checks the data at run time instead of trusting it. The article generating TypeScript types from API JSON goes through a full example and why any creeps back in.