---
title: "Check if a destination is tippable"
method: GET
path: "/v1/tip/resolve"
tags: ["tipping"]
---

# Check if a destination is tippable

`GET /v1/tip/resolve`

Resolve a destination (URL, handle, domain, or wallet address) and return any available tip addresses.

## Supported destinations
- **Grove handle**: `@olshansky` or `olshansky` (resolves via Grove account)
- **EVM address**: `0x...`
- **Solana address**: `9kuc...`
- **ENS / Basename**: `vitalik.eth`, `alice.base.eth`
- **Domain**: `example.com` (reads `llms.txt`)
- **Twitter/X**: `x.com/handle`, `x.com/handle/status/<id>`
- **Substack**: `substack.com/@handle`, `handle.substack.com`, post URLs
- **YouTube**: `youtube.com/@handle`, `youtube.com/handle`, `youtube.com/c/handle`, `youtube.com/channel/UCxxx`, `youtube.com/watch?v=ID`, `youtu.be/ID`

## Notes
- No authentication required (public discovery).
- This endpoint does **not** perform a transfer; it only discovers published receiver addresses.
- On resolution failure or unsupported adapters, the response is typically `200 OK` with `tippable=false` and `error` populated.

## Query parameters

- `destination` string, required — Destination identifier to resolve. Accepts handles, URLs, domains, ENS/Basenames, and direct wallet addresses.

## Response `200`

Successful Response

- ResolveResponse — Response for destination resolution check. Indicates whether a destination is tippable and lists discovered addresses. This endpoint aims to be **non-throwing** for common resolution failures: invalid/unsupported destinations typically return `tippable=false` with a human-readable `error`, rather than an HTTP error response.
  - `tippable` boolean, required — Whether this destination can receive tips.
  - `destination_kind` 'evm_address' | 'sol_address' | 'ens' | 'basename' | 'domain' | 'twitter' | 'reddit' | 'github' | 'tiktok' | 'substack' | 'youtube' | 'twitch' | 'bluesky' | 'grove_handle' | 'other_handle' — Type of destination that was resolved for tipping. This enum categorizes WHERE a tip is being sent: - Direct blockchain addresses (EVM, Solana) - Name services (ENS) - Website domains (via llms.txt) - Social platform profiles (Twitter, Reddit, etc.) Social platform values intentionally match SocialPlatform enum values to enable conversion via to_social_platform(). The key difference: - DestinationKind: What TYPE of destination (address, domain, social profile) - SocialPlatform: Which PLATFORM for context attribution (where tip originated) Inherits from str so values serialize naturally to JSON.
  - `addresses` ResolvedAddress[], required — Discovered addresses with chain/token context (may be empty when `tippable=false`).
    - `token` string, required — Token symbol (e.g., `USDC`, `ETH`, `SOL`).
    - `chain` string, required — Network identifier for this token/address pair (e.g., `base`, `base-sepolia`, `ethereum`, `solana-mainnet`).
    - `address` string, required — The resolved blockchain address.
    - `source` string, required — How the address was discovered (e.g., `direct`, `ens`, `bio`).
  - `error` string, nullable — Error message if resolution failed.
  - `cache_hint` 'definitive' | 'temporary' — Client-side caching hint for non-tippable resolution results. DEFINITIVE: Destination is known to be non-tippable (safe to cache long). TEMPORARY: Transient failure (e.g. network timeout) — client should retry soon.

## 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)
