> ## Documentation Index
> Fetch the complete documentation index at: https://docs.operata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send your first observation

> Stream a real Amazon Connect contact into Operata and confirm it appears in the Contact summary list and over the API.

Stream a real Amazon Connect contact into Operata and confirm it's visible in both the Contact summary list and the API response.

## Before you start

* An [Operata account](https://app.operata.io). Your Operata Group ID is the UUID in the console URL.
* An API token generated under **Settings → Config → API**. See [Authentication](/docs/api-authentication).
* An Amazon Connect instance you can place a test call into, with the [Cloud Collector CloudFormation stack](/docs/ctr-installation) deployed against it.
* A working softphone — Amazon Connect CCP or the [Agent Experience Collector](/docs/collector-overview) in Chrome or Edge.

## Steps

### 1. Confirm your credentials work

Send the same call as the [Quickstart](/docs/quickstart) — one contact from yesterday's window, page size 1.

```bash theme={null}
curl -u "$OPERATA_GROUP_ID:$OPERATA_API_TOKEN" \
  "https://api.operata.io/v1/data/calls?fromTime=2026-05-17T00:00:00Z&toTime=2026-05-18T00:00:00Z&size=1"
```

A `200 OK` with a `data` array — empty or otherwise — confirms the Group ID and token authenticate. A `401` means the token is wrong or revoked; regenerate it and retry.

### 2. Place a test contact

Sign in to the agent's CCP, set status to `Available`, and place an inbound call into your Amazon Connect instance. Stay on the call for at least 30 seconds, then hang up. The 30-second floor gives the Cloud Collector enough audio to compute meaningful network and MOS metrics.

Note the contact ID shown in the CCP — you use it to verify in step 4.

### 3. Wait for the observation to land

The Cloud Collector picks up the Contact Trace Record (CTR) from Kinesis within seconds of contact end, applies the active redaction config, and ships the surviving fields to Operata. Allow up to 60 seconds for the observation to appear.

```bash theme={null}
# Replace with the contact ID from the CCP.
curl -u "$OPERATA_GROUP_ID:$OPERATA_API_TOKEN" \
  "https://api.operata.io/v1/data/calls?fromTime=2026-05-18T00:00:00Z&toTime=2026-05-18T23:59:59Z&contactId=ctr_0HXYZ123456789ABCDE"
```

If the response is an empty `data` array, wait 30 seconds and retry. A populated row means the Cloud Collector filtered the CTR, the EventBridge pipe delivered it, and Operata stored it as an observation against the contact.

### 4. Open the contact in the console

In the Operata console, open **Contacts** and filter the time window to the last 10 minutes. The test contact appears as a row carrying the same contact ID you noted in step 2, an agent name, a queue, and headline metrics — MOS, jitter, round-trip time, packets lost.

## Verify

The API call in step 3 returns `200 OK` with one `data` entry whose `id` matches the contact ID from the CCP, and the same row is visible in the Contact summary list in the console. The API response and the console agree on agent, queue, and duration.

## Related

* [Contacts and interactions](/docs/concepts-contacts-and-interactions) — the model behind the row you just saw.
* [Signals and observations](/docs/concepts-signals-and-observations) — what a signal is, what an observation is, and how they relate to a contact.
* [List contact summaries](/docs/api-contact-summary) — every parameter the endpoint accepts.
* [Configure CTR redaction](/docs/guides-configure-ctr-redaction) — strip fields from the CTR before the next contact ships.
