# GET /api/twilio/email-log/by-correlation/{correlationId}

Gets the full event history for a single outbound message by its correlation id.

One outbound email produces several rows over its lifecycle (e.g. gateway-sent, then the
SendGrid delivery/open/bounce events), all sharing one correlation id. This returns every
such row ordered by timestamp ascending, giving the chronological delivery trail for that
message. The tenant and merchant ids must match the message's owning scope.

**Operation ID:** `GET_api_twilio_email-log_by-correlation_correlationId`

## Authorization

Requires: Twilio.EmailLog.View, merchant scope.

Required permissions:
- `Twilio.EmailLog.View`

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| correlationId | path | yes | string(uuid) | Correlation id that ties together all events for one outbound message. |
| tenantId | query | no | string(uuid) | Tenant id that scopes the lookup. |
| merchantId | query | no | string(uuid) | Merchant id that scopes the lookup. |
| suppressNulls | query | no | boolean | If true, omit properties with null values. |

## Responses

### 200

OK

**Content type:** `text/plain`

Schema type: `array<PhoeniXGateTwilioEmailLogEmailLogDto>`

**Content type:** `application/json`

Schema type: `array<PhoeniXGateTwilioEmailLogEmailLogDto>`

**Content type:** `text/json`

Schema type: `array<PhoeniXGateTwilioEmailLogEmailLogDto>`

### 403

Forbidden

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 401

Unauthorized

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 400

Bad Request

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 404

Not Found

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 501

Not Implemented

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 500

Internal Server Error

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### default

The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

## See also

- [All documentation](https://docs.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
