> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# target

> The member's own RPC target triple.

```ts
get target(): MemberTarget
```

The member's own `{ member_id, call_id, node_id }` triple, used as the target of every member RPC issued against this participant.

The backend locates the member's session by the target's `call_id`/`node_id`, so this must always be the participant's own call context — never the local call's ID.

Reading it doubles as a readiness probe: it throws until the member's first full state event (`member.joined`, `member.updated`, or the `call.joined` roster) arrives, and never regresses afterwards. A participant first seen through a partial event such as `member.talking` has no call context yet.

## **Throws**

[`ParticipantNotReadyError`](/docs/browser-sdk/v4/reference/errors/participant-not-ready-error) — the member state has not been received yet. An empty call context can never address the member, so the SDK fails fast instead of sending a doomed RPC.

## **Examples**

```ts
const { call_id, member_id } = participant.target;
```

Guarding a control before the roster has settled:

```ts
import { ParticipantNotReadyError } from '@signalwire/js';

function canControl(participant) {
  try {
    participant.target;
    return true;
  } catch (error) {
    if (error instanceof ParticipantNotReadyError) return false;
    throw error;
  }
}
```

## **See**

* [`callId`](/docs/browser-sdk/v4/reference/participant/call-id) and [`nodeId`](/docs/browser-sdk/v4/reference/participant/node-id\$#nodeid) — the two values this triple is built from.
* [`setLayout`](/docs/browser-sdk/v4/reference/webrtc-call/set-layout) — validates the target of every member it repositions before sending anything.