Automate your console
Everything your team does in the console for UPI can be scripted with a developer key. Create one in Console → Developers → Create a key → Developer key and tick UPI verification. Full reference: Tenant automation API.
1. Upload today's bank statement
Export your bank statement as CSV and send it as is. Every credit whose 12-digit UTR and amount match a UPI payment waiting for a check is approved; anything else stays in the queue and comes back in need_a_look_lines.
curl https://paylink.websvc.in/api/tenant/upi/statements?livemode=true \ -H "Authorization: Bearer tdk_acme_…" \ -F statement=@statement.csv
{ "credits": 14, "approved": 12, "need_a_look": 1, "not_found": 1, "without_utr": 0,
"need_a_look_lines": [ { "line": 9, "utr": "412345678901", "amount": 49900, "note": "amount differs" } ] }
Or send the raw file with -H "Content-Type: text/csv" --data-binary @statement.csv. Download an example from Console → UPI → "Download an example".
2. Approve or reject what's left
# What is waiting
curl "https://paylink.websvc.in/api/tenant/upi/pending?livemode=true" -H "Authorization: Bearer tdk_acme_…"
# Approve one (the note is kept on the payment's journey)
curl -X POST https://paylink.websvc.in/api/tenant/upi/att_…/approve -H "Authorization: Bearer tdk_acme_…" \
-H "Content-Type: application/json" -d '{ "note": "Seen in HDFC statement" }'
# Reject one
curl -X POST https://paylink.websvc.in/api/tenant/upi/att_…/reject -H "Authorization: Bearer tdk_acme_…" \
-H "Content-Type: application/json" -d '{ "note": "No such credit" }'
3. Look back
curl "https://paylink.websvc.in/api/tenant/upi/decided?livemode=true&decision=rejected&from=2026-10-01&to=2026-10-31" \ -H "Authorization: Bearer tdk_acme_…"
A nightly job
#!/bin/sh # crontab: 30 23 * * * /opt/acme/upi-match.sh /data/statements/today.csv set -e curl -fsS https://paylink.websvc.in/api/tenant/upi/statements?livemode=true \ -H "Authorization: Bearer $PAYLINK_TDK" -F statement=@"$1"
Keep the key in an environment variable or secret store, never in the script. Every call is recorded in the console's audit log under the key's name.