anchor.diff:  
   In order to get started with your own payment plugin, you need to do the following:
   
  -. Set up the *Hello World Plugin* as per our https://docs.killbill.io/latest/plugin_development.html#_development[__Plugin Development__] document.
  +. Set up the *Hello World Plugin* as explained in the  https://docs.killbill.io/latest/plugin_development.html#_getting_started[__Plugin Development__] document.
   
   . Create a new Maven project similar to *Hello World Plugin*.
   
  -. Create a class similar to https://github.com/killbill/killbill-hello-world-java-plugin/blob/719779b1ea25c14928e92996b6aa21cc9bf8d4fe/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldPaymentPluginApi.java[HelloWorldPaymentPluginApi.java]. This is a reference class that is included in the *Hello World Plugin*. It implements the `PaymentPluginApi` interface.
  +. Create a class similar to https://github.com/killbill/killbill-hello-world-java-plugin/blob/719779b1ea25c14928e92996b6aa21cc9bf8d4fe/src/main/java/org/killbill/billing/plugin/helloworld/HelloWorldPaymentPluginApi.java[HelloWorldPaymentPluginApi.java]. This is a reference class that implements the `PaymentPluginApi` interface.
   
   . Implement the desired methods from the `PaymentPluginApi` interface within your class. These methods are explained in the <<paymentpluginapi_methods, "PaymentPluginApi Methods">> table below.
   
  
positive.code: 
  ==== Step 1 - Initial Setup
  
  The first step in creating a payment plugin would be to create a new Maven project. For this we need to do the following:
  
  . Create a new Maven project.
  
  . Copy the https://github.com/killbill/killbill-hello-world-java-plugin/blob/719779b1ea25c14928e92996b6aa21cc9bf8d4fe/pom.xml[Hello World Plugin pom.xml].
  
  . Generate a GoCardless access token (https://manage-sandbox.gocardless.com/developers) and create an environment variable *GC_ACCESS_TOKEN* with this token.
  
  ==== Step 2 - Creating GoCardlessPluginApi
  
  We will first need to create a class similar to `HelloWorldPaymentPluginApi` that implements the `PaymentPluginApi` interface. We can create this class as follows (See https://github.com/killbill/killbill-gocardless-example-plugin/blob/9522498ecde5849c940574c598ceb5ce088d32a7/src/main/java/org/killbill/billing/plugin/gocardless/GoCardlessPaymentPluginApi.java[_GoCardlessPaymentPluginApi.java_]):
  
  
negative.code: 
  * The `properties` parameter is typically used to pass properties which are related to the specific method call (`addPaymentMethod` in this case) while the `PaymentMethodPlugin#getProperties`  typically refers to non-standard generic information about the payment method itself. 
  
  * A client application can use either of these to pass in the GoCardless properties. The code above (like other plugins) is lenient and accepts both ways. So, it first invokes `PluginProperties.merge` to merge both properties and stores them into a merged `allProperties` list.
  
  * It then retrieves the `redirectFlowId` and `sessionToken` from `allProperties`. These are required by GoCardless and are as explained below:
  
  