Records one or more transactions against a creator group. The body accepts either a single transaction or an array of them. If the same transactionId appears more than once within one array, every one of those rows is still saved (this is how you split credit for a single purchase across multiple group members); it is only treated as a duplicate against transactions that already exist for your publisher account from an earlier call, which returns a bare 409 with only the default status text, no JSON payload.
Once a request passes validation, subtotal must be a whole number in the smallest denomination of currency (cents for USD), minimum 1. By default (when useLDCurrency is omitted or true), that validated value is also what you send: the request passes through unconverted. total defaults to subtotal when omitted, and totalCurrency defaults to currency when omitted. On creation, status is only honored if it is Normal or Test; any other value, including an omitted one, is stored as Normal.
A currency your creator group has disabled is rejected with 400. None of this operation’s 400 responses include a stable code field: an unresolvable groupId comes back as a bare, unstructured text body, and an unresolvable code/member comes back as a JSON object with only a message.
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. NOTE: The subtotal passed for a transaction will be in the smallest denomination of the currency.
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 ”Query Parameters
Section titled “Query Parameters”Example
V1StGXR8_Z5jdHi6B1LiOCreator group to attribute this transaction to. If your key is scoped to a single program, that group is always used regardless of this value; otherwise falls back to your default group when omitted.
Request Body
Section titled “Request Body”This route accepts a single transaction or an array of transactions.
object
Example
shadowstrike99Nexus-generated id for this attribution record, not your own transactionId.
Example
2ixlNNFdJh-9scoXek80wThe creator code this transaction should be attributed to. The member must have an approved membership in the target group.
Example
popcornfrogYour identifier for the creator this transaction was attributed to, from their group membership, not the purchasing player.
Example
player_8f2c41d0Example
1000 gemsInitial transaction status. Only Normal or Test is honored on creation; any other value (or omitting this) is stored as Normal.
Example
NormalPurchase 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.
Example
999Example
USDTotal charged, in the smallest denomination of totalCurrency. Defaults to subtotal if omitted.
Example
999Currency for total. Defaults to currency if omitted.
Example
USDYour 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.
Example
txn_8f2c41d0Example
2026-03-13T17:32:28ZExample
12345Example
shadowstrike99Metrics are optional but will allow Nexus to provide useful statistics about your program
object
The date that the player joined your game
Example
2026-03-13T17:32:28ZConversion 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
Example
2026-03-13T17:32:28ZThe platform where the last purchase was made
Example
Androidobject
Example
129.99Example
USDThe 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.
Example
1The 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
Example
10Example
falseYour internal ID for the item that was purchased
Example
Hv98bvRCSm1jDDPhls1qCobject
Example
shadowstrike99Nexus-generated id for this attribution record, not your own transactionId.
Example
2ixlNNFdJh-9scoXek80wThe creator code this transaction should be attributed to. The member must have an approved membership in the target group.
Example
popcornfrogYour identifier for the creator this transaction was attributed to, from their group membership, not the purchasing player.
Example
player_8f2c41d0Example
1000 gemsInitial transaction status. Only Normal or Test is honored on creation; any other value (or omitting this) is stored as Normal.
Example
NormalPurchase 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.
Example
999Example
USDTotal charged, in the smallest denomination of totalCurrency. Defaults to subtotal if omitted.
Example
999Currency for total. Defaults to currency if omitted.
Example
USDYour 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.
Example
txn_8f2c41d0Example
2026-03-13T17:32:28ZExample
12345Example
shadowstrike99Metrics are optional but will allow Nexus to provide useful statistics about your program
object
The date that the player joined your game
Example
2026-03-13T17:32:28ZConversion 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
Example
2026-03-13T17:32:28ZThe platform where the last purchase was made
Example
Androidobject
Example
129.99Example
USDThe 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.
Example
1The 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
Example
10Example
falseYour internal ID for the item that was purchased
Example
Hv98bvRCSm1jDDPhls1qCResponses
Section titled “ Responses ”Transaction created. Returns either a single transaction or an array if more than one was included in the request body.
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
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
Invalid input, object invalid, code not found in group members
A transaction with this transactionId already exists
const url = 'https://api.nexus.gg/v1/attributions/transactions?groupId=V1StGXR8_Z5jdHi6B1LiO';const options = { method: 'POST', headers: { 'X-SHARED-SECRET': 'nexus_sk_your_key_here', 'Content-Type': 'application/json' }, body: '{"playerName":"shadowstrike99","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","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"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url 'https://api.nexus.gg/v1/attributions/transactions?groupId=V1StGXR8_Z5jdHi6B1LiO' \ --header 'Content-Type: application/json' \ --header 'X-SHARED-SECRET: nexus_sk_your_key_here' \ --data '{ "playerName": "shadowstrike99", "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", "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" }'Example
{ "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" }}