Chargeback feedback upload
Send approved historical chargeback outcomes to an anti-fraud provider by email or provisioned SFTP, with a safe schema and verification workflow.
On this page
Send historical chargeback outcomes through DEUNA so the configured anti-fraud provider can learn from confirmed results. This is a model-feedback workflow; it does not create a processor dispute, submit evidence, or manage an active chargeback case. Use Dispute Management for active disputes.
Feedback lifecycle#
Before you start#
Confirm all of the following with your TAM:
- the anti-fraud connection that will consume the feedback;
- whether email, SFTP, or both are enabled;
- the environments and transaction types accepted by each channel;
- the provisioned SFTP hostname, port, username, server-host-key fingerprint, and merchant directories;
- whether a result file is generated and how long processing normally takes for your account;
- the approved encryption, retention, and escalation requirements.
You also need the DEUNA transaction ID for every record. Do not substitute an order token, processor transaction ID, or merchant chargeback ID.
Record schema#
| Field | Required | Format | Meaning |
|---|---|---|---|
transaction_id | Yes | Existing DEUNA transaction ID | Correlates the outcome to the payment evaluated through DEUNA |
chargeback_date | Yes | ISO 8601 timestamp | Time the chargeback was first reported; send an explicit offset or Z |
external_id | No | Alphanumeric, up to 50 characters | Merchant-side record reference |
chargeback_identifier | No | Alphanumeric, up to 50 characters | Identifier from the gateway or acquirer notice |
chargeback_status | No | open, won, or lost | Current chargeback state agreed for feedback |
chargeback_reason_code | No | Alphanumeric, up to 20 characters | Reason code reported by the processor or acquirer |
chargeback_case_id | No | Alphanumeric, up to 50 characters | Issuer or gateway dispute identifier |
merchant_chargeback_id | No | Alphanumeric, up to 50 characters | Merchant-side chargeback identifier |
chargeback_amount | No | Integer, up to 10 digits | Disputed amount in the payment currency's minor units |
detail | No | String, up to 2,500 characters | Relevant context approved for the feedback process |
Option A: approved email delivery#
Use this option only when DEUNA has approved an email workflow for the target environment.
- Export a CSV with the field names in the schema table.
- Name it with your assigned merchant identifier and the agreed date convention. Use placeholders while building automation, for example
YOUR_MERCHANT_ID-DDMMYY.csv. - Validate every required value and ensure the CSV is encoded consistently.
- Send it only to the recipient confirmed for your account through an approved business mailbox.
- Retain the delivery and reconciliation evidence required by your policy.
transaction_id,external_id,chargeback_identifier,chargeback_status,chargeback_reason_code,chargeback_case_id,merchant_chargeback_id,chargeback_amount,detail,chargeback_date
DEUNA_TRANSACTION_ID,MERCHANT_RECORD_ID,ACQUIRER_REFERENCE,open,REASON_CODE,PROVIDER_CASE_ID,MERCHANT_CASE_ID,2000,Confirmed fraud outcome,2026-10-30T11:20:00ZDEUNA_TRANSACTION_ID is an explicit placeholder. Replace it with a real transaction ID from your protected export process; do not copy example identifiers into production.
Option B: provisioned SFTP delivery#
Use SFTP only after DEUNA has created the account and supplied the expected connection values through an approved channel.
1. Create a dedicated SSH key
Generate a modern key pair on the trusted machine or workload that performs the upload:
ssh-keygen -t ed25519 -a 100 -f ./deuna_chargeback_uploadProtect the private key with the controls required for that workload. Share only deuna_chargeback_upload.pub through the approved onboarding channel. Never paste the private key into a ticket, chat, documentation, repository, or client application.
2. Verify the provisioned server
Before the first connection, compare the server-host-key fingerprint with the value supplied out of band by DEUNA. Do not accept an unexpected key just to continue.
sftp -i ./deuna_chargeback_upload YOUR_SFTP_USER@YOUR_SFTP_HOSTYOUR_SFTP_USER and YOUR_SFTP_HOST are placeholders. Use the values issued for the intended environment; sandbox and production can have different accounts and host keys.
3. Create the JSON batch
The JSON body contains the schema version and a records array:
{
"version": "1.0",
"records": [
{
"transaction_id": "DEUNA_TRANSACTION_ID",
"external_id": "MERCHANT_RECORD_ID",
"chargeback_identifier": "ACQUIRER_REFERENCE",
"chargeback_status": "open",
"chargeback_reason_code": "REASON_CODE",
"chargeback_case_id": "PROVIDER_CASE_ID",
"merchant_chargeback_id": "MERCHANT_CASE_ID",
"chargeback_amount": 2000,
"detail": "Confirmed fraud outcome",
"chargeback_date": "2026-10-30T11:20:00Z"
}
]
}Use a unique YYYYMMDD_HHMMSS.json filename unless your provisioned contract specifies a different convention. Generate the filename in UTC to make batch correlation unambiguous.
4. Upload to the assigned inbound directory
After connecting, change to the exact directory issued for the environment and upload the file:
sftp> cd YOUR_ASSIGNED_INBOUND_DIRECTORY
sftp> put 20261030_112000.json
sftp> ls
sftp> byeDo not construct a directory from a merchant ID unless the provisioned instructions explicitly require it. A successful put confirms transfer, not record acceptance.
5. Reconcile the result
If your account produces result files, retrieve the file from the assigned outbound directory and match it to the input batch. The filename and response schema can vary by provisioned contract; use the values supplied during onboarding.
sftp> cd YOUR_ASSIGNED_OUTBOUND_DIRECTORY
sftp> ls
sftp> get YOUR_RESULT_FILE.json
sftp> byeClassify every record as accepted, rejected, or still unresolved. Correct rejected records before resubmission and avoid replaying accepted outcomes unless DEUNA support instructs you to do so.
Validation and idempotency#
Validate a batch before transfer:
versionis the supported value1.0for JSON uploads;recordsis a non-empty array;- every
transaction_idbelongs to the intended merchant and environment; - every
chargeback_dateis a valid ISO 8601 timestamp with a timezone; - every amount is an integer in minor units and uses the original payment currency;
- enum values and maximum lengths match the schema;
- the file name is unique and does not overwrite a prior batch;
- the file contains no columns or attributes outside the approved contract.
Keep a merchant-side batch record containing the file checksum, creation time, environment, transfer time, and per-record outcome. This evidence lets you retry rejected data without blindly resending the whole batch.
Troubleshooting#
| Symptom | Check | Safe next action |
|---|---|---|
| Host key changed | Compare the presented fingerprint with the approved fingerprint | Stop the connection and contact DEUNA; do not bypass verification |
| Permission denied | Username, key path, key registration, private-key permissions, and IP allowlist | Correct the local configuration or ask support to verify provisioning |
| Upload directory rejected | Environment and exact assigned inbound path | Do not guess another merchant directory; confirm the provisioned path |
| File already exists | Filename uniqueness and whether the prior upload completed | Reconcile the original batch before creating a new uniquely named file |
| Result file absent | Whether results are enabled, the assigned outbound path, and the account-specific processing window | Keep the batch unresolved and escalate after the agreed window |
| Record rejected | Required fields, transaction ownership, formats, enums, and field lengths | Correct only rejected records and preserve their correlation to the original batch |
| Connection drops | Network path, allowlist, keepalive policy, and partial-transfer state | Reconnect, inspect the remote directory, and avoid duplicate uploads |
When escalating, include the merchant ID, environment, filename, checksum, transfer timestamp, and sanitized error text. Never attach a private key, provider secret, raw card data, or an unredacted customer export.
Go-live checklist#
- DEUNA confirms the target provider, environment, transfer channel, and account permissions.
- Security verifies key custody, host-key validation, allowlisting, encryption, access, and retention.
- A sandbox batch proves accepted and rejected record handling.
- Operations can correlate every input record with its processing outcome.
- Monitoring alerts on missing transfers, rejected records, and unresolved batches.
- The production runbook names the owner and approved escalation channel.