## Search `client.Accounts.Contacts.Search(ctx, accountID, query) (*AccountContactSearchResponse, error)` **get** `/v1/accounts/{accountID}/contacts` Search contacts on a specific account using merged account contacts, network search, and exact identifier lookup. ### Parameters - `accountID string` Account ID this resource belongs to. - `query AccountContactSearchParams` - `Query param.Field[string]` Text to search users by. Network-specific behavior. ### Returns - `type AccountContactSearchResponse struct{…}` - `Items []User` - `ID string` Stable Beeper user ID. Use as the primary key when referencing a person. - `CannotMessage bool` True if Beeper cannot initiate messages to this user (e.g., blocked, network restriction, or no DM path). The user may still message you. - `Email string` Email address if known. Not guaranteed verified. - `FullName string` Display name as shown in clients (e.g., 'Alice Example'). May include emojis. - `ImgURL string` Avatar image URL if available. May be temporary or local-only to this device; download promptly if durable access is needed. - `IsSelf bool` True if this user represents the authenticated account's own identity. - `PhoneNumber string` User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown. - `Username string` Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique. ### Example ```go package main import ( "context" "fmt" "github.com/beeper/desktop-api-go" ) func main() { client := beeperdesktopapi.NewClient( ) response, err := client.Accounts.Contacts.Search( context.TODO(), "accountID", beeperdesktopapi.AccountContactSearchParams{ Query: "x", }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Items) } ```