@SdkInternalApi
    final SendBonusResult executeSendBonus(SendBonusRequest sendBonusRequest) {

        ExecutionContext executionContext = createExecutionContext(sendBonusRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<SendBonusRequest> request = null;
        Response<SendBonusResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new SendBonusRequestProtocolMarshaller(protocolFactory).marshall(super.beforeMarshalling(sendBonusRequest));
                // Binds the request metrics to the current request.
                request.setAWSRequestMetrics(awsRequestMetrics);
                request.addHandlerContext(HandlerContextKey.CLIENT_ENDPOINT, endpoint);
                request.addHandlerContext(HandlerContextKey.ENDPOINT_OVERRIDDEN, isEndpointOverridden());
                request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
                request.addHandlerContext(HandlerContextKey.SERVICE_ID, "MTurk");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "SendBonus");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

            } finally {
                awsRequestMetrics.endEvent(Field.RequestMarshallTime);
            }

            HttpResponseHandler<AmazonWebServiceResponse<SendBonusResult>> responseHandler = protocolFactory.createResponseHandler(new JsonOperationMetadata()
                    .withPayloadJson(true).withHasStreamingSuccessResponse(false), new SendBonusResultJsonUnmarshaller());
            response = invoke(request, responseHandler, executionContext);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
The <code>SendBonus</code> operation issues a payment of money from your account to a Worker. This payment
happens separately from the reward you pay to the Worker when you approve the Worker's assignment. The SendBonus
operation requires the Worker's ID and the assignment ID as parameters to initiate payment of the bonus. You must
include a message that explains the reason for the bonus payment, as the Worker may not be expecting the payment.
Amazon Mechanical Turk collects a fee for bonus payments, similar to the HIT listing fee. This operation fails if
your account does not have enough funds to pay for both the bonus and the fees.
</p>

@param sendBonusRequest
@return Result of the SendBonus operation returned by the service.
@throws ServiceException
        Amazon Mechanical Turk is temporarily unable to process your request. Try your call again.
@throws RequestErrorException
        Your request is invalid.
@sample AmazonMTurk.SendBonus
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/mturk-requester-2017-01-17/SendBonus" target="_top">AWS API
     Documentation</a>
aws-java-sdk-mechanicalturkrequester/src/main/java/com/amazonaws/services/mturk/AmazonMTurkClient.java