# Suggest recipients as the sender types

The recipient picker's memory. Merges two sources and de-duplicates them by lowercased email: people the caller has sent to before, read out of the recipients of documents the caller may READ (their own, plus documents a teammate shared with the workspace — a teammate's PRIVATE document never contributes), and the members of the caller's workspace, which the auth service owns and is asked for with the caller's own bearer token.

Document-agnostic on purpose: the editor already knows who is on the document in front of it, so filtering out people already added is the client's job.

Ranking puts email matches ahead of name matches and prefixes ahead of infixes, then someone already sent to ahead of a colleague who hasn't been, then most recently used. An empty q returns the most recently used recipients, newest first, with workspace members filling the remainder.

Degrades rather than fails: if the auth service is slow or unreachable the response is still 200 with send history alone, so the field the caller is typing into never breaks.

Not paginated, deliberately. limit is a ceiling, not a window: there is no cursor and no offset, and a larger limit is capped rather than paged. Send history is stored as one row per time someone was added to a document, so an offset would skip rows rather than people and a second page would mostly repeat the first after de-duplication — and the member half has no cursor to page at all. Narrow with q instead. Browsing the full contact list is a separate surface, not a page of this one.

kind=group switches this same endpoint to a different resource entirely: previously-used signer-group labels (EAS-125+) instead of people, matched by label text only. There is no workspace-roster merge for this kind — a label isn't an identity — so the response is shaped differently (GroupLabelSuggestion, not RecipientSuggestion): each entry also carries the member roster from that label's most recent use, offered as one-click additions once the new group exists, never added by this endpoint itself. Same tenancy boundary as the person path: a label (and its roster) is only ever suggested from a document the caller may read.

Canonical: https://easerix.com/docs/developers/api/sign/documents/suggestRecipients

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

export default function Layout(props) {
  const { APIPage, OpenAPIPage } = props.components ?? {};
  // "APIPage" is the old name from v10, this allows both for backward compatibility
  const Comp = OpenAPIPage ?? APIPage;
  return (
    <>
      {props.children}
      <Comp document="sign" operations={[{"path":"/v1/recipients/suggest","method":"get"}]} />
    </>
  );
}
