# ReactorErrorKind

> **ReactorErrorKind** = `"invalid_args"` \| `"unauthenticated"` \| `"not_delivered"` \| `"outcome_unknown"` \| `"rejected"` \| `"invalid_reply"` \| `"canister_err"` \| `"cancelled"`

Defined in: [core/src/errors.ts:45](https://github.com/B3Pay/ic-reactor/blob/6b3b9f58b7868082175216ca6e3688d278d17c1f/packages/core/src/errors.ts#L45)

What kind of failure a [ReactorError](https://ic-reactor.b3pay.net/v4/libs/type-aliases/reactorerror/) reports.

- `invalid_args`: the arguments could not be encoded, or the target canister
  id could not be resolved. Nothing was sent.
- `unauthenticated`: an update was attempted while not signed in. Nothing was
  sent.
- `not_delivered`: nothing that matters ran. Either the request was refused
  or never taken in (the replica or a boundary node turned it away, or the
  system could not take it in), or it was a query, which changes nothing, and
  no answer came back. A failed query may well have reached the canister,
  so `mayHaveExecuted` carries the guarantee: it is `false` on every
  `not_delivered`, because a refused update never ran and a query changes
  nothing.
- `outcome_unknown`: an update went out and no trustworthy answer came back,
  so the canister may or may not have run it.
- `rejected`: the IC or the canister rejected the call; `rejectCode` says which.
- `invalid_reply`: a reply arrived but did not decode as the method's result.
- `canister_err`: the canister ran the call and replied with the `Err` arm of
  its result; `err` is typed. The outcome is that answer, so
  `mayHaveExecuted` is `false`: re-sending is a new decision, not a retry.
- `cancelled`: the caller abandoned the call (an aborted query, a key whose
  principal is no longer current, a call on a disposed client
  (`client_disposed`), or an update aborted in flight).
  `mayHaveExecuted` is `false` when nothing was sent, and `true` for an
  update aborted after its request may already have been delivered.