code: @Nullable
      Source createSource(
              @NonNull SourceParams sourceParams,
              @NonNull String publishableKey,
              @Nullable String stripeAccount)
              throws AuthenticationException,
              InvalidRequestException,
              APIConnectionException,
              APIException {
          final Map<String, Object> paramMap = sourceParams.toParamMap();
          mNetworkUtils.addUidParams(paramMap);
          final RequestOptions options = RequestOptions.builder(publishableKey, stripeAccount,
                  RequestOptions.TYPE_QUERY).build();
  
          try {
              final String apiKey = options.getPublishableApiKey();
              if (StripeTextUtils.isBlank(apiKey)) {
                  return null;
              }
  
              logTelemetryData();
              final Map<String, Object> loggingParams = mLoggingUtils.getSourceCreationParams(
                      null,
                      apiKey,
                      sourceParams.getType());
              final RequestOptions loggingOptions = RequestOptions.builder(publishableKey).build();
              logApiCall(loggingParams, loggingOptions);
              final StripeResponse response = requestData(RequestExecutor.RestMethod.POST,
                      getSourcesUrl(), paramMap, options);
              return Source.fromString(response.getResponseBody());
          } catch (CardException unexpected) {
              // This particular kind of exception should not be possible from a Source API endpoint.
              throw new APIException(unexpected.getMessage(), unexpected.getRequestId(),
                      unexpected.getStatusCode(), null, unexpected);
          }
      }
docs: Create a {@link Source} using the input {@link SourceParams}.
  
  @param sourceParams a {@link SourceParams} object with {@link Source} creation params
  @param publishableKey an API key
  @param stripeAccount a connected Stripe Account ID
  @return a {@link Source} if one could be created from the input params,
  or {@code null} if not
  @throws AuthenticationException if there is a problem authenticating to the Stripe API
  @throws InvalidRequestException if one or more of the parameters is incorrect
  @throws APIConnectionException if there is a problem connecting to the Stripe API
  @throws APIException for unknown Stripe API errors. These should be rare.