***

title: echo
slug: /reference/typescript/relay/call/echo
description: Echo call audio back to the caller for testing.
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[calling-call-echo]: /docs/server-sdks/reference/typescript/relay/call#events

[call-events]: /docs/server-sdks/reference/typescript/relay/call#events

Echo audio back to the caller. This is primarily useful for testing audio
quality, latency, and connectivity. The caller hears their own voice repeated
back to them.

<Info>
  This method emits [`calling.call.echo`][calling-call-echo] events. See [Call Events][call-events] for payload details.
</Info>

## **Parameters**

<ParamField path="timeout" type="number | undefined" toc={true}>
  Maximum duration of the echo in seconds. The echo stops automatically after
  this timeout.
</ParamField>

<ParamField path="statusUrl" type="string | undefined" toc={true}>
  URL to receive echo status webhooks.
</ParamField>

## **Returns**

`Promise<Record<string, unknown>>` -- Server response confirming the echo operation.

## **Example**

```typescript {13}
import { RelayClient } from '@signalwire/sdk';

const client = new RelayClient({
  project: process.env.SIGNALWIRE_PROJECT_ID!,
  token: process.env.SIGNALWIRE_TOKEN!,
  contexts: ['default']
});

client.onCall(async (call) => {
  await call.answer();
  await call.play([{ type: 'tts', text: 'Starting echo test. You should hear yourself.' }]);

  const result = await call.echo({ timeout: 30 });
  console.log(`Echo completed: ${JSON.stringify(result)}`);

  await call.play([{ type: 'tts', text: 'Echo test complete.' }]);
  await call.hangup();
});

await client.run();
```