Skip to main content
Shilo users represent the agents and team members in your sales organization. The Users API lets you retrieve user records, update profile information, and suspend members who have left your team. The Invitations API handles the onboarding flow for new agents who haven’t yet joined Shilo. Together, these endpoints let you keep your Shilo roster in sync with your own system of record.

Users vs. Contacts

Before diving in, it helps to distinguish the two people-related resources in Shilo:
  • Users — Your sales agents. They log in to Shilo, receive coaching agendas, and appear in performance metrics.
  • Contacts — The leads and clients your agents call. They do not log in to Shilo; they exist as subjects of call analysis.

Listing Users

Retrieve a paginated list of all users in your organization:
Filter the list by external ID, email, or name:

Retrieving a Single User

Use any of the three supported identifier formats:

Updating a User

Send a PUT request with the fields you want to change:

Updating a User’s Email

Email updates have a dedicated endpoint to prevent accidental overwrites. Both existing_email and updated_email are required: existing_email identifies the current account and updated_email is the new address to assign:

Suspending a User

When an agent leaves your team, suspend their Shilo membership with a DELETE request:
A successful suspension returns 204 No Content.
Suspending a user does not delete their Shilo account or remove their call history. It suspends their membership for your integration only. Their data remains accessible through the API. Additionally, Zillow Flex Advisor users are not affected by this endpoint—their membership is managed separately.

User Signal

Retrieve the latest Shilo Signal for an agent. A Signal is the latest AI-derived behavioral and communication profile for the user, useful for coaching, preparation, and adapting your approach in one-on-ones:

Invitations

Use the Invitations API to onboard new agents who haven’t yet accepted a Shilo invite. This is especially useful when provisioning users programmatically during your integration setup.

Create an Invitation

email and external_user_id are required. Exactly one of invited_by_user_id or invited_by_email is also required. name and first_name are optional. role is optional and may only be ADMIN or MEMBER, defaulting to MEMBER:
Possible responses:

List Pending Invitations

Resend an Invitation

A successful resend returns 202 Accepted.

Cancel an Invitation

A successful cancellation returns 204 No Content.

Keeping Users in Sync

Because Shilo supports external_user_id as an identifier, you can build a robust sync without storing Shilo UUIDs in your system:
  1. When a new agent joins your team, POST /api/v1/invitations with their external_user_id.
  2. Once they accept and appear in GET /api/v1/users, reference them with external_user_id:{your-id} in all subsequent calls.
  3. When an agent leaves, DELETE /api/v1/users/external_user_id:{your-id} to suspend their membership.
Write operations (POST, PUT, DELETE) on users and invitations require a read-write API key. A read-only key returns 403 Forbidden on these endpoints.