denis bauer· belgrade, serbia·linkedIn·cv·email·Book a call with me
GlobalWorkPayProDesk
Case study

Billing context, inside the ticket

A Zendesk sidebar app that puts PayPro Global and Solidgate subscription data — and the cancel, extend, refund and void actions that go with it — next to the conversation, so agents stop leaving the ticket to find an answer.

Ticket #48213Billing
JE
Jordan Ellis

Hi — I think I was charged twice this month. Can you check and refund one?

Zendesk · Apps · PayProDesk
JE
Jordan Ellis
jordan.ellis@gmail.com
United States, Illinois
New version · RemoteJobsFinder
Request password resetLogin as userUnsubscribe from emails

Subscriptions

  • RemoteJobsFinder: 1-Month Plan PAYPRO·GLOBAL

    Started: April 23, 2026

    Next charge: October 23, 2026

    ActiveCancel subscriptionExtend
    $49.99 / Month
  • GlobalWork: 1-Month Plan solidgate

    Started: July 22, 2026

    Cancelled: September 3, 2026

    Expires on: September 22, 2026

    Cancelled
    Extend
    $29.99 / Month

Recent Charges

  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #2

    August 22, 2026 at 6:05 PM

    AuthorizedVoid
    $29.99
  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #1

    July 22, 2026 at 6:04 PM

    ProcessedRefund
    $14.99$29.99
  • RemoteJobsFinder: 1-Month Plan

    Order ID: 42166035 | Invoice

    Visa · Payment #6

    September 23, 2026 at 9:19 PM

    ProcessedRefund
    $49.99
0
tickets a week handled with it
0
support agents using it
0
payment providers, one sidebar
0+
months in production, since July 2025
~2 minutes of lookup gone from every billing ticket
What this was

A payment provider with no integrations

PayPro Global is a solid payment provider with a closed ecosystem: no Zendesk app, no Intercom sync, no Freshdesk plugin, no CRM webhooks. Support ran on Zendesk; billing lived somewhere else entirely.

I built PayProDesk to close that gap, and when some products later moved to Solidgate, the app grew to cover both. Same sidebar, same UX, two payment backends.

It has since grown well past showing the data. It runs the awkward multi-step operations on the agent’s behalf, and it speaks up when the data it was handed is provably incomplete.

The problem

Seven steps, every single ticket

PayPro Global has no Zendesk app, no CRM sync, no widget. So before an agent could answer a billing question, they went looking for the answer in another tab.

0:00before the agent can answer
  1. 1Open the ticket in Zendesk+4s
  2. 2Copy the customer’s email+6s
  3. 3Switch to PayPro Global’s admin panel+12s
  4. 4Search for the customer+21s
  5. 5Find their subscription+28s
  6. 6Find their order history+31s
  7. 7Go back to Zendesk to reply+14s
Zendesk · ticket sidebar
Nothing here yet
GK
ActiveRefund

Subscription, charges and the actions that go with them, next to the conversation.

At 2,900 tickets a week that was hours of tab-juggling just to get basic subscription info. When a second payment provider arrived, it became two dashboards to check before an agent could even start.

What support needs

Answers, not detective work

“I was charged twice.” “Please cancel my subscription.” Before replying, the agent needs to know:

What’s their subscription status?
When does it renew?
What were they charged, and when?
Was a discount applied?
Can I cancel, extend, refund or void right here?
Is what I’m looking at even the whole picture?
none of this should require leaving Zendesk
Two providers

Two backends that disagree, one sidebar

Fetching the data was the easy half. The interesting half was every place the two providers behave differently — which an agent should never have to hold in their head.

PayPro Global
subscription & order data
Solidgate
subscription, invoice & order data
API gateway
One contract over both
behind API-key auth
What the agent sees
Billing anchor
Oneanchors billing to the schedule
The otheranchors it to the charge
Next charge date and billing period mean the same thing on the card, whichever provider is behind them.
1 of 4 · click one to hold it
The sidebar

Everything next to the conversation

It loads when an agent opens a ticket, detects the customer’s email and pulls both providers. It has since grown well past “show me the data” into running the awkward operations for them.

1

Who you are actually talking to

  • Name, email, country and state, assembled from whichever source has the fullest version: the billing record, the ticket requester, or the platform profile. A billing record that says Brittany loses to a ticket that says Brittany Giansanti.
  • A badge for the platform version the customer is actually served — new, old, or never logged in because the account has no password yet.
  • One email can be two accounts across the two brands. The card resolves to the one the customer is on right now, and says which.
JE
Jordan Ellis
jordan.ellis@gmail.com
United States, Illinois
New version · RemoteJobsFinder
Request password resetLogin as userUnsubscribe from emails
2

Subscriptions and status

  • Active, suspended and cancelled subscriptions at a glance, each tagged with the provider it belongs to.
  • Plan, price, billing period, start date and next charge date.
  • Cancelling runs behind an inline Yes/No strip colour-coded to the action, so a stray click cannot end someone’s subscription.

Subscriptions

  • RemoteJobsFinder: 1-Month Plan PAYPRO·GLOBAL

    Started: April 23, 2026

    Next charge: October 23, 2026

    Active
    Cancel?YesNo
    Extend
    $49.99 / Month
  • GlobalWork: 1-Month Plan solidgate

    Started: July 22, 2026

    Cancelled: September 3, 2026

    Expires on: September 22, 2026

    Cancelled
    Extend
    $29.99 / Month
3

Extending

  • Grant 3, 7, 14, 30, 60 or 90 extra days from a dropdown.
  • On a cancelled subscription it extends and keeps the cancellation — more on that below.

Subscriptions

  • RemoteJobsFinder: 1-Month Plan PAYPRO·GLOBAL

    Started: April 23, 2026

    Next charge: October 23, 2026

    ActiveCancel subscriptionExtend
    $49.99 / Month
  • GlobalWork: 1-Month Plan solidgate

    Started: July 22, 2026

    Cancelled: September 3, 2026

    Expires on: September 22, 2026

    Cancelled
    Extend
    3 days7 days14 days30 days60 days90 days
    $29.99 / Month
4

Charges, refunds and voids

  • Full charge history across both providers, with payment method, payment number and a deep link into the provider’s own dashboard.
  • Settled charges offer Refund, authorised-but-uncaptured ones offer Void. Never both on the same charge.

Recent Charges

  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #2

    August 22, 2026 at 6:05 PM

    AuthorizedVoid
    $29.99
  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #1

    July 22, 2026 at 6:04 PM

    ProcessedRefund
    $14.99$29.99
  • RemoteJobsFinder: 1-Month Plan

    Order ID: 42166035 | Invoice

    Visa · Payment #6

    September 23, 2026 at 9:19 PM

    ProcessedRefund
    $49.99
5

Discounts

  • Discounted charges show what was actually paid with the list price struck through, so “I was charged the wrong amount” takes seconds to answer.

Recent Charges

  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #2

    August 22, 2026 at 6:05 PM

    AuthorizedVoid
    $29.99
  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #1

    July 22, 2026 at 6:04 PM

    Processed
    Refund?YesNo
    $14.99$29.99
  • RemoteJobsFinder: 1-Month Plan

    Order ID: 42166035 | Invoice

    Visa · Payment #6

    September 23, 2026 at 9:19 PM

    ProcessedRefund
    $49.99
6

Timeline

  • One chronological list merging events from every subscription and both providers, each dot colour-coded by type.
  • Future-dated events are filtered out. A cancellation scheduled for the end of the paid period has not happened yet, and showing it as history misleads the agent reading it.

Recent Charges

Hide timeline
  1. Sep 3, 2026 · 10:42 AM
    Cancellation requested
    GlobalWork: 1-Month Plan solidgate
  2. Aug 22, 2026 · 6:05 PM
    Charge
    GlobalWork: 1-Month Plan solidgate
    Renewal #1 · Card · $29.99
  3. Jul 22, 2026 · 6:04 PM
    Subscription started
    GlobalWork: 1-Month Plan solidgate
    Initial charge · Card · $14.99
  4. Apr 23, 2026 · 9:19 PM
    Subscription started
    RemoteJobsFinder: 1-Month Plan PAYPRO·GLOBAL
    Initial charge · Visa · $49.99
  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #2

    August 22, 2026 at 6:05 PM

    AuthorizedVoid
    $29.99
  • GlobalWork: 1-Month Plan

    Open in Solidgate

    Card · Payment #1

    July 22, 2026 at 6:04 PM

    ProcessedRefund
    $14.99$29.99
  • RemoteJobsFinder: 1-Month Plan

    Order ID: 42166035 | Invoice

    Visa · Payment #6

    September 23, 2026 at 9:19 PM

    ProcessedRefund
    $49.99
7

Account actions

  • Password reset, sent straight to the customer or handed back as a link to paste into the reply.
  • Log in as the user through a short-lived internal session, to see what the customer sees.
  • Unsubscribe from marketing email, behind a confirmation because there is no re-subscribe on the other side.
JE
Jordan Ellis
jordan.ellis@gmail.com
United States, Illinois
New version · RemoteJobsFinder

User has multiple brands. Select one:

RemoteJobsFinderGlobalWorkCancel
A closer look

The operations agents used to get wrong

Showing the data was the start. The app now runs the multi-step operations on the agent’s behalf, including the ones where doing the obvious thing breaks something.

Extending without reviving

On Solidgate, extending a cancelled subscription quietly revives it — the opposite of what an agent granting goodwill days means.

nowCancelledends Oct 12
agent grantsExtend +30 daysone click
result… 

A subscription the customer cancelled is active again and will bill them next month.

Refund or void, never both

Releasing a hold that was never taken is not the same as returning money that was. Different buttons, different colours, on different charges.

RemoteJobsFinder · 1-MonthVisa · authorised, not captured
$49.99
AuthorisedVoid
RemoteJobsFinder · 1-MonthVisa · Payment #1 · $49.99 discounted
$24.99
ProcessedRefund

Both settle asynchronously. The app polls for the final status and updates the badge itself — and if the provider has not confirmed in time, it says to reload and check rather than claiming success.

Cancel subscription?red ends it
Refund $24.99?amber returns money
Release this hold?blue releases a hold
one confirmation pattern — the colour says what is about to happen
Incomplete data

Saying when the history is missing

The billing backend keeps one subscription record per customer per brand, so an older subscription can drop out of the response entirely. The app cannot recover it. It can prove it is gone.

over a year with no charges?
account createdcharges the API returns

Billing history may be incomplete. This account is older than its earliest visible charge. Check the provider dashboard before quoting charge history or turning down a refund.

Platform accounts are created within seconds of the first successful payment. So an account meaningfully older than its own earliest charge means there was billing the API is not returning — and the agent is told before they answer, not after.

Deliberately one-sided: it can prove something is missing, it can never prove nothing is. So there is no reassuring all-clear state for anyone to trust by mistake.

Impact

Before and after

Four agents, 2,900 tickets a week, in production since July 2025.

click a row to turn it back over
Under the hood
Zendesk App Framework
Native sidebar integration
PayPro Global API
Subscription and order data
Solidgate API
Subscription, invoice and order data
Custom API gateway
One contract over both providers, behind API-key auth
Status polling
Refunds and voids settle by webhook, so the UI waits for the real terminal status
Vanilla JS + CSS
No framework overhead, fast load inside the ticket
Why custom-build
The closed ecosystem was the brief
No public Zendesk app, no CRM webhooks, no embeddable widgets. If support was going to have billing context in their actual tool, it had to be built.
The value is in the disagreements
Fetching data is table stakes. Holding the places where two providers behave differently, so the agent does not have to, is the product.
Do the obvious thing safely
Extend, refund, void and cancel each have a way to go wrong. The app runs the safe version, confirms in the action’s own colour, and waits for the real result.
Say what you cannot see
An honest “this may be incomplete” beats a clean card that is quietly wrong — especially right before someone declines a refund.