> For the complete documentation index, see [llms.txt](https://run.emailchaser.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://run.emailchaser.com/api-reference/setup.md).

# Setup

## Confirm your AI assistant is connected

> Called by the customer's AI assistant as its first request, to confirm the API key works. Records which assistant connected and when on the key itself, and completes the "Set up with AI" onboarding task for the key's workspace. Idempotent: repeat pings simply refresh the recorded assistant and timestamp. The optional agent field is the assistant's name in any form; it is normalized to a short lowercase identifier (e.g. chatgpt, claude, grok, gemini, copilot) and echoed back.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.SetupPingResponse":{"type":"object","properties":{"agent":{"type":"string"},"ok":{"type":"boolean"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.SetupPingRequest":{"type":"object","properties":{"agent":{"description":"Agent is the assistant's self-reported name, in any form; the backend\nnormalizes it to a short lowercase identifier.","type":"string"}}}}},"paths":{"/setup/ping":{"post":{"description":"Called by the customer's AI assistant as its first request, to confirm the API key works. Records which assistant connected and when on the key itself, and completes the \"Set up with AI\" onboarding task for the key's workspace. Idempotent: repeat pings simply refresh the recorded assistant and timestamp. The optional agent field is the assistant's name in any form; it is normalized to a short lowercase identifier (e.g. chatgpt, claude, grok, gemini, copilot) and echoed back.","tags":["Setup"],"summary":"Confirm your AI assistant is connected","parameters":[{"schema":{"type":"string"},"description":"Bearer <API_KEY>","name":"Authorization","in":"header","required":true}],"responses":{"200":{"description":"Connection confirmed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.SetupPingResponse"}}}},"400":{"description":"Malformed request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"500":{"description":"Failed to record ping","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.SetupPingRequest"}}},"description":"Optional assistant name"}}}}}
```
