Skip to main content

Unofficial CLI and Python client for the Extend virtual card API

Project description

extendvcc

CI PyPI License: MIT Python 3.11+

Unofficial CLI and Python client for the Extend virtual card API.

Disclaimer

This is an unofficial, independent client for Extend's private browser API (api.paywithextend.com). It is not affiliated with, endorsed by, or supported by Extend, Inc. Use at your own risk. Your Extend account may be suspended for running automation against their private API.

Install

pip install extendvcc-cli
# or
pipx install extendvcc-cli

Standalone binary (no Python required): download from GitHub Releases.

Quick Start

# Log in (interactive email + password, device remembered)
extendvcc login

# List parent cards
extendvcc accounts

# List virtual cards
extendvcc cards

Enrolling a parent card is a three-step lifecycle: extendvcc enroll ... registers the card and triggers an issuer verification email, you click the link in that email, then extendvcc activate <id> pulls the card from PENDING to ACTIVE. Re-run activate if it still reports PENDING.

Create a One-Time Card

extendvcc create \
  --credit-card-id cc_xxx \
  --name "My Card" \
  --balance-cents 5000 \
  --valid-to 2026-12-31

Create a Recurring Card

extendvcc create \
  --credit-card-id cc_xxx \
  --name "Monthly" \
  --balance-cents 10000 \
  --period MONTHLY \
  --by-month-day 1 \
  --terminator NONE

Reveal Credentials

# Show masked card number and CVC on stdout
extendvcc reveal <card-id>

# Write full credentials to a file with 0600 permissions (owner-only)
extendvcc reveal <card-id> --json-path creds.json

--json-path writes the full PAN, CVC, and expiry to a file. Without it, the card number is masked on stdout. --json is a separate global flag that controls JSON output format; it does not write a file.

Dry Run

Destructive commands accept --dry-run to preview the exact operation without touching the network or mutating anything:

extendvcc create --credit-card-id cc_x --name "Test" --balance-cents 5000 --valid-to 2026-12-31 --dry-run
extendvcc bulk cards.csv --credit-card-id cc_x --dry-run
extendvcc cancel <card-id> --dry-run
extendvcc close <card-id> --dry-run
extendvcc update <card-id> --balance-cents 9000 --dry-run

The would-be request body (or operation descriptor) is printed as JSON to stdout; the human-readable plan goes to stderr. So extendvcc create ... --dry-run > body.json captures just the JSON. create/bulk resolve the recipient locally (from --recipient, else the saved session) and never call the API; the preview is labelled approximate when the recipient falls back to a placeholder. update --dry-run performs only the read-only GET needed to show the accurate merged PUT body, with no mutation.

Exit Codes

The CLI uses stable exit codes so scripts and CI can branch on the outcome:

Code Name Meaning
0 OK Success.
1 ERROR Generic failure (library error, or an aborted confirmation).
2 USAGE Bad flags or CLI input validation (e.g. missing --valid-to).
3 AUTH_REQUIRED Login, OTP, or a saved session is required or failed.
4 DISABLED Kill switch tripped (account-risk); run clear-disabled --manual.
5 API_ERROR Extend returned an error response.

Environment Variables

Variable Purpose
EXTENDVCC_EMAIL Extend account email (overrides interactive prompt)
EXTENDVCC_PASSWORD Extend account password (overrides interactive prompt)
EXTENDVCC_IMAP_USER IMAP email for automatic OTP retrieval
EXTENDVCC_IMAP_PASSWORD IMAP app password
EXTENDVCC_IMAP_HOST IMAP server (default: imap.gmail.com)
EXTENDVCC_STATE_DIR Override session/state directory
EXTENDVCC_LEDGER_PATH Override ledger file path
EXTENDVCC_BRAND_ID Override Extend brand ID

Python API

from extendvcc import list_cards, get_card, create_card, reveal_card

# List all virtual cards
cards = list_cards()

# Get a single card by ID
card = get_card("card_id_here")

# Reveal card credentials (PAN, CVC, expiry)
creds = reveal_card("card_id_here")

See extendvcc.__init__ for the full list of exported functions and models.

Security Notes

  • The ledger never stores PAN or CVC data.
  • reveal saves credentials with 0600 file permissions.
  • Session tokens are stored locally with restricted permissions.
  • All HTTP uses Chrome TLS fingerprinting via impit.

License

MIT

Project details


Download files

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

Source Distribution

extendvcc_cli-0.1.0.tar.gz (66.3 kB view details)

Uploaded Source

Built Distribution

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

extendvcc_cli-0.1.0-py3-none-any.whl (45.8 kB view details)

Uploaded Python 3

File details

Details for the file extendvcc_cli-0.1.0.tar.gz.

File metadata

  • Download URL: extendvcc_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 66.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for extendvcc_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 605d207439aa4a4a2f036eeaff5f7a5c7c064c553ed469ebe6a3f73f9b8e1c9f
MD5 626c78833ed3f862824efd43b85709de
BLAKE2b-256 3f523135792d752468601ba7e1d8556a59e275bf4cb730e282a937f586c185aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for extendvcc_cli-0.1.0.tar.gz:

Publisher: release.yml on 4LAU/extendvcc

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

File details

Details for the file extendvcc_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: extendvcc_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 45.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for extendvcc_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a45fdf1982d6733cf83d9856cebd878700c12d959418bdb86172b96a84ad2ad5
MD5 6674955bd0d90968a1487105b221c43a
BLAKE2b-256 77eda6eb4562be011f9f3c4032707dc973b04ffbbd1d89bfcdb1701444ca8134

See more details on using hashes here.

Provenance

The following attestation bundles were made for extendvcc_cli-0.1.0-py3-none-any.whl:

Publisher: release.yml on 4LAU/extendvcc

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