code: import stripe
  stripe.api_key = "sk_test_your_key"
  
  stripe.Charge.create(
    amount=2000,
    currency="usd",
    source="tok_visa", # obtained with Stripe.js
    metadata={'order_id': '6735'}
  )
  '''Response {
    "id": "ch_3LSdrM2eZvKYlo2C1A6YRLyL",
    "object": "charge",
    "amount": 100,
    "amount_captured": 0,
    "amount_refunded": 0,
    "application": null,
    "application_fee": null,
    "application_fee_amount": null,
    "balance_transaction": "txn_1032HU2eZvKYlo2CEPtcnUvl",
    "billing_details": {
      "address": {
        "city": null,
        "country": null,
        "line1": null,
        "line2": null,
        "postal_code": null,
        "state": null
      },
      "email": null,
      "name": null,
      "phone": null
    },
    "calculated_statement_descriptor": null,
    "captured": false,
    "created": 1659518844,
    "currency": "usd",
    "customer": null,
    "description": "My First Test Charge (created for API docs)",
    "disputed": false,
    "failure_balance_transaction": null,
    "failure_code": null,
    "failure_message": null,
    "fraud_details": {},
    "invoice": null,
    "livemode": false,
    "metadata": {
      "order_id": "6735"
    },
    "on_behalf_of": null,
    "outcome": null,
    "paid": true,
    "payment_intent": null,
    "payment_method": "card_1LSdrL2eZvKYlo2CtnWPUQ1I",
    "payment_method_details": {
      "card": {
        "brand": "visa",
        "checks": {
          "address_line1_check": null,
          "address_postal_code_check": null,
          "cvc_check": "pass"
        },
        "country": "US",
        "exp_month": 8,
        "exp_year": 2023,
        "fingerprint": "Xt5EWLLDS7FJjR1c",
        "funding": "credit",
        "installments": null,
        "last4": "4242",
        "mandate": null,
        "moto": null,
        "network": "visa",
        "three_d_secure": null,
        "wallet": null
      },
      "type": "card"
    },
    "receipt_email": null,
    "receipt_number": null,
    "receipt_url": "https://pay.stripe.com/receipts/acct_1032D82eZvKYlo2C/ch_3LSdrM2eZvKYlo2C1A6YRLyL/rcpt_MAzrg6YgiqYH9yomNqsCRuLOeTiFRBy",
    "redaction": null,
    "refunded": false,
    "refunds": {
      "object": "list",
      "data": [],
      "has_more": false,
      "url": "/v1/charges/ch_3LSdrM2eZvKYlo2C1A6YRLyL/refunds"
    },
    "review": null,
    "shipping": null,
    "source_transfer": null,
    "statement_descriptor": null,
    "statement_descriptor_suffix": null,
    "status": "succeeded",
    "transfer_data": null,
    "transfer_group": null
  }'''
nl: MetadataUpdateable Stripe objects—including Account, Charge, Customer, PaymentIntent, Refund, Subscription, and Transfer—have a metadata parameter. You can use this parameter to attach key-value data to these Stripe objects.You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long.Metadata is useful for storing additional, structured information on an object. As an example, you could store your user's full name and corresponding unique identifier from your system on a Stripe Customer object. Metadata is not used by Stripe—for example, not used to authorize or decline a charge—and won't be seen by your users unless you choose to show it to them.Some of the objects listed above also support a description parameter. You can use the description parameter to annotate a charge—with, for example, a human-readable description like 2 shirts for test@example.com. Unlike metadata, description is a single string, and your users may see it (e.g., in email receipts Stripe sends on your behalf).Do not store any sensitive information (bank account numbers, card details, etc.) as metadata or in the description parameter.