Google Contacts
target_app: "contacts" · endpoint /v1/google/execute · OAuth — connects per end-user automatically
Setup
Same unified Google connection as Calendar — nothing separate to set up.
Actions
list_contacts
List "My Contacts" — explicitly saved contacts only.
Request body:
{
"user_id": "...",
"action": "list_contacts",
"payload": {},
"target_app": "contacts"
}provider_response.result shape:
{ "connections": [{"names":[{"displayName":"..."}],"phoneNumbers":[...]}] }search_contacts
Search "Other contacts" — people auto-remembered from email history but never manually saved. Use this if list_contacts doesn't find a match.
Request body:
{
"user_id": "...",
"action": "search_contacts",
"payload": { "query": "mom" },
"target_app": "contacts"
}provider_response.result shape:
{ "results": [{"person":{"names":[...],"phoneNumbers":[...]}}] }create_contact
Save a new contact.
Request body:
{
"user_id": "...",
"action": "create_contact",
"payload": { "givenName": "Ada", "familyName": "Lovelace", "email": "ada@example.com", "phone": "+1234567890" },
"target_app": "contacts"
}provider_response.result shape:
{ "resourceName": "people/...", "names": [...] }Anticipated errors & fixes
list_contacts returns empty but the person clearly has contacts
Cause: The contact likely lives in "Other contacts" (never manually saved) — list_contacts only sees "My Contacts."
Fix: Try search_contacts with their name as the query.
Both list_contacts and search_contacts come back empty
Cause: Usually a canonical user_id mismatch (the OAuth connection happened under a different session/device ID than the one making this call) — not a real 'no contacts' situation.
Fix: Verify the user_id used to connect matches the one used in this call exactly.
401 "Unauthorized: Invalid API key."
Cause: Your eConnect Authorization header is missing, malformed, or the key was regenerated/revoked.
Fix: Copy your api_key fresh from the eConnect dashboard and confirm the header reads exactly "Authorization: Bearer <key>".
429 "Too many requests"
Cause: You've exceeded your plan's per-minute rate limit.
Fix: Wait a minute and retry, or upgrade your plan for a higher per-minute limit.
429 "Monthly API limit exceeded"
Cause: You've used your plan's full monthly request allowance.
Fix: Wait for your next billing cycle reset, or upgrade to a plan with a higher monthly limit.