
HubSpot PKCE / code challenge error
A 2026-specific fix for the HubSpot Trigger authorization error in n8n when the credential asks for an App ID and Developer API Key that new HubSpot accounts can no longer create.
Open fix →No broad tutorials. 105 exact failure modes that stop n8n automations in production, grouped by integration. Or browse a single integration desk.

A 2026-specific fix for the HubSpot Trigger authorization error in n8n when the credential asks for an App ID and Developer API Key that new HubSpot accounts can no longer create.
Open fix →
Fix the case where HubSpot custom Contact fields exist in the portal but do not appear in n8n’s Create or Update Contact field list, even with a valid Service Key and schema scope.
Open fix →
How to handle the HubSpot node typeVersion 2.2 case where saved custom-property rows reopen as empty unsupported dropdowns even though the workflow JSON and runtime writes are still valid.
Open fix →
A narrow fix for HubSpot Create Deal failures in n8n when a stage internal ID such as qualifiedtobuy is entered as an expression and resolves to an empty value.
Open fix →
Fix the n8n HubSpot Create Deal UI case where the association field will not accept an expression for the Contact ID created by the previous node.
Open fix →
Why a valid HubSpot private-app token can still fail in n8n with “This hapikey doesn’t exist,” and how to move the node off legacy API-key authentication without rebuilding the workflow.
Open fix →
A scope-by-scope diagnosis for n8n HubSpot OAuth when HubSpot says permissions are missing even though the app settings appear to contain them.
Open fix →
How to diagnose an n8n HubSpot contact search that works with a fixed value but fails with “operator EQ requires a value” when the filter is an expression.
Open fix →
A safe fix for HubSpot INVALID_LONG validation errors caused by n8n date transforms turning missing dates into “Invalid date” or non-midnight timestamps.
Open fix →
How to diagnose the HubSpot Trigger case where Ticket Property Changed is selected but n8n does not expose a property picker and HubSpot rejects the subscription because propertyName is missing.
Open fix →
Diagnose the n8n HubSpot upsert case where an existing contact causes CONTACT_EXISTS instead of an update, then choose a reliable identifier and fallback path.
Open fix →
A debugging path for HubSpot Get-by-ID calls that work with a hardcoded record ID but fail with 404 when the same ID comes from an n8n expression.
Open fix →
Fix the HubSpot Notes API validation error that names hs_timestamp as missing when an n8n HTTP Request sends hs_note_body and associations but no timeline timestamp.
Open fix →
What to do when a HubSpot contact property such as hs_linkedin_url is searchable in n8n but does not appear as a writable field in Create or Update Contact.
Open fix →
A bounded-retry design for n8n workflows where a newly changed HubSpot record is missing required properties on the first automatic read but becomes complete seconds later.
Open fix →
Why a HubSpot token can work for CRM calls yet return 401 MISSING_AUTH on a Knowledge Base URL, and how to replace an undocumented CMS path with a supported GraphQL or Site Search request.
Open fix →
Decode HubSpot’s confusing ticket.creation subscription error, identify the ticket scope from the hidden scopeCandidates payload, and avoid breaking OAuth by adding unrelated permissions.
Open fix →
A production-path diagnosis for HubSpot triggers that receive events while n8n is manually listening but go silent after the workflow is activated, especially on self-hosted reverse-proxy setups.
Open fix →
Fix a HubSpot email subscription update that fails from n8n because the legacy v3 subscribe endpoint was called with PUT, then decide whether to stay on v3 or migrate to the 2026-03 preferences API.
Open fix →
A low-noise fallback when n8n’s HubSpot Trigger does not expose a Meeting Created event: read HubSpot meeting activity records directly, keep a cursor, and enrich only the meetings that are actually new.
Open fix →
If an n8n HTTP Request is PATCHing `/crm/v3/schemas/{objectTypeId}`, it is editing the custom-object definition, not a CRM record. Search the record first, then PATCH `/crm/objects/2026-03/{objectTypeId}/{recordId}`.
Open fix →
A HubSpot contact property is not the same thing as a CRM association. If n8n does not return the primary company ID with a contact, retrieve the contact’s company associations and identify the primary relationship instead of guessing from a field.
Open fix →
When an n8n HubSpot task is created successfully but remains unassigned, verify the owner through HubSpot’s Owners API and send the owner’s `id` as `hubspot_owner_id` in the task properties.
Open fix →
If the native n8n HubSpot search does not expose GT/LT/GTE/LTE for a datetime property and fails with a `reading 'cause'` stack trace, use HubSpot’s CRM Search API through HTTP Request and paginate with the body `after` cursor.
Open fix →
HubSpot will retire legacy OAuth v1 token endpoints on February 16, 2027. If an n8n-connected app appears in the warning, identify whether the calls come from a built-in credential, generic OAuth2 credential, custom HTTP node, or external helper before changing production authentication.
Open fix →
If every Respond.io, form, or messaging event creates another HubSpot deal, stop treating every interaction as a new opportunity. Resolve the contact, search only that contact’s open deals, then update or skip before Create Deal.
Open fix →
If activating another HubSpot Trigger makes an older workflow stop receiving events, compare the HubSpot app and target webhook used by both workflows before debugging scopes or node logic.
Open fix →
A HubSpot workflow can retry a slow or failed webhook later, making an n8n execution look mysteriously delayed. Compare HubSpot action logs with n8n receive time before blaming the trigger.
Open fix →
A July 2026 report showed HubSpot Remote MCP authentication returning to n8n but failing during OAuth v3 token exchange. The reporter later connected successfully on n8n 2.32.5, so version-check first.
Open fix →
If an AI Agent can set one HubSpot property but adding a second property triggers the $fromAI consistency error, inspect the generated $fromAI keys, descriptions, and types instead of changing HubSpot scopes.
Open fix →
The exact HubSpot API rate limits by app type, why a workflow that ran fine for months suddenly throws 429s, and an n8n-specific batching and retry pattern that stays under the limit instead of guessing at delays.
Open fix →
Why a workflow that paginates through HubSpot contacts, companies, or deals can silently skip records or process the same one twice, and how to build a cursor loop in n8n that catches both failure modes.
Open fix →
HubSpot's v1 Contact Lists API stops working on April 30, 2026. Here's exactly which n8n HubSpot node list operations rely on it, what HubSpot's three surviving v1 endpoints will and won't return afterward, and how to rebuild the same logic on the v3 Lists API.
Open fix →
The HubSpot node's Note operation can create a note, but attaching a file requires a separate upload-to-Files call and a specific association step — skipping either produces a note with no attachment and no error message telling you why.
Open fix →
The built-in HubSpot node's company/deal/contact fields create the default, unlabeled association between records. Applying a custom label like “Decision Maker” or “Renewal Owner” requires calling the Associations API directly with the label's specific type ID.
Open fix →
HubSpot batch endpoints return HTTP 207 Multi-Status when part of a batch succeeds and part fails. n8n's HubSpot node does not surface per-record results, so failures disappear or one bad row fails the whole run. Read the 207 body yourself with an HTTP Request node.
Open fix →
The HubSpot CRM Search API returns at most 10,000 results for any single query. Paging past that with the after cursor returns a 400. Split the query into date-range windows, or use the Export or List APIs for full datasets.
Open fix →
HubSpot stores multi-checkbox (enumeration) property values as a single semicolon-delimited string of internal names. Sending a comma list, a JSON array, or option labels overwrites the field with one value or fails. Send internal names joined by semicolons.
Open fix →
The n8n HubSpot node has no operation to add line items to a deal. Create each line item with the CRM v3 line_items endpoint, then associate it to the deal. Use hs_product_id to base a line item on a product.
Open fix →HubSpot publishes three different rate limits, and a 429 tells you nothing about which one you crossed. The exact figures per app type and tier, how to read the response to identify the limit, and a backoff that respects it.
Open fix →
The hapikey query parameter is gone. What replaces it, the exact header change, why a working curl can still fail inside a connector, and how to prove no forgotten job is still using the old path.
Open fix →Why an association call succeeds and still produces the wrong relationship, how HUBSPOT_DEFINED and USER_DEFINED type IDs differ, and the one lookup that makes custom labels portable across portals.
Open fix →Both failures return HTTP 429, but one clears in ten seconds and the other does not clear until the daily window resets. How to identify which you hit from the response, and why the correct response to each is the opposite.
Open fix →
The concrete path, identifier and payload changes between HubSpot's legacy CRM endpoints and the v3 object API, including the vid-to-id switch that quietly breaks stored record references.
Open fix →One portal or many is the whole decision. The concrete differences in token lifetime, request shape, rate limits and scope handling, with the exact calls each one makes.
Open fix →The 403 body names the scope it wants. How to read it, map endpoints to scopes, check what a token actually carries, and why a read-only smoke test hides the problem until the first write.
Open fix →HubSpot writes take a property's internal name, never the label you see in the UI. How to fetch the real names, why they diverge from labels, and the mapping step that stops the error recurring.
Open fix →The 400 body lists every rejected property individually with a machine-readable error code. How to read it, the four codes that account for almost all of them, and the deal fields HubSpot requires that contacts do not.
Open fix →
HubSpot webhooks are configured on the app, not the portal, and a subscription can exist while being inactive, unsubscribed by a scope change, or throttled by your own slow endpoint. The checks, in order.
Open fix →
Pipedrive shut down API v1 endpoints on July 31, 2026. Here's exactly which n8n Pipedrive node resources were affected, which n8n version fixes it, and what changes in your workflows.
Open fix →
Why a webhook that fires fine when you test it manually in n8n returns a 404 "not registered" error when Pipedrive (or any other tool) calls it for real.
Open fix →
Why custom field names that work fine in the Pipedrive UI get rejected by the API when n8n sends them, and how to find the internal key Pipedrive actually expects.
Open fix →
Why the dedicated Pipedrive Trigger node in n8n can suddenly stop registering, with a validation-failed error, on workflows that had worked for months.
Open fix →
Pipedrive has no built-in duplicate-deal blocking like Salesforce's Duplicate Rules — here's the search-then-branch pattern that actually stops repeat automations from creating the same deal twice.
Open fix →![Comparison graphic showing a plain email string stored as [object Object] versus the array-of-objects shape (value, primary, label) Pipedrive expects from n8n.](/images/guides/fix-n8n-pipedrive-person-email-phone-array-of-objects.webp)
Pipedrive's Persons API expects email and phone as an array of objects with value, primary, and label. Sending a plain string, or letting n8n stringify an object, saves [object Object] or drops the value. Build the array explicitly.
Open fix →
Why the Pipedrive node's Organization field rejects a value that looks correct, and the specific ID-vs-name expectation change behind it.
Open fix →
Why a Pipedrive deal created from n8n links to only one of the person or organization fields even though both were provided, and the field-precedence behavior causing it.
Open fix →
Pipedrive does not count requests, it charges tokens, and different endpoints cost different amounts. The budget formula, why a search-heavy workflow exhausts it far faster than a write-heavy one, and what to do when it runs out.
Open fix →
An API token is one user's identity with that user's visibility. OAuth is an installable app with scopes and refresh. The concrete request differences, and the permission trap that makes a token look like it is losing data.
Open fix →
v1 put custom field hashes at the top level of the record; v2 nests them under custom_fields and stops returning them unless asked. The four changes that break a v1-shaped integration, with both payloads side by side.
Open fix →
A correct field key is only half of an option field. Each dropdown choice has its own numeric ID, and the visible text is never accepted. Where to find the IDs, and how multi-select differs from single-select.
Open fix →
Pipedrive generates a 40-character hash when a custom field is created and that hash is the only key the API accepts. Both ways to find it, and why the UI label is never a substitute.
Open fix →
Pipedrive's create endpoints do not deduplicate. Search-then-create narrows the window but does not close it; an idempotency key stored on the record does. Both patterns, with the calls.
Open fix →
Pipedrive charges by cost, not by call, so the wins come from removing expensive work: search replaced by keyed reads, metadata cached, cursors persisted, and reconciliation separated from event handling.
Open fix →Version 2 renames the fields a receiver reads on every event: current becomes data, meta.object becomes meta.entity, and the identifiers move. What breaks, and how to accept both during the transition.
Open fix →
Why the Salesforce authorization popup fails with an unexpected-error message when you try to connect an n8n credential, and the Connected App settings that actually cause it.
Open fix →
The exact place two URLs have to match character-for-character when a Salesforce Connected App rejects n8n's OAuth callback, including the http vs https and trailing-slash mistakes that cause it.
Open fix →
Why n8n's Salesforce credential can fail to authorize against a Developer sandbox specifically, even though the same setup works for a Partial Copy or Full sandbox.
Open fix →
Why the Salesforce node's upsert operation can fail with a vague bad-request message on a custom object even when insert works, and the field-level checks that usually explain it.
Open fix →
Why a Salesforce Create operation from n8n fails with DUPLICATE_VALUE or DUPLICATES_DETECTED, and the search-before-create pattern that fixes it for good.
Open fix →
Salesforce sessions expire (default two hours) and the token endpoint returns no expiry, so n8n keeps using a session Salesforce has already invalidated. Isolate credentials per workflow, keep each run short, and let n8n re-authenticate on failure.
Open fix →
Salesforce restricted picklists reject any value not in their defined set. n8n usually sends the label, the wrong case, a trailing space, or a value not enabled for the record type. Send the exact API value, case-sensitive, mapped to the record type.
Open fix →Four causes produce this one error: the label instead of the value, a case or whitespace difference, an inactive value, or a value the target record type does not expose. How to tell which, in one describe.
Open fix →
The error names the field, and the field is often not required in the object's metadata at all. The five places a requirement can come from, and how to find which one is enforcing it.
Open fix →One REST resource returns every allocation with its max and remaining. Which line actually governs your workload, what it costs to read, and how to alert before a backfill takes the org's integrations down.
Open fix →
REST tells you immediately and per request; Bulk 2.0 tells you afterwards, per row, in a results file you have to fetch. The two failure models, and the retry logic each one needs.
Open fix →
External Client App or legacy Connected App, the PKCE and Require Secret combinations that differ between them, the scopes an integration actually needs, and the propagation delay that makes a correct setup look broken.
Open fix →
The error means the app demands PKCE and the client did not send it. What the three parameters are, how to generate them correctly, and why the mismatch usually comes from mixing up two app types.
Open fix →
A field's describe lists forty values while the record type you are writing to allows eight. Which endpoint answers the question that governs the write, and how to make mapping record-type-aware.
Open fix →
One rejects unknown values loudly; the other accepts them silently and pollutes the value set. The describe flag that tells them apart, and why the loud one is what an integration should want.
Open fix →
A refresh replaces the org. Refresh tokens, the app's Consumer Key, the integration user and often the My Domain host are all new — so the credential fails for four independent reasons at once.
Open fix →
Fix Airtable 422 field-value errors in n8n by matching each field's API shape, checking select choices, using typecast deliberately, and validating IDs.
Open fix →
Fix Airtable 422 UNKNOWN_FIELD_NAME in n8n by refreshing stale field IDs, separating names from IDs, checking renamed fields, and removing read-only writes.
Open fix →
Fix Airtable 429 RATE_LIMIT_REACHED in n8n by respecting the 5 req/s per-base limit, batching up to 10 records, pacing loops, and backing off after 429s.
Open fix →
Fix Airtable attachment 403s in n8n by downloading files while API URLs are fresh, storing durable copies, and using the correct upload path for new files.
Open fix →
Stop n8n-to-Airtable feedback loops by narrowing watched fields, adding a sync sentinel, checking last-modified metadata, and making writes idempotent.
Open fix →
Fix n8n webhooks that return 404 or never fire by checking test vs production URLs, publish state, HTTP method, reverse-proxy path, and response mode.
Open fix →
Diagnose n8n executions stuck Running or timing out by separating Wait states, sub-workflows, worker failures, timeout settings, and stale execution state.
Open fix →
Debug n8n HTTP Request 401, 403, and 500 errors by exposing the real response body, fixing auth and payload shape, then retrying only transient failures.
Open fix →
Fix n8n Error Workflows that never fire by testing production runs, assigning the handler correctly, avoiding swallowed errors, and validating trigger payloads.
Open fix →
Find why an n8n workflow works on Cloud but fails self-hosted by comparing node availability, binary storage, payload limits, environment URLs, memory, and versions.
Open fix →
Why the Google Sheets Trigger set to Row Updated fails to activate or silently misses edits, while Row Added on the same sheet works normally.
Open fix →
How Google Sheets API quotas actually apply per-project and per-user, why n8n workflows hit them faster than expected, and how to fix it without just adding a blind Wait node.
Open fix →
Why a Google Sheets Trigger fires correctly when tested manually in the editor but detects nothing once the workflow is activated and left running.
Open fix →
What this specific internal error means when activating a Google Sheets trigger, and the sheet-reference conditions that cause it.
Open fix →
Why Slack's Event Subscriptions URL verification fails against an n8n webhook, and the exact conditions the endpoint has to meet before Slack will accept it.
Open fix →
Why the Slack node returns channel_not_found even for a real, visible channel, and the specific membership and ID conditions the Slack API actually checks.
Open fix →
Why an active Slack Trigger node can sit silent with no incoming events even though the Slack app and workflow both look correctly configured.
Open fix →
Why the Slack node's channel picker fails to load or shows an empty list, and which specific bot scopes the dropdown depends on that message sending does not.
Open fix →
Why a webhook placed inside an ActiveCampaign automation can fail to send anything to n8n even though the automation itself runs and the contact passes through it.
Open fix →
Why ActiveCampaign custom fields silently fail to update from n8n, and why deal fields specifically require an ID you cannot find anywhere in the ActiveCampaign UI.
Open fix →
Why the ActiveCampaign Update Contact operation can complete without error while the contact record shows no changes, and what to check before assuming the node is broken.
Open fix →
Why the Mailchimp Trigger throws a resource-not-found error even when the audience/list clearly exists, and the data-center and list-ID mismatch that usually causes it.
Open fix →
Why the Mailchimp Trigger node fails specifically at the activation step, separate from any later delivery or data problem.
Open fix →
Why a Mailchimp batch API call can fail with resource-not-found for individual operations inside it, even when the exact same operation succeeds when run alone.
Open fix →