Statement Descriptors with Connect

    Learn how statement descriptors work for charges and payouts made using Connect.

    When using Connect, platforms can dictate the information shown on statements when:

    • Customers make payments
    • Sending payouts to connected Express and Custom accounts

    Statement descriptors are limited to 22 characters, cannot use the special characters <, >, ', or ", and must not consist solely of numbers.

    Payment statement descriptors and other details

    When you charge a customer’s credit card, three pieces of information can appear on the customer’s account statement:

    • Statement descriptor
    • Business address
    • Phone number

    Platforms can set the statement descriptor dynamically on each charge request via the statement_descriptor parameter:

    curl https://api.stripe.com/v1/charges \
       -u sk_test_BQokikJOvBiI2HlWgH4olfQ2: \
       -d amount=1000 \
       -d currency=usd \
       -d source=tok_visa \
       -d statement_descriptor="Custom descriptor" \
       -H "Stripe-Account: {CONNECTED_STRIPE_ACCOUNT_ID}"
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    charge = Stripe::Charge.create({
      :amount => 1000,
      :currency => "usd",
      :source => "tok_visa",
      :statement_descriptor => "Custom descriptor",
    }, :stripe_account => "{CONNECTED_STRIPE_ACCOUNT_ID}")
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    charge = stripe.Charge.create(
      amount=1000,
      currency="usd",
      source="tok_visa",
      statement_descriptor="Custom descriptor",
      stripe_account="{CONNECTED_STRIPE_ACCOUNT_ID}",
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
    
    $charge = \Stripe\Charge::create(array(
      "amount" => 1000,
      "currency" => "usd",
      "source" => "tok_visa",
      "statement_descriptor" => "Custom descriptor",
    ), array("stripe_account" => "{CONNECTED_STRIPE_ACCOUNT_ID}"));
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2";
    
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("amount", 1000);
    params.put("currency", "usd");
    params.put("source", "tok_visa");
    params.put("statement_descriptor", "Custom descriptor");
    
    RequestOptions requestOptions = RequestOptions.builder().setStripeAccount({CONNECTED_STRIPE_ACCOUNT_ID}).build();
    Charge charge = Charge.create(params, requestOptions);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
    
    stripe.charges.create({
      amount: 1000,
      currency: "usd",
      source: "tok_visa",
      statement_descriptor: "Custom descriptor",
    }, {
      stripe_account: "{CONNECTED_STRIPE_ACCOUNT_ID}",
    }).then(function(charge) {
      // asynchronously called
    });
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    params := &stripe.ChargeParams{
      Amount: 1000,
      Currency: "usd",
      Statement: "Custom descriptor",
    }
    params.SetStripeAccount("{CONNECTED_STRIPE_ACCOUNT_ID}")
    params.SetSource("tok_visa")
    
    charge, err := charge.New(params)
    

    For the address and phone number—and when no dynamic statement descriptor is provided—the values Stripe uses depends upon how the charge was made and the type of connected account involved, explained below.

    (Deferred Standard accounts—which are rare—behave like Express and Custom accounts.)

    Charging directly

    • Statement descriptor: This defaults to the connected account’s statement descriptor. For Express and Custom accounts, if the platform hasn’t provided a descriptor for the account, it’s crucial that a statement_descriptor be set for each charge.

    • Address: The connected account’s business address. For Express and Custom accounts, if no business address has been provided and the platform is in the same country, the platform’s address will show up on the customer’s statement.

    • Phone number: The connected account’s phone number. For Express and Custom accounts, the platform’s phone number is used as a fallback if none is listed on the connected account.

    Charging through the platform

    This applies to both charges created using the destination parameter and when using separate charges and transfers.

    • Statement descriptor: Defaults to the platform’s descriptor. The platform can customize on a per charge basis using the statement_descriptor parameter.
    • Address: Defaults to the platform’s address if in the same country as the connected account. If not, this defaults to the connected account’s address.
    • Phone number: The platform’s phone number.

    Express and Custom payouts

    By default, payouts to Express and Custom accounts use STRIPE as the statement descriptor. When creating a manual payout, this can be customized on a per-payout basis also using the statement_descriptor parameter:

    curl https://api.stripe.com/v1/payouts \
       -u {PLATFORM_SECRET_KEY}: \
       -H "Stripe-Account: {CONNECTED_STRIPE_ACCOUNT_ID}" \
       -d amount=1000 \
       -d currency=usd \
       -d statement_descriptor="Custom descriptor"
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    Stripe::Payout.create({
      :amount => 1000,
      :currency => "usd",
      :statement_descriptor => "Custom descriptor",
    }, {:stripe_account => CONNECTED_STRIPE_ACCOUNT_ID})
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    stripe.Payout.create(
      amount=1000,
      currency="usd",
      statement_descriptor="Custom descriptor",
      stripe_account=CONNECTED_STRIPE_ACCOUNT_ID,
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
    
    \Stripe\Payout::create(array(
        "amount" => 1000,
        "currency" => "usd",
      "statement_descriptor" => "Custom descriptor",
    ), array("stripe_account" => CONNECTED_STRIPE_ACCOUNT_ID));
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2";
    
    RequestOptions requestOptions = RequestOptions.builder().setStripeAccount(CONNECTED_STRIPE_ACCOUNT_ID).build();
    
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("amount", 1000);
    params.put("currency", "usd");
    params.put("statement_descriptor", "Custom descriptor");
    Payout.create(params, requestOptions);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
    
    stripe.payouts.create({
      amount: 1000,
      currency: "usd",
      statement_descriptor: "Custom descriptor",
    }, {
      stripe_account: "{CONNECTED_STRIPE_ACCOUNT_ID}",
    }).then(function(payout) {
      // asynchronously called
    });
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    params := &stripe.PayoutParams{
      Amount: 1000,
      Currency: "usd",
      StatementDescriptor: "Custom descriptor",
    }
    params.SetStripeAccount("{CONNECTED_STRIPE_ACCOUNT_ID}")
    
    pay, err := payout.New(params)
    

    If you need to update an Express or Custom account’s default statement descriptor, you can update the account and provide a suitable value for payout_statement_descriptor. Standard accounts manage their own payouts.

    Banks typically display the statement descriptor in one of these ways:

    • Originator name
    • Transfer reference
    • Raw description

    Note that although we enforce a maximum of 22 characters, most banks truncate this information or display it inconsistently. Some banks may not display any descriptor information at all.