Enginy
Enginy helps B2B sales and prospecting teams build lead lists, enrich contacts, and run outreach campaigns from ChatGPT. Search for companies and people that match your ideal customer profile, then verify emails and phone numbers, find LinkedIn profiles, and organize the results into lists. Draft and launch multi-step email and LinkedIn sequences, review replies from your inbox, and check campaign and conversation analytics. Enginy connects to your existing workspace, so you can work with the contacts, companies, lists, and campaigns your team already has, and keep everything in sync with your CRM. An Enginy account is required.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- B2B Prospecting & Contact Data
- Secondary Subcategories
- None listed
- Brand
- Enginy
- Access
- Account required
- First tracked
- 2026-08-14
- Tool count
- 181
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is visible.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
Enginy is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT B2B Prospecting & Contact Data
View CategoryHow the Discoverability Score works
Organic discovery scoring for Enginy on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
181 tools agents can invoke
Add a contact group to a campaign Creates new conversations by adding every contact in a contact group to a campaign. Responses include direct Enginy app URLs when available. Responses include a `campaignAppUrl` that opens the campaign in Enginy. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `CAMPAIGNS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CAMPAIGNS_WRITE. Known failure modes: - 400: Bad request - validation error - 404: Campaign or contact group not found
Add a contact to a campaign Creates a new conversation by adding a contact to a campaign. Responses include direct Enginy app URLs when available. Responses include a `campaignAppUrl` that opens the campaign in Enginy. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `CAMPAIGNS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CAMPAIGNS_WRITE. Known failure modes: - 400: Bad request - validation error - 404: Campaign not found
Add blocklist entries by value Add raw blocklist entries by `(type, value)`. LinkedIn URL values are normalized; entries that cannot be normalized are skipped and reported in the response. > **Required scope:** `BLOCKLIST_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: BLOCKLIST_WRITE. Known failure modes: - 400: Bad request - no valid items after normalization
Add companies to a list Add companies to a list. Responses include direct Enginy app URLs when available. The response includes `listAppUrl` for the target list. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `LISTS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. This tool accepts an optional `body` payload when shown in the input schema. Required scopes: LISTS_WRITE. Known failure modes: - 400: Bad request - validation error or companies not found - 404: List not found
Add contacts to a list Add contacts to a list. Responses include direct Enginy app URLs when available. The response includes `listAppUrl` for the target list. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `LISTS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. This tool accepts an optional `body` payload when shown in the input schema. Required scopes: LISTS_WRITE. Known failure modes: - 400: Bad request - validation error or contacts not found - 404: List not found
Archive inbox contact thread Archive one inbox contact thread. Required parameters: - contactId: contact ID path parameter. Notes: - Archiving is lead-level, so all visible threads for that contact move into the archived inbox. - The endpoint is idempotent. If the contact is already archived it still returns success. > **Required scope:** `MESSAGING_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: MESSAGING_WRITE. Known failure modes: - 400: Invalid contact ID - 404: Contact or inbox thread not found
Attach inbox tags to a contact thread Attach one or more tags to a contact thread. Required parameters: - contactId: contact ID path parameter. - tagIds: array of tag IDs in the request body. Optional body fields: - senderIdentityId: target one sender-specific thread when the same contact appears under multiple sender identities. > **Required scope:** `MESSAGING_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. This tool requires a `body` payload matching the input schema. Required scopes: MESSAGING_WRITE. Known failure modes: - 400: Invalid contact ID - 404: Contact, thread, sender identity, or tags not found
Block contacts or companies by ID Block contacts (`LEAD`) or companies (`COMPANY`) by their Enginy IDs. The server resolves each entity to its emails, LinkedIn URLs, and domains and creates blocklist entries for each. Use `blockTypes` to restrict which value kinds are extracted. > **Required scope:** `BLOCKLIST_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: BLOCKLIST_WRITE. Known failure modes: - 400: Bad request - invalid blockTypes for entityType
Build inbox link Build a deep-link URL into the user's /inbox view with the given filters applied. Use when the user asks to be sent to / shown / opened an inbox view, or when a reply benefits from a clickable link to actionable inbox state ("here are the 3 unread WhatsApp threads — open them: <link>"). Do NOT call this to FETCH messages — use list_inbox_threads or get_inbox_contact_messages for data. Notes: - All fields are optional; omitting filters returns the default inbox URL. - folder defaults to 'received'. Common alternatives: 'unread', 'ai_draft', 'tags'. - leadId opens a SINGLE contact thread; leadIds filters the LIST view to those contacts. Almost always prefer leadIds. - Resolve names to numeric IDs first via get_identities / get_campaigns / get_companies / list_inbox_tags when the user gives names. - Pure URL construction — no DB read, no side effects. > **Required scope:** `MESSAGING_READ` > > **Rate limit:** 100 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: MESSAGING_READ.
Bulk create companies Create up to 100 companies in a single request. Each item behaves exactly like `POST /v1/company` (including per-item `mergeWithExisting`, `listId`, and custom/AI fields). Items are processed independently: the request succeeds with a per-item `results` array and a `summary`, so one invalid company does not roll back the rest. Responses include direct Enginy app URLs when available. Each successful result includes an `appUrl` field for the company. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `COMPANIES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: COMPANIES_WRITE. Known failure modes: - 400: Bad request - the batch envelope failed validation (e.g. empty or too large)
Bulk create contacts Create up to 100 contacts in a single request. Each item behaves exactly like `POST /v1/contact` (including nested/aliased company data, per-item `mergeWithExisting`, `listId`, and custom/AI fields). Items are processed independently: the request succeeds with a per-item `results` array and a `summary`, so one invalid contact does not roll back the rest. Responses include direct Enginy app URLs when available. Each successful result includes `appUrl` for the contact and `companyAppUrl` when a company is associated. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `CONTACTS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CONTACTS_WRITE. Known failure modes: - 400: Bad request - the batch envelope failed validation (e.g. empty or too large)
Cancel workflow run Cancels a RUNNING workflow run. Returns 409 if the run already finished or is otherwise not cancellable. Use `pathParams` when the input schema includes path parameters. Required scopes: WORKFLOWS_WRITE. Known failure modes: - 404: Run not found or not accessible. - 409: The run is not RUNNING and cannot be cancelled.
Clone a campaign Clone a campaign with a new identity, preserving workflow, messages, tasks, tags, and folder. Responses include direct Enginy app URLs when available. Responses include an `appUrl` that opens the cloned campaign in Enginy. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `CAMPAIGNS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CAMPAIGNS_WRITE. Known failure modes: - 400: Bad request - validation error - 404: Campaign or identity not found
Complete task Mark a task as completed. > **Required scope:** `TASKS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. This tool accepts an optional `body` payload when shown in the input schema. Required scopes: TASKS_WRITE.
Complete tasks batch Mark multiple tasks as completed. > **Required scope:** `TASKS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: TASKS_WRITE.
Create a list Create a new empty destination list for contacts or companies. For a user request like "build/find me a new list of prospects", create the destination list, then use AI Finder preview and import tools to populate it instead of returning existing CRM contacts. Responses include direct Enginy app URLs when available. The created list response includes an `appUrl` field. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `LISTS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: LISTS_WRITE. Known failure modes: - 400: Bad request - validation error or folder not found
Create a message template Creates a non-prompt-library (workspace-owned) entry. Requires the AI variable split to be enabled for the workspace; otherwise returns 403 and the legacy `POST /v1/ai-variables` (aiField) endpoint must be used instead. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Invalid prompt tokens (unknown, ambiguous name, or reference type not allowed for this entity) — `details.issues` lists each problem and `details.validTokenSample` shows valid tokens - 409: Conflict - an entity with this name already exists
Create a new company Create a new company. If `mergeWithExisting` is true (default), the company will merge into an existing record matched by normalized LinkedIn URL, domain, website, or exact name. Set `mergeWithExisting` to false to always create a new company. Responses include direct Enginy app URLs when available. The response includes an `appUrl` field for the company. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `COMPANIES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: COMPANIES_WRITE. Known failure modes: - 400: Bad request - validation error or list not found
Create a new contact Create a new contact. If `mergeWithExisting` is true (default), the contact will merge into an existing record matched by normalized LinkedIn profile URL, or by exact first name + last name + company name. If the provided company already exists, the contact will also be associated with a company matched by normalized LinkedIn URL, domain, website, or exact name, and that company will be updated with the provided data. Set `mergeWithExisting` to false to always create a new contact and company. Responses include direct Enginy app URLs when available. The response includes `appUrl` for the contact and `companyAppUrl` when a company is associated. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `CONTACTS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CONTACTS_WRITE. Known failure modes: - 400: Bad request - validation error or list not found
Create a prompt-library AI message (superadmin only) Create a prompt-library AI message draft. **Superadmin only.** This endpoint requires a `SUPER_ADMIN` user and is not part of the public customer-facing API. Newly created entries are always unpublished drafts; publishing is handled in a separate step. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Bad request - invalid input - 409: Conflict - name already exists
Create a prompt-library AI research (superadmin only) Create a prompt-library AI research draft (an `aiField` row used as a predefined research template). **Superadmin only.** This endpoint requires a `SUPER_ADMIN` user and is not part of the public customer-facing API. Newly created entries are always unpublished drafts; publishing is handled in a separate step. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Bad request - invalid input - 409: Conflict - name already exists
Create a prompt-library AI snippet (superadmin only) Create a prompt-library AI snippet draft. **Superadmin only.** This endpoint requires a `SUPER_ADMIN` user and is not part of the public customer-facing API. Newly created entries are always unpublished drafts; publishing is handled in a separate step. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Bad request - invalid input - 409: Conflict - name already exists
Create a saved filter Create a saved AI Finder filter for later reuse. Filters are provider-aware and can be loaded directly into preview creation via `savedFilterId`. > **Required scope:** `ACTIONS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: ACTIONS_WRITE. Known failure modes: - 400: Bad request - validation error
Create an ai message Creates a non-prompt-library (workspace-owned) entry. Requires the AI variable split to be enabled for the workspace; otherwise returns 403 and the legacy `POST /v1/ai-variables` (aiField) endpoint must be used instead. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Invalid prompt tokens (unknown, ambiguous name, or reference type not allowed for this entity) — `details.issues` lists each problem and `details.validTokenSample` shows valid tokens - 409: Conflict - an entity with this name already exists
Create an ai snippet Creates a non-prompt-library (workspace-owned) entry. Requires the AI variable split to be enabled for the workspace; otherwise returns 403 and the legacy `POST /v1/ai-variables` (aiField) endpoint must be used instead. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Invalid prompt tokens (unknown, ambiguous name, or reference type not allowed for this entity) — `details.issues` lists each problem and `details.validTokenSample` shows valid tokens - 409: Conflict - an entity with this name already exists
Create an AI variable Create a new AI variable (AI research): a research/enrichment value computed per contact or company, e.g. classifications, extracted facts, findings. Do NOT use this for outreach content — personalized outbound messages belong in `POST /v1/ai-variables/ai-messages`, reusable phrase fragments in `POST /v1/ai-variables/ai-snippets`, and literal (non-AI-generated) sequences in `POST /v1/ai-variables/message-templates`. Prompt placeholders must come from the relevant fields endpoint output for this workspace; generic conversation placeholders such as `previousMessage` are not supported here. Enginy automatically converts `prompt` into the internal editor format used by the platform. Use the contact/company fields endpoints as the source of truth for prompt placeholders. Do not assume campaign-only aliases like `previousMessage` are valid in manual/public AI-variable creation. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Bad request - invalid input, folder/entity mismatch, or unsupported placeholders such as previousMessage - 409: Conflict - AI variable name already exists for this entity
Create campaign Create a draft campaign from the public simplified sequence model. Best for new campaigns or rewrites that fit the supported public step types; this endpoint does not preserve arbitrary internal editor-only graph wiring from an existing campaign. Responses include direct Enginy app URLs when available. Responses include an `appUrl` that opens the created campaign in Enginy. MCP agents should return those URLs to users whenever they are present in the response. Create a draft campaign from the public `steps` format. How to structure the request: - Start `steps` with the first action that should happen. - Keep adding the next action in the order it should run. - Use `condition` when you want to branch on lead data. - Use `linkedin_connection` with `waitForAcceptance` when you want to branch on connection acceptance after sending a connection request. Omit `waitForAcceptance` for a fire-and-forget connection request. - Use `linkedin_message` with `content`, `attachment`, or both. Attachment-only messages are valid. - Use `whatsapp_message` only when the workspace and sending identity are configured for WhatsApp. - Put shared follow-up work after the branching step instead of duplicating the same steps inside both branches. AI-generated messages (message library): - `email`, `linkedin_message`, `linkedin_inmail`, and `linkedin_connection` steps accept `aiMessageId` instead of manual `content` — the linked AI message writes a personalized message per contact at send time. - To reuse a prompt-library ("message library") prompt, list entries with `GET /v1/prompt-library/ai-messages` and pass the entry `id` as the step `aiMessageId`. The step gets its own copy automatically. - To reuse or create a workspace AI message, use `GET /v1/ai-variables/ai-messages` or `POST /v1/ai-variables/ai-messages` (full control over `prompt`, `toneId`, `model`, `outputLength`, and `splitMessages`), then pass its `id` as `aiMessageId`. - The AI message `channel` must match the step type (`EMAIL`, `LINKEDIN`, `LINKEDIN_INMAIL`, or `LINKEDIN_CONNECTION`). - Never combine `aiMessageId` with manual `content` or `subject` on the same step — for `email` and `linkedin_inmail` the AI message generates the subject too. Before you send a request: - Send an ordered `steps` array that describes the campaign flow from first action to last action. - Use branch arrays on `condition` and `linkedin_connection` steps to describe branch-specific work. - Place shared follow-up steps after a branching step when both live branches should continue together. - `waitForAcceptance.unit` must be `days` and `waitForAcceptance.value` must be an integer greater than or equal to `1`. - Use `GET /v1/tasks/owners` first when your campaign includes `task` steps. If owners are returned, every `task` step must include `ownerId`. - Validation errors use full paths like `steps[0].onTrue[1].subject` so nested input issues are easy to fix. - Personalization placeholders use Enginy single-brace syntax such as `{firstName}`, `{companyName}`, and `{identity.name}`. Do not send Handlebars-style placeholders like `{{firstName}}`. - Placeholders must reference real fields — discover them with `GET /v1/contacts/fields`. Unknown placeholders are rejected with a 422. The company aliases `{company}`, `{companyName}`, and `{companyDomain}` are accepted and stored as the canonical company columns. Supported `condition.type` values: - `has_linkedin_profile`: `onTrue` runs when the lead has a LinkedIn profile. - `has_professional_email`: `onTrue` runs when the lead has a professional email. - `is_already_connected`: `onTrue` runs when the lead is already a LinkedIn connection. - `has_been_contacted`: `onTrue` runs when the lead has already been contacted. - `has_whatsapp_account`: `onTrue` runs when the lead has a WhatsApp account. - `email_opened`: `onTrue` runs when the lead opens the preceding email within `waitFor`. Must follow an `email` step. Requires `waitFor` (`value`, `unit`). - `email_clicked`: `onTrue` runs when the lead clicks a link in the preceding email within `waitFor`. Must follow an `email` step. Requires `waitFor` (`value`, `unit`). - `task_completed`: `onTrue` runs when the preceding `task` step is marked complete within `waitFor`. Must follow a `task` step. Requires `waitFor` (`value`, `unit`). - `connection_accepted`: `onTrue` runs when the lead accepts a previous LinkedIn connection request within `waitFor`. Requires `waitFor` (`value`, `unit`). - `lead_field`: `onTrue` runs when the contact `field` matches the `operator` (and `value`, where applicable). Use this to branch on any built-in column or custom field. Requires `field` and `operator`. `value` is required for every operator except `IS_EMPTY` and `IS_NOT_EMPTY`. Supported operators: `EQUALS`, `NOT_EQUALS`, `CONTAINS`, `NOT_CONTAINS`, `GREATER_THAN`, `LESS_THAN`, `GREATER_THAN_OR_EQUALS`, `LESS_THAN_OR_EQUALS`, `IS_EMPTY`, `IS_NOT_EMPTY`. Branch fields: - `condition` uses `onTrue` and `onFalse`. - `linkedin_connection` uses `onAccepted` and `onNotAccepted` only when `waitForAcceptance` is set. - Use `[{ "type": "end" }]` when a branch should stop explicitly. Routing into another campaign: - Use `add_to_another_campaign` with a `campaignId` to route the lead into an existing campaign in the same workspace. - The referenced `campaignId` must belong to the same client as the API key. If you are cloning campaigns across workspaces, remap each `campaignId` to the equivalent campaign in the destination workspace before posting. - Can be followed by additional steps in the same branch. For examples and a full step-by-step guide, see `/api-reference/campaigns-guide` in the docs site. > **Required scope:** `CAMPAIGNS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CAMPAIGNS_WRITE. Known failure modes: - 400: Bad request - the campaign payload does not match the public simplified schema. Common causes: - Referenced identity (`identityId`) does not exist in this workspace. - Unrecognized field on a step or branch (e.g. `delay` is not a valid key on conditional `onAccepted`/`onTrue`/`onFalse` branches — use a dedicated wait/delay node inside the branch instead). - Required field missing (the response `errors[].path` indicates which body location failed validation). - 422: Unprocessable entity - the campaign steps are structurally invalid. Common causes the agent should fix before retrying: - EMAIL_OPENED / NOT_EMAIL_OPENED conditions may only appear *after* an EMAIL node in the same branch. Add the EMAIL node first or remove the condition. - Every conditional branch (`onAccepted`/`onNotAccepted`/`onTrue`/`onFalse`) must contain at least one node. Use `[{ "type": "end" }]` to terminate a branch explicitly instead of leaving it empty. - Templated fields (e.g. `{firstName}`, `{companyName}`) must reference AI variables or standard fields that exist for the campaign's entity. Use GET /v1/contacts/fields or GET /v1/companies/fields to discover valid placeholders before composing message bodies. - Reply emails inside the same thread may omit `subject`, but the first email in any thread must have a non-empty subject. - `aiMessageId` must reference a workspace AI message (GET /v1/ai-variables/ai-messages) or a prompt-library entry (GET /v1/prompt-library/ai-messages) whose channel matches the step type, and cannot be combined with manual `content`/`subject`.
Create campaign folder Create a campaign folder. Folder names must be unique within the same parent folder. Responses include direct Enginy app URLs when available. Responses include an `appUrl` that opens the folder in Enginy. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `CAMPAIGNS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: CAMPAIGNS_WRITE.
Create company AI variable folder Create a company AI variable folder. Folder names must be unique per entity. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE.
Create company list folder Create a company list folder. Folder names must be unique within the same parent folder. Responses include direct Enginy app URLs when available. The created folder response includes an `appUrl` field. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `LISTS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: LISTS_WRITE.
Create contact AI variable folder Create a contact AI variable folder. Folder names must be unique per entity. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: AI_VARIABLES_WRITE.
Create contact list folder Create a contact list folder. Folder names must be unique within the same parent folder. Responses include direct Enginy app URLs when available. The created folder response includes an `appUrl` field. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `LISTS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: LISTS_WRITE.
Create inbox tag Create a reusable inbox tag. Required body fields: - name: human-readable tag name. - color: color token or hex value stored with the tag. > **Required scope:** `MESSAGING_WRITE` > > **Rate limit:** 30 requests per minute This tool requires a `body` payload matching the input schema. Required scopes: MESSAGING_WRITE.
Create or update an identity mailbox Create or update an IMAP mailbox for a specific identity so mailbox setup can be automated over API. Programmatic setup currently supports IMAP credentials only. > **Required scope:** `ALL` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. This tool accepts an optional `body` payload when shown in the input schema. Required scopes: ALL. Known failure modes: - 404: Identity not found - 409: Mailbox already belongs to another active identity - 422: Mailbox credentials are invalid or the identity exceeded mailbox limits
Create task Create a new task for a contact or company. Responses include direct Enginy app URLs when available. Responses include an `appUrl` that opens the created task in Enginy. MCP agents should return those URLs to users whenever they are present in the response. > **Required scope:** `TASKS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: TASKS_WRITE.
Create webhook subscription Create a new webhook subscription. > **Required scope:** `WEBHOOKS_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: WEBHOOKS_WRITE. Known failure modes: - 400: Bad request - validation error
Create workflow Creates a workflow from a plan (draft by default; publish:true to publish immediately). Call get_workflow_blocks + get_workflow_block_inputs first to discover valid blockIds/inputs. Workflows are a DAG in `plan.nodes`. Each node has an `id` and a `next` array of ids (`""` = unwired). Node kinds: BLOCK (one step; `blockId` + `inputs`; one next slot, two for WAIT_FOR_APPROVAL), CONDITIONAL (`conditions` + `next` = one target per condition then the fallback last; a condition is `{ field, operator, value? }` or a random A/B split `{ "type": "RANDOM_SPLIT", "percentage": 1-100 }` with sibling percentages summing to ≤ 100), KING (`groupBy`/`orderBy`; next = [left, right]). Start with a selector/import block. Max 60 nodes, no cycles. Call get_workflow_blocks + get_workflow_block_inputs to discover valid blockIds/inputs and get_workflow_condition_fields for CONDITIONAL fields. Put configured values, never catalog metadata, in BLOCK inputs. Bind a declared non-entity WEBHOOK input as `{ "webhookInputKey": "<declared key>" }` in the matching field; entity inputs use `"__MANUAL_INPUT"`. This tool accepts an optional `body` payload when shown in the input schema. Required scopes: WORKFLOWS_WRITE. Known failure modes: - 400: The plan is structurally invalid (malformed graph). The response lists the issues. - 422: The plan fails block/config validation (stricter when publish=true).
Create workflow folder Creates a workflow folder ({name, parentId?}). Names must be unique within the same parent. Assign a workflow to a folder with update_workflow_draft (folderId). This tool accepts an optional `body` payload when shown in the input schema. Required scopes: WORKFLOWS_WRITE. Known failure modes: - 400: Invalid body or the parent folder does not exist. - 409: A folder with this name already exists at this level.
Delete a blocklist entry Delete a single blocklist entry by ID. > **Required scope:** `BLOCKLIST_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: BLOCKLIST_WRITE. Known failure modes: - 400: Bad request - invalid item ID - 404: Blocklist item not found
Delete a company Soft delete a company by ID, remove it from company lists, and unassign its active contacts. > **Required scope:** `COMPANIES_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: COMPANIES_WRITE. Known failure modes: - 400: Bad request - invalid company ID - 404: Company not found
Delete a contact Soft delete a contact by ID and remove it from contact lists. > **Required scope:** `CONTACTS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: CONTACTS_WRITE. Known failure modes: - 400: Bad request - invalid contact ID - 404: Contact not found
Delete a list Soft-delete a contact or company list. This is the cleanup counterpart of create_a_list: use it to remove destination lists once they are no longer needed (e.g. test or temporary prospecting lists). Requires the `type` query param (CONTACTS or COMPANIES) to disambiguate contact list IDs from company list IDs, which are independent sequences and can collide numerically. Only removes the list itself; contacts/companies that were members of the list are not deleted. If a contact list has an active recurring schedule, deletion stops that schedule first; if the schedule cannot be stopped, the delete is aborted (500) and the list is left intact rather than leaving a schedule running against a deleted list. > **Required scope:** `LISTS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Query parameters can be passed inside `query` or through the top-level aliases shown in the input schema. Required scopes: LISTS_WRITE. Known failure modes: - 400: Bad request - invalid list ID, missing/invalid type, or list protected from deletion - 404: List not found
Delete a message template Soft-deletes a workspace-owned message template. Fails with 409 when the entity is still referenced (active campaign steps, other AI entities embedding it). Requires the AI variable split to be enabled for the workspace; otherwise returns 403. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 404: Message template not found in this workspace - 409: Message template is in use and cannot be deleted
Delete a saved filter Delete a saved AI Finder filter. This is the cleanup counterpart of create_a_saved_filter. `provider` is required — saved filter IDs are independent per-provider sequences and can collide numerically. Only the saved filter's creator can delete it: a filter shared with the team is still visible to teammates via get_saved_filters, but visibility does not grant delete access, so a saved filter that exists but was created by someone else returns 404 (same as a saved filter that does not exist). > **Required scope:** `ACTIONS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Query parameters can be passed inside `query` or through the top-level aliases shown in the input schema. Required scopes: ACTIONS_WRITE. Known failure modes: - 400: Bad request - invalid saved filter ID or missing/invalid provider - 404: Saved filter not found, or found but not created by the caller
Delete an ai message Soft-deletes a workspace-owned ai message. Fails with 409 when the entity is still referenced (active campaign steps, other AI entities embedding it). Requires the AI variable split to be enabled for the workspace; otherwise returns 403. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 404: AI message not found in this workspace - 409: AI message is in use and cannot be deleted
Delete an ai snippet Soft-deletes a workspace-owned ai snippet. Fails with 409 when the entity is still referenced (active campaign steps, other AI entities embedding it). Requires the AI variable split to be enabled for the workspace; otherwise returns 403. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 404: AI snippet not found in this workspace - 409: AI snippet is in use and cannot be deleted
Delete an AI variable Delete an AI variable (AI research) and its generated smart-field values. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: AI_VARIABLES_WRITE. Known failure modes: - 400: Bad request - invalid aiVariableId parameter - 404: AI variable not found
Delete blocklist entries in bulk Delete multiple blocklist entries by ID in a single request. > **Required scope:** `BLOCKLIST_WRITE` > > **Rate limit:** 30 requests per minute This tool accepts an optional `body` payload when shown in the input schema. Required scopes: BLOCKLIST_WRITE. Known failure modes: - 404: No matching blocklist items found
Delete campaign folder Delete a campaign folder. Descendant folders are deleted too. Campaigns inside the deleted folders are not deleted; they are unassigned from the folder hierarchy. > **Required scope:** `CAMPAIGNS_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: CAMPAIGNS_WRITE.
Delete company AI variable folder Delete a company AI variable folder. Child folders are moved to the deleted folder's parent, and AI variables inside the deleted folder are reassigned to that same parent instead of being deleted. > **Required scope:** `AI_VARIABLES_WRITE` > > **Rate limit:** 30 requests per minute Use `pathParams` when the input schema includes path parameters. Required scopes: AI_VARIABLES_WRITE.
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Enginy alternatives on ChatGPT?
As of 2026-08-14, Enginy competes with Apollo.io, Canonical Company Search, Clay, Data247, DataForB2B, Demandbase, Firmable, FullEnrich, Grata, Happenstance, HG Insights - RGI, Hunter, LinkedIn, LinkedIn Ads, LinkedIn Headline Rewriter, Lusha, Meticulate, Moody's Growth and Strategy, Popl, RocketReach, SciLeads, Seamless, Sixtyfour Intelligence, Sprouts Data Intelligence, StoreInspect, Sumble, Super Carl, Vibe Prospecting, ZoomInfo in ChatGPT B2B Prospecting & Contact Data, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.