Hi,
How we are going to handle failure cases with this plan.

eg:
- for the monthly plan, If the subscriber has not paid or can not be
charged from the CC, Is stripe will send back the call to API M to block
that subscription?
- If the subscriber paid later, how we are going to re-activate

- When it comes to distributed deployments with many nodes with multiple
timezones, EU/APAC/ US,  Are we aggregating the counts per local timezone?
- Hope this call to the count table be asynchronous , Are we implementing
this call as a handler in response path or what is the plan?

Thanks
Shammi


On Wed, May 15, 2019 at 7:21 AM Frank Leymann <fr...@wso2.com> wrote:

> Would a discount pricing model make sense? E.g. after x requests you get a
> discount of y%?
>
> And what about adding a QoS aspect: if x requests failed within y
> duration, you get a discount of z% for D duration?
>
> Best regards,
> Frank
>
>
>
>
> Am Mi., 15. Mai 2019 um 08:21 Uhr schrieb Chamin Dias <cham...@wso2.com>:
>
>> Hi all,
>>
>> Based on the recent discussions we had, we will be going to implement the
>> following features from the products POV. Intention of this email is to
>> give an update on some of the important points.
>>
>> *A) Model : Charge a fixed price for a given time*
>>
>> *1. What we need in the product : *
>> Ability to define the fixed price, frequency and duration for a tier
>> Eg : $25 (price) per 1 (frequency) month (duration)
>>
>> Note : This can be extended as "one time payment" if needed. That means,
>> if we specify something like, "$25 (price) per 100 (frequency) years
>> (duration)" - it will charge $25 per 100 years. Practically a subscription
>> won't last that much of time so this can be considered as one time payment
>> for a tier.
>>
>> *2. What we need in the billing engine : *
>> Ability to define pricing plans with parameters (price, frequency and
>> duration)
>>
>> *3. Benefit / User experience : *
>> Admins will define tiers with using the dashboard.
>> API providers can attach a tier with fixed price (for a given time).
>> Subscribers will pay a fixed amount (per week, month - specified in the
>> tier).
>>
>>
>> *B) Model : Pay as you use*
>>
>> *1. What we need in the product : *
>> i) Ability to define the price per request
>> ii). Aggregate usage daily (via a scheduled / manual task)
>>
>> *2. What we need in the billing engine :*
>> Ability to define pricing plans with 'pay as you use' mode and aggregate
>> or set usage and charge subscribers for the usage.
>>
>> *3. Benefit / User experience : *
>> API providers can attach a tier with 'pay as you use' type. Then, usage
>> will be aggregated daily / or set for each subscriber. At the end of each
>> month, subscriber will be charged for the aggregated usage.
>> API provider will be able to see the revenue from each user of their API.
>>
>> Thanks.
>>
>> On Mon, Apr 8, 2019 at 3:10 PM Chamin Dias <cham...@wso2.com> wrote:
>>
>>> Hi Cyril,
>>>
>>> As for the initial implementation, we plan to provide this integration
>>> with stripe but eventually we hope to provide necessary interfaces to
>>> extend. For now, we focus on delivering a workable solution (APIM + Stripe)
>>> for a normal usage based billing scenario.
>>>
>>> Thanks.
>>>
>>> On Fri, Apr 5, 2019 at 3:53 PM Silmy Hasan <si...@wso2.com> wrote:
>>>
>>>> Hi Rukshan,
>>>>
>>>> Please my answer to your concern below
>>>>
>>>> *I think we can reuse the existing data. Even though we define
>>>> recording policy, all the possible data is stored in the analytics DBs
>>>> regardless of the recording policy. So we should be able to correlate this
>>>> recording policy with stat data and filter out required data from the
>>>> Billing engine.*
>>>>
>>>> As discussed offline , I dont think that we can use only the existing
>>>> data without modifying or creating a new Aggregation. If we assume we
>>>> define the recording policy based on the response code , we do not store
>>>> the response code anywhere in Request count Aggregation. So providing the
>>>> successful count based on the response code is impossible without altering
>>>> or creating a new aggregation.
>>>>
>>>> but we can decide whether we are going to add this to an existing
>>>> aggregation or create a new one.  If we try to  add the above policy to the
>>>> existing aggregations we will have to modify the queries that read the data
>>>> from the aggregation to populate graphs.  Also we will always have to
>>>> modify the queries  , whenever there is a change in the policy (based on
>>>> some user requirement). Also it will compel to store the above data
>>>> irrelevant of whether the monetization is enabled or not , hence i believe
>>>> creating a separate aggregation(create tables internally) can ease lot of
>>>> things in future
>>>>
>>>> Thanks,
>>>> Silmy.
>>>>
>>>>
>>>>
>>>> On Fri, Apr 5, 2019 at 2:51 PM Rukshan Premathunga <ruks...@wso2.com>
>>>> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Fri, Apr 5, 2019 at 2:46 PM Silmy Hasan <si...@wso2.com> wrote:
>>>>>
>>>>>> Hi Bhathiya,
>>>>>>
>>>>>> Please find my answers for your concerns,
>>>>>>
>>>>>> *I think we can do this check at the time they enable monetization
>>>>>> for an API*.
>>>>>> +1
>>>>>>
>>>>>> *Why do we need separate tables here? Can't we use the existing stats
>>>>>> data here?*
>>>>>> We need a separate table here because we check whether the response
>>>>>> for a particular request is delivered successfully based on some set
>>>>>> policy, before taking it as a count to bill. But in the current stats 
>>>>>> there
>>>>>> is no such a check when we aggregate the request count and all of them 
>>>>>> are
>>>>>> simply added to the count through API Request count Aggregation. So if we
>>>>>> try to add this also to the same aggregation as a new column then it will
>>>>>> create a separation among the request count aggregated and will have to
>>>>>> modify the aggregation and existing queries which we used to get data 
>>>>>> from
>>>>>> these aggregations.
>>>>>> Hence creating a separate table would very much simplify this.
>>>>>>
>>>>> I think we can reuse the existing data. Even though we define
>>>>> recording policy, all the possible data is stored in the analytics DBs
>>>>> regardless of the recording policy. So we should be able to correlate this
>>>>> recording policy with stat data and filter out required data from the
>>>>> Billing engine.
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Silmy.
>>>>>>
>>>>>> On Fri, Apr 5, 2019 at 2:38 PM Silmy Hasan <si...@wso2.com> wrote:
>>>>>>
>>>>>>> Hi Bhathiya,
>>>>>>>
>>>>>>> Please find my answers for your concerns,
>>>>>>>
>>>>>>> *I think we can do this check at the time they enable monetization
>>>>>>> for an API*.
>>>>>>> +1
>>>>>>>
>>>>>>> *Why do we need separate tables here? Can't we use the existing
>>>>>>> stats data here?*
>>>>>>> We need a separate table here because we check whether the response
>>>>>>> for a particular request is delivered successfully based on some set
>>>>>>> policy, before taking it as a count to bill. But in the current stats 
>>>>>>> there
>>>>>>> is no such a check when we aggregate the request count and all of them 
>>>>>>> are
>>>>>>> simply added to the count through API Request count Aggregation. So if 
>>>>>>> we
>>>>>>> try to add this also to the same aggregation as a new column then it 
>>>>>>> will
>>>>>>> create a separation among the request count aggregated and will have to
>>>>>>> modify the aggregation and existing queries which we used to get data 
>>>>>>> from
>>>>>>> these aggregations.
>>>>>>> Hence creating a separate table would very much simplify this.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Silmy.
>>>>>>>
>>>>>>> On Fri, Apr 5, 2019 at 2:25 PM Bhathiya Jayasekara <
>>>>>>> bhath...@wso2.com> wrote:
>>>>>>>
>>>>>>>> Hi Chamin,
>>>>>>>>
>>>>>>>> On Fri, Apr 5, 2019 at 1:26 PM Chamin Dias <cham...@wso2.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> 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.
>>>>>>>>>
>>>>>>>>
>>>>>>>> I think we can do this check at the time they enable monetization
>>>>>>>> for an API.
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> 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).
>>>>>>>>>
>>>>>>>>
>>>>>>>> Why do we need separate tables here? Can't we use the existing
>>>>>>>> stats data here?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Bhathiya
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> 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
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *Bhathiya Jayasekara*
>>>>>>>> *Technical Lead,*
>>>>>>>> *WSO2 inc., http://wso2.com <http://wso2.com>*
>>>>>>>>
>>>>>>>> *Phone: +94715478185*
>>>>>>>> *LinkedIn: http://www.linkedin.com/in/bhathiyaj
>>>>>>>> <http://www.linkedin.com/in/bhathiyaj>*
>>>>>>>> *Twitter: https://twitter.com/bhathiyax
>>>>>>>> <https://twitter.com/bhathiyax>*
>>>>>>>> *Blog: http://movingaheadblog.blogspot.com
>>>>>>>> <http://movingaheadblog.blogspot.com/>*
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Shilmy Hasan
>>>>>>> Associate Software Engineer | WSO2
>>>>>>>
>>>>>>> E-mail :si...@wso2.com
>>>>>>> Phone :0779188653
>>>>>>> web : http://www.wso2.com
>>>>>>>
>>>>>>> [image: https://wso2.com/signature] <https://wso2.com/signature>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Shilmy Hasan
>>>>>> Associate Software Engineer | WSO2
>>>>>>
>>>>>> E-mail :si...@wso2.com
>>>>>> Phone :0779188653
>>>>>> web : http://www.wso2.com
>>>>>>
>>>>>> [image: https://wso2.com/signature] <https://wso2.com/signature>
>>>>>> _______________________________________________
>>>>>> Architecture mailing list
>>>>>> Architecture@wso2.org
>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Rukshan Chathuranga.
>>>>> WSO2, Inc.
>>>>> +94711822074
>>>>>
>>>>
>>>>
>>>> --
>>>> Shilmy Hasan
>>>> Associate Software Engineer | WSO2
>>>>
>>>> E-mail :si...@wso2.com
>>>> Phone :0779188653
>>>> web : http://www.wso2.com
>>>>
>>>> [image: https://wso2.com/signature] <https://wso2.com/signature>
>>>> _______________________________________________
>>>> Architecture mailing list
>>>> Architecture@wso2.org
>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>
>>>
>>>
>>> --
>>> Chamin Dias
>>> Mobile : 0716097455
>>> Email : cham...@wso2.com
>>> LinkedIn : https://www.linkedin.com/in/chamindias
>>>
>>>
>>
>> --
>> 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
>>
> _______________________________________________
> Architecture mailing list
> Architecture@wso2.org
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>


-- 
Best Regards,

*  Shammi Jayasinghe*


*Senior Technical Lead*
*WSO2, Inc.*
*+1-812-391-7730*
*+1-812-327-3505*

*http://shammijayasinghe.blogspot.com
<http://shammijayasinghe.blogspot.com>*
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to