# Refund a Systeme.io customer and send the refund invoice

> Refund a Systeme.io sale in full, check it was not refunded already, and email the negative-amount invoice as proof, all from one request.

Source: https://cotlet.dev/integrations/systeme-io-api-mcp-server/refund-customer-and-send-invoice

A buyer writes in after a launch asking for a refund. You open Sales, find the transaction by email, click Refund, then go back to the same row to send the invoice, and later remember the course access.

Cotlet does it in your own Systeme.io account with list\_transactions, get\_transaction, refund\_transaction and send\_invoice, called by your AI agent, an n8n workflow or a script.

[Request access](https://cotlet.dev/app/signup?app=systeme-io) [All Systeme.io tools](https://cotlet.dev/integrations/systeme-io-api-mcp-server)

Hosted · nothing to install or maintain

Official options

## Can Systeme.io do this on its own?

Systeme.io's public API and MCP server have no tools for transactions, refunds or invoices (checked 12 Oct 2026); sales reach your code only as the SALE\_NEW and SALE\_CANCELED webhooks. The MCP server can create automation rules with a Sale canceled trigger and a Revoke access to course action, but nothing outside the dashboard issues the refund or sends the invoice.

By hand

## How you do it in Systeme.io today

1. Open the Sales tab in Systeme.io, click Transactions, type the buyer's address in the Customer email field of the Filter by menu and click Filter.
2. Click the three-dot menu of the matching transaction, choose Refund and confirm; Systeme.io only refunds the whole transaction.
3. Open the same three-dot menu again and choose "Send invoice to customer" so the buyer gets the invoice with the negative amount.
4. If the offer included a course, go to Assets > Courses > Students, click the buyer's email, then under Enrollments click the three dots, choose Dismiss and Confirm.
5. Every request repeats four screens. The invoice step and the course access are the parts that get forgotten, and a buyer with two sales of the same offer makes it easy to refund the wrong one.

With an agent

## How to refund a Systeme.io customer and send the refund invoice

Prompt

```
Ana (ana@example.com) wants her money back for the Starter course she bought yesterday. Refund it and email her the refund invoice.
```

1. 01  
### Find the one sale the buyer means  
The agent filters list\_transactions by the address the buyer wrote from and a window around the purchase date they give. With two sales of the same offer it picks the one matching the date and amount, and with none it asks you for the email used at checkout instead of guessing.
2. 02  
### Make sure the money is still there  
get\_transaction shows whether the sale was already refunded. A refunded sale ends the run with a note, so a buyer who wrote twice never gets two refunds.
3. 03  
### Refuse a partial amount  
When the request asks for half back or a fixed sum, the agent stops and tells you that the dashboard refund is all or nothing. Only a full refund goes ahead, after your OK.
4. 04  
### Handle a failed refund  
If the payment gateway rejects the refund, usually because its balance is too low, the agent reports the gateway message and does not retry or send any invoice.
5. 05  
### Send proof, then flag access  
After a successful refund the agent emails the negative-amount invoice with send\_invoice. It then names any course in the refunded offer, so you can dismiss the enrollment or let your own automation rule do it.

### What you get back

Example data

```
ana@example.com: sale tr_20931, Starter course, EUR 97.00 on 11 Oct 2026.
Refunded in full after your OK. Invoice with -97.00 EUR sent to ana@example.com.
Still to do: Ana is enrolled in "Starter course"; dismiss her under Assets > Courses > Students.
lukas@example.com: sale tr_20877 was refunded on 2 Oct, nothing done.
mia@example.com asked for 50% back: not refunded, Systeme.io refunds whole sales only.
```

### Other ways to ask

- Refund every sale of the "Black Friday bundle" bought by the five addresses in this list and send each one the refund invoice.
- Check whether tom@example.com was already refunded for Pro membership, and only refund if not.
- Refund order tr\_20944 but do not send the invoice; the client wants it from our accountant.

Before you automate it

## What Systeme.io allows, and what to know first

- Systeme.io supports full refunds only, so a goodwill partial refund cannot be issued from Sales > Transactions.
- A Systeme.io refund depends on the payment gateway, and the gateway balance must hold enough funds to cover it.
- After a refund Systeme.io creates an invoice with a negative amount, which you can send to the customer as proof of the refund.
- Systeme.io sends invoices one at a time from the "Send invoice to customer" action; several invoices go out through Export to PDF and your own email.
- Dismissing a Systeme.io course enrollment removes access to the content but keeps the buyer in the Students list.

refund\_transaction and send\_invoice ask for your OK by default. To run it on a schedule without you, switch confirmation off for those tools in your dashboard.

Sources: [Systeme.io Help: how to refund your customer](https://help.systeme.io/article/259-how-to-refund-a-customer) · [Systeme.io Help: how to send an invoice to a client](https://help.systeme.io/article/318-how-to-send-an-invoice-to-a-client) · [Systeme.io Help: how to revoke a student's access to a course](https://help.systeme.io/article/274-how-to-cancel-a-students-access-to-a-course) · [Systeme.io Help: how to use the MCP server](https://help.systeme.io/article/9489-how-to-use-systeme-ios-mcp)

REST

## Call refund\_transaction from a script

curl

```
curl https://cotlet.dev/api/v1/systeme-io/refund_transaction \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"transaction_id":"tr_20931"}'
```

Example response

```
{
"transaction_id": "tr_20931",
"status": "refunded",
"refunded_amount": 97,
"currency": "EUR"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is systeme-io\_refund\_transaction. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/systeme-io-api-mcp-server#automations)

Tools

## Systeme.io tools this automation uses

__Cotlet Systeme.io tools used to refund a Systeme.io customer and send the refund invoice__
| Tool | Parameters |
| ------------------- | ---------------------------------------------------------------------------------------- |
| list\_transactions | customer\_email, offer, type, from, to, customer\_country, customer\_type, limit, cursor |
| get\_transaction | transaction\_id |
| refund\_transaction | transaction\_id |
| send\_invoice | transaction\_id |

[All 13 Systeme.io tools with descriptions](https://cotlet.dev/integrations/systeme-io-api-mcp-server#tools)

## Frequently asked questions

### Can Systeme.io remove course access after a refund on its own?

Systeme.io automation rules offer a Sale canceled trigger and a Revoke access to course action. The refund help article does not say whether a dashboard refund fires Sale canceled, so test the rule on one sale before relying on it.

## More Systeme.io automations

- [Get a Systeme.io sales report by country and customer type](https://cotlet.dev/integrations/systeme-io-api-mcp-server/sales-report-by-country)
- [Update text across Systeme.io funnel pages with AI](https://cotlet.dev/integrations/systeme-io-api-mcp-server/update-funnel-page-text)
- [Publish Systeme.io blog posts from Markdown](https://cotlet.dev/integrations/systeme-io-api-mcp-server/publish-blog-posts-from-markdown)
- [Systeme.io API and MCP server: every tool](https://cotlet.dev/integrations/systeme-io-api-mcp-server)
- [All use cases](https://cotlet.dev/use-cases)

## Give your agent access to Systeme.io.

Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with Systeme.io.

[Request access](https://cotlet.dev/app/signup?app=systeme-io)
