Mises à niveau de l'API
La version de l’API détermine son comportement, mais aussi celui des webhooks (par exemple, les propriétés incluses dans les réponses, les paramètres pouvant être envoyés dans vos requêtes, etc.). Cette version est définie la première fois que vous envoyez une requête à l’API. Lorsqu’une modification importante est apportée à l’API Stripe, une nouvelle version datée est publiée. Pour éviter tout problème avec votre code, nous ne changeons pas votre version tant que vous n’avez pas terminé vos préparatifs de mise à niveau.
Si vous envoyez des requêtes au nom d’autres utilisateurs à l’aide de Connect, nous utiliserons la version de l’API de votre application afin de simplifier l’écriture d’un code compatible pour tous vos utilisateurs, quelle que soit la version que chacun exploite.
Modifications rétrocompatibles
Stripe considère que les modifications suivantes de l’API sont rétrocompatibles :
Ajout de nouvelles ressources d’API.
Ajout de nouveaux paramètres de requête facultatifs aux méthodes d’API existantes.
Ajout de nouvelles propriétés aux réponses d’API existantes.
Modification de l’ordre des propriétés dans les réponses d’API existantes.
Modification de la longueur ou du format de chaînes opaques, comme des ID d’objets, des messages d’erreur et d’autres chaînes lisibles par des êtres humains.
Ces modifications incluent l’ajout ou la suppression de préfixes fixes (comme le préfixe
ch_
des ID de paiement).Vous pouvez partir du principe que les ID des objets que nous générons ne dépasseront jamais 255 caractères, mais vous devez être en mesure de gérer des ID atteignant cette longueur. Par exemple, si vous utilisez MySQL, vous devez stocker les ID dans une colonne
VARCHAR(255) COLLATE utf8_bin
(la configuration de typeCOLLATE
garantit que la casse soit prise en compte dans les recherches).Ajout de nouveaux types d’événements.
Votre écouteur de webhook doit gérer de manière appropriée les types d’événements inconnus.
Mettre à niveau votre API
Si vous exécutez une ancienne version de l’API, passez à la version la plus récente pour bénéficier de nouvelles fonctions ou simplifier les réponses et accélérer vos requêtes. La mise à niveau de l’API a des conséquences sur les éléments suivants :
- Les appels d’API que vous effectuez sans l’en-tête
Stripe-Version
: les paramètres que vous pouvez envoyer et la structure des objets renvoyés. - Structure des objets reçus avec des méthodes Stripe.js comme confirmCardPayment.
- La structure des objets envoyés à vos endpoints de webhook (du compte et de Connect). Si un endpoint est associé à une version explicite, la mise à niveau de l’API n’aura aucune conséquence sur lui.
- Les opérations automatisées de Billing effectuées par Stripe (par exemple, la génération d’une facture pour une nouvelle période d’abonnement) utilisent la version de l’API par défaut de votre compte. Consultez le log des modifications de l’API pour savoir quelles conséquences la version de l’API par défaut a sur ces opérations.
Pour consulter la version de l’API que vous exécutez et passer à la plus récente, rendez-vous dans votre Dashboard.
Lors de la mise à niveau de l’API, veillez à spécifier dans votre code la version que vous utilisez plutôt que de vous appuyer sur la version par défaut de votre compte. Pour tester une version plus récente pour vos appels d’API, définissez l’en-tête Stripe-Version
(en mode production ou test). Découvrez comment gérer le versionnage dans nos bibliothèques côté serveur.
Pour les webhooks, vous pouvez remplacer la version d’un endpoint de webhook de test dans votre Dashboard. Pour mettre à niveau vos webhooks en toute sécurité, Stripe vous recommande de :
- Vérifiez les modifications importantes pour voir quels objets seront structurés différemment.
- Mettez à jour le code de votre webhook pour gérer l’ancienne version et la nouvelle version de chaque objet.
- Remplacez la version d’un endpoint de webhook de test par la version à tester.
- Déclenchez l’événement en mode test et assurez-vous que votre code fonctionne avec la nouvelle structure.
Une fois que vous estimez que votre code est en mesure de gérer la version la plus récente de l’API, cliquez sur le bouton Mettre à niveau dans votre Dashboard. Cette opération permet de basculer les appels d’API qui ne contiennent pas l’en-tête Stripe-Version et le rendu des objets envoyés à vos webhooks vers la version la plus récente de l’API.
Mise en garde
La forme des ressources dans les événements récupérés auprès de l’API est définie par la version de l’API par défaut de votre compte au moment de la survenue de l’événement en question. Si votre code récupère des événements créés lorsque la version de l’API par défaut était différente, il devra gérer cette différence lors du traitement des événements.
Revenir à votre version précédente de l’API
Dans les 72 heures qui suivent la mise à niveau de l’API, vous pouvez revenir en toute sécurité à la version d’origine depuis votre Dashboard.
Une fois cette restauration effectuée, les webhooks envoyés avec la nouvelle structure d’objet et ayant échoué sont relancés avec l’ancienne structure.
Se tenir au courant
Nous envoyons des informations sur les ajouts et modifications de l’API Stripe et des bibliothèques dans le Stripe Developer Digest. Abonnez-vous-y pour ne rien manquer de ces évolutions.
Inscrivez-vous pour recevoir le Developer Digest
Versions de l’API
Vous trouverez ci-dessous toutes les modifications importantes apportées à l’API Stripe. Chaque date correspond à une nouvelle version de l’API Stripe. Si vous recherchez tous les ajouts et mises à jour des API, consultez le log des modifications de l’API. Si vous êtes à la recherche de nouvelles versions de produits, consultez le log des modifications produit.
2023-10-16
In the Accounts API, the following error codes have been added as new error codes in the
requirements.errors
array. See Account requirements errors for more information.invalid_address_highway_contract_box
invalid_address_private_mailbox
invalid_business_profile_name
invalid_business_profile_name_denylisted
invalid_company_name_denylisted
invalid_dob_age_over_maximum
invalid_dob_age_under_minimum
invalid_product_description_length
invalid_product_description_url_match
invalid_statement_descriptor_business_mismatch
invalid_statement_descriptor_denylisted
invalid_statement_descriptor_length
invalid_statement_descriptor_prefix_denylisted
invalid_statement_descriptor_prefix_mismatch
invalid_tax_id_format
invalid_url_denylisted
invalid_url_format
invalid_url_web_presence_detected
invalid_url_website_business_information_mismatch
invalid_url_website_empty
invalid_url_website_inaccessible
invalid_url_website_inaccessible_geoblocked
invalid_url_website_inaccessible_password_protected
invalid_url_website_incomplete
invalid_url_website_incomplete_cancellation_policy
invalid_url_website_incomplete_customer_service_details
invalid_url_website_incomplete_legal_restrictions
invalid_url_website_incomplete_refund_policy
invalid_url_website_incomplete_return_policy
invalid_url_website_incomplete_terms_and_conditions
invalid_url_website_incomplete_under_construction
invalid_url_website_other
In the Accounts API, if no
settings.payments.statement_descriptor
is supplied, the statement descriptor is automatically set to the first supplied parameter of (in priority order):business_profile.name
business_profile.url
company.name
orindividual.first_name
+individual.last_name
(dependent on thebusiness_type
)
The statement descriptor is only set automatically when one of the above fields is provided as a parameter, so existing accounts will not be impacted unless a dependent field is updated. Similarly,
settings.card_payments.statement_descriptor_prefix
will be defaulted to a shortened version of thesettings.payments.statement_descriptor
. This will take place whenever the statement descriptor is updated (either explicitly, or when defaulted).
2023-08-16
- Major
PaymentIntents and SetupIntents now have
automatic_payment_methods
enabled by default, which allows you to configure payment method settings from the Dashboard—no code required. The previous default was to accept only card payments when bothpayment_method_types
andautomatic_payment_methods
were not specified. For more information, view the upgrade guide.- When confirming a PaymentIntent, you will be required to provide a
return_url
unlessoff_session=true
. - When confirming a PaymentIntent, you cannot use
error_on_requires_action
. Usepayment_method_types
witherror_on_requires_action
if you wish to fail payment attempts when PaymentIntents transition intorequires_action
. - When confirming a SetupIntent, you will be required to provide a
return_url
. - You can bypass the
return_url
requirement usingautomatic_payment_methods[allow_redirects]=never
, this will automatically filter payment methods that require redirect even if they are enabled in the Dashboard.
- When confirming a PaymentIntent, you will be required to provide a
No-cost orders are now enabled for one-time payments in Checkout Sessions. The value of
payment_method_collection
has changed fromalways
toif_required
accordingly.When being viewed by a platform, PaymentMethod fingerprints of types
us_bank_account
,acss_debit
,sepa_debit
,bacs_debit
, andau_becs_debit
are rendered in platform scope, not the owning merchant (connected account) scope. This works similarly to the 2018-01-23 change for cards and bank accounts.Added more specific error codes to the PaymentIntent API for when a Klarna payment fails:
payment_method_customer_decline
payment_method_not_available
payment_method_provider_decline
payment_intent_payment_attempt_expired
In the Accounts API,
verification_missing_directors
,verification_directors_mismatch
,verification_document_directors_mismatch
andverification_extraneous_directors
has been added as a new error code in therequirements.errors
array. See Account requirements errors for more information.
2022-11-15
Charge no longer auto-expands refunds by default. You can expand the list but for performance reasons we recommended against doing so unless needed.
The
charges
property on PaymentIntent has been removed. You can use thelatest_charge
property instead.Added more specific error codes for the following bank redirect payment methods: Bancontact, EPS, Giropay, iDEAL, Przelewy24, and Sofort.
Added the following error codes to the PaymentIntent and PaymentMethod APIs:
payment_intent_payment_attempt_expired
payment_method_customer_decline
payment_method_provider_timeout
payment_method_not_available
payment_method_provider_decline
Added the following error codes to the SetupIntent APIs:
setup_intent_setup_attempt_expired
payment_method_customer_decline
payment_method_provider_timeout
payment_method_not_available
payment_method_provider_decline
In the Accounts API,
verification_legal_entity_structure_mismatch
has been added as a new error code in therequirements.errors
array. See Account requirements errors for more information.
2022-08-01
The
pending_invoice_items_behavior
parameter on create Invoice no longer supports theinclude_and_require
value. When the parameter is omitted the default value ofpending_invoice_items_behavior
is nowexclude
.When creating a Checkout Session in payment mode, the default value of
customer_creation
has changed fromalways
toif_required
.A PaymentIntent is no longer created during Checkout Session creation in payment mode. Instead, a PaymentIntent will be created when the Session is confirmed.
Checkout Sessions no longer return the
setup_intent
property in subscription mode.The following parameters have been removed from create Checkout Session:
line_items[amount]
line_items[currency]
line_items[name]
line_items[description]
line_items[images]
You can use the
price
andprice_data
parameters instead.The
subscription_data[coupon]
parameter has been removed from create Checkout Session. You can use thediscounts
parameter instead.The
shipping_rates
parameter has been removed from create Checkout Session. You can use theshipping_options
parameter instead.On the Checkout Session resource, several shipping properties have changed.
shipping_rate
has been moved into the newshipping_cost
hash.shipping
has been renamed toshipping_details
.
exempted
now appears in thethree_d_secure
hash for card Charges. It indicates that a 3D Secure exemption was granted.In the Accounts API,
invalid_tos_acceptance
has been added as a new error code in therequirements.errors
array. See Account requirements errors for more information.When creating a
physical
Issuing card in testmode, its shipping status no longer automatically changes frompending
todelivered
. This functionality is now accessible via the following new endpoints:/v1/test_helpers/issuing/cards/:card/shipping/ship
/v1/test_helpers/issuing/cards/:card/shipping/deliver
/v1/test_helpers/issuing/cards/:card/shipping/return
/v1/test_helpers/issuing/cards/:card/shipping/fail
design_rejected
is now a possible value for thecancellation_reason
field on the issued card object, indicating that the card’s design was rejected by Stripe.The
default_currency
field on the Customer API resource has been removed.
2020-08-27
We have removed
tax_percent
from objects and requests in favor of tax rates.On subscription schedules,
phases.plans
has been renamed tophases.items
. This applies for the subscription schedule object as well as create and update requests.Deprecate the
payment_method.card_automatically_updated
webhook in favor ofpayment_method.automatically_updated
.Checkout Sessions no longer include the
display_items
property. Use the includableline_items
property instead.The
requirements
hash on the Account and Capability objects, and theverification_fields
hash on the Country Spec object have newly formatted strings for requirements that are related to key persons associated with an account:- Fields that are required for persons with
representative
,owner
,director
, andexecutive
roles will be prefixed withrepresentative
,owners
,directors
, andexecutives
, respectively. Person requirements will be previewed as follows:- When the representative’s phone number is required, it will appear as
representative.phone
instead ofrelationship.representative
. - When an owner’s full name is required, it will appear as
owners.first_name
andowners.last_name
instead ofrelationship.owner
. - When an executive’s ID number is required, it will appear as
executives.id_number
instead ofrelationship.executive
. - When a director’s date of birth is required, it will appear as
directors.dob.day
,directors.dob.month
, anddirectors.dob.year
instead ofrelationship.director
.
- When the representative’s phone number is required, it will appear as
- The boolean values that indicate the associated owners, executives, or directors have been provided now appear as
company.owners_provided
,company.executives_provided
, orcompany.directors_provided
instead ofrelationship.owner
,relationship.executive
, orrelationship.director
, respectively.
- Fields that are required for persons with
In the Accounts/Persons/Capabilities API, several new error codes have been introduced in the
requirements.errors
array. See Account requirements errors for more information. These error codes are:verification_document_issue_or_expiry_date_missing
verification_document_not_signed
verification_failed_tax_id_not_issued
verification_failed_tax_id_match
invalid_address_po_boxes_disallowed
The
payment_method_details.card.three_d_secure
fields on the Charge object have been updated. Thesucceeded
andauthenticated
booleans have been removed; please use theresult
enum instead.The
subscriptions
property on Customers is no longer included by default. You can expand the list but for performance reasons we recommended against doing so unless needed.The
tiers
property on Plan is no longer included by default. You can expand the list but for performance reasons we recommended against doing so unless needed.The
sources
property on Customers is no longer included by default. You can expand the list but for performance reasons we recommended against doing so unless needed.The
tax_ids
property on Customers is no longer included by default. You can expand the list but for performance reasons we recommended against doing so unless needed.The
prorate
andsubscription_prorate
parameters are deprecated in favor ofproration_behavior
.
2020-03-02
- Major
You can now optionally number invoices sequentially across your account instead of sequentially for each customer. To use this feature, enable account level numbering in the Stripe Dashboard.
- To ensure invoices are numbered sequentially and without gaps, invoices that can be deleted (drafts) are only assigned numbers when finalized.
2019-12-03
- Major
The
id
field of all invoice line items have changed and are now prefixed withil_
. The new id has consistent prefixes across all line items, is globally unique, and can be used for pagination. Old prefixes includedsub_
,su_
,item_
,sli_
, andii_
and weren’t globally unique.- You can no longer use the prefix of the id to determine the source of the line item. Instead use the
type
field for this purpose. - For lines with
type=invoiceitem
, use theinvoice_item
field to reference or update the originating Invoice Item object. - The Invoice Line Item object on earlier API versions also have a
unique_id
field to be used for migrating internal references before upgrading to this version. - When setting a tax rate to individual line items, use the new
id
. Users on earlier API versions can pass in either a line itemid
orunique_id
.
- You can no longer use the prefix of the id to determine the source of the line item. Instead use the
When creating a post-payment credit note on an invoice:
out_of_band_amount
is required if the sum ofcredit_amount
and (refund
orrefund_amount
) is less than the credit note total.- In previous API versions
out_of_band_amount
is optional and, in the case that thecredit_amount
and refund amounts are less than the credit note total, the difference will automatically be allocated to theout_of_band_amount
.
Customer balances applied to all invoices are now debited or credited back to the customer when voided. Earlier, applied customer balances were not returned back to the customer and were consumed.
- To achieve this behavior in earlier API versions:
- Set
consume_applied_balance
tofalse
when voiding invoices in/v1/invoices/:id/void
. - Set
invoice_customer_balance_settings[consume_applied_balance_on_void]
tofalse
in/v1/subscriptions
create or update to force this behavior for Invoices voided by a Subscription. - Set
subscription_data[invoice_customer_balance_settings][consume_applied_balance_on_void]
tofalse
in/v1/checkout/sessions
create to force this behavior for Invoices voided by Subscriptions created with Checkout.
- Set
- To achieve this behavior in earlier API versions:
Deprecated tax information for Customers have been removed.
- The deprecated
tax_info
andtax_info_verification
fields on theCustomer
object are now removed in favor oftax_ids
. - The deprecated
tax_info
parameter on theCustomer
create and update methods are removed in favor oftax_id_data
. - For more information, view the migration guide.
- The deprecated
2019-11-05
In the Accounts API, the
requested_capabilities
property is now required at creation time for Custom accounts in all countries. See Account capabilities for more information.On subscription schedules,
invoice_settings
,default_payment_method
,billing_thresholds
andcollection_method
are now nested underdefault_settings
.
2019-10-17
There are changes to subscription schedules.
- Rename
renewal_behavior
toend_behavior
with valuescancel
andrelease
. - Remove
renewal_interval
. - A side effect of this change is that if you wrote a
renewal_behavior
ofnone
on an old API version,end_behavior
will be converted tocancel
when reading the value back. - In the event that you are upgrading your API and set
renewal_behavior
asrenew
, with this API version enabled you will seeend_behavior
asrenew
however you will not be able to updaterenewal_interval
. Additionally you can not setend_behavior
torenew
, so it is in a read-only state.
- Rename
The
start
field on a subscription resource has been removed and is replaced by astart_date
field which represents when the entire subscription started as opposed to when the current plan configuration started.The
due_date
property is always null on invoices withbilling=charge_automatically
.The
billing
attribute on invoices, subscriptions, and subscription schedules is renamed tocollection_method
.The customer object’s
account_balance
value has been renamed tobalance
. A new customer balance transactions API is available:- Update the customer’s
balance
by incrementing or decrementing its current value by a specifiedamount
and attachingmetadata
to the change. - Retrieve history of changes to the customer’s
balance
.
- Update the customer’s
2019-10-08
The
relationship[account_opener]
field on a Person object has been renamed torelationship[representative]
.
2019-09-09
In the Accounts API, the
requested_capabilities
property is now required at creation time for accounts in Australia, Austria, Belgium, Denmark, Finland, France, Germany, Ireland, Italy, Luxembourg, the Netherlands, New Zealand, Norway, Portugal, Spain, Sweden, Switzerland, and the United Kingdom. See Account capabilities for more information.Adds additional
details_code
values to theverification[document]
hash on a Person object.
2019-08-14
- Major
The
platform_payments
capability has been renamed totransfers
, to better indicate the Stripe primitives that this capability supports.- The
card_payments
capability has been updated to no longer implytransfers
. You’ll now need to additionally request thetransfers
capability when creating an account.
- The
The
relationship[executive]
field on a Person object will no longer be automatically set totrue
when a Person object withrelationship[account_opener]
is created. Therequirements
hash on an Account object may require that you explicitly indicate that theaccount_opener
is also anexecutive
. If this is the case, you will need to indicate it by settingrelationship[executive]=true
.
2019-05-16
Bank pull payments no longer expose internal system refunds on failure.
System refunds can still be accessed via the list refunds endpoint.
2019-03-14
The
application_fee
parameter on invoice API methods and theapplication_fee
field on the invoice object have both been renamed toapplication_fee_amount
.- Major
Creating a subscription succeeds even when the first payment fails. The subscription will be created in an incomplete status, where it will remain for up to 23 hours. During that time period, it can be moved into an active state by paying the first invoice. If no successful payment is made, the subscription will move into a final incomplete_expired state. Updates to a non-incomplete subscription that require a payment will also succeed regardless of the payment status. Prior to this version, all creations or updates would fail if the corresponding payment failed. For more details see our guide.
There are a few changes to the invoice object:
- A
status_transitions
hash now contains the timestamps when an invoice was finalized, paid, marked uncollectible, or voided. - The
date
property has been renamed tocreated
. - The
finalized_at
property has been moved into thestatus_transitions
hash.
- A
2019-02-19
- Major
Statement descriptor behaviors for card payments created via
/v1/charges
have changed. See our statement descriptor guide for details.- Instead of using the platform’s statement descriptor, charges created with
on_behalf_of
ordestination
will now use the descriptor of the connected account. - The full statement descriptor for a card payment may no longer be provided at charge creation. Dynamic descriptors provided at charge time will now be prefixed by the descriptor prefix set in the dashboard or via the new
settings[card_payments][statement_descriptor_prefix]
parameter in the Accounts API. - If an account has no
statement_descriptor
set, the account’s business or legal name will be used as statement descriptor. - Statement descriptors may no longer contain
*
,'
, and"
.
- Instead of using the platform’s statement descriptor, charges created with
legal_entity[business_id_number]
has been renamedlegal_entity[business_registration_number]
.- Major
Many properties on the Account API object have been reworked. To see a mapping of the old argument names to the new ones, see Accounts API Argument Changes.
- The
legal_entity
property on the Account API resource has been replaced withindividual
,company
, andbusiness_type
. - The
verification
hash has been replaced with arequirements
hash.- The
verification[fields_needed]
array has been replaced with three arrays to better represent when info is required:requirements[eventually_due]
,requirements[currently_due]
, andrequirements[past_due]
. verification[due_by]
has been renamed torequirements[current_deadline]
.- The
disabled_reason
enum value offields_needed
has been renamed torequirements.past_due
.
- The
- Properties on the Account API object that configure behavior within Stripe have been moved into the new
settings
hash.- The
payout_schedule
,payout_statement_descriptor
anddebit_negative_balances
fields have been moved tosettings[payouts]
and renamed toschedule
,statement_descriptor
anddebit_negative_balances
. - The
statement_descriptor
field has been moved tosettings[payments][statement_descriptor]
. - The
decline_charge_on
fields have been moved tosettings[card_payments]
and renamed todecline_on
. - The
business_logo
,business_logo_large
andbusiness_primary_color
fields have been moved tosettings[branding]
and renamed toicon
,logo
andprimary_color
. Theicon
field additionally requires the uploaded image file to be square. - The
display_name
andtimezone
fields have been moved tosettings[dashboard]
.
- The
business_name
,business_url
,product_description
,support_address
,support_email
,support_phone
andsupport_url
have been moved to thebusiness_profile
subhash.- The
legal_entity[verification][document]
property (now located atindividual[verification]
and atverification
in the Person API object) has been changed to a hash.- The
front
andback
fields support uploading both sides of documents. - The
details_code
field has new error types:document_corrupt
,document_failed_copy
,document_failed_greyscale
,document_failed_other
,document_failed_test_mode
,document_fraudulent
,document_id_country_not_supported
,document_id_type_not_supported
,document_invalid
,document_manipulated
,document_missing_back
,document_missing_front
,document_not_readable
,document_not_uploaded
,document_photo_mismatch
, anddocument_too_large
.
- The
- The
keys
property on Account creation has been removed. Platforms should now authenticate as their connected accounts with their own key via theStripe-Account
header. - Starting with the 2019-02-19 API, the
requested_capabilities
property is now required at creation time for accounts in the U.S. See Account capabilities for more information.
- The
2019-02-11
Some PaymentIntent statuses have been renamed
requires_source
is nowrequires_payment_method
requires_source_action
is nowrequires_action
- All other statuses are unchanged
save_source_to_customer
has been renamed tosave_payment_method
.allowed_source_types
has been renamed topayment_method_types
.The
next_source_action
property on PaymentIntent has been renamed tonext_action
, and theauthorize_with_url
within has been renamed toredirect_to_url
.
2018-11-08
The
closed
property on the invoice object controls automatic collection.closed
has been deprecated in favor of the more specificauto_advance
field. Where you might have setclosed=true
on invoices in the past, setauto_advance=false
.auto_advance
now also defaults to false for one-off invoices, allowing you to control how long their status stays adraft
. A longer explanation of these series of changes is in the documentation.Instead of checking the
forgiven
field on an invoice, check for theuncollectible
status.- Instead of setting the
forgiven
field on an invoice, mark it as uncollectible.
- Instead of setting the
The
immutable_frozen_invoice
error code was renamed toinvoice_already_finalized
The following changes only affect users of PaymentIntents as part of the private beta before November 15, 2018. If you did not use PaymentIntents before then, these don’t affect you.
- The
next_source_action
dictionary on PaymentIntents previously contained a key calledvalue
. This has been replaced with theauthorize_with_url
anduse_stripe_sdk
keys. - When creating PaymentIntents, the
attempt_confirmation
parameter has been renamed toconfirm
. - The PaymentIntent confirm endpoint no longer supports the
payment_intent
parameter. To update a PaymentIntent’s source, passsource
orsource_data
as a top-level parameter. - The
return_url
parameter is only allowed when confirming a PaymentIntent. Passingreturn_url
when updating a PaymentIntent is no longer allowed. - When creating a PaymentIntent with
transfer_data[destination]
, theon_behalf_of
parameter must be provided and must match the account provided totransfer_data[destination]
. This is because when you provide a destination, Stripe will settle charges in the country of the destination account. - The
next_source_action
dictionary on PaymentIntents no longer contains thesource_type
property. To view the source type when retrieving PaymentIntents, expand thesource
parameter.
- The
2018-10-31
The
description
field on customer endpoints has a maximum character length limit of350
now. Thename
field on product endpoints has a maximum character length limit of250
now. Thedescription
field on invoice line items has a maximum character length limit of500
now.The
billing_reason
attribute of the invoice object now can take the value ofsubscription_create
, indicating that it is the first invoice of a subscription. For older API versions,billing_reason=subscription_create
is represented assubscription_update
.
2018-09-24
FileUpload
objects have been renamed toFile
objects. Additionally, theurl
attribute now contains an authenticated URL (i.e. you will need to use your secret API key to download the file’s contents.) You can create a file link to obtain a publicly-accessible URL for the file.
2018-09-06
When creating or updating a SKU, its attribute values no longer need to be unique. It is now possible to create multiple SKUs without attributes or with identical attribute values.
2018-08-23
You can no longer set
at_period_end
in the subscriptionDELETE
endpoints. TheDELETE
endpoint is reserved for immediate canceling going forward. Usecancel_at_period_end
on the subscription update endpoints instead.The customer object’s
business_vat_id
was changed from String to Hash calledtax_info
, consisting oftax_id
andtype
, in both requests and responses.The
amount
field field in thetiers
configuration forplans
was renamed tounit_amount
.
2018-07-27
The subscription endpoints no longer support the
source
parameter. If you want to change the default source for a customer, instead use the source creation API to add the new source and then the customer update API to set it as the default.When ending a trial on a subscription using
trial_end=now
the updated subscription will now receive atrial_end
timestamp from the time of the request rather than being unset.The
percent_off
field of coupons was changed from Integer to Float, with a precision of two decimal places.When creating or updating a customer the
email
parameter must contain an email address of valid shape.
2018-05-21
Products no longer have SKU lists embedded.
- Major
The
id
field of invoice line items oftype=subscription
no longer can be interpreted as a subscription ID, but instead is a unique invoice line item ID. It can be used for pagination. Coupon, SKU, customer, product and plan
id
s may only contain alphanumeric and_-
characters on creation.- Major
When creating or updating subscriptions, the default value of
trial_from_plan
is nowfalse
, meaning that a subscription will not automatically inherit a plan’strial_period_days
. If a subscription is already trialing, switching to a new plan without specifyingtrial_from_plan
will maintain the trial. We recommend setting an explicit trial per subscription instead of setting trials on plans. When changing the plan on a subscription to a new plan with a trial (together with
trial_from_plan=true
), the new plan’s full trial period will be added to the subscription, without subtracting already-used time from previous trials.
2018-02-28
Updating a subscription set to cancel on a future date no longer clears the cancellation status. In order to clear the cancellation status, specify
cancel_at_period_end=false
when updating a subscription.
2018-02-06
For a Source’s
card[three_d_secure]
property, addsrecommended
as a possible value. Previously, the only valid values werenot supported
,optional
, andrequired
.
2018-02-05
- Major
Each plan object is now linked to a product object with
type=service
. The plan objectstatement_descriptor
andname
attributes have been moved to product objects, and plan objects now have anickname
attribute. Creating a plan now requires passing aproduct
attribute toPOST /v1/plans
. This may be either an existing product ID or a dictionary of product fields, so that you may continue to create plans without separately creating products. Products now have a required
type
:good
for products used with Orders SKUs, orservice
for products used with Subscriptions and Plans.- On API versions older than 2018-02-05,
type
is set togood
by default, andGET /v1/products
omits products withtype=service
from the list. (If you want to see products withtype=service
on API versions older than 2018-02-05, you can specifytype=service
when listing products.)
- On API versions older than 2018-02-05,
- Major
Allows a new subscription’s first full invoice to be on a future date, by specifying
billing_cycle_anchor
, with an optional proration up to that date.billing_cycle_anchor
on its own is available retroactively to past versions, and starting in this version,billing_cycle_anchor
can be combined with a trial, enabling a free trial to be followed by a prorated period, followed by a fixed billing cycle. Prorations on free plans now create $0 invoices. In past versions, these did not create invoices.
2018-01-23
When being viewed by a platform, cards and bank accounts created on behalf of connected accounts will have a fingerprint that is universal across all connected accounts. For accounts that are not connect platforms, there will be no change.
2017-12-14
Updates invoice payment attempts to return a
card_error
when the charge is declined. This aligns/v1/invoices/{INVOICE_ID}/pay
with/v1/charges
.Updates invoice line items to always have a
description
set, including invoice line items generated from subscription items.
2017-08-15
Adds
not_required
as a possibleredirect[status]
value on theSource
object. Previously, optional redirects were marked assucceeded
.
2017-06-05
Adds
under_review
as a possibleverification[disabled_reason]
value on theAccount
object. Previously, an under review status used the valueother
.
2017-05-25
Replaces the
managed
Boolean property onAccount
objects withtype
, whose possible values are:standard
,express
, andcustom
. Atype
value is required when creating accounts. Thestandard
type replacesmanaged: false
, and thecustom
type replacesmanaged: true
.Updates the
previous_attributes
property onEvent
objects to show entire sub-arrays when those arrays have changes. Previously, those sub-arrays only showed the specific fields that changed.Updates the
request
property on theEvent
object to be a hash containing the request ID and the idempotency key. Previously,request
was just the ID.Renames the
user_id
property on Connect-related event objects toaccount
.
2017-04-06
- Major
Splits the
Transfer
object intoPayout
andTransfer
. ThePayout
object represents money moving from a Stripe account to an external account (bank or debit card). TheTransfer
object now only represents money moving between Stripe accounts on a Connect platform. For more details, see https://stripe.com/docs/transfer-payout-split.
2017-02-14
Updates the
dispute
property on theCharge
object to contain the ID of an associated dispute. Previously,dispute
contained the entireDispute
object. You can expand this property when retrieving charges to render the fullDispute
object as before.Updates the
outcome[rule]
property on theCharge
object to contain the ID of the rule that blocked the charge. Previously,outcome[rule]
contained the entireRule
object. You can expand this property when retrieving charges to render the fullRule
object as before.
2017-01-27
Removes the
sourced_transfers
property from theBalance Transaction
object.
2016-10-19
Returns the status code 403 when an API request is made with insufficient permission. Previously, the API returned a 401 status code.
2016-07-06
Updates the list all subscriptions call to also return canceled subscriptions. The endpoint now supports fetching only canceled subscriptions by specifying
status=canceled
. You can now retrieve a single canceled subscription by providing its ID.
2016-06-15
Updates the
active
property on theProduct
object so that settingactive
to false no longer marks the product’s SKUs as inactive.
2016-03-07
Removes the
currencies_supported
property from theAccount
object. You can find a list of supported currencies by retrieving aCountry Spec
object for the country of the account.
2016-02-29
Adds postal code validation for legal entity addresses when creating and updating accounts.
2016-02-23
Updates the behavior of orders so that changing an order from
paid
orfulfilled
tocanceled
orreturned
automatically refunds the associated charge. Previously, attempting to change an order frompaid
orfulfilled
tocanceled
orreturned
raised an error if the associated charge had not already been refunded.
2016-02-22
Returns an error on attempts to add more than 250 invoice items to an invoice.
2016-02-19
Renames the
name
property on theBank Account
object toaccount_holder_name
.
2016-02-03
Updates the returned
Account
object to only show sub-properties oflegal_entity
that are applicable to the account’s country, or that were previously provided.
2015-10-16
Returns an error if a
tax_percent
is provided without aplan
during a customer update or creation.
2015-10-12
- Major
Returns an error when invalid parameters are passed in the card or bank account hash during token, source, or external account creation. Changes the error code returned for missing required parameters in the card or bank account hash to 400. Previously, a 402 code was returned.
2015-10-01
Replaces the
bank_accounts
property on theAccount
object withexternal_accounts
. Replaces thebank_account
value in thefields_needed
property withexternal_account
.
2015-09-23
Updates the
charge
property on theInvoice
object to always show the invoice’s latest charge, regardless of the charge’s source (e.g, a card or a bank account). Removes thepayment
property, which previously reflected a non-card charge.- Major
Updates the list all charges call to return all charges, including those made to bank accounts and other non-card sources. Previously, it only returned charges made to cards. Updates the deprecated
offset
parameter to only be supported when filtering by source type.
2015-09-08
Updates API rate limit errors to return a 429 HTTP status code instead of 400. They also no longer return a
rate_limit
error code.
2015-09-03
Returns an error if a request reuses an idempotency token with different parameters than the original request. Previously, errors were only returned for reusing the same idempotency token across different API endpoints.
2015-08-19
Updates the
Balance Transaction
object to provide the refund ID or dispute ID as thesource
value when the balance transaction is associated with a refund or dispute. Previously, the original charge ID was shown.
2015-08-07
Adds date validation to the
tos_acceptance[date]
property on theAccount
object. Accepted values are timestamps after 2009 and before the current moment.
2015-07-28
The
balance.available
event is now triggered when immediate transfers are processed.
2015-07-13
Replaces the
verification[contacted]
Boolean property on theAccount
object with averification[disabled_reason]
string that describes why the account is unable to make transfers or charges.
2015-07-07
Updates the
status
property on theTransfer
object so that transfers not yet submitted to the bank are stillpending
and transfers submitted to the bank that have not yet arrived arein_transit
. Previously, both states were described aspending
.
2015-06-15
Updates the
payout_schedule[delay_days]
property on theAccount
object to return an error if provided when theinterval
is set tomanual
. Manual payouts always use the minimumdelay_days
value.
2015-04-07
Updates the
period[end]
property on proration invoice line items to reflect the subscription’scurrent_period_end
property when the update and proration was made. A proration invoice line item’speriod[start]
andperiod[end]
properties now represent the prorated adjustment interval. Previously,period[end]
marked the time at which the proration was made, and was the same asperiod[start]
.Updates the
Invoice
object to change the order of thelines
list: first invoice items in reverse chronological order, followed by the subscription, if applicable.
2015-03-24
Updates coupons so they no longer apply to negative invoice items by default. Previously, coupons applied to all non-proration invoice items. To allow a coupon to apply to a negative invoice item, pass
discountable=true
when creating or updating the invoice item.
2015-02-18
Updates the
status
property on theCharge
object to have a value ofsucceeded
for successful charges. Previously, thestatus
property would bepaid
for successful charges.- Major
Replaces the
card
property on theCharge
object withsource
. Provide this parameter with aCard
token, as before, or with aSource
token that has anobject
value ofcard
. Older API versions return both thecard
andsource
properties onCharge
. - Major
Replaces the
cards
anddefault_card
properties on theCustomer
object withsources
anddefault_source
. Both properties can representCard
objects, as before, andSource
objects with anobject
value ofcard
. Older API versions return both the new and old properties onCustomer
. Replaces thecustomer.card.*
andcustomer.bank_account.*
events withcustomer.source.*
.
2015-02-16
Renames the
transfer.canceled
event totransfer.reversed
.
2015-02-10
Adds the value
warning_closed
to thestatus
property on theDispute
object.Updates test mode transfers to require sufficient funds in your available test mode balance (for consistency with live mode transfers). Add funds directly to your available test mode balance—bypassing the pending balance—by creating a charge using the special test card number 4000 0000 0000 0077.
2015-01-26
Updates the presentation of nested hashes in the
previous_attributes
property of events to only show the difference. For example, a change from{address: {line1: "Foo", line2: "Bar"}}
to{address: {line1: "Foo", line2: "Baz"}}
is represented as{previous_attributes: {address: {line2: "Baz"}}}
. Previously, it was represented as{previous_attributes: {address: {line1: "Foo", line2: "Baz"}}}
.Updates the
canceled_at
property on theSubscription
object to always be the timestamp from the API call or invoice payment failure that canceled the subscription. Previously,canceled_at
reflected “at period end” subscription cancellations, too. Theended_at
property still reflects the time that the subscription actually stopped.
2015-01-11
Removes the
mimetype
property from theFile Upload
object. Returns simplified file types in thetype
property and uses simpler naming conventions than mimetypes (e.g.,type
contains pdf instead of application/pdf).
2014-12-22
Updates the
Card
object so a value ofunchecked
for theaddress_line1_check
,address_zip_check
, orcvc_check
properties means the property has not been checked. Previously, it meant the issuing bank does not support the particular check. That state now shows asunavailable
. Unchecked properties are checked when a card is charged or added to aCustomer
object.Removes the
customer
property from theCard
object that appears on theToken
object.
2014-12-17
Replaces the
statement_description
property on theCharge
,Invoice
,Plan
, andTransfer
objects withstatement_descriptor
. To determine what appears on a customer’s transaction,statement_description
is appended to your Stripe account’s statement descriptor whilestatement_descriptor
sets the full statement value. If not on this API version or newer, providing astatement_descriptor
still triggers thestatement_description
behavior. Regardless of API version, thestatement_description
behavior does not apply with PaymentIntents.Updates the Accounts API to require API version 2014-12-17 or newer.
2014-12-08
Updates the
Dispute
object so evidence can be provided as a hash of typed fields rather than a single block of text. Replaces theevidence_due_by
property with theevidence_details
hash, which includesdue_by
andsubmission_count
(for the number of times a dispute has been submitted).
2014-11-20
Updates disputes that are won to return the status
won
even if the charge was refunded. Previously, a dispute won that had a refunded charge would transition tocharge_refunded
.Updates the
metadata
property of theInvoice Item
object with a type ofsubscription
to show the subscription’s metadata. Previously, it showed the plan’s metadata.
2014-11-05
Renames the
charge_enabled
andtransfer_enabled
properties on theAccount
object tocharges_enabled
andtransfers_enabled
.
2014-10-07
Prevents publishable keys from retrieving
Token
objects. When a card or bank account token is created with a publishable key, thefingerprint
property is not included in the response.
2014-09-08
Replaces the
disabled
,validated
, andverified
properties on theBank Account
object with astatus
enum property.
2014-08-20
Adds three values to the
status
property on theDispute
object:warning_needs_response
,warning_under_review
, andcharge_refunded
. Replaces thebalance_transaction
property of theDispute
object withbalance_transactions
(this provides greater detail around funds withdrawn and reinstated as a result of disputes).
2014-08-04
Removes the
other_transfers
,summary
, andtransactions
properties from automatic transfer responses in favor of the balance history endpoint (/v1/balance/history).
2014-07-26
Changes the
refunds
property on theApplication Fee
object from an array to a sublist object, which contains thedata
,has_more
, andurl
properties. This makes application fee refunds consistent with charge refunds.
2014-07-22
Updates proration line items on invoices to include the associated subscription’s plan and quantity.
2014-06-17
Changes the
refunds
property on theCharge
object from an array to a sublist object, which contains thedata
,has_more
, andurl
properties.
2014-06-13
Renames the
type
property on theCard
object tobrand
.
2014-05-19
Replaces the
account
property on theTransfer
object withbank_account
. Thebank_account
property is only included when the transfer is made to a bank account.
2014-03-28
- Major
Removes the
count
property from list responses.
2014-03-13
Renames the
statement_descriptor
property on theTransfer
object tostatement_description
.
2014-01-31
- Major
Replaces the
subscription
property on theCustomer
object with thesubscriptions
property, as customers can have multiple subscriptions. Ignores trial dates on canceled subscriptions when automatically computing trial end dates for new subscriptions.
2013-12-03
Replaces the
user
anduser_email
properties on theApplication Fee
object with an expandableaccount
property.Updates the refunding of application fees to be proportional to the amount of the charge refunded (when setting
refund_application_fee=true
). Previously, the entire application fee was refunded even when only part of the charge was.
2013-10-29
- Major
Changes coupon behavior so that applying an amount-off coupon to an invoice does not increase the
Customer
account balance if the discount is greater than the invoice amount. Coupons are ignored—and not counted as redeemed—when applied to zero-cost invoices. This change does not apply to coupons created on earlier API version.
2013-08-13
Removes the
fee
andfee_details
properties from theCharge
andTransfer
objects. Fee information is in the corresponding balance transaction.
2013-08-12
Allows the
description
property onCustomer
,Charge
,InvoiceItem
, andRecipient
objects, and theemail
property onCustomer
andRecipient
objects, to be set to null by providing empty string values in POST requests.
2013-07-05
- Major
Replaces the
active_card
property on theCustomer
object with acards
sublist and adefault_card
ID property.
2013-02-13
Updates the
Charge
object so disputed charges include anotherstripe_fee
object in thefee_details
array, representing the dispute fees. Includes the dispute fees in the fee total on theCharge
object.
2013-02-11
- Major
Updates the pay invoice call to return an error when the charge is not successful. Previously, the API would return a 200 status and set the invoice’s
paid
property to false.
2012-11-07
Replaces the
disputed
property on theCharge
object withdispute
.
2012-10-26
Updates the
Invoice
object format. Thelines
property is now a sublist, a paginated list of all items that contribute to the invoice.
2012-09-24
Removes the extraneous
id
property from theDiscount
object.
2012-07-09
Removes the
uncaptured
property from theCustomer
object.
2012-06-28
- (Les changements introduits dans cette version ont depuis été supprimés.)
2012-06-18
Removes the
amount
andcurrency
properties from theToken
object.
2012-03-25
Removes the
next_recurring_charge
property from theCustomer
object. Use the upcoming invoice call instead.
2012-02-23
Shows all response fields, even those with null values. Previously, the API hid fields with null values.
2011-11-17
- (Les changements introduits dans cette version ont depuis été supprimés.)
2011-09-15
Updates the card validation behavior when creating tokens.
2011-08-01
Updates the list format. New list objects have a
data
property that represents an array of objects (by default, 10) and acount
property that represents the total count.
2011-06-28
Removes the
identifier
property (duplicate ofid
) from thePlan
object.
2011-06-21
Raises exceptions on unrecognized parameters passed to the API instead of silently allowing and ignoring them.