@callback request(atom(), String.t(), list(), String.t(), keyword()) :: {:ok, %{status: integer(), body: String.t()}} | {:error, term()}