---
title: "Send a tip via URL path (REST-style)"
method: POST
path: "/v1/tip/{destination}/{amount}"
tags: ["tipping"]
---

# Send a tip via URL path (REST-style)

`POST /v1/tip/{destination}/{amount}`

Send a tip using URL path parameters for destination and amount, with optional social graph context via query parameters.

## Social Graph Context (Query Parameters)

Add attribution metadata via query params:
- `source_post_url` - URL where tip was triggered
- `sender_username` - Tipper's username
- `sender_profile_url` - Tipper's profile URL
- `sender_platform` - Platform enum (`x`, `discord`, etc.)
- `recipient_username` - Recipient's username
- `campaign` - Campaign identifier
- `referrer` - Referrer identifier
- `custom_metadata` - Free-form string (max 250 chars)

For complex context, consider using the JSON body endpoint (`POST /v1/tip`) instead.

## Path parameters

- `destination` string, required — Who to tip. Accepts multiple formats: - **Grove handle**: `@olshansky` or `olshansky` (resolves via Grove account) - **EVM address**: `0x9ab39B84aC4DE6D705C5f051c07db8fE72890953` - **Solana address**: `9kucRUCUiYwJLDBBi5GXb4KeqgiRZ6uJeMdLwAuV6pUC` - **ENS name**: `vitalik.eth` (resolved via Ethereum mainnet) - **Domain**: `olshansky.info` (looks up address from llms.txt) - **Twitter/X**: `x.com/olshansky` (looks up address from bio) Note: Uses `:path` converter to support slashes in Twitter URLs.
- `amount` string, required — Amount to tip. Supports multiple formats: - **Plain number**: `0.01` (uses token from query or DEFAULT_TOKEN) - **With currency suffix**: `100USDC`, `0.5ETH` - **Dollar prefix**: `$1` (interpreted as 1 USDC)

## Query parameters

- `network` string, nullable — Target blockchain network. Examples: `base`, `base-sepolia`, `solana-devnet`. Defaults to DEFAULT_NETWORK (base) if not specified.
- `token` string, nullable — Token symbol to send. Examples: `USDC`, `ETH`. Defaults to DEFAULT_TOKEN (USDC) if not specified. **Conflict detection**: If the amount path includes a token (e.g., `100USDC`) and this query param specifies a *different* token (e.g., `?token=ETH`), the request fails with HTTP 400.
- `source_post_url` string, nullable — URL of the post/tweet where this tip was triggered.
- `sender_username` string, nullable — Sender's username on the social platform.
- `sender_profile_url` string, nullable — URL to the sender's profile.
- `sender_platform` 'x' | 'twitter' | 'reddit' | 'github' | 'tiktok' | 'discord' | 'telegram' | 'farcaster' | 'lens' | 'substack' | 'youtube' | 'website' | 'instagram' | 'linkedin' | 'medium' | 'soundcloud' | 'twitch' | 'bluesky' | 'facebook' | 'spotify' | 'pinterest' | 'patreon' | 'grove' | 'other' | 'custom' — Social platforms for context attribution in tips. This enum defines WHERE a tip originated from (the sender's platform context), not where the tip is going. For destination types, see DestinationKind. Used in TipContext to track: - sender_platform: Which platform the tipper used (Twitter bot, Discord bot, etc.) - Attribution/analytics for understanding tip sources Note: "x" is the canonical name for Twitter/X. Both "x" and "twitter" are accepted on input, but "x" is used for storage and output. Use normalize_platform() to convert "twitter" → "x". Inherits from str so values serialize naturally to JSON.
- `recipient_username` string, nullable — Recipient's username on the social platform.
- `recipient_profile_url` string, nullable — URL to the recipient's profile.
- `campaign` string, nullable — Campaign or initiative identifier.
- `referrer` string, nullable — Referrer or source identifier.
- `custom_metadata` string, nullable — Custom metadata string (max 250 characters).

## Headers

- `authorization` string, nullable — Bearer JWT that identifies the sending account. - **Required** for all tipping calls - Format: `Bearer <jwt_token>` - Obtain JWT from `/v1/fund` after funding your account

## Response `200`

Successful Response

- TipResponse — Response model for successful tip
  - `tip_id` string, required
  - `status` string, required
  - `destination` string, required
  - `from_address` string, required
  - `receiver_address` string, required
  - `amount_sent` string, required
  - `amount_received` string, required
  - `fee_amount` string, required
  - `tx_hash` string, required
  - `new_balance` string, required
  - `network` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/grove/apis/grove-api.md) · [All operations](https://skmtc.net/grove/apis/grove-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/grove/grove-api/revisions/f286b48a8105/schema)
