Figure out last completed payment via Accounts.payments: list in AdSense Management API v1.4 - adsense-api

I am successfully using Google's AdSense API to retrieve payments. The AdSense account I am testing the app with does not have any completed payments.
I am using Accounts.payments:list to retrieve the payments and currently I am only getting one row with Id = "unpaid". This entry specifies the amount that is available for payment.
My question here is what are the other possible entries in the result? Specifically how can I find last completed payment?
Thank you for your help.

items[] description: "The list of Payments for the account. One or both of a) the account's most recent payment; and b) the account's upcoming payment".
As far I can see id can be "unpaid", or date of the last payment (probably the "payment issued" date):
{
"kind": "adsense#payments",
"items": [
{
"kind": "adsense#payment",
"id": "unpaid",
"paymentAmount": "***.**",
"paymentAmountCurrencyCode": "***"
},
{
"kind": "adsense#payment",
"id": "****-**-**",
"paymentDate": "****-**-**",
"paymentAmount": "***.**",
"paymentAmountCurrencyCode": "***"
}
]
}
how can I find last completed payment?
In my understanding, that is exactly what Accounts.payments:list is (or will be) returning:
your account current balance
last payment (if there was any)

Related

Stripe preview invoice without an active subscription

Can we query Stripe with the subscription_items and a quantity to preview the incoming invoice without an active subscription with the Preview API https://api.stripe.com/v1/invoices/upcoming?
We tried to set subscription_items to preview an invoice without an active subscription. Its response contains a subscription and subscription_item. But when we query the subscription or subscription_item specifically, it threw an error Invalid subscription_item.
Eg, When calling /v1/invoices/upcoming with subscription_items
curl --location -g --request GET 'https://api.stripe.com/v1/invoices/upcoming?customer=cus_MIjwgFDqhg8uBf&subscription_items[0][price]=price_1LDx6JL3XoZTtiHnl5wAWtkg&subscription_items[0][quantity]=1' \
--header 'Authorization: Basic xxxxxx'
{
"object": "invoice",
"lines": {
"object": "list",
"data": [
{
"subscription": "sub_1LeoDVL3XoZTtiHn998jF9zp",
"subscription_item": "si_MNZM3MetxDd9Gu"
}
]
}
}
Then when we query the subscription or subscription_item with /v1/subscription_items/si_MNZM3MetxDd9Gu, it shows Invalid subscription_item:
{
"error": {
"message": "Invalid subscription_item id: si_MNZM3MetxDd9Gu",
"type": "invalid_request_error"
}
}
When you are viewing an upcoming invoice, you are simply viewing a preview – the invoice and subscription has not yet been created. So you cannot query the subscription or subscription item in the response from the upcoming invoice API.
https://stripe.com/docs/api/invoices/upcoming does not require an active Subscription. subscription is an optional parameter. The Stripe docs mention :
The identifier of the subscription for which you’d like to retrieve the upcoming invoice. If not provided, but a subscription_items is provided, you will preview creating a subscription with those items....
The below Node.js example code previews creating a subscription :
const invoice = await stripe.invoices.retrieveUpcoming({
customer: 'cus_...',
subscription_items: [
{
price : `price_...`,
quantity : 2
}
]
});

How to list all the fees charged by Stripe via API for accounting purpose?

Unfortunately Stripe does not issue its own invoices for US accounts as per the following documentation:
https://support.stripe.com/questions/download-vat-or-gst-invoices-for-stripe-fees
Therefore it is harder to bulk reconcile processing fees and payouts in the US than in the EU.
Some accountants suggest to use the information summed up under Balances > Payouts > Payout (item)
It would indeed be convenient to collect the fees via the payout object however the API doesn't seem to include processing fees in:
https://stripe.com/docs/api/payouts
Here are some of the line items that our monthly Tax invoice contains in the EU:
Stripe Processing Fees
Refunded Fees
Dispute Fees
Dispute Fees Refunded
Chargeback Protection Stripe Fees
Radar Stripe Fees...
How to list all the fees charged by Stripe via API for accounting purpose?
The section about balance transactions contains all the relevant information. Furthermore all balance types are listed here.
Code example in php
$stripe = new \Stripe\StripeClient(
'sk_................'
);
try{
$transactions = $stripe->balanceTransactions->all(array(
'limit' => 100,
//'type' => 'stripe_fee',
));
}
catch(Stripe\Error\Base $e) {
//echo $e->getMessage();
}
Object Sample
{
"id": "txn_1AznDOBVdKJBvdqlJZmzAT6P",
"object": "balance_transaction",
"amount": 406,
"available_on": 1505433600,
"created": 1504879934,
"currency": "eur",
"description": null,
"exchange_rate": null,
"fee": 37,
"fee_details": [
{
"amount": 37,
"application": null,
"currency": "eur",
"description": "Stripe processing fees",
"type": "stripe_fee"
}
],
"net": 369,
"reporting_category": "charge",
"source": "ch_1AznDOBVdKJBvdqlKp5lunlU",
"status": "available",
"type": "charge"
}
Note
Webhooks can be setup for all the relevant datapoints in order to fetch balance information.
If the type is "stripe_fee" get the amount directly from the field "amount" otherwise from "fee" or "fee_details"
If connected accounts are used the process also requires to use the connected "account_ids" for fetching data.
References
https://stripe.com/docs/api/balance_transactions
https://stripe.com/docs/reports/balance-transaction-types#balance_related
https://www.reddit.com/r/stripe/comments/qcooyu/how_to_list_the_stripe_processing_fees_via_api/

How to retrive Stripe card ID added via Stripe customer portal?

How to retrive Stripe card ID added via Stripe customer portal?
It is not visible when I try to access it via:
test = stripe.Customer.list_sources(
'cus_Izw...',
object="card",
limit=3,
)
I see this in the response:
{
"data": [],
"has_more": false,
"object": "list",
"url": "/v1/customers/cus_Izw.../sources"
}
Cards that are added through the Customer Portal are PaymentMethods not Sources. In order to list them, you can use the /v1/payment_methods. In Python it would look something like:
stripe.PaymentMethod.list(
customer="cus_xxx",
type="card",
)

Does Stripe instant payout allow for an instant charge to payout?

I've been attempting to use Stripe Instant Payout to go from charge to a payout in "mere moments" as documented here : https://stripe.com/docs/connect/payouts#instant-payouts
This has proved to be confusing and difficult.
I currently have a Stripe account with a "Connect"ed Stripe profile. I create the charge for the Connect user, (which has an instant pay valid card) and then I create the payout. When I go to payout, using the method here, it fails, saying the balance isn't available.
Why is this? The balance is in pending, but the docs state "You can pay out an account’s available balance plus its pending balance"
#Newah when you place a charge to a Stripe Connect account that charge is not available for payout immediately. You can check when the charge will be available for payout using the balance transaction object https://stripe.com/docs/api/balance/balance_transaction. You can also get this when retrieving a charge by expanding the balance transaction.
{
"id": "txn_19XJJ02eZvKYlo2ClwuJ1rbA",
"object": "balance_transaction",
"amount": 999,
"available_on": 1483920000,
"created": 1483315442,
"currency": "usd",
"description": null,
"exchange_rate": null,
"fee": 59,
"fee_details": [
{
"amount": 59,
"application": null,
"currency": "usd",
"description": "Stripe processing fees",
"type": "stripe_fee"
}
],
"net": 940,
"source": "ch_19XJJ02eZvKYlo2CHfSUsSpl",
"status": "available",
"type": "charge"
}
The charge will be available for payout on the timestamp set in available_on.

Stripe testing subscription Lumen 5.1

Im running Stripe in test mode.
I've created a Yearly billing plan for 100GBP amount, with a 7 days trial ( directly onto Stripe dashboard. )
However, to test the webhooks i've hardcoded the trial_end:
$trialEnd = new DateTime();
$trialEnd->setTimestamp(time()+120);
$user = Users::find($this->user()['user_id']);
$user->subscription($stripe_plan['stripe_plan'])->trialFor($trialEnd)->create($data['stripeToken'], [
'email' => $this->user()['email']
]);
$user->save();
Basically all goes well, but into stripe dashboard the first invoice for 0 GBP is shown, and after one minute i get the Subscription will end in a minute event. After all, the subscription become Active ( from Trialing ) state.
All the webhooks and even the first subscription add reponse i get the trial ends period instead subscription ends.
How can i get the subscription_ends_at timestamp ?
All webhook requests are having the following timestamps:
{
"id": "evt_18baRrIzJLF7fe6PMDPYD0NM",
"object": "event",
"api_version": "2016-07-06",
"created": 1469558315,
"data": {
"object": {
"id": "sub_8tNBbqy0AmSk8p",
"object": "subscription",
"application_fee_percent": null,
"cancel_at_period_end": false,
"canceled_at": null,
"created": 1469558268,
"current_period_end": 1469558384,
"current_period_start": 1469558268,
"customer": "cus_8tNB1tWYw3Jw7L",
"discount": null,
"ended_at": null,
"livemode": false,
"metadata": {
},
"plan": {
"id": "yearly_200",
"object": "plan",
"amount": 20000,
"created": 1469545724,
"currency": "gbp",
"interval": "year",
"interval_count": 1,
"livemode": false,
"metadata": {
},
"name": "Full Club Membership - Pay Anually",
"statement_descriptor": "FULL MEMBERSHIP",
"trial_period_days": 7
},
"quantity": 1,
"start": 1469558268,
"status": "trialing",
"tax_percent": null,
"trial_end": 1469558384,
"trial_start": 1469558268
}
},
"livemode": false,
"pending_webhooks": 1,
"request": null,
"type": "customer.subscription.trial_will_end"
}
So if you look at trial_start and trial_end is same with current_period_start and current_period_end.
I've though initially that if this is the current period.. fine, but after trial expires the current period shouldn't be trials one.
There is any method to take the subscription_ends_at field from Stripe api ? And also, after the trial period ends, shouldn't send a invoice with the real amount ?
Also, i created a subscription plan with no trial period. That plan after a client subscribed, i get the correct timestamps.
Thanks in advance!
It looks like you figured it out. Basically, the delay comes from the fact that when the timestamp passes for your trial expiration, your request to create a new Invoice on that billing cycle gets added to a queue. Typically the queue will create the new invoice ~immediately, but it can sometimes go several minutes before triggering.
The first Invoice will always have timestamps for the current_period_* that map to the trial_period_* ones. Whereas, the second Invoice (that shows up with the invoice.created-event) will have the accurate timestamps for the billing period.
Oh, now i understand .. i will explain maybe will help someone :D.
Basically if a subscription got a trial period when you subscribe you will get a invoice for 0. Then, even if you set the trial to expire in 2 minutes with the request , the first payment will occur in about 10 minutes :D ( with that payment (if you set a webhook url) you will get a "type": "customer.subscription.updated" event who will contain all desired informations. At that time you can update your subscription_ends_at .
I didn't wait 10 minutes to see if the new invoice will be triggered.. and created -> removed -> recreated -> removed and so on for 4 hours with different tests.

Resources