> For the complete documentation index, see [llms.txt](https://sdk.sageapp.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sdk.sageapp.xyz/post-1/like.md).

# Like

Liking a post will only succeed for a Sui address that has [an associated Sage user.](/user/create.md)

## Like a Sage post

```tsx
import { useSignAndExecuteTransaction } from '@mysten/dapp-kit';
import { usePost } from '@sage-app/sdk/react';

interface LikePostInput {
  amounts: number[];           // payment amounts set to [0, 0]
  postId: string;
  self: string;                // user's wallet address
  soulId: string;              // address of user's owned soul
}

...

const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction();
const { like } = usePost();

...

const likePost = async (data: LikePostInput) => {
  const { ok, err, transaction } = like(data);
    
  const { digest } = await signAndExecuteTransaction({
    transaction
  });
};
```

## Error Codes

**Authentication** module

<table><thead><tr><th width="104">Code</th><th width="221">Value</th><th>Meaning</th></tr></thead><tbody><tr><td>370</td><td>ENotAuthenticated</td><td>User soul object does not exist, is the wrong type, or not owned by the wallet.</td></tr></tbody></table>

**Post Fees** module

<table><thead><tr><th width="106">Code</th><th width="231.63067626953125">Value</th><th>Meaning</th></tr></thead><tbody><tr><td>370</td><td>EIncorrectCoinType</td><td>Custom payment type does not match configured custom payment coin.</td></tr><tr><td>371</td><td>EIncorrectCustomPayment</td><td>Incorrect custom payment value.</td></tr><tr><td>372</td><td>EIncorrectSuiPayment</td><td>Incorrect sui payment value.</td></tr></tbody></table>

## Querying for New Post Like Events

```typescript
import { EventId, SuiClient, getFullnodeUrl } from '@mysten/sui/client';
import { SageClient } from '@sage-app/sdk/client';

...

interface QueryInput {
  cursor?: EventId;
}

const appId = '<YOUR_APP_ID>';
const network = 'mainnet' | 'testnet';
const suiClient = new SuiClient({ url: getFullnodeUrl(network) });

const sageClient = new SageClient({ appId, network, suiClient });

...

const pollNewLikes = async ({ cursor }) => {
  const {
    eventCount,
    events,
    hasNextPage,
    nextCursor
  } = await sageClient.queryPostLikeEvents({ cursor }: QueryInput);
  
  // do something with events
  
  setTimeout(() => pollNewLikes({ cursor: nextCursor }), 5000);
};
```

In this case events will take the shape of an array of PostLikedEvents:

```typescript
interface PostLikeEvent {
  id: string;              // post object address
  updatedAt: string;
  user: string;            // user's wallet address
}  
```
