# get_custom_event_receipt

Read an exact owned app/event receipt without exposing properties or proving message delivery.

## Purpose

Read one stored custom-event receipt by its exact owned app ID and external event ID. Use this after an authorized release to inspect a naturally occurring milestone.

## Credentials and scope

Owner workspace credential. App-bound affiliate credentials cannot access this tool. The lookup includes workspace, app and event ID; it cannot return another app's receipt using the same event ID.

## Inputs

- `appId`: required owned HeyCrust app UUID from `list_apps`.
- `eventId`: required 1–128-character external event ID persisted by your sender, case-sensitive. This is different from the numeric stored ID returned by `/api/events`.

## Example request

These identifiers are fictional; replace them with an owned app and an existing natural event.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_custom_event_receipt",
    "arguments": {
      "appId": "11111111-1111-4111-8111-111111111111",
      "eventId": "opaque-lifecycle-save-id"
    }
  }
}
```

POST to `https://heycrust.com/api/mcp` with `Content-Type: application/json` and `Authorization: Bearer <YOUR_CREDENTIAL>`. Inspect JSON-RPC errors and `result.isError`, then parse the JSON text in `result.content`.

## Result

`found: true` returns the stored numeric ID as a string, app ID, external event ID, shop domain, normalized name, source, scope, occurrence time and original `receivedAt`. Properties and payload hashes are omitted. A retry does not change the original receipt time. `found: false` returns `receipt: null`; an unowned app returns an error.

## Effects and verification

Reads only. It proves an event row exists for that app/event ID at inspection time. It does not prove milestone truth, Shopify state, a Flow run or message delivery. Transport `source: api` can still carry browser-derived evidence; retain and inspect provenance in your app's original allowlisted payload. `list_events` reports Shopify lifecycle history and cannot substitute for this lookup.

## Troubleshooting

Missing receipts remain unknown: an event may never have been sent, may have failed, or may have been redacted. Events without external IDs and legacy unscoped events cannot be inspected by this tool. See [backend events](/docs/developers/backend-events) for retention and acknowledgement rules. Do not resend or create a synthetic event merely to make the lookup succeed.
