₹PayLink Developer docs Docs

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.