---
title: "Fastmail address book"
description: "Reuses the provider-neutral contacts adapter, preserving group scope, versioning and pagination."
---

> Documentation Index
> Fetch the complete documentation index at: https://help.tooluse.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Fastmail address book

<p>Reuses the provider-neutral contacts adapter, preserving group scope, versioning and pagination.</p>

<details data-command-index><summary>What you can do (8)</summary>
<h2>What you can do</h2>
<p>Available commands: 8 (3 read, 5 write). Enable only the commands your application needs.</p>
<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Command</th>
<th>Effect</th>
</tr>
</thead>
<tbody><tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-scopes">Browse address books and groups</a> — <code>fastmail-contacts.scopes</code></td>
<td>Read</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-list">Read contact changes</a> — <code>fastmail-contacts.list</code></td>
<td>Read</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-get">Read a contact</a> — <code>fastmail-contacts.get</code></td>
<td>Read</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-contact-create">Create a contact</a> — <code>fastmail-contacts.contact.create</code></td>
<td>Write</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-contact-update">Update or clear contact fields by version</a> — <code>fastmail-contacts.contact.update</code></td>
<td>Write</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-contact-delete">Delete a contact by version</a> — <code>fastmail-contacts.contact.delete</code></td>
<td>Write</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-membership-add">Add a contact to a group</a> — <code>fastmail-contacts.membership.add</code></td>
<td>Write</td>
</tr>
<tr>
<td><a href="https://help.tooluse.net/integrations/fastmail-contacts#command-fastmail-contacts-membership-remove">Remove a contact from a group</a> — <code>fastmail-contacts.membership.remove</code></td>
<td>Write</td>
</tr>
</tbody></table>
</div>
</details>
<h2>Connect and use</h2>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts">Connect and use</a></p>
<p>Open the integration&#39;s connection form to check the available credential source. The source has not been resolved for this documentation export. The instructions below apply when using your own provider account.</p>
<h2>Get your provider credentials</h2>
<p>Follow these steps for Fastmail address book, then enter the issued values in the connection form below.</p>
<ol>
<li>In Fastmail Settings → Privacy &amp; Security → Manage API tokens, create a token with the required mail or contacts access. Obtain the account and mailbox identifiers from the JMAP session/API as required by the form.</li>
</ol>
<p><a href="https://www.fastmail.help/hc/en-us/articles/5254602856719-API-tokens">Official credential setup</a></p>
<h2>Where to enter credentials</h2>
<p>In the integration page, sign in, choose your workspace and open Connect. If a <strong>Credentials</strong> choice is shown, select <strong>Use my credentials</strong>. Fill the following connection fields and save. Provider credentials belong in this form, never in an MCP configuration or tool input.</p>
<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Connection field</th>
<th>Requirement</th>
</tr>
</thead>
<tbody><tr>
<td>Access token</td>
<td>Required</td>
</tr>
<tr>
<td>Account ID</td>
<td>Required</td>
</tr>
</tbody></table>
</div><p>Open API keys and create a Tooluse.net key for the enabled commands.</p>
<p>Set TOOLUSE_API_KEY in your client and use the shared MCP configuration.</p>
<p><a href="https://help.tooluse.net/clients">Configure Claude Code, Codex or Cursor once</a></p>

<h2>Permissions and results</h2>

<p>If you have more than one workspace, check the selected workspace in the connection or API-key dialog before saving. Roles, enabled commands, expiry and revocation use Tooluse.net&#39;s existing permissions. Disabling a connection or revoking a key immediately prevents new calls.</p>

<p>Send one Claude tool_use block per request. Keep the same Idempotency-Key when retrying the same request; use a new key for a new call. The response includes the shared Tooluse.net receipt and Claude tool_result. Check both HTTP status and the returned tool result before treating a call as successful.</p>

<p>Your connection&#39;s daily allowance and key permissions also apply. Adding a connection does not make a provider request.</p>

<p>Calls return the shared execution receipt and a Claude tool_result. Provider output varies by operation; consult the provider documentation for its response fields. Unconfirmed calls should be checked before retrying.</p>

<h2>Call from your client</h2>

<p>Use the shared MCP configuration. Refresh your client&#39;s tool list after saving the connection or changing key permissions, then call the returned tool name with the example input below.</p>

<p><a href="https://help.tooluse.net/clients">Configure Claude Code, Codex or Cursor once</a></p>

<h2>Discover your enabled tools</h2>

<p>List permitted tools in Claude format. Read every page using page and size (maximum 100) until all results have been received. Use the returned name, not a catalog capability identifier, in the tool_use block.</p>

<pre><code class="language-bash">curl 'https://api.tooluse.net/v1/tools' \
  -H "Authorization: Bearer $TOOLUSE_API_KEY"
</code></pre>

<p>Find this command in the tool list permitted by your key. Replace svc_FROM_YOUR_TOOL_LIST with its returned name. Use a new Idempotency-Key for each new call and retain it when retrying that same call.</p>

<h2>HTTP call</h2>

<pre><code class="language-bash">curl 'https://api.tooluse.net/v1/tool-calls' \
  -H "Authorization: Bearer $TOOLUSE_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: replace-with-a-new-call-id' \
  --data '{
  "type": "tool_use",
  "id": "toolu_example",
  "name": "svc_FROM_YOUR_TOOL_LIST",
  "input": {}
}'
</code></pre>

<p>Send one Claude tool_use block per request. Keep the same Idempotency-Key when retrying the same request; use a new key for a new call. The response includes the shared Tooluse.net receipt and Claude tool_result. Check both HTTP status and the returned tool result before treating a call as successful.</p>

<h2>Commands</h2>

<details id="command-fastmail-contacts-scopes">
<summary><span>Browse address books and groups — <code>fastmail-<wbr>contacts.<wbr>scopes</code></span></summary>
<p>Run <strong>Browse address books and groups</strong> with Fastmail address book. This is a read command; it does not grant access beyond the connected account&#39;s permissions.</p>

<p>This is a read operation. Provider rate limits and data access rules still apply.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.scopes">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<p>This tool has no input parameters.</p>

<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.scopes">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{}
</code></pre>

<p>At most 10 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-list">
<summary><span>Read contact changes — <code>fastmail-<wbr>contacts.<wbr>list</code></span></summary>
<p>Run <strong>Read contact changes</strong> with Fastmail address book. This is a read command; it does not grant access beyond the connected account&#39;s permissions.</p>

<p>This is a read operation. Provider rate limits and data access rules still apply.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.list">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>scopeIds</code></td>
<td>array</td>
<td>Required</td>
<td>Group or address book ID</td>
<td><code>minItems: 1; maxItems: 5; uniqueItems: true</code></td>
</tr>
<tr>
<td><code>scopeIds[]</code></td>
<td>string</td>
<td>Optional</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>pageToken</code></td>
<td>string</td>
<td>Optional</td>
<td>Next page cursor</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>pageSize</code></td>
<td>integer</td>
<td>Optional</td>
<td>Items per page</td>
<td><code>minimum: 1; maximum: 50</code></td>
</tr>
<tr>
<td><code>cursor</code></td>
<td>string</td>
<td>Optional</td>
<td>Incremental change cursor</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>cursorIssuedAt</code></td>
<td>string</td>
<td>Optional</td>
<td>Cursor issue time</td>
<td><code>minLength: 1; maxLength: 100; format: &quot;date-time&quot;</code></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.list">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "scopeIds": [
    "Default"
  ],
  "pageSize": 20
}
</code></pre>

<p>At most 20 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-get">
<summary><span>Read a contact — <code>fastmail-<wbr>contacts.<wbr>get</code></span></summary>
<p>Run <strong>Read a contact</strong> with Fastmail address book. This is a read command; it does not grant access beyond the connected account&#39;s permissions.</p>

<p>This is a read operation. Provider rate limits and data access rules still apply.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.get">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>resourceIds</code></td>
<td>array</td>
<td>Required</td>
<td>Contact ID</td>
<td><code>minItems: 1; maxItems: 20; uniqueItems: true</code></td>
</tr>
<tr>
<td><code>resourceIds[]</code></td>
<td>string</td>
<td>Optional</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.get">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "resourceIds": [
    "contact-id"
  ]
}
</code></pre>

<p>At most 2 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-contact-create">
<summary><span>Create a contact — <code>fastmail-<wbr>contacts.<wbr>contact.<wbr>create</code></span></summary>
<p>Run <strong>Create a contact</strong> with Fastmail address book. This command can change provider data. Review the target and input before invoking it.</p>

<p>This operation can change provider data. Review the input before allowing an agent to call it.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.contact.create">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>scopeId</code></td>
<td>string</td>
<td>Required</td>
<td>Address book or group ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>name</code></td>
<td>object</td>
<td>Optional</td>
<td>Name</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>name.display</code></td>
<td>string</td>
<td>Required</td>
<td>Display name</td>
<td><code>minLength: 1; maxLength: 500</code></td>
</tr>
<tr>
<td><code>name.prefix</code></td>
<td>string</td>
<td>Optional</td>
<td>Prefix</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>name.given</code></td>
<td>string</td>
<td>Optional</td>
<td>Given name</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>name.middle</code></td>
<td>string</td>
<td>Optional</td>
<td>Middle name</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>name.family</code></td>
<td>string</td>
<td>Optional</td>
<td>Family name</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>name.suffix</code></td>
<td>string</td>
<td>Optional</td>
<td>Suffix</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>emails</code></td>
<td>array</td>
<td>Optional</td>
<td>Email addresses</td>
<td><code>minItems: 1; maxItems: 20; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>emails[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Email address</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>emails[].value</code></td>
<td>string</td>
<td>Required</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>emails[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>emails[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>emails[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>phones</code></td>
<td>array</td>
<td>Optional</td>
<td>Phone numbers</td>
<td><code>minItems: 1; maxItems: 20; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>phones[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Phone number</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>phones[].value</code></td>
<td>string</td>
<td>Required</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>phones[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>phones[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>phones[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>organizations</code></td>
<td>array</td>
<td>Optional</td>
<td>Organizations</td>
<td><code>minItems: 1; maxItems: 10; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>organizations[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Organization</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>organizations[].name</code></td>
<td>string</td>
<td>Required</td>
<td>Organization name</td>
<td><code>minLength: 1; maxLength: 500</code></td>
</tr>
<tr>
<td><code>organizations[].department</code></td>
<td>string</td>
<td>Optional</td>
<td>Department</td>
<td><code>minLength: 1; maxLength: 300</code></td>
</tr>
<tr>
<td><code>organizations[].title</code></td>
<td>string</td>
<td>Optional</td>
<td>Job title</td>
<td><code>minLength: 1; maxLength: 300</code></td>
</tr>
<tr>
<td><code>organizations[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>organizations[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>addresses</code></td>
<td>array</td>
<td>Optional</td>
<td>Addresses</td>
<td><code>minItems: 1; maxItems: 10; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>addresses[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Address</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>addresses[].formatted</code></td>
<td>string</td>
<td>Optional</td>
<td>Formatted address</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>addresses[].street</code></td>
<td>string</td>
<td>Optional</td>
<td>Street</td>
<td><code>minLength: 1; maxLength: 500</code></td>
</tr>
<tr>
<td><code>addresses[].locality</code></td>
<td>string</td>
<td>Optional</td>
<td>City or locality</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].region</code></td>
<td>string</td>
<td>Optional</td>
<td>Region</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].postalCode</code></td>
<td>string</td>
<td>Optional</td>
<td>Postal code</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>addresses[].country</code></td>
<td>string</td>
<td>Optional</td>
<td>Country</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].countryCode</code></td>
<td>string</td>
<td>Optional</td>
<td>Country code</td>
<td><code>minLength: 1; maxLength: 2; pattern: &quot;^[A-Za-z]{2}$&quot;</code></td>
</tr>
<tr>
<td><code>addresses[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>addresses[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>urls</code></td>
<td>array</td>
<td>Optional</td>
<td>Websites</td>
<td><code>minItems: 1; maxItems: 20; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>urls[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Website</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>urls[].value</code></td>
<td>string</td>
<td>Required</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>urls[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>urls[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>urls[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>notes</code></td>
<td>array</td>
<td>Optional</td>
<td>Notes</td>
<td><code>minItems: 1; maxItems: 20; uniqueItems: true</code></td>
</tr>
<tr>
<td><code>notes[]</code></td>
<td>string</td>
<td>Optional</td>
<td>Note</td>
<td><code>minLength: 1; maxLength: 5000</code></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.contact.create">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "scopeId": "Default",
  "name": {
    "display": "Jane Doe",
    "given": "Jane",
    "family": "Doe"
  },
  "emails": [
    {
      "value": "jane@example.com",
      "type": "work",
      "primary": true
    }
  ]
}
</code></pre>

<p>At most 2 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-contact-update">
<summary><span>Update or clear contact fields by version — <code>fastmail-<wbr>contacts.<wbr>contact.<wbr>update</code></span></summary>
<p>Run <strong>Update or clear contact fields by version</strong> with Fastmail address book. This command can change provider data. Review the target and input before invoking it.</p>

<p>This operation can change provider data. Review the input before allowing an agent to call it.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.contact.update">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>resourceId</code></td>
<td>string</td>
<td>Required</td>
<td>Contact ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>revision</code></td>
<td>string</td>
<td>Required</td>
<td>Expected provider revision</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>name</code></td>
<td>object</td>
<td>Optional</td>
<td>Name</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>name.display</code></td>
<td>string</td>
<td>Required</td>
<td>Display name</td>
<td><code>minLength: 1; maxLength: 500</code></td>
</tr>
<tr>
<td><code>name.prefix</code></td>
<td>string</td>
<td>Optional</td>
<td>Prefix</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>name.given</code></td>
<td>string</td>
<td>Optional</td>
<td>Given name</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>name.middle</code></td>
<td>string</td>
<td>Optional</td>
<td>Middle name</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>name.family</code></td>
<td>string</td>
<td>Optional</td>
<td>Family name</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>name.suffix</code></td>
<td>string</td>
<td>Optional</td>
<td>Suffix</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>emails</code></td>
<td>array</td>
<td>Optional</td>
<td>Email addresses</td>
<td><code>minItems: 0; maxItems: 20; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>emails[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Email address</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>emails[].value</code></td>
<td>string</td>
<td>Required</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>emails[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>emails[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>emails[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>phones</code></td>
<td>array</td>
<td>Optional</td>
<td>Phone numbers</td>
<td><code>minItems: 0; maxItems: 20; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>phones[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Phone number</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>phones[].value</code></td>
<td>string</td>
<td>Required</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>phones[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>phones[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>phones[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>organizations</code></td>
<td>array</td>
<td>Optional</td>
<td>Organizations</td>
<td><code>minItems: 0; maxItems: 10; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>organizations[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Organization</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>organizations[].name</code></td>
<td>string</td>
<td>Required</td>
<td>Organization name</td>
<td><code>minLength: 1; maxLength: 500</code></td>
</tr>
<tr>
<td><code>organizations[].department</code></td>
<td>string</td>
<td>Optional</td>
<td>Department</td>
<td><code>minLength: 1; maxLength: 300</code></td>
</tr>
<tr>
<td><code>organizations[].title</code></td>
<td>string</td>
<td>Optional</td>
<td>Job title</td>
<td><code>minLength: 1; maxLength: 300</code></td>
</tr>
<tr>
<td><code>organizations[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>organizations[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>addresses</code></td>
<td>array</td>
<td>Optional</td>
<td>Addresses</td>
<td><code>minItems: 0; maxItems: 10; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>addresses[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Address</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>addresses[].formatted</code></td>
<td>string</td>
<td>Optional</td>
<td>Formatted address</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>addresses[].street</code></td>
<td>string</td>
<td>Optional</td>
<td>Street</td>
<td><code>minLength: 1; maxLength: 500</code></td>
</tr>
<tr>
<td><code>addresses[].locality</code></td>
<td>string</td>
<td>Optional</td>
<td>City or locality</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].region</code></td>
<td>string</td>
<td>Optional</td>
<td>Region</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].postalCode</code></td>
<td>string</td>
<td>Optional</td>
<td>Postal code</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>addresses[].country</code></td>
<td>string</td>
<td>Optional</td>
<td>Country</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].countryCode</code></td>
<td>string</td>
<td>Optional</td>
<td>Country code</td>
<td><code>minLength: 1; maxLength: 2; pattern: &quot;^[A-Za-z]{2}$&quot;</code></td>
</tr>
<tr>
<td><code>addresses[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>addresses[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>addresses[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>urls</code></td>
<td>array</td>
<td>Optional</td>
<td>Websites</td>
<td><code>minItems: 0; maxItems: 20; uniqueItems: false</code></td>
</tr>
<tr>
<td><code>urls[]</code></td>
<td>object</td>
<td>Optional</td>
<td>Website</td>
<td><code>additionalProperties: false</code></td>
</tr>
<tr>
<td><code>urls[].value</code></td>
<td>string</td>
<td>Required</td>
<td>Value</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>urls[].type</code></td>
<td>string</td>
<td>Optional</td>
<td>Type</td>
<td><code>minLength: 1; maxLength: 100</code></td>
</tr>
<tr>
<td><code>urls[].label</code></td>
<td>string</td>
<td>Optional</td>
<td>Label</td>
<td><code>minLength: 1; maxLength: 200</code></td>
</tr>
<tr>
<td><code>urls[].primary</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Primary</td>
<td></td>
</tr>
<tr>
<td><code>notes</code></td>
<td>array</td>
<td>Optional</td>
<td>Notes</td>
<td><code>minItems: 0; maxItems: 20; uniqueItems: true</code></td>
</tr>
<tr>
<td><code>notes[]</code></td>
<td>string</td>
<td>Optional</td>
<td>Note</td>
<td><code>minLength: 1; maxLength: 5000</code></td>
</tr>
<tr>
<td><code>clearName</code></td>
<td>boolean</td>
<td>Optional</td>
<td>Clear the saved name</td>
<td></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.contact.update">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "resourceId": "contact-id",
  "revision": "current-revision",
  "name": {
    "display": "Jane Smith",
    "given": "Jane",
    "family": "Smith"
  }
}
</code></pre>

<p>At most 2 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-contact-delete">
<summary><span>Delete a contact by version — <code>fastmail-<wbr>contacts.<wbr>contact.<wbr>delete</code></span></summary>
<p>Run <strong>Delete a contact by version</strong> with Fastmail address book. This command can change provider data. Review the target and input before invoking it.</p>

<p>This operation can change provider data. Review the input before allowing an agent to call it.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.contact.delete">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>resourceId</code></td>
<td>string</td>
<td>Required</td>
<td>Contact ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>revision</code></td>
<td>string</td>
<td>Required</td>
<td>Expected provider revision</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.contact.delete">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "resourceId": "contact-id",
  "revision": "current-revision"
}
</code></pre>

<p>At most 2 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-membership-add">
<summary><span>Add a contact to a group — <code>fastmail-<wbr>contacts.<wbr>membership.<wbr>add</code></span></summary>
<p>Run <strong>Add a contact to a group</strong> with Fastmail address book. This command can change provider data. Review the target and input before invoking it.</p>

<p>This operation can change provider data. Review the input before allowing an agent to call it.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.membership.add">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>resourceId</code></td>
<td>string</td>
<td>Required</td>
<td>Contact ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>revision</code></td>
<td>string</td>
<td>Required</td>
<td>Expected provider revision</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>scopeId</code></td>
<td>string</td>
<td>Required</td>
<td>Group or address book ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.membership.add">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "resourceId": "contact-id",
  "revision": "current-revision",
  "scopeId": "Default"
}
</code></pre>

<p>At most 2 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<details id="command-fastmail-contacts-membership-remove">
<summary><span>Remove a contact from a group — <code>fastmail-<wbr>contacts.<wbr>membership.<wbr>remove</code></span></summary>
<p>Run <strong>Remove a contact from a group</strong> with Fastmail address book. This command can change provider data. Review the target and input before invoking it.</p>

<p>This operation can change provider data. Review the input before allowing an agent to call it.</p>

<p><a href="https://www.tooluse.net/tools/integrations/fastmail-contacts?command=fastmail-contacts.membership.remove">Connect and use</a></p>

<p><strong>Parameters</strong></p>

<p>Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.</p>

<div class="nb-table-scroll"><table>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required in parent</th>
<th>Description</th>
<th>Constraints</th>
</tr>
</thead>
<tbody><tr>
<td><code>resourceId</code></td>
<td>string</td>
<td>Required</td>
<td>Contact ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>revision</code></td>
<td>string</td>
<td>Required</td>
<td>Expected provider revision</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
<tr>
<td><code>scopeId</code></td>
<td>string</td>
<td>Required</td>
<td>Group or address book ID</td>
<td><code>minLength: 1; maxLength: 2000</code></td>
</tr>
</tbody></table>
</div>
<p><strong>Full JSON Schema</strong></p>

<p><a href="https://api.tooluse.net/v1/integrations/fastmail-contacts/commands/fastmail-contacts.membership.remove">Full JSON Schema</a></p>

<p><strong>Example input</strong></p>

<pre><code class="language-json">{
  "resourceId": "contact-id",
  "revision": "current-revision",
  "scopeId": "Default"
}
</code></pre>

<p>At most 2 provider requests per invocation; timeout: 30 seconds.</p>

</details>
<h2>Errors</h2>

<p>Check the key&#39;s expiry, revocation, workspace and allowed operations.</p>

<p>Reuse the same idempotency key only for the same request.</p>

<p>The connection or provider limit has been reached. Check the receipt before retrying.</p>

<h2>Test the connection</h2>

<p>Open the integration&#39;s commands below to inspect parameters and examples. Start with a read command for an account or resource you can access. Refresh your client&#39;s tool list, use the returned tool name, and check the execution result and usage. Provider charges and permissions still apply. Never test a write against production data without reviewing it.</p>

<p><a href="https://www.fastmail.com/dev/">Official provider documentation</a></p>

Source: https://help.tooluse.net/integrations/fastmail-contacts/index.mdx
