Skip to main content
After the supporter signs and submits the transaction produced by POST /payments/intent, call this endpoint to record the tip in Tip Stack. The tip is stored immediately with a pending status and transitions to confirmed once the transaction is verified on-chain. This endpoint is idempotent — submitting the same txSignature twice returns the existing record rather than creating a duplicate.

Request

POST https://tipstack.fun/api/solana/tips/create
creatorWallet
string
required
The creator’s Solana wallet address (base58). This must match the payoutAddress resolved during the payment intent creation.
tipAmount
number
required
The tip amount in the token’s raw base units (lamports for SOL, or the token’s smallest denomination for SPL tokens). For example, 100000000 represents 0.1 SOL.
senderWallet
string
required
The supporter’s wallet public key (base58). Used to associate the tip with an existing Tip Stack account, if one exists.
txSignature
string
required
The confirmed Solana transaction signature returned by connection.sendRawTransaction(). This is the primary identifier for the tip record and is used to prevent duplicate submissions.
message
string
An optional message from the supporter to the creator. Displayed in the creator’s dashboard and tip notification stream.
tokenSymbol
string
default:"SOL"
The symbol of the token sent (e.g. SOL, USDC, BONK). Defaults to SOL when omitted. Used to normalize the stored amount: SOL values are divided by 1e9 for display; all other tokens are stored as-is.

Response

success
boolean
true when the tip was recorded (or already existed).
tip
object
message
string
A human-readable status message, e.g. "Tip recorded successfully" or "Tip already recorded".

Example request

JSON
{
  "creatorWallet": "9xRT3m1KZJPHQQaFGpvDJckJcNhHMbDdBfHHVdFGQS7b",
  "tipAmount": 100000000,
  "senderWallet": "8xRT3m1KZJPHQQaFGpvDJckJcNhHMbDdBfHHVdFGQS7a",
  "txSignature": "5UfgJ9H7Kp2mRd8NqWx4vYzA1bEc3sFt6LiOoP7rTkVhXy8wMnCjDuZe0pQaBcI",
  "message": "Keep up the great work!",
  "tokenSymbol": "SOL"
}

Example response — new tip

JSON
{
  "success": true,
  "tip": {
    "id": "5UfgJ9H7Kp2mRd8NqWx4vYzA1bEc3sFt6LiOoP7rTkVhXy8wMnCjDuZe0pQaBcI",
    "recipientId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "amount": 100000000,
    "tokenSymbol": "SOL",
    "status": "pending"
  },
  "message": "Tip recorded successfully"
}

Example response — duplicate submission

JSON
{
  "success": true,
  "tip": {
    "id": "5UfgJ9H7Kp2mRd8NqWx4vYzA1bEc3sFt6LiOoP7rTkVhXy8wMnCjDuZe0pQaBcI",
    "status": "confirmed"
  },
  "message": "Tip already recorded"
}
Tips remain in pending status until verified on-chain. This typically takes a few seconds on Solana mainnet.
Always wait for a transaction to land on-chain before calling this endpoint. Submitting an unconfirmed or failed transaction signature will create a pending tip record that will never transition to confirmed.