anchor.diff:  
   * *Kill Bill* - The Kill Bill system
   
  -* *Checkout Servlet* - Plugin servlet that initiates setting up the payment method. 
  +* *Checkout Servlet* - Plugin servlet that initiates setting up the payment method.
   
  -* *Payment Plugin*: https://docs.killbill.io/latest/payment_plugin.html[Kill Bill plugin] corresponding to the payment gateway 
  +* *Payment Plugin*: https://docs.killbill.io/latest/payment_plugin.html[Kill Bill plugin] corresponding to the payment gateway
   
   * *Payment Gateway*: Entity that processes the payment
   
  
positive.code: 
  . The end user initiates the checkout process.
  
  . The merchant website invokes a checkout servlet in Kill Bill. 
  
  . Kill Bill invokes the https://github.com/killbill/killbill-plugin-api/blob/d9eca5af0e37541069b1c608f95e100dbe13b301/payment/src/main/java/org/killbill/billing/payment/plugin/api/PaymentPluginApi.java#L269[PaymentPluginApi#buildFormDescriptor] method in the payment plugin. 
  
  . The `PaymentPlugin#buildFormDescriptor` method makes a gateway specific call and obtains a redirect URL.
  
  
negative.code: 
  . The merchant website converts it into a token and invokes the `addPaymentMethod` in Kill Bill with this token. This saves the token in the Kill Bill database.
  
  . Some payment gateways require the token to be saved within the gateway so as to be able to process recurring payments. In such cases, Kill Bill invokes the `addPaymentMethod` in the payment plugin corresponding to the payment gateway.
  
  . The payment plugin then makes a gateway specific call to save the payment token within the gateway.
  
  