The teammate detail endpoint returns a bare object, not a {"result":...}
envelope, so the N+1 scope fetch silently discarded scopes and MFA was
always Unknown for every teammate. Decode the bare object.
Found by re-recording the driver cassette against the live API; the
hand-written cassette had hidden the mismatch. Also from that review:
- Map is_sso/is_partner_sso to AuthMethod (SSO vs Password) instead of
hardcoding Unknown
- Log the swallowed teammate-detail fetch error (wire the driver logger,
matching github.go)
- Add a restricted teammate + a missing-email row to the cassette so the
N+1 decode, the empty-email skip, and the SSO path are load-bearing
- Drop the stale Content-Length response header; document ExternalID
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
176 lines
12 KiB
YAML
176 lines
12 KiB
YAML
---
|
|
version: 2
|
|
interactions:
|
|
- id: 0
|
|
request:
|
|
proto: HTTP/1.1
|
|
proto_major: 1
|
|
proto_minor: 1
|
|
content_length: 0
|
|
host: api.sendgrid.com
|
|
form:
|
|
limit:
|
|
- "500"
|
|
offset:
|
|
- "0"
|
|
headers:
|
|
Accept:
|
|
- application/json
|
|
url: https://api.sendgrid.com/v3/teammates?limit=500&offset=0
|
|
method: GET
|
|
response:
|
|
proto: HTTP/1.1
|
|
proto_major: 1
|
|
proto_minor: 1
|
|
content_length: -1
|
|
body: |
|
|
{"result":[{"username":"owner@example.com","email":"owner@example.com","first_name":"","last_name":"","address":"","address2":"","city":"","state":"","zip":"","country":"","company":"","website":"","phone":"","is_admin":true,"is_sso":false,"user_type":"owner","is_unified":true,"is_partner_sso":false},{"username":"taylor-teammate","email":"taylor@example.com","first_name":"Taylor","last_name":"Teammate","is_admin":false,"is_sso":true,"user_type":"teammate","is_unified":false,"is_partner_sso":false},{"username":"pending-invite","email":"","first_name":"","last_name":"","is_admin":false,"is_sso":false,"user_type":"teammate","is_unified":false,"is_partner_sso":false}]}
|
|
headers:
|
|
Access-Control-Allow-Headers:
|
|
- AUTHORIZATION, Content-Type, On-behalf-of, x-sg-elas-acl, X-Recaptcha, X-Request-Source, Browser-Fingerprint
|
|
Access-Control-Allow-Methods:
|
|
- HEAD, GET, PUT, POST, DELETE, OPTIONS, PATCH
|
|
Access-Control-Allow-Origin:
|
|
- '*'
|
|
Access-Control-Expose-Headers:
|
|
- Link, Location
|
|
Access-Control-Max-Age:
|
|
- "21600"
|
|
Cache-Control:
|
|
- no-cache
|
|
Connection:
|
|
- keep-alive
|
|
Content-Security-Policy:
|
|
- default-src https://api.sendgrid.com; frame-src 'none'; object-src 'none'
|
|
Content-Type:
|
|
- application/json; charset=utf8
|
|
Date:
|
|
- Thu, 04 Jun 2026 12:30:33 GMT
|
|
Link:
|
|
- <https://chaos.ing.customer-growth-eng.general-prod-a.us-east-2.aws.k8s.sendgrid.net/v3/teammates?limit=500&offset=0>; rel="first"; title="1", <https://chaos.ing.customer-growth-eng.general-prod-a.us-east-2.aws.k8s.sendgrid.net/v3/teammates?limit=500&offset=0>; rel="last"; title="1"
|
|
Powered-By:
|
|
- Mako
|
|
Referrer-Policy:
|
|
- strict-origin-when-cross-origin
|
|
Server:
|
|
- nginx
|
|
Strict-Transport-Security:
|
|
- max-age=31536000
|
|
X-Client-Ff:
|
|
- "1000"
|
|
X-Content-Type-Options:
|
|
- nosniff
|
|
X-Envoy-Upstream-Service-Time:
|
|
- "231"
|
|
X-Ratelimit-Limit:
|
|
- "600"
|
|
X-Ratelimit-Remaining:
|
|
- "599"
|
|
X-Ratelimit-Reset:
|
|
- "1780576260"
|
|
X-Robots-Tag:
|
|
- noindex, nofollow
|
|
status: 200 OK
|
|
code: 200
|
|
duration: 323.748208ms
|
|
- id: 1
|
|
request:
|
|
proto: HTTP/1.1
|
|
proto_major: 1
|
|
proto_minor: 1
|
|
content_length: 0
|
|
host: api.sendgrid.com
|
|
headers:
|
|
Accept:
|
|
- application/json
|
|
url: https://api.sendgrid.com/v3/teammates/owner@example.com
|
|
method: GET
|
|
response:
|
|
proto: HTTP/1.1
|
|
proto_major: 1
|
|
proto_minor: 1
|
|
transfer_encoding:
|
|
- chunked
|
|
content_length: -1
|
|
uncompressed: true
|
|
body: |
|
|
{"username":"owner@example.com","email":"owner@example.com","first_name":"","last_name":"","address":"","address2":"","city":"","state":"","zip":"","country":"","company":"","website":"","phone":"","is_admin":true,"is_sso":false,"user_type":"owner","scopes":["2fa_exempt","2fa_required","access_settings.activity.read","access_settings.whitelist.create","access_settings.whitelist.delete","access_settings.whitelist.read","access_settings.whitelist.update","alerts.create","alerts.delete","alerts.read","alerts.update","api_keys.create","api_keys.delete","api_keys.read","api_keys.update","asm.groups.create","asm.groups.delete","asm.groups.read","asm.groups.suppressions.create","asm.groups.suppressions.delete","asm.groups.suppressions.read","asm.groups.suppressions.update","asm.groups.update","asm.suppressions.global.create","asm.suppressions.global.delete","asm.suppressions.global.read","asm.suppressions.global.update","billing.create","billing.delete","billing.read","billing.update","browsers.stats.read","categories.create","categories.delete","categories.read","categories.stats.read","categories.stats.sums.read","categories.update","clients.desktop.stats.read","clients.phone.stats.read","clients.stats.read","clients.tablet.stats.read","clients.webmail.stats.read","credentials.create","credentials.delete","credentials.read","credentials.update","design_library.create","design_library.delete","design_library.read","design_library.update","devices.stats.read","email_testing.read","email_testing.write","geo.stats.read","ips.pools.ips.read","mail.batch.create","mail.batch.delete","mail.batch.read","mail.batch.update","mail.send","mail_settings.address_whitelist.create","mail_settings.address_whitelist.delete","mail_settings.address_whitelist.read","mail_settings.address_whitelist.update","mail_settings.bcc.create","mail_settings.bcc.delete","mail_settings.bcc.read","mail_settings.bcc.update","mail_settings.bounce_purge.create","mail_settings.bounce_purge.delete","mail_settings.bounce_purge.read","mail_settings.bounce_purge.update","mail_settings.footer.create","mail_settings.footer.delete","mail_settings.footer.read","mail_settings.footer.update","mail_settings.forward_bounce.create","mail_settings.forward_bounce.delete","mail_settings.forward_bounce.read","mail_settings.forward_bounce.update","mail_settings.forward_spam.create","mail_settings.forward_spam.delete","mail_settings.forward_spam.read","mail_settings.forward_spam.update","mail_settings.plain_content.create","mail_settings.plain_content.delete","mail_settings.plain_content.read","mail_settings.plain_content.update","mail_settings.read","mail_settings.spam_check.create","mail_settings.spam_check.delete","mail_settings.spam_check.read","mail_settings.spam_check.update","mail_settings.template.create","mail_settings.template.delete","mail_settings.template.read","mail_settings.template.update","mailbox_providers.stats.read","marketing.automation.read","marketing.read","messages.read","partner_settings.new_relic.create","partner_settings.new_relic.delete","partner_settings.new_relic.read","partner_settings.new_relic.update","partner_settings.read","partner_settings.sendwithus.create","partner_settings.sendwithus.delete","partner_settings.sendwithus.read","partner_settings.sendwithus.update","recipients.erasejob.create","recipients.erasejob.read","sender_verification_eligible","signup.trigger_confirmation","stats.global.read","stats.read","subusers.stats.monthly.read","subusers.stats.read","subusers.stats.sums.read","suppression.blocks.create","suppression.blocks.delete","suppression.blocks.read","suppression.blocks.update","suppression.bounces.create","suppression.bounces.delete","suppression.bounces.read","suppression.bounces.update","suppression.create","suppression.delete","suppression.invalid_emails.create","suppression.invalid_emails.delete","suppression.invalid_emails.read","suppression.invalid_emails.update","suppression.read","suppression.spam_reports.create","suppression.spam_reports.delete","suppression.spam_reports.read","suppression.spam_reports.update","suppression.unsubscribes.create","suppression.unsubscribes.delete","suppression.unsubscribes.read","suppression.unsubscribes.update","suppression.update","teammates.create","teammates.delete","teammates.read","teammates.update","templates.create","templates.delete","templates.read","templates.update","templates.versions.activate.create","templates.versions.activate.delete","templates.versions.activate.read","templates.versions.activate.update","templates.versions.create","templates.versions.delete","templates.versions.read","templates.versions.update","tracking_settings.click.create","tracking_settings.click.delete","tracking_settings.click.read","tracking_settings.click.update","tracking_settings.google_analytics.create","tracking_settings.google_analytics.delete","tracking_settings.google_analytics.read","tracking_settings.google_analytics.update","tracking_settings.open.create","tracking_settings.open.delete","tracking_settings.open.read","tracking_settings.open.update","tracking_settings.read","tracking_settings.subscription.create","tracking_settings.subscription.delete","tracking_settings.subscription.read","tracking_settings.subscription.update","ui.confirm_email","ui.provision","ui.signup_complete","user.account.read","user.credits.read","user.email.read","user.profile.create","user.profile.delete","user.profile.read","user.profile.update","user.scheduled_sends.create","user.scheduled_sends.delete","user.scheduled_sends.read","user.scheduled_sends.update","user.settings.enforced_tls.read","user.settings.enforced_tls.update","user.timezone.create","user.timezone.delete","user.timezone.read","user.timezone.update","user.username.read","user.webhooks.event.settings.create","user.webhooks.event.settings.delete","user.webhooks.event.settings.read","user.webhooks.event.settings.update","user.webhooks.event.test.create","user.webhooks.event.test.delete","user.webhooks.event.test.read","user.webhooks.event.test.update","user.webhooks.parse.settings.create","user.webhooks.parse.settings.delete","user.webhooks.parse.settings.read","user.webhooks.parse.settings.update","user.webhooks.parse.stats.read","whitelabel.create","whitelabel.delete","whitelabel.read","whitelabel.update"],"is_read_only":false,"is_unified":true,"is_partner_sso":false}
|
|
headers:
|
|
Access-Control-Allow-Headers:
|
|
- AUTHORIZATION, Content-Type, On-behalf-of, x-sg-elas-acl, X-Recaptcha, X-Request-Source, Browser-Fingerprint
|
|
Access-Control-Allow-Methods:
|
|
- HEAD, GET, PUT, POST, DELETE, OPTIONS, PATCH
|
|
Access-Control-Allow-Origin:
|
|
- '*'
|
|
Access-Control-Expose-Headers:
|
|
- Link, Location
|
|
Access-Control-Max-Age:
|
|
- "21600"
|
|
Cache-Control:
|
|
- no-cache
|
|
Connection:
|
|
- keep-alive
|
|
Content-Security-Policy:
|
|
- default-src https://api.sendgrid.com; frame-src 'none'; object-src 'none'
|
|
Content-Type:
|
|
- application/json; charset=utf8
|
|
Date:
|
|
- Thu, 04 Jun 2026 12:30:33 GMT
|
|
Powered-By:
|
|
- Mako
|
|
Referrer-Policy:
|
|
- strict-origin-when-cross-origin
|
|
Server:
|
|
- nginx
|
|
Strict-Transport-Security:
|
|
- max-age=31536000
|
|
X-Client-Ff:
|
|
- "1000"
|
|
X-Content-Type-Options:
|
|
- nosniff
|
|
X-Envoy-Upstream-Service-Time:
|
|
- "264"
|
|
X-Ratelimit-Limit:
|
|
- "600"
|
|
X-Ratelimit-Remaining:
|
|
- "599"
|
|
X-Ratelimit-Reset:
|
|
- "1780576260"
|
|
X-Robots-Tag:
|
|
- noindex, nofollow
|
|
status: 200 OK
|
|
code: 200
|
|
duration: 283.823083ms
|
|
- id: 2
|
|
request:
|
|
proto: HTTP/1.1
|
|
proto_major: 1
|
|
proto_minor: 1
|
|
content_length: 0
|
|
host: api.sendgrid.com
|
|
headers:
|
|
Accept:
|
|
- application/json
|
|
url: https://api.sendgrid.com/v3/teammates/taylor-teammate
|
|
method: GET
|
|
response:
|
|
proto: HTTP/1.1
|
|
proto_major: 1
|
|
proto_minor: 1
|
|
transfer_encoding:
|
|
- chunked
|
|
content_length: -1
|
|
uncompressed: true
|
|
body: |
|
|
{"username":"taylor-teammate","email":"taylor@example.com","first_name":"Taylor","last_name":"Teammate","is_admin":false,"is_sso":true,"user_type":"teammate","is_unified":false,"is_partner_sso":false,"scopes":["mail.send","2fa_required"]}
|
|
headers:
|
|
Content-Type:
|
|
- application/json; charset=utf8
|
|
Date:
|
|
- Thu, 04 Jun 2026 12:30:34 GMT
|
|
Server:
|
|
- nginx
|
|
status: 200 OK
|
|
code: 200
|
|
duration: 18ms
|