Skip to main content

Python SDK for Nekuda payment processing

Project description

Quickstart

Welcome to the rapid-fire tour of the Nekuda Python SDK. In less than five minutes you will:

  1. install the package,
  2. authenticate with your API key, and
  3. run your first card-reveal workflow with type-safe responses.

TL;DR – copy the snippets below into a file called hello.py, export your API key, run it, done.

💡 Don't forget! This Python SDK handles the backend payment processing. You'll also need to integrate our wallet collection SDK on your frontend to securely collect credit card details from users.


1. Installation

We recommend using UV (fast Rust-based pip replacement), but plain pip works just as well:

uv pip install nekuda
#-or-
pip install nekuda

The SDK ships as a single, pure-python wheel with minimal dependencies – install is ~1 s.


2. Authenticate

Grab your secret key from the Nekuda dashboard and export it as an environment variable:

export NEKUDA_API_KEY="sk_live_…"  # required
# Optional – point the SDK to staging / localmock
export NEKUDA_BASE_URL="https://staging-api.nekuda.ai"

That's all the configuration you need for the quickstart.


3. Hello World

from nekuda import NekudaClient

client = NekudaClient.from_env()
print("🚀 Authenticated! Your account ID is:", client.api_key[:8] + "…")
python hello.py

If everything is set-up correctly you should see:

🚀 Authenticated! Your account ID is: sk_live_12…

4. End-to-end flow with Type Safety 🎯

The snippet below walks through the full payment flow with type-safe responses:

from nekuda import MandateData, NekudaClient, NekudaError

client = NekudaClient.from_env()
user = client.user("user_123")

try:
    # 1) Describe what the user is about to purchase
    mandate = MandateData(
        product="Premium Subscription",
        price=49.99,
        currency="USD",
        merchant="Nekuda Corp"
    )

    # Create mandate - returns MandateCreateResponse
    mandate_response = user.create_mandate(mandate)
    print(f"✅ Created mandate: {mandate_response.mandate_id}")

    # 2) Request a reveal token - returns CardRevealTokenResponse
    reveal_response = user.request_card_reveal_token(mandate_response.mandate_id)
    print(f"🔑 Token: {reveal_response.reveal_token}")

    # IDE knows these fields exist! No more KeyErrors!
    if reveal_response.expires_at:
        print(f"⏰ Expires at: {reveal_response.expires_at}")

    # 3) Exchange token for card details - returns CardDetailsResponse
    card = user.reveal_card_details(reveal_response.reveal_token)
    print(f"💳 **** **** **** {card.card_number[-4:]}")
    print(f"📅 Expiry: {card.card_expiry_date}")  # Always MM/YY format
    print(f"👤 Name: {card.cardholder_name}")

except NekudaError as e:
    print(f"❌ Error: {e}")

Run it and you'll see the card details with full type safety and IDE autocomplete support!

🔗 Complete Integration: Remember that in a real application, steps 1-2 happen on your backend (using this Python SDK), while the actual card collection happens on your frontend using our React wallet SDK.


5. Why Type Safety Matters 🛡️

With our new typed response models:

  • No more KeyError - IDE knows exactly what fields are available
  • Autocomplete everywhere - Your editor suggests available fields
  • Validation built-in - Card numbers and expiry dates are validated
  • Better error messages - Know exactly what went wrong
# Before (raw dicts) 😟
result = client.request_card_reveal_token(...)
token = result["reveal_token"]  # Hope the key exists!

# After (typed models) 😊
result = client.request_card_reveal_token(...)
token = result.reveal_token  # IDE autocomplete! Type checked!

What's next?

Happy hacking! 🎉

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nekuda-0.2.2-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file nekuda-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: nekuda-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 23.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for nekuda-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 be7b5bcd21a2641b5807cccbf051d76b5a6a49d2624ef1ff758e6d6fec988a13
MD5 15dc685a0420afb552a9986b9798fc7f
BLAKE2b-256 ad3a051be7ae6d0ccbe169947bf8205a4ed740fac8756081c56cefb7d00b50ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for nekuda-0.2.2-py3-none-any.whl:

Publisher: publish.yml on nekuda-ai/nekuda-sdk-backend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page