Applies action and/or a replacement playerId to every attribution row that shares the given transactionId for your publisher account, using the same lookup as getAttribution.
Rows are checked and saved one at a time. If a row’s linked payment transaction has already been paid out (it has a Trolley payment or batch id), processing stops at that row and the request returns 409 without applying that row’s update. A 409 can come back after earlier rows in the same set have already been updated, so treat the set as partially applied and re-read it before retrying.
For Chargeback, Fraud, or Refund, a refund record is appended to the payment transaction; Fraud additionally flags that transaction as fraud. The request body only accepts action and playerId; any other property is rejected.
If nothing matches the transactionId, this returns 404.
NOTE: This method uses secret (nexus_sk_...) API keys and should never be called from or embedded into the gaming client. These routes should ONLY be accessed from your back-end services.
Authorizations
Section titled “Authorizations”Send your secret API key (nexus_sk_...) in the X-SHARED-SECRET header. Generate one in the Publisher Dashboard.
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Example
txn_8f2c41d0Your own transactionId, exactly as sent when the transaction was created.
Query Parameters
Section titled “Query Parameters”Creator group.
Request Body
Section titled “Request Body”object
New transaction status. Chargeback, Fraud, and Refund also append a refund record to the underlying payment transaction; Fraud additionally flags it as fraud.
Example
RefundOverwrites the transaction’s playerId directly. Not validated against any existing player record.
Example
player_8f2c41d0Responses
Section titled “ Responses ”Returns the transactions that were updated
object
object
Nexus-generated id for this attribution record, not your own transactionId.
The creator code this transaction should be attributed to. The member must have an approved membership in the target group.
Your identifier for the creator this transaction was attributed to, from their group membership, not the purchasing player.
Initial transaction status. Only Normal or Test is honored on creation; any other value (or omitting this) is stored as Normal.
Purchase subtotal, in the smallest denomination of currency (e.g. cents for USD). Must be a whole number of at least 1, once validated; by default that is also what you send.
Total charged, in the smallest denomination of totalCurrency. Defaults to subtotal if omitted.
Currency for total. Defaults to currency if omitted.
Your own idempotency key for this purchase. Reusing one already saved for your publisher account returns a bare 409 with only the default status text, no JSON payload. Reusing one within the same request array is allowed and is how you split one purchase’s credit across multiple members.
Metrics are optional but will allow Nexus to provide useful statistics about your program
object
The date that the player joined your game
Conversion metrics are used for calculationg the conversion rate of your customers. Only one of lastPurchaseDate or totalSpendToDate are required. lastPurchaseDate is preferred, but totalSpendToDate can be used if not available
object
object
The platform where the last purchase was made
object
The amount that the member received for this transaction. This will not be specified upon initial transaction creation, as the calculation happens in a separate process.
The percent of the subtotal for this transaction that the member received. if a memberSharePercent is provided upon transaction creation, it will always be used. Otherwise, the percent a member receives will be influenced by factors such as the default group setting, member tier, scheduled revenue shares, spcific skus
Your internal ID for the item that was purchased
Bad input parameter
const url = 'https://api.nexus.gg/v1/attributions/transactions/txn_8f2c41d0';const options = { method: 'PATCH', headers: { 'X-SHARED-SECRET': 'nexus_sk_your_key_here', 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({action: 'Refund', playerId: 'player_8f2c41d0'})};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.nexus.gg/v1/attributions/transactions/txn_8f2c41d0 \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'X-SHARED-SECRET: nexus_sk_your_key_here' \ --data action=Refund \ --data playerId=player_8f2c41d0Example
[ { "transaction": { "id": "2ixlNNFdJh-9scoXek80w", "code": "popcornfrog", "memberPlayerId": "player_8f2c41d0", "description": "1000 gems", "status": "Normal", "subtotal": 999, "currency": "AED", "total": 999, "totalCurrency": "AED", "transactionId": "txn_8f2c41d0", "transactionDate": "2026-03-13T17:32:28Z", "platform": "PC", "playerId": "12345", "playerName": "shadowstrike99", "metrics": { "joinDate": "2026-03-13T17:32:28Z", "conversion": { "lastPurchase": { "date": "2026-03-13T17:32:28Z", "platform": "Android" }, "totalSpendToDate": { "total": 129.99, "currency": "AED" } } }, "memberShareAmount": 1, "memberSharePercent": 10, "memberPaid": false, "skuId": "Hv98bvRCSm1jDDPhls1qC" } }]