# Class BSV::Network::ProtocolResponse <a id="class-BSV-Network-ProtocolResponse"></a>

**Inherits:** `Object`

## Attributes
### `data` [R] <a id="attribute-i-data"></a> <a id="data-instance_method"></a>
Returns the value of attribute data.

### `error_message` [R] <a id="attribute-i-error_message"></a> <a id="error_message-instance_method"></a>
Returns the value of attribute error_message.

## Public Instance Methods
### `body()` <a id="method-i-body"></a> <a id="body-instance_method"></a>
Delegated from Net::HTTPResponse (nil-safe)

### `canonical()` <a id="method-i-canonical"></a> <a id="canonical-instance_method"></a>
Canonical form (placeholder — delegates to data until shapes are defined)

### `code()` <a id="method-i-code"></a> <a id="code-instance_method"></a>
Not documented.

### `content_type()` <a id="method-i-content_type"></a> <a id="content_type-instance_method"></a>
Not documented.

### `http_not_found?()` <a id="method-i-http_not_found-3F"></a> <a id="http_not_found?-instance_method"></a>
- **@return** [Boolean]

### `http_success?()` <a id="method-i-http_success-3F"></a> <a id="http_success?-instance_method"></a>
Two layers of status predicates:

HTTP logical status — did the operation succeed? Driven by the
<code>http_success:</code> parameter, which defaults to the RFC 9110 success
class check (<code>Net::HTTPSuccess</code>, i.e. 2xx) but can be overridden by
escape hatches that reinterpret HTTP status (e.g. ARC REJECTED on 2xx sets
http_success: false; WoC is_utxo 404 sets http_success: true).

Transport status — what did the HTTP layer actually return? These always
reflect the <code>Net::HTTPResponse</code> class hierarchy regardless of the
<code>http_success:</code> override. <code>http_not_found?</code> maps
directly to <code>Net::HTTPNotFound</code> (404). <code>retryable?</code> is a
domain composite: 429 (<code>Net::HTTPTooManyRequests</code>) or 5xx
(<code>Net::HTTPServerError</code>) — not an RFC 9110 category itself, but a
useful signal for retry logic.
- **@return** [Boolean]

### `initialize(http_response, data: = nil, http_success: = nil, error_message: = nil)` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
- **@return** [ProtocolResponse] a new instance of ProtocolResponse

### `retryable?()` <a id="method-i-retryable-3F"></a> <a id="retryable?-instance_method"></a>
- **@return** [Boolean]

### `with(**overrides)` <a id="method-i-with"></a> <a id="with-instance_method"></a>
Derive new response with overrides (same HTTP response, different
interpretation)
