사람 목록
앱의 연락처 페이지가 나열하는 모든 사람입니다. 저장된 연락처와, 스레드의 최신 메시지에서 보낸 사람이나 받는 사람으로 메일에 등장한 모든 주소를 각자 메일함과 함께하는 스레드 수, 마지막으로 메일이 오간 시각과 함께 돌려줍니다. 메일에서 보았고 저장도 된 사람은 한 행입니다. 페이지 나누기는 키셋 방식입니다. `limit`은 최대 100이고 기본값은 25이며, `hasMore`가 true인 동안 `nextCursor`를 `cursor`로 다시 보냅니다.
본인 키로 워크스페이스에 실제 호출을 실행합니다.
GET /contacts/people
앱의 연락처 페이지가 나열하는 모든 사람입니다. 저장된 연락처와, 스레드의 최신 메시지에서 보낸 사람이나 받는 사람으로 메일에 등장한 모든 주소를 각자 메일함과 함께하는 스레드 수, 마지막으로 메일이 오간 시각과 함께 돌려줍니다. 메일에서 보았고 저장도 된 사람은 한 행입니다. 페이지 나누기는 키셋 방식입니다. limit은 최대 100이고 기본값은 25이며, hasMore가 true인 동안 nextCursor를 cursor로 다시 보냅니다.
예시
contacts:read가 필요합니다. 메일에서 본 주소는 키가 threads:read도 가진 경우에만 포함됩니다.
curl "$OE/contacts/people?sort=threads&limit=25" -H "$AUTH"{ "object": "list", "data": [ { "object": "person", "email": "[email protected]", "displayEmail": "[email protected]", "name": "Ada Lovelace", "saved": true, "source": "manual", "notes": "Met at the engine demo", "photoUrl": null, "threads": 42, "lastAt": "2026-09-22T16:04:11.000Z", "createdAt": "2026-08-01T10:00:00.000Z", "updatedAt": "2026-09-01T09:12:00.000Z", "blockedBy": null }, { "object": "person", "email": "[email protected]", "displayEmail": "[email protected]", "name": "Shop", "saved": false, "source": null, "notes": null, "photoUrl": null, "threads": 17, "lastAt": "2026-09-21T07:30:00.000Z", "createdAt": null, "updatedAt": null, "blockedBy": { "rule": "shop.example", "list": "blockedDomains" } } ], "hasMore": true, "nextCursor": "WyIyMDI2LTA5LTIxVDA3OjMwOjAwLjAwMFoiLDE3XQ", "seen": true}sort는 recent(기본값)이면 최신 메일부터, 메일에서 한 번도 보지 못한 저장된 연락처는 그 뒤에 오고, name이면 이름이나 이름이 없으면 주소 순으로 대소문자를 구분하지 않고, threads이면 스레드가 많은 순입니다. 동률은 주소로 정하므로 목록을 훑을 때 행이 반복되거나 빠지지 않습니다.
q는 이름, 주소, 메모를 검색합니다. email은 주소 하나만 읽으며, 한 사람의 스레드 수와 마지막 메일을 가져오는 방법입니다. blocked=true는 워크스페이스 차단 목록이 차단하는 사람만 돌려주며 도메인 전체 규칙도 포함하고, blockedBy는 각 행에서 그 규칙을 알려 줍니다.
threads:read가 없으면 행은 저장된 연락처뿐이고 seen은 false입니다. 나머지는 메일에서 읽기 때문입니다. 삭제된 주소와 메일함 자신의 주소는 절대 나열되지 않습니다. 커서는 불투명합니다. 같은 sort, q, blocked와 함께 다시 보내고, 발급되지 않은 커서는 400 invalid_cursor입니다.