Hi all,

We are in the process of providing support for monetization in APIM. We
have performed a pre-analysis of $subject and came up with the initial
design.

For the initial implementation, we plan to use Stripe and implement the
necessary functions to support monetization flow in the product.

Please find the details below.

*A) Prerequisites*

1. API provider should have a stripe account.
2. API subscriber should have a credit card (to use paid APIs).
3. API analytics should be enabled (since we need to publish some data in
the DB related to this)


*B) There should be few mappings between APIM and Stripe for some
objects/actions.*

   - Object/action in APIM : Attaching a paid tier to an API
   - Corresponding object/action in Stripe : Plan [1]


   - Object/action in APIM : API subscriber
   - Corresponding object/action in Stripe : Customer [2]


   - Object/action in APIM : Subscribing to an API
   - Corresponding object/action in Stripe : Create a subscription [3] in
   stripe


   - Object/action in APIM : Invoking APIs
   - Corresponding object/action in Stripe : Charging [4] in stripe


*C) This is the flow.*

1. API provider creates an API. At the time of attaching a paid tier to his
API, we check for the existence for the stripe account of the provider. If
it is there, we create a "plan" [1] in the stripe side to indicate the
attachment if the tier to the API. If the API provider does not have a
stripe account, then we notify them to create an account and come back.

2. API subscriber (app developer) subscribes to an API. If this is done
through a paid tier, then we create a "customer" [2] object in stripe side
using the stripe account of the API provider. In other words, this is the
indication that this app developer is a customer if the corresponding API
provider. A "subscription" [3] will be created in stripe side after
capturing the credit card data.

3. When the API is consumed (i.e - invoked), we record the data in the
corresponding data table (we will need a separate table(s) for this).

4. Every day, at a given time (say at 00:00), we run a scheduled task and
identify the customers (i.e - who has reached the end of the billing cycle
- say 1 month) to be billed. If we find such customer, then APIM sends a
"charge" [4] request to the respective customer (i.e - App developer) based
on the usage data we have collected in the DB.

Please share your thoughts/suggestions if you have any.

[1] Plan : https://stripe.com/docs/api/plans?lang=curl
[2] Customer : https://stripe.com/docs/api/customers?lang=curl
[3] Subscription : https://stripe.com/docs/api/subscriptions?lang=curl
[4] Charge : https://stripe.com/docs/api/charges?lang=curl

Thanks.

-- 
Chamin Dias
Mobile : 0716097455
Email : cham...@wso2.com
LinkedIn : https://www.linkedin.com/in/chamindias
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to