from flask import Flask, request, jsonify
from payments_py import Payments, PaymentOptions
from payments_py.x402.helpers import build_payment_required
from payments_py.common.payments_error import PaymentsError
app = Flask(__name__)
# Initialize payments
payments = Payments.get_instance(
PaymentOptions(nvm_api_key="nvm:agent-key", environment="sandbox")
)
AGENT_ID = "your-agent-id"
PLAN_ID = "your-plan-id"
@app.route('/api/tasks', methods=['POST'])
def create_task():
# 1. Extract x402 access token from payment-signature header
access_token = request.headers.get('payment-signature', '')
if not access_token:
return jsonify({'error': 'Missing payment-signature header'}), 402
# 2. Build payment required object
payment_required = build_payment_required(
plan_id=PLAN_ID,
endpoint=request.url,
agent_id=AGENT_ID,
http_verb=request.method
)
try:
# 3. Verify permissions
verification = payments.facilitator.verify_permissions(
payment_required=payment_required,
x402_access_token=access_token,
max_amount="1"
)
if not verification.is_valid:
return jsonify({
'error': 'Payment verification failed',
'details': verification.error
}), 402
# 4. Process the request
task_data = request.json
result = process_task(task_data)
# 5. Settle (burn credits) after successful processing
settlement = payments.facilitator.settle_permissions(
payment_required=payment_required,
x402_access_token=access_token,
max_amount="1"
)
return jsonify({
'result': result,
'credits_used': settlement.credits_redeemed
})
except PaymentsError as e:
return jsonify({'error': str(e)}), 402
def process_task(data):
# Your AI logic here
return {"status": "completed", "output": "Task result"}
if __name__ == '__main__':
app.run(port=8080)