Skip to content


Frames can receive interactions from apps outside of Farcaster, such as from XMTP conversations. When receiving these interactions you can expect a slightly different response format, since fields like fid or castId are not available.

You can also use getXmtpFrameMessage to access useful information such as:

  • buttonIndex: number
  • verifiedWalletAddress: string
  • opaqueConversationIdentifier: string

Note that if the message is not valid, it will be undefined.

import { isXmtpFrameRequest, getXmtpFrameMessage } from '@coinbase/onchainkit/xmtp'; 
import { NextResponse } from 'next/server';
import type { FrameRequest } from '@coinbase/onchainkit/frame';
async function getResponse(req: any): Promise<NextResponse> {
  const body: FrameRequest = await req.json();
  if (isXmtpFrameRequest(body)) {
    const { isValid, message } = await getXmtpFrameMessage(body); 
    // ... do something with the message if isValid is true
    if (isValid) {
      const { verifiedWalletAddress } = message;
      // ... do something with the verifiedWalletAddress
  } else {
    // ...