code: private synchronized void sendPayloadRequest(final PayloadData payload) {
  		ApptentiveLog.v(PAYLOADS, "Sending payload: %s", payload);
  
  		// create request object
  		final HttpRequest payloadRequest = requestSender.createPayloadSendRequest(payload, new HttpRequest.Listener<HttpRequest>() {
  			@Override
  			public void onFinish(HttpRequest request) {
  				try {
  					String json = StringUtils.isNullOrEmpty(request.getResponseData()) ? "{}" : request.getResponseData();
  					final JSONObject responseData = new JSONObject(json);
  					handleFinishSendingPayload(payload, false, null, request.getResponseCode(), responseData);
  				} catch (Exception e) {
  					// TODO: Stop assuming the response is JSON. In fact, just send bytes back, and whatever part of the SDK needs it can try to convert it to the desired format.
  					ApptentiveLog.e(PAYLOADS, e, "Exception while handling payload send response");
  					logException(e);
  
  					handleFinishSendingPayload(payload, false, null, -1, null);
  				}
  			}
  
  			@Override
  			public void onCancel(HttpRequest request) {
  				handleFinishSendingPayload(payload, true, null, request.getResponseCode(), null);
  			}
  
  			@Override
  			public void onFail(HttpRequest request, String reason) {
  				if (request.isAuthenticationFailure()) {
  					ApptentiveNotificationCenter.defaultCenter().postNotification(NOTIFICATION_AUTHENTICATION_FAILED, NOTIFICATION_KEY_CONVERSATION_ID, payload.getConversationId(), NOTIFICATION_KEY_AUTHENTICATION_FAILED_REASON, request.getAuthenticationFailedReason());
  				}
  				handleFinishSendingPayload(payload, false, reason, request.getResponseCode(), null);
  			}
  		});
  
  		// set 'retry' policy
  		payloadRequest.setRetryPolicy(requestRetryPolicy);
  		payloadRequest.setCallbackQueue(conversationQueue());
  		payloadRequest.start();
  	}
docs: Creates and sends payload Http-request asynchronously (returns immediately)
  @param payload