Loading...
Loading...
Enable AI agents to safely make real-world merchant purchases using Snaplii's tokenized gift card payment layer with up to 10% savings.
npx skill4agent add aradotso/ai-agent-skills snaplii-agent-paymentsSkill by ara.so — AI Agent Skills collection.
git clone https://github.com/Snaplii-Inc/agent-to-merchant-payments.git
cd agent-to-merchant-paymentsbrew install pipx
pipx ensurepath
pipx install -e ./snaplii-clipython3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install -e ./snaplii-cliscoop install pipx
pipx ensurepath
pipx install -e ./snaplii-clisnaplii --helppip install -e ./snaplii-cliexternally-managed-environmentpip install -e ./snaplii-cli --break-system-packagessnp_sk_live_...export SNAPLII_API_KEY="snp_sk_live_your_key_here"snaplii init~/.snaplii/config.jsonsnaplii config showsnaplii browse tags --prov CAsnaplii browse tags --prov USsnaplii browse brand --id CB_AMAZON_CA--item-id--price--prov# Ontario, Canada
snaplii purchase --item-id CB_STARBUCKS_CA-CT_DIGITAL --price 25 --prov ON
# California, USA
snaplii purchase --item-id CB_AMAZON_US-CT_DIGITAL --price 50 --prov CA--provbrowse tagsCAUSpurchaseONQCBCNYCATX{cardBrandId}-{cardTemplateId}snaplii browse brandsnaplii quote --item-id CB_AMAZON_CA-CT_DIGITAL --price 100snaplii giftcard listsnaplii giftcard detail --card-no GC_1234567890snaplii smart cashback --brand-id CB_AMAZON_CA --amount 100snaplii smart dashboardimport subprocess
import json
import os
# Set API key in environment
os.environ['SNAPLII_API_KEY'] = 'snp_sk_live_...'
# Browse available tags
result = subprocess.run(
['snaplii', 'browse', 'tags', '--prov', 'CA'],
capture_output=True,
text=True
)
print(result.stdout)
# Purchase a gift card
purchase = subprocess.run(
[
'snaplii', 'purchase',
'--item-id', 'CB_AMAZON_CA-CT_DIGITAL',
'--price', '50',
'--prov', 'ON'
],
capture_output=True,
text=True
)
print(purchase.stdout)
# List owned cards
cards = subprocess.run(
['snaplii', 'giftcard', 'list'],
capture_output=True,
text=True
)
print(cards.stdout)import subprocess
import json
def get_quote(item_id, price):
"""Get purchase quote with cashback calculation."""
result = subprocess.run(
['snaplii', 'quote', '--item-id', item_id, '--price', str(price)],
capture_output=True,
text=True
)
return result.stdout
def purchase_card(item_id, price, province):
"""Purchase a gift card and return card details."""
result = subprocess.run(
[
'snaplii', 'purchase',
'--item-id', item_id,
'--price', str(price),
'--prov', province
],
capture_output=True,
text=True
)
if result.returncode == 0:
print(f"✓ Successfully purchased {item_id}")
return result.stdout
else:
print(f"✗ Purchase failed: {result.stderr}")
return None
def get_card_details(card_no):
"""Retrieve redemption code and PIN for a card."""
result = subprocess.run(
['snaplii', 'giftcard', 'detail', '--card-no', card_no],
capture_output=True,
text=True
)
return result.stdout
# Example workflow
item_id = 'CB_STARBUCKS_CA-CT_DIGITAL'
quote = get_quote(item_id, 25)
print("Quote:", quote)
purchase = purchase_card(item_id, 25, 'ON')
if purchase:
print(purchase)import subprocess
def check_dashboard():
"""View card inventory summary."""
result = subprocess.run(
['snaplii', 'smart', 'dashboard'],
capture_output=True,
text=True
)
print(result.stdout)
def calculate_savings(brand_id, amount):
"""Calculate potential cashback savings."""
result = subprocess.run(
[
'snaplii', 'smart', 'cashback',
'--brand-id', brand_id,
'--amount', str(amount)
],
capture_output=True,
text=True
)
print(result.stdout)
check_dashboard()
calculate_savings('CB_AMAZON_CA', 100)pip install -e ./snaplii-cli
pip install "mcp[cli]"externally-managed-environmentpip install -e ./snaplii-cli --break-system-packages
pip install "mcp[cli]" --break-system-packagessnaplii init| OS | Config Location |
|---|---|
| macOS | |
| Windows | |
| Linux | |
{
"mcpServers": {
"snaplii": {
"command": "/absolute/path/to/python3",
"args": ["/absolute/path/to/agent-to-merchant-payments/mcp-server/server.py"]
}
}
}which python3where.exe python3What gift cards are available on Snaplii?snaplii_browse_tagsmkdir -p ~/.claude/skills/snaplii-cli
cp skills/snaplii-cli.md ~/.claude/skills/snaplii-cli/SKILL.md~/.claude/skills/snaplii-cli/SKILL.mdwhich snapliisnapliisnapliiexport PATH=...import subprocess
class SnapliAgent:
def __init__(self):
self.authenticated = self._check_auth()
def _check_auth(self):
"""Verify authentication status."""
result = subprocess.run(
['snaplii', 'config', 'show'],
capture_output=True,
text=True
)
return 'authenticated' in result.stdout.lower()
def browse_brands(self, country='CA'):
"""Browse available gift card brands."""
result = subprocess.run(
['snaplii', 'browse', 'tags', '--prov', country],
capture_output=True,
text=True
)
return result.stdout
def get_brand_details(self, brand_id):
"""Get denominations and cashback for a brand."""
result = subprocess.run(
['snaplii', 'browse', 'brand', '--id', brand_id],
capture_output=True,
text=True
)
return result.stdout
def make_purchase(self, item_id, price, province):
"""Execute a gift card purchase."""
if not self.authenticated:
raise Exception("Not authenticated. Run 'snaplii init' first.")
result = subprocess.run(
[
'snaplii', 'purchase',
'--item-id', item_id,
'--price', str(price),
'--prov', province
],
capture_output=True,
text=True
)
if result.returncode != 0:
raise Exception(f"Purchase failed: {result.stderr}")
return result.stdout
def list_inventory(self):
"""List all owned gift cards."""
result = subprocess.run(
['snaplii', 'giftcard', 'list'],
capture_output=True,
text=True
)
return result.stdout
# Usage
agent = SnapliAgent()
print(agent.browse_brands('US'))
print(agent.get_brand_details('CB_AMAZON_US'))
purchase_result = agent.make_purchase(
'CB_AMAZON_US-CT_DIGITAL',
50,
'NY'
)
print(purchase_result)
print(agent.list_inventory())import subprocess
import time
def bulk_purchase(purchases):
"""
Purchase multiple gift cards with retry logic.
purchases: list of dicts with keys: item_id, price, province
"""
results = []
for purchase in purchases:
max_retries = 3
retry_count = 0
while retry_count < max_retries:
try:
result = subprocess.run(
[
'snaplii', 'purchase',
'--item-id', purchase['item_id'],
'--price', str(purchase['price']),
'--prov', purchase['province']
],
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
results.append({
'success': True,
'purchase': purchase,
'output': result.stdout
})
break
else:
retry_count += 1
if retry_count >= max_retries:
results.append({
'success': False,
'purchase': purchase,
'error': result.stderr
})
else:
time.sleep(2 ** retry_count) # Exponential backoff
except subprocess.TimeoutExpired:
retry_count += 1
if retry_count >= max_retries:
results.append({
'success': False,
'purchase': purchase,
'error': 'Timeout after 30 seconds'
})
return results
# Example usage
purchases = [
{'item_id': 'CB_STARBUCKS_CA-CT_DIGITAL', 'price': 25, 'province': 'ON'},
{'item_id': 'CB_AMAZON_CA-CT_DIGITAL', 'price': 50, 'province': 'ON'},
{'item_id': 'CB_WALMART_US-CT_DIGITAL', 'price': 100, 'province': 'NY'}
]
results = bulk_purchase(purchases)
for r in results:
if r['success']:
print(f"✓ {r['purchase']['item_id']}: Success")
else:
print(f"✗ {r['purchase']['item_id']}: {r['error']}")~/.snaplii/config.jsonsnaplii init{
"agent_id": "derived_from_api_key",
"session_token": "session_token_here",
"token_expiry": "2026-06-01T12:00:00Z"
}snaplii config show# Set API key for programmatic access
export SNAPLII_API_KEY="snp_sk_live_your_key_here"
# Optional: Set config directory (defaults to ~/.snaplii)
export SNAPLII_CONFIG_DIR="/custom/path/to/config"snaplii: command not found# Check where it was installed
python3 -m pip show -f snaplii-clibin/snapliiScripts\snaplii.exepipxModuleNotFoundError: No module named 'mcp''snaplii'# Verify the Python interpreter has required packages
/absolute/path/to/python -c "import mcp, snaplii; print('ok')"/absolute/path/to/python -m pip install -e ./snaplii-cli
/absolute/path/to/python -m pip install "mcp[cli]"pipxpipx install -e ./snaplii-clipython3 -m venv ~/.venvs/snaplii
source ~/.venvs/snaplii/bin/activate
pip install -e ./snaplii-clipip install -e ./snaplii-cli --break-system-packagessnp_sk_live_snaplii initsnaplii browse brand --id <brand_id>PAY_WRITEsnaplii purchase --item-id CB_AMAZON_CA-CT_DIGITAL --price 50 --prov ON -vPAY_READagent-to-merchant-payments/
├── snaplii-cli/ # Python CLI (pip-installable)
├── mcp-server/ # MCP server for Claude Desktop
├── skills/ # Claude Code skill definition
├── clawhub-publish/ # ClawHub skill artifact
└── clawhub-plugin/ # ClawHub MCP bundle plugin