canonical: https://jentic.com/apis/myla.cx/myla

# Myla Cx Myla Developer API

The Myla Developer API reads and updates the contacts and conversations in a Myla brand workspace and registers webhooks for conversation events. Contacts can be listed and filtered by email or phone, upserted by phone or email, patched with a lifecycle stage and custom fields, and tagged. Conversations come back with their channel, status, priority, and full message history. Webhook subscriptions fire HMAC-signed deliveries when a message is received or a conversation opens or closes.

## For AI agents

Upsert, update, and tag Myla contacts, read conversations with their messages, and subscribe to message and conversation events in one brand workspace.

## Scope

Does not send outbound messages, reply to conversations, or manage tags and lifecycle stage definitions. Use for Myla contact records, conversation reads, and event webhooks only.

## Capabilities

- Upsert a contact by phone or email so an existing match is updated instead of duplicated
- Update a contact's name, lifecycleStageId, and customFields values
- Add tags to a contact by passing tagIds
- Look up contacts by email or phone and page through the full contact list
- Read a conversation with its channel, status, priority, awaitingReply flag, and messages
- Subscribe a target URL to message.received, conversation.opened, or conversation.closed events, and unsubscribe later

## Use cases

### Agent-maintained contact records through Jentic

A developer's agent connected through Jentic keeps Myla contacts in sync with another system. It upserts each contact by email or phone, so a match is updated rather than duplicated, sets the lifecycleStageId as the customer moves on, and fills customFields with fieldId and value pairs. The workspace stays current without manual imports.

Example prompt: Call POST `/api/v1/contacts` with email='jo@example.com', name='Jo Park', and lifecycleStageId='stage_123', then POST `/api/v1/contacts/{id}/tags` with tagIds set to the VIP tag id using the returned id

### Conversation summaries for follow-up

A support lead wants a daily digest of open threads. An agent lists conversations, fetches each one with its messages, and checks status and awaitingReply to pick out threads still waiting on the team. It returns a short summary per thread with the customer name and channel.

Example prompt: Call GET `/api/v1/conversations` with limit=25, then GET `/api/v1/conversations/{id}` for each one and report the threads where awaitingReply is true

### Real-time event triggers

When a downstream workflow needs to react to customer messages, a webhook subscription posts to a public HTTPS target URL each time message.received, conversation.opened, or conversation.closed fires. Deliveries are HMAC-signed, so the receiver can check they came from Myla. The same mechanism backs Myla's Zapier REST Hook triggers.

Example prompt: Call POST `/api/v1/webhooks` with event='conversation.closed' and targetUrl='https://hooks.example.com/myla', and store the returned id so DELETE `/api/v1/webhooks/{id}` can remove it later

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/api/v1/contacts` | Create or update a contact |
| GET | `/api/v1/contacts` | List contacts, filterable by email or phone |
| PATCH | `/api/v1/contacts/{id}` | Update a contact |
| POST | `/api/v1/contacts/{id}/tags` | Add tags to a contact |
| GET | `/api/v1/conversations/{id}` | Get a conversation with messages |
| POST | `/api/v1/webhooks` | Subscribe to an event |
| GET | `/api/v1/me` | Verify credentials |

## Key resources

- **Contacts** — Customer contacts with phone, email, lifecycle stage, custom fields, and tags
- **Conversations** — Customer conversations with channel, status, priority, and messages
- **Webhooks** — Event subscriptions for received messages and opened or closed conversations

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 40 / 100
- **Maturity:** Foundational
- **Dimensions:**
  - Foundational Compliance: 70 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 17 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 71 / 100
- **View full report:** https://jentic.com/apis/myla.cx/myla/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring Myla by hand means creating a brand-scoped key in the dashboard, sending it as a bearer token, unwrapping the data envelope on every response, and backing off on 429s. Through Jentic you install once, import Myla from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Myla puts contact and conversation ids in the URL path, as in `/api/v1/contacts/{id}` and `/api/v1/conversations/{id}`, so a rule can hold your agent to the operations it needs and to specific records. You choose the operations it may call, so webhook registration or deletion is not included unless you add it.
- **Credential handling:** Your Myla API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'upsert a contact' or 'read a conversation', and Jentic returns the matching Myla operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Intercom API** — Customer messaging with contacts, conversations, and help center content
- **Front Core API** — Shared inbox for email, SMS, and chat with contacts and conversation routing
- **Zendesk API** — Help desk ticketing with users, organizations, and ticket workflows

## FAQ

### What authentication does the Myla Developer API use?

Per its OpenAPI spec, the Myla Developer API uses a bearer token: a brand-scoped API key sent as Authorization: Bearer. You create the key in the Myla dashboard under Settings, Integrations, Developer API, and each key works for a single brand workspace. GET `/api/v1/me` confirms a key is valid. Through Jentic, the key is stored once by your own Jentic One instance and injected at call time.

### Does creating a contact in Myla create duplicates?

No. POST `/api/v1/contacts` upserts by phone or email, and at least one of the two is required. If an existing contact matches, it is updated; otherwise a new one is created. Use PATCH `/api/v1/contacts/{id}` when you already have the contact id.

### Which webhook events does the Myla Developer API support?

POST `/api/v1/webhooks` takes an event and a targetUrl. The event enum is message.received, conversation.opened, and conversation.closed, and the target must be a public HTTPS URL. Deliveries are HMAC-signed. Remove a subscription with DELETE `/api/v1/webhooks/{id}.`

### What are the rate limits for the Myla Developer API?

The spec says requests are rate limited per API key and that exceeding the limit returns HTTP 429, after which you retry after a short delay. It does not state the numeric limit; see https://api.myla.cx/openapi.json and the Myla dashboard documentation for current figures.

### How do I tag a Myla contact through Jentic?

Install Jentic One with `curl -fsSL https://raw.githubusercontent.com/jentic/jentic-one/main/tools/install.sh | sh`, import the Myla Developer API from the API Directory, and store your brand API key once. Your agent searches for 'tag a contact in Myla', finds the contact with GET `/api/v1/contacts` filtered by email, then calls POST `/api/v1/contacts/{id}/tags` with tagIds. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I limit what my agent is allowed to do with the Myla Developer API?

Yes. For a read-only digest agent, write a rule that allows GET `/api/v1/conversations` and GET `/api/v1/conversations/{id}`, so it can read threads and messages but cannot edit contacts or register webhooks. A rule can also name a single conversation id in the path if the agent should only read one thread.
