public function start_job($client, $input, $jobId = null)
    {
        $decodedClient = is_object($client) ? $client : json_decode($client);
        $decodedInput = is_object($input) ? $input : json_decode($input);

        if (!$decodedClient) {
            throw new \InvalidArgumentException(
                "Invalid JSON 'client' to start new job!");
        }
        if (!$decodedInput) {
            throw new \InvalidArgumentException(
                "Invalid JSON 'input' to start new job!");
        }

        $this->validate_client($decodedClient);

        $jobId = $jobId ?: md5($decodedClient->{'name'} . uniqid('',true));
        $msg = $this->craft_new_msg(
            self::START_JOB,
            $jobId,
            $decodedClient,
            $decodedInput
        );

        $this->sqs->sendMessage(array(
                'QueueUrl'    => $decodedClient->{'queues'}->{'input'},
                'MessageBody' => json_encode($msg),
            ));

        return ($jobId);
    }