Skip to main content

Stripe's customers API

· 20 min read
Guy Klages
Ex-Meta Technical Writer, Co-founder FindFit

Introduction

The Stripe customers API is organized around REST. It has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. It uses built-in HTTP features, like HTTP authentication and HTTP verbs, which are understood by off-the-shelf HTTP clients. It supports cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website’s client-side code).

To make the API as explorable as possible, accounts have test mode and live mode API keys. There is no “switch” for changing between modes, just use the appropriate key to perform a live or test transaction. Requests made with test mode credentials never hit the banking networks and incur no cost.

Customers

Customer objects allow you to perform recurring charges and track multiple charges that are associated with the same customer. The API allows you to create, delete, and update your customers. You can retrieve individual customers as well as list of all your customers.

The customer object

The following are the attributes in this feature.

AttributeTypeDescription
idstringThe unique record ID
objectstringThe value is customer
account_balanceintegerCurrent balance, if any, being stored on the customer’s account. If negative, the customer has credit to apply to the next invoice. If positive, the customer has an amount owed that will be added to the next invoice. The balance does not refer to any unpaid invoices; it solely takes into account amounts that have yet to be successfully applied to any invoice. This balance is only taken into account for recurring billing purposes (i.e., subscriptions, invoices, invoice items).
business_vat_idstringThe customer’s VAT identification number
createdtimestampThe date and time the record was created
currencystringThe currency the customer can be charged in for recurring billing purposes.
default_sourcestringID of the default source attached to this customer
delinquentbooleanWhether or not the latest charge for the customer’s latest invoice has failed
descriptionstringRemarks about the record
discounthashDescribes the current discount active on the customer, if there is one.
emailstring
livemodebooleanWhether or not livemode is on
metadatastringA set of key/value pairs that you can attach to a customer object. It can be useful for storing additional information about the customer in a structured format.
shippinghashShipping information associated with the customer
sourceslistThe customer’s payment sources, if any
subscriptionslistThe customer’s payment subscriptions, if any

customer-shipping

The following is the customer-shipping object's child attribute.

AttributeTypeDescription
addresshashCustomer shipping address

customer-shipping-address

The following are the customer-shipping-address object's attributes.

AttributeTypeDescription
citystringThe shipping address' city / suburb / town / village
countrystringTwo-letter country code of the shipping address
line1stringThe shipping address' street / PO Box / company name
line2stringThe shipping address' apartment / suite / unit / building
postal_codestringThe shipping address' zip / postal code
statestringThe shipping address' state / province / county

customer-sources

The following are the customer-sources object's child attributes.

AttributeTypeDescription
objectstringValue is list
dataarrayThe list contains all payment sources that have been attached to the customer. These may be Cards or BitcoinReceivers.
has_morebooleanWhether or not there are more records
total_countpositive integer or zeroThe total number of items available. This value is not included by default, but you can request it by specifying ?include[]=total_count.
urlstringThe URL where this list can be accessed.

customer-subscriptions

The following are the customer-subscriptions object's child attributes.

AttributeTypeDescription
objectstringValue is list
dataarrayThe list contains all payment sources that have been attached to the customer. These may be Cards or BitcoinReceivers.
has_morebooleanWhether or not there are more records
total_countpositive integer or zeroThe total number of items available. This value is not included by default, but you can request it by specifying ?include[]=total_count.
urlstringThe URL where this list can be accessed.

The following is an example response:

com.stripe.model.Customer JSON: {
"id": "cus_8JMTaIcum1p34N",
"object": "customer",
"account_balance": 0,
"business_vat_id": null,
"created": 1461252581,
"currency": "usd",
"default_source": "card_182jjK2eZvKYlo2CHJmfmQ93", "delinquent": false,
"description": "Mia Anderson",
"discount": null,
"email": "mia.anderson.34@example.com", "livemode": false,
"metadata": {
},
"shipping": null,
"sources": {
"object": "list",
"data": [
{
"id": "card_182jjK2eZvKYlo2CHJmfmQ93", "object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "Visa",
"country": "US",
"customer": "cus_8JMTaIcum1p34N",
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 12,
"exp_year": 2017,
"funding": "credit",
"last4": "4242",
"metadata": {
},
"name": null,
"tokenization_method": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/customers/cus_8JMTaIcum1p34N/sources" },
"subscriptions": {
"object": "list",
"data": [
{
"id": "sub_8JMVP3u5AvUoKd",
"object": "subscription",
"application_fee_percent": null,
"cancel_at_period_end": false,
"canceled_at": null,
"current_period_end": 1463844717,
"current_period_start": 1461252717,
"customer": "cus_8JMTaIcum1p34N",
"discount": null,
"ended_at": null,
"metadata": {
},
"plan": {
"id": "titanium-expert-948", "object": "plan",
"amount": 999,
"created": 1461252658,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
},
"name": "Titanium Expert",
"statement_descriptor": null,
"trial_period_days": null
},
"quantity": 1,
"start": 1461252717,
"status": "active",
"tax_percent": null,
"trial_end": null,
"trial_start": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/customers/cus_8JMTaIcum1p34N/subscriptions"
}
}

Create a customer

Creates a new customer object. To do so, add Customer.create(); to your program.

The following are the optional arguments in this feature.

ArgumentDescription
account_balanceAn integer amount in cents that is the starting account balance for your customer. A negative amount represents a credit that will be used before attempting any charges to the customer’s card; a positive amount will be added to the next invoice.
business_vat_idThe customer’s VAT identification number
couponIf you provide a coupon code, the customer will have a discount applied on all recurring charges. Charges you create through the API will not have the discount.
descriptionAn arbitrary string that you can attach to a customer object. It is displayed alongside the customer in the dashboard. This will be unset if you POST an empty value.This can be unset by updating the value to Null and then saving.
emailCustomer’s email address. It’s displayed alongside the customer in your dashboard and can be useful for searching and tracking. This will be unset if you POST an empty value. This can be unset by updating the value to Null and then saving.
metadataA set of key/value pairs that you can attach to a customer object. It can be useful for storing additional information about the customer in a structured format. This will be unset if you POST an empty value.This can be unset by updating the value to Null and then saving.
planThe identifier of the plan to subscribe the customer to. If provided, the returned customer object will have a list of subscriptions that the customer is currently subscribed to. If you subscribe a customer to a plan without a free trial, the customer must have a valid card as well.
quantityThe quantity you’d like to apply to the subscription you’re creating (if you pass in a plan). For example, if your plan is 10 cents/user/month, and your customer has 5 users, you could pass 5 as the quantity to have the customer charged 50 cents (5 x 10 cents) monthly. Defaults to 1 if not set. Only applies when the plan parameter is also provided.
shippingThe shipping address
sourceThe source can either be a token, like the ones returned by our Stripe.js, or a dictionary containing a user’s credit card details.
tax_percentA positive decimal (with at most two decimal places) between 1 and 100. This represents the percentage of the subscription invoice subtotal that will be calculated and added as tax to the final amount each billing period. For example, a plan which charges $10/month with a tax_percent of 20.0 will charge $12 per invoice. Can only be used if a plan is provided.
trial_endUnix timestamp representing the end of the trial period the customer will get before being charged. If set, trial_end will override the default trial period of the plan the customer is being subscribed to. The special value now can be provided to end the customer’s trial immediately. Only applies when the plan parameter is also provided.

create-shipping

The following are the shipping object's child arguments.

ArgumentConditionDescription
addressRequiredThe full shipping address
nameRequiredThe name of the shipping contact
phoneOptionalThe phone number of the shipping contact

create-shipping-address

The following are the create-shipping-address object's child arguments.

ArgumentConditionDescription
line1RequiredThe shipping address' street
line2OptionalThe shipping address' building / company name / etc.
cityOptionalThe shipping address' city
countryOptionalThe shipping address' country
postal_codeOptionalThe shipping address' zip / postal code
stateOptionalThe shipping address' state / territory / province

create-source

The following are the create-source object's child arguments.

ArgumentConditionDescription
objectRequiredThe type of payment source. Should be card
exp_monthRequiredTwo-digit number representing the card’s expiration month
exp_yearRequiredTwo- or four-digit number representing the card’s expiration year
numberRequiredThe card number, as a string without any separators
address_cityOptionalThe source's city
address_countryOptionalThe source's country
address_line1OptionalThe source's street / apartment
address_line2OptionalThe source's building / company name
address_stateOptionalThe source's state
address_zipOptionalThe source's zip / postal code
currencyManaged Accounts OnlyRequired when adding a card to an account (not applicable to a customers or recipients). The card (which must be a debit card) can be used as a transfer destination for funds in this currency. Currently, the only supported currency for debit card transfers is usd.
cvcRequiredCard security code. Required unless your account is registered in Australia, Canada, or the United States. Highly recommended to always include this value.
default_for_currencyManaged Accounts OnlyOnly applicable on accounts (not customers or recipients). If you set this to true (or if this is the first external account being added in this currency) this card will become the default external account for its currency.
metadataOptionalA set of key/value pairs that you can attach to a card object. It can be useful for storing additional information about the card in a structured format.
nameOptionalCardholder’s full name

The following is an example request:

Stripe.apiKey = "test_BQokikJOvBiI2HlWgH4olfQ2"; 

Map<String, Object> customerParams = new HashMap<String, Object>();
customerParams.put("description", "Customer for test@example.com");
customerParams.put("source", "tok_182ied2eZvKYlo2CDbFVWcMM"); // obtained with Stripe.js

Customer.create(customerParams);

Returns

Returns a customer object if the call succeeded. The returned object will have information about subscriptions, discount, and payment sources, if that information has been provided. If an invoice payment is due and a source is not provided, the call will raise an error. If a non-existent plan or a non-existent or expired coupon is provided, the call will raise an error.

If a source has been attached to the customer, the returned customer object will have a default_source attribute, which is an ID that can be expanded into the full source details when retrieving the customer.

The following is an example response:

com.stripe.model.Customer JSON: { 
"id": "cus_8JNNkDAKVZ23vZ",
"object": "customer",
"account_balance": 0,
"business_vat_id": null,
"created": 1461255958,
"currency": "usd",
"default_source": null,
"delinquent": false,
"description": "test papirus (test@n206papirus.net)", "discount": null,
"email": "test@n206papirus.net",
"livemode": false,
"metadata": {
},
"shipping": null,
"sources": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_8JNNkDAKVZ23vZ/sources"
},
"subscriptions": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_8JNNkDAKVZ23vZ/subscriptions" }
}

Retrieve a customer

Retrieves the details of an existing customer. You need only supply the unique customer identifier that was returned upon customer creation.

The following is an example request:

Stripe.apiKey = "test_BQokikJOvBiI2HlWgH4olfQ2"; 

Customer.retrieve("cus_8JNO6XkCpsjc7s");

Returns

Returns a customer object if a valid identifier was provided. When requesting the ID of a customer that has been deleted, a subset of the customer’s information will be returned, including a deleted property, which will be true.

The following is an example response:

com.stripe.model.Customer JSON: { 
"id": "cus_8JNO6XkCpsjc7s",
"object": "customer",
"account_balance": 0,
"business_vat_id": null,
"created": 1461256039,
"currency": "usd",
"default_source": "card_182keA2eZvKYlo2CGbcuGkIT",
"delinquent": false,
"description": null,
"discount": null,
"email": "sbvmqa+gwenna@gmail.com",
"livemode": false,
"metadata": {
},
"shipping": null,
"sources": {
"object": "list",
"data": [
{
"id": "card_182keA2eZvKYlo2CGbcuGkIT", "object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "Visa",
"country": "US",
"customer": "cus_8JNO6XkCpsjc7s",
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 12,
"exp_year": 2019,
"funding": "credit",
"last4": "4242",
"metadata": {
},
"name": null,
"tokenization_method": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/customers/cus_8JNO6XkCpsjc7s/sources" },
"subscriptions": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_8JNO6XkCpsjc7s/subscriptions"
}
}

Update a customer

Updates the specified customer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. For example, if you pass the source parameter, that becomes the customer’s active source (e.g., a card) to be used for all charges in the future.

When you update a customer to a new valid source: for each of the customer’s current subscriptions, if the subscription is in the past_due state, then the latest unpaid, unclosed invoice for the subscription will be retried (note that this retry will not count as an automatic retry, and will not affect the next regularly scheduled payment for the invoice. Note also that no invoices pertaining to subscriptions in the unpaid state, or invoices pertaining to canceled subscriptions, will be retried as a result of updating the customer’s source.)

This request accepts mostly the same arguments as the customer creation call.

To do so, add the following code to your program:

Customer cu = Customer.retrieve({CUSTOMER_ID}); 
Map<String, Object> updateParams = new HashMap<String, Object>();
updateParams.put("description", {NEW_DESCRIPTION});
...
cu.update(updateParams);

The following are the optional arguments in this feature.

ArgumentDescription
account_balanceAn integer amount in cents that represents the account balance for your customer. Account balances only affect invoices. A negative amount represents a credit that decreases the amount due on an invoice; a positive amount increases the amount due on an invoice.
busines_vat_idThe customer’s VAT identification number.
couponIf you provide a coupon code, the customer will have a discount applied on all recurring charges. Charges you create through the API will not have the discount.
default_sourceID of source to make the customer’s new default for invoice payments
descriptionAn arbitrary string that you can attach to a customer object. It is displayed alongside the customer in the dashboard. This will be unset if you POST an empty value. This can be unset by updating the value to Null and then saving.
emailCustomer’s email address. It’s displayed alongside the customer in your dashboard and can be useful for searching and tracking. This will be unset if you POST an empty value. This can be unset by updating the value to Null and then saving.
metadataA set of key/value pairs that you can attach to a customer object. It can be useful for storing additional information about the customer in a structured format. This will be unset if you POST an empty value.This can be unset by updating the value to Null and then saving.
shipping
sourceThe source can either be a token, like the ones returned by our Stripe.js, or a dictionary containing a user’s credit card details (with the options shown below). Passing source will create a new source object, make it the new customer default source, and delete the old customer default if one exists. If you want to add additional sources instead of replacing the existing default, use the card creation API. Whenever you attach a card to a customer, Stripe will automatically validate the card.

update-shipping

The following are the update-shipping child arguments.

ArgumentConditionDescription
addressRequiredThe full shipping address
nameRequiredThe shipping contact name
phoneOptionalThe shipping contact phone number

update-shipping-address

The following are the update-shipping-address object's child arguments.

ArgumentConditionDescription
line1RequiredThe update shipping address' street
cityOptionalThe update shipping address' city
countryOptionalThe update shipping address' country
line2OptionalThe update shipping address' building / company name / block
postal_codeOptionalThe update shipping address' zip / postal code
stateOptionalThe update shipping address' state

update-source

The following are the update-source object's child arguments.

ArgumentConditionDescription
objectRequiredThe type of payment source. Should be card
exp_monthRequiredTwo-digit number representing the card’s expiration month
exp_yearRequiredTwo- or four-digit number representing the card’s expiration year
numberRequiredThe card number, as a string without any separators
address_cityOptionalThe update source address' city
address_countryOptionalThe update source address' country
address_line1OptionalThe update source address' street
address_line2OptionalThe update source address' building / suite / company name
address_stateOptionalThe update source address' state
address_zipOptionalThe update source address' zip / postal code
currencyManaged Accounts OnlyRequired when adding a card to an account (not applicable to a customers or recipients). The card (which must be a debit card) can be used as a transfer destination for funds in this currency. Currently, the only supported currency for debit card transfers is usd.
cvcRequiredCard security code. Required unless your account is registered in Australia, Canada, or the United States. Highly recommended to always include this value.
default_for_currencyManaged Accounts OnlyOnly applicable on accounts (not customers or recipients). If you set this to true (or if this is the first external account being added in this currency) this card will become the default external account for its currency.
metadataOptionalA set of key/value pairs that you can attach to a card object. It can be useful for storing additional information about the card in a structured format.
nameOptionalCardholder’s full name

The following is an example request:

Stripe.apiKey = "test_BQokikJOvBiI2HlWgH4olfQ2"; 
Customer cu = Customer.retrieve("cus_8JNceg1cXYpZwJ");
Map<String, Object> updateParams = new HashMap<String, Object>();
updateParams.put("description", "Customer for test@example.com");

cu.update(updateParams);

Returns

Returns the customer object if the update succeeded. Throws an error if update parameters are invalid (e.g. specifying an invalid coupon or an invalid source).

The following is an example response:

com.stripe.model.Customer JSON: { 
"id": "cus_8JNceg1cXYpZwJ",
"object": "customer",
"account_balance": 0,
"business_vat_id": null,
"created": 1461256854,
"currency": "usd",
"default_source": "card_182krH2eZvKYlo2CyXuVSi02", "delinquent": false,
"description": "Customer for test@example.com", "discount": null,
"email": "aheaven87@gmail.com",
"livemode": false,
"metadata": {
},
"shipping": null,
"sources": {
"object": "list",
"data": [
{
"id": "card_182krH2eZvKYlo2CyXuVSi02", "object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "Visa",
"country": "US",
"customer": "cus_8JNceg1cXYpZwJ",
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 1,
"exp_year": 2017,
"funding": "credit",
"last4": "4242",
"metadata": {
},
"name": null,
"tokenization_method": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/customers/cus_8JNceg1cXYpZwJ/sources"
},
"subscriptions": {
"object": "list",
"data": [
{
"id": "sub_8JNeptwCu8Zddh",
"object": "subscription",
"application_fee_percent": null,
"cancel_at_period_end": false,
"canceled_at": null,
"current_period_end": 1463848953,
"current_period_start": 1461256953,
"customer": "cus_8JNceg1cXYpZwJ",
"discount": null,
"ended_at": null,
"metadata": {
},
"plan": {
"id": "ern-monthly",
"object": "plan",
"amount": 2499,
"created": 1461244184,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
"plan_id": "2"
},
"name": "Monthly Subscription",
"statement_descriptor": null,
"trial_period_days": null
},
"quantity": 1,
"start": 1461256953,
"status": "active",
"tax_percent": null,
"trial_end": null,
"trial_start": null
},
{
"id": "sub_8JNdYGbwDkccbh",
"object": "subscription",
"application_fee_percent": null,
"cancel_at_period_end": false,
"canceled_at": null,
"current_period_end": 1463848903,
"current_period_start": 1461256903,
"customer": "cus_8JNceg1cXYpZwJ",
"discount": null,
"ended_at": null,
"metadata": {
},
"plan": {
"id": "ern-monthly",
"object": "plan",
"amount": 2499,
"created": 1461244184,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
"plan_id": "2"
},
"name": "Monthly Subscription",
"statement_descriptor": null,
"trial_period_days": null
},
"quantity": 1,
"start": 1461256903,
"status": "active",
"tax_percent": null,
"trial_end": null,
"trial_start": null
},
{
"id": "sub_8JNcIPeX5FZHLi",
"object": "subscription",
"application_fee_percent": null,
"cancel_at_period_end": false,
"canceled_at": null,
"current_period_end": 1463848878,
"current_period_start": 1461256878,
"customer": "cus_8JNceg1cXYpZwJ",
"discount": null,
"ended_at": null,
"metadata": {
},
"plan": {
"id": "ern-monthly",
"object": "plan",
"amount": 2499,
"created": 1461244184,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
"plan_id": "2"
},
"name": "Monthly Subscription",
"statement_descriptor": null,
"trial_period_days": null
},
"quantity": 1,
"start": 1461256878,
"status": "active",
"tax_percent": null,
"trial_end": null,
"trial_start": null
}
],
"has_more": false,
"total_count": 3,
"url": "/v1/customers/cus_8JNceg1cXYpZwJ/subscriptions" }
}

Delete a customer

Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer.

To do so, add the following code to your program:

Customer cu = Customer.retrieve({CUSTOMER_ID}); 
cu.delete();

The following is an example request:

Stripe.apiKey = "test_BQokikJOvBiI2HlWgH4olfQ2"; 

Customer cu = Customer.retrieve("cus_8JNmQG7nBfcoHK"); cu.delete();

Returns

Returns an object with a deleted parameter on success. If the customer ID does not exist, this call raises an error.

Unlike other objects, deleted customers can still be retrieved through the API, in order to be able to track the history of customers while still removing their credit card details and preventing any further operations to be performed (such as adding a new subscription).

The following is an example response:

com.stripe.model.Object JSON: { 
"deleted": true,
"id": "cus_8JNshRXjBWnJdM"
}

List all customers

Returns a list of your customers. The customers are returned sorted by creation date, with the most recent customers appearing first.

To do so, add Customer.all(Map<String, Object> options); to your program.

The following are the optional arguments in this feature.

ArgumentDescription
createdA filter on the list based on the object created field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with the other options.
customerOnly return charges for the customer specified by this customer ID
ending_beforeA cursor for use in pagination. ending_before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with obj_bar, your subsequent call can include ending_before=obj_bar in order to fetch the previous page of the list.
limitA limit on the number of objects to be returned. Limit can range between 1 and 100 items. Default is 10.
starting_afterA cursor for use in pagination. starting_after is an object ID that defines your place in the list. For example, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include starting_after=obj_foo to fetch the next page of the list.

list-created

The following are the list-created object's optional timestamp child arguments.

ArgumentDescription
gt(greater than) Return values where the created field is after this timestamp
gte(greater than or equal) Return values where the created field is after or equal to this timestamp
lt(less than) Return values where the created field is before this timestamp
lte(less than or equal) Return values where the created field is before or equal to this timestamp

The following is an example request:

Stripe.apiKey = "test_BQokikJOvBiI2HlWgH4olfQ2"; 

Map<String, Object> customerParams = new HashMap<String, Object>();
customerParams.put("limit", 3);

Customer.all(customerParams);

Returns

A dictionary with a data property that contains an array of up to limit customers, starting after customer starting_after. Each entry in the array is a separate customer object. If no more customers are available, the resulting array will be empty. This request should never raise an error.

You can optionally request that the response include the total count of all customers that match your filters. To do so, specify include[]=total_count in your request.

The following is an example response:

#<com.stripe.model.CustomerCollection id=#> JSON: { 
"data": [
com.stripe.model.Customer JSON: {
"id": "cus_8JO0w4XG8QrzSx",
"object": "customer",
"account_balance": 0,
"business_vat_id": null,
"created": 1461258315,
"currency": "usd",
"default_source": "card_182lEt2eZvKYlo2CpBNb7MFy", "delinquent": false,
"description": null,
"discount": null,
"email": null,
"livemode": false,
"metadata": {
},
"shipping": null,
"sources": {
"object": "list",
"data": [
{
"id": "card_182lEt2eZvKYlo2CpBNb7MFy",
"object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "Visa",
"country": "US",
"customer": "cus_8JO0w4XG8QrzSx",
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 7,
"exp_year": 2017,
"funding": "unknown",
"last4": "1111",
"metadata": {
},
"name": null,
"tokenization_method": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/customers/cus_8JO0w4XG8QrzSx/sources" },
"subscriptions": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_8JO0w4XG8QrzSx/subscriptions"
}
},
#<com.stripe.model.Customer[...] ...>,
#<com.stripe.model.Customer[...] ...>
],
"has_more": false
}