Square Python SDK
Official Square payments Python SDK. Current version: 44.0.1 (Mar 2026). VERSIONING QUIRK: squareup uses date-based versions (44.0.1.20260122) — major version tracks Square API version. Releases every ~4-6 weeks. Install is 'squareup', import is 'square'. Square uses idempotency_key for all payment creation — required, not optional. Amount in smallest currency unit (cents for USD). Test environment uses sandbox credentials with 'sandbox-' prefix.
Warnings
- breaking Install is 'squareup' but import is 'import square'. Common confusion — installing 'square' installs a different package.
- breaking idempotency_key is required for payments.create_payment(). Omitting it raises a validation error. Must be unique per payment attempt.
- breaking Amount is in smallest currency unit — cents for USD. 100 = $1.00. Passing 1.00 as float or passing dollars will result in undercharging.
- gotcha result.is_success() and result.is_error() are METHODS not properties. Calling result.is_success without () always returns truthy.
- gotcha Version numbering is date-based (44.0.1.20260122). Major version tracks Square API version. Pin carefully — minor releases can add breaking API changes.
- gotcha Sandbox uses test card nonces from Square docs. Production uses nonces from Square Web Payments SDK on frontend. Never pass real card numbers as source_id.
Install
-
pip install squareup
Imports
- Client + Payments API
import square import uuid client = square.Client( access_token='YOUR_ACCESS_TOKEN', environment='sandbox' # or 'production' ) # Create payment — idempotency_key required result = client.payments.create_payment({ 'source_id': 'cnon:card-nonce-ok', # from Square Web Payments SDK 'idempotency_key': str(uuid.uuid4()), # unique per request 'amount_money': { 'amount': 100, # 100 cents = $1.00 USD 'currency': 'USD' } }) if result.is_success(): print(result.body['payment']['id']) elif result.is_error(): for error in result.errors: print(error['detail'])
Quickstart
# pip install squareup
import square
import uuid
client = square.Client(
access_token='EAAAl...', # sandbox token from developer.squareup.com
environment='sandbox'
)
# Create payment
result = client.payments.create_payment({
'source_id': 'cnon:card-nonce-ok', # test nonce
'idempotency_key': str(uuid.uuid4()),
'amount_money': {
'amount': 100, # cents
'currency': 'USD'
},
'note': 'Test payment'
})
if result.is_success():
payment = result.body['payment']
print(f'Payment {payment["id"]}: {payment["status"]}')
elif result.is_error():
for error in result.errors:
print(f'Error {error["code"]}: {error["detail"]}')