# `TypeSafeSDK.SystemOneResponse`
[🔗](https://github.com/nshkrdotcom/typesafe_sdk/blob/v0.4.0/lib/typesafe_sdk/system_one_response.ex#L1)

Typed System One response with grouped convenience accessors.

Responses produced by the HTTP client retain request metadata separately from
the decoded API payload. `request_id!/1` and `raw_http_response!/1` mirror the
Python SDK's metadata access without polluting the wire fields.

# `answer`

```elixir
@type answer() ::
  TypeSafeSDK.NoulAnswer.t()
  | TypeSafeSDK.ChoiceAnswer.t()
  | TypeSafeSDK.ScoreAnswer.t()
```

# `t`

```elixir
@type t() :: %TypeSafeSDK.SystemOneResponse{
  answers: %{required(atom() | String.t()) =&gt; answer()},
  batch_index: non_neg_integer() | nil,
  elapsed_ms: number(),
  model: String.t(),
  prepared_fingerprint: String.t() | nil,
  raw: map() | nil,
  raw_http_response: Pristine.Response.t() | nil,
  request_id: String.t() | nil,
  retries: non_neg_integer(),
  runtime_elapsed_ms: number() | nil,
  unknown_answers: map(),
  usage: TypeSafeSDK.Usage.t()
}
```

# `choices`

```elixir
@spec choices(t()) :: %{required(atom() | String.t()) =&gt; TypeSafeSDK.ChoiceAnswer.t()}
```

# `decode`

```elixir
@spec decode(term()) :: {:ok, t()} | {:error, TypeSafeSDK.Error.t()}
```

# `fetch`

```elixir
@spec fetch(t(), atom() | String.t()) :: {:ok, answer()} | :error
```

Fetch an answer using its exact caller key (or wire key for system_one).

# `fetch!`

```elixir
@spec fetch!(t(), atom() | String.t()) :: answer()
```

Fetch an answer or raise a KeyError listing the available IDs.

# `nouls`

```elixir
@spec nouls(t()) :: %{required(atom() | String.t()) =&gt; TypeSafeSDK.NoulAnswer.t()}
```

# `raw_http_response!`

```elixir
@spec raw_http_response!(t()) :: Pristine.Response.t()
```

# `request_id!`

```elixir
@spec request_id!(t()) :: String.t()
```

# `scores`

```elixir
@spec scores(t()) :: %{required(atom() | String.t()) =&gt; TypeSafeSDK.ScoreAnswer.t()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
