Shane H.
@ship_shane ·
GHL API creates contact & opportunity successfully (201) but they never appear in the dashboard — n8n automation
Hey everyone, I'm building an n8n automation that creates a contact and then an opportunity in GoHighLevel via the v2 API using a Private Integration Token. Both API calls return 201 success responses with valid IDs, but neither the contact nor the opportunity ever show up in the GHL dashboard . What I'm doing: Calling POST /contacts/ with firstName , locationId , and email Then calling POST /opportunities/ with pipelineId , locationId , name , status , and contactId Both return 201 with full objects including IDs The contact briefly appeared in the "Restore contacts" (trash) section, suggesting GHL is auto-deleting it immediately after creation What I've tried: Confirmed the token has contacts.write and opportunities.write scopes Confirmed locationId matches the subaccount I'm viewing in the dashboard Tried searching by name in the contacts list — nothing shows Tried filtering to "All" contacts with no smart list — still empty Tried deleting and recreating the contact via API — same result The contact showed up briefly in the "Restore deleted contacts" section, meaning GHL created it and then auto-deleted it Suspicion: GHL seems to require either a valid email or phone to persist a contact. I'm generating a placeholder email ( projectname@projekt.intern ) but the contact still gets silently deleted. Could GHL be rejecting non-standard TLD emails and soft-deleting the record? Attached: sanitized n8n node JSON for the relevant nodes (Create Contact, Create Opportunity, Resolve Opportunity ID, and the subsequent upload steps) Has anyone successfully created contacts and opportunities via the v2 API with a Private Integration Token and had them show up in the dashboard? Any insight would be massively appreciated. submitted by /a community member [link] [comments]