← All platforms

Google

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.

← Back to all platforms