Workflow: Stopanderror Code Automation

Workflow Details

Download Workflow
{
    "id": "IYgbtNpyB4E6Jbxo",
    "meta": {
        "instanceId": "35ae520798f87e479496aa54e1a1f89ffdf43eee77986511d08258a12b1edc98",
        "templateCredsSetupCompleted": true
    },
    "name": "2. Refresh Pipedrive tokens",
    "tags": [],
    "nodes": [
        {
            "id": "2b66edcd-c71a-4dac-971f-deb1b09ef85b",
            "name": "Stop and Error",
            "type": "n8n-nodes-base.stopAndError",
            "position": [
                1460,
                -80
            ],
            "parameters": {
                "errorMessage": "Token refresh failed"
            },
            "typeVersion": 1,
            "alwaysOutputData": false
        },
        {
            "id": "b48d6760-766e-4b39-be35-89de7dc3ab5e",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                60,
                -300
            ],
            "parameters": {
                "color": 5,
                "width": 872,
                "height": 97,
                "content": "## Step 2:\nCreate a workflow to refresh your access token when the access token requires a refresh."
            },
            "typeVersion": 1
        },
        {
            "id": "6119eef3-9ffa-45a1-b238-412738e7529e",
            "name": "Sticky Note1",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                280,
                -80
            ],
            "parameters": {
                "height": 211,
                "content": "\n\n\n\n\n\n\n\nPost unique data to identify your row in Database and be able to fetch the existing access and refresh token"
            },
            "typeVersion": 1
        },
        {
            "id": "2d76be21-95e1-4747-b761-126b133e8264",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                980,
                -220
            ],
            "parameters": {
                "content": "## Get token from pipedrive"
            },
            "typeVersion": 1
        },
        {
            "id": "9a44eb63-9d31-4b24-9171-1f9a828a5c52",
            "name": "Sticky Note3",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                100,
                -740
            ],
            "parameters": {
                "color": 5,
                "width": 995,
                "height": 82,
                "content": "## Step 1:\nSave Refresh token and Access token to DB when authenticated by user and installed.  "
            },
            "typeVersion": 1
        },
        {
            "id": "f3247e6a-7c1c-4479-9f83-f3bc4146f254",
            "name": "Insert",
            "type": "n8n-nodes-base.supabase",
            "position": [
                1600,
                -660
            ],
            "parameters": {
                "tableId": "App_tok",
                "fieldsUi": {
                    "fieldValues": [
                        {
                            "fieldId": "ref_token",
                            "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"refresh_token\"] }}"
                        },
                        {
                            "fieldId": "acc_token",
                            "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"access_token\"] }}"
                        },
                        {
                            "fieldId": "Platform",
                            "fieldValue": "Pipedrive"
                        },
                        {
                            "fieldId": "created_at",
                            "fieldValue": "={{$now.toUTC().toString()}}"
                        },
                        {
                            "fieldId": "updated_at",
                            "fieldValue": "={{$now.toUTC().toString()}}"
                        }
                    ]
                }
            },
            "credentials": {
                "supabaseApi": {
                    "id": "tlmP1CXY3ExzjJDs",
                    "name": "Supabase Automation"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "f7ad45d0-7055-45f4-9971-031ffebfdbda",
            "name": "Sticky Note4",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                500,
                -640
            ],
            "parameters": {
                "content": "You can also use SET NODE + tobase64 function as done in step 2"
            },
            "typeVersion": 1
        },
        {
            "id": "e14e2dac-e84b-475f-a01b-14bb723eedc8",
            "name": "Sticky Note5",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                100,
                200
            ],
            "parameters": {
                "color": 5,
                "width": 1644,
                "height": 80,
                "content": "## Step 3:\nMake an actual API call. In this example, we are using search person API. Please refer to Pipedrive API documentation for your specific use case. "
            },
            "typeVersion": 1
        },
        {
            "id": "b450c928-e0e4-4f49-829e-03b61828d4d9",
            "name": "Get Pipedrive Token",
            "type": "n8n-nodes-base.supabase",
            "position": [
                600,
                660
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "Platform",
                            "keyValue": "Pipedrive"
                        },
                        {
                            "keyName": "AppId",
                            "keyValue": "57db0bab2932f657"
                        }
                    ]
                },
                "tableId": "App_tok",
                "operation": "get"
            },
            "credentials": {
                "supabaseApi": {
                    "id": "tlmP1CXY3ExzjJDs",
                    "name": "Supabase Automation"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "f92a957a-d0ef-4037-8657-74e7fe74fe6d",
            "name": "Get contact from Pipedrive",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                900,
                660
            ],
            "parameters": {
                "url": "=https:\/\/priyajain-sandbox.pipedrive.com\/api\/v2\/persons\/search?fields=email&term={{ $node[\"Receive request\"].json[\"body\"][\"person\"][\"email\"] }}",
                "options": {
                    "response": {
                        "response": {
                            "fullResponse": true
                        }
                    }
                },
                "sendHeaders": true,
                "headerParameters": {
                    "parameters": [
                        {
                            "name": "Accept",
                            "value": "application\/json"
                        },
                        {
                            "name": "Authorization",
                            "value": "=Bearer {{ $node[\"Get Pipedrive Token\"].json[\"acc_token\"] }}"
                        }
                    ]
                }
            },
            "typeVersion": 4,
            "continueOnFail": true,
            "alwaysOutputData": false
        },
        {
            "id": "bff21156-3da0-4cf3-b3de-c24d8abe7577",
            "name": "Access Token Invalid",
            "type": "n8n-nodes-base.if",
            "position": [
                1160,
                700
            ],
            "parameters": {
                "conditions": {
                    "boolean": [
                        {
                            "value1": "={{ $json[\"error\"][\"message\"].includes(\"Invalid token: access token is invalid\") }}",
                            "value2": "={{ true }}"
                        }
                    ]
                },
                "combineOperation": "any"
            },
            "typeVersion": 1
        },
        {
            "id": "9fd832b1-2af9-48c2-9d57-86a9f34bdd78",
            "name": "Success",
            "type": "n8n-nodes-base.respondToWebhook",
            "position": [
                1440,
                720
            ],
            "parameters": {
                "options": {
                    "responseCode": 200
                },
                "respondWith": "json",
                "responseBody": "={{ $node[\"Get contact from Pipedrive\"].json[\"body\"][\"data\"][\"items\"][\"0\"][\"item\"][\"name\"] }}"
            },
            "typeVersion": 1
        },
        {
            "id": "daf33b32-ff7b-4d7e-8fd0-d54dfaddf405",
            "name": "Refresh Access Token",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                1360,
                320
            ],
            "parameters": {
                "url": "http:\/\/localhost:5678\/webhook\/937a8843-a28a-400a-b473-bdc598366fa0",
                "method": "POST",
                "options": [],
                "jsonBody": "{\n\n  \"appId\":\"57db0bab2932f657\"\n\n}",
                "sendBody": true,
                "specifyBody": "json",
                "authentication": "genericCredentialType",
                "genericAuthType": "httpBasicAuth"
            },
            "credentials": {
                "httpBasicAuth": {
                    "id": "E2RYFiR9PotuglZv",
                    "name": "PJ demo"
                }
            },
            "typeVersion": 4.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "6759a890-6c2a-4bb1-aae9-9b8723b9e143",
            "name": "Sticky Note6",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                580,
                420
            ],
            "parameters": {
                "width": 668,
                "content": "## Loop back to fecth the  refreshed Access Token\n### Note:\nYou can add further conditions and use Switch  statemen tinstead of IF to validate API response based on your use case."
            },
            "typeVersion": 1
        },
        {
            "id": "d975ce9f-2ef2-46b1-9d30-4f6e06e19b7e",
            "name": "Sticky Note7",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                120,
                -960
            ],
            "parameters": {
                "width": 1413,
                "content": "## 1. This workflow helps you create your own Oauth 2.0 token refresh system. It helps you have better control of your oauth 2.0 auth process.\n## 2. I am using Pipedrive API here. However, you can re-use this for other similar applications. "
            },
            "typeVersion": 1
        },
        {
            "id": "40d59a94-563d-459c-91d0-4206c2a19704",
            "name": "Sticky Note8",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                180,
                580
            ],
            "parameters": {
                "height": 248,
                "content": "A 3rd partyapplication posting the request to the webhook"
            },
            "typeVersion": 1
        },
        {
            "id": "03945766-570c-47db-82c6-2c973e45106d",
            "name": "convert clientId and secret to base64",
            "type": "n8n-nodes-base.code",
            "position": [
                560,
                -560
            ],
            "parameters": {
                "jsCode": "\/\/ Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst client_id = \"57db0bab2932f657\";\nconst client_secret = \"edfaba095e9e7ddefe2e960ce2e98345230a016d\";\n\n\/\/ Combine client_id and client_secret with a colon\nconst combinedString = client_id+\":\"+client_secret;\n\n\/\/ Encode the combined string in Base64\nconst encodedString = Buffer.from(combinedString).toString('base64');\n\n\/\/ Create the Authorization header value\nconst authorizationHeader = `Basic ${encodedString}`;\n\nreturn {\"authheader\":authorizationHeader};"
            },
            "typeVersion": 2
        },
        {
            "id": "8ca6eb93-6994-4536-b61e-d884c8515929",
            "name": "Generate Refresh Token from authcode",
            "type": "n8n-nodes-base.httpRequest",
            "maxTries": 2,
            "position": [
                820,
                -560
            ],
            "parameters": {
                "url": "https:\/\/oauth.pipedrive.com\/oauth\/token",
                "method": "POST",
                "options": {
                    "response": {
                        "response": {
                            "fullResponse": true
                        }
                    }
                },
                "sendBody": true,
                "contentType": "form-urlencoded",
                "sendHeaders": true,
                "bodyParameters": {
                    "parameters": [
                        {
                            "name": "grant_type",
                            "value": "authorization_code"
                        },
                        {
                            "name": "code",
                            "value": "={{$node[\"catch Auth code\"].json[\"query\"][\"code\"]}}"
                        },
                        {
                            "name": "redirect_uri",
                            "value": "={{ $node[\"catch Auth code\"].json[\"webhookUrl\"] }}"
                        }
                    ]
                },
                "headerParameters": {
                    "parameters": [
                        {
                            "name": "Authorization",
                            "value": "={{$node[\"convert clientId and secret to base64\"].json[\"authheader\"]}}"
                        }
                    ]
                }
            },
            "retryOnFail": false,
            "typeVersion": 4,
            "alwaysOutputData": false
        },
        {
            "id": "9c1b22e1-fd50-4c70-91cf-f4ea8cc7d3ac",
            "name": "Look for the related record in Supabase",
            "type": "n8n-nodes-base.supabase",
            "position": [
                1060,
                -540
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "Platform",
                            "keyValue": "Pipedrive"
                        }
                    ]
                },
                "tableId": "App_tok",
                "operation": "get"
            },
            "credentials": {
                "supabaseApi": {
                    "id": "tlmP1CXY3ExzjJDs",
                    "name": "Supabase Automation"
                }
            },
            "typeVersion": 1,
            "alwaysOutputData": true
        },
        {
            "id": "53602a58-d47a-4133-b9ec-4ea421a75eea",
            "name": "IF rec not found",
            "type": "n8n-nodes-base.if",
            "position": [
                1260,
                -540
            ],
            "parameters": {
                "conditions": {
                    "number": [
                        {
                            "value1": "={{ $json.values().length }}",
                            "operation": "equal"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "38e5d91c-1bea-4f7a-8336-98748005d02e",
            "name": "Update tokns in the record",
            "type": "n8n-nodes-base.supabase",
            "position": [
                1600,
                -460
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "Platform",
                            "keyValue": "Pipedrive",
                            "condition": "eq"
                        }
                    ]
                },
                "tableId": "App_tok",
                "fieldsUi": {
                    "fieldValues": [
                        {
                            "fieldId": "acc_token",
                            "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"access_token\"] }}"
                        },
                        {
                            "fieldId": "ref_token",
                            "fieldValue": "={{ $node[\"Generate Refresh Token from authcode\"].json[\"body\"][\"refresh_token\"] }}"
                        },
                        {
                            "fieldId": "updated_at",
                            "fieldValue": "={{$now.toUTC().toString()}}"
                        }
                    ]
                },
                "matchType": "allFilters",
                "operation": "update"
            },
            "credentials": {
                "supabaseApi": {
                    "id": "tlmP1CXY3ExzjJDs",
                    "name": "Supabase Automation"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "43a2613d-7793-48c9-8934-57d9b713f5fe",
            "name": "Supabase- look for the record",
            "type": "n8n-nodes-base.supabase",
            "position": [
                600,
                -140
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "Platform",
                            "keyValue": "Pipedrive"
                        },
                        {
                            "keyName": "AppId",
                            "keyValue": "={{ $node[\"Webhook\"].json[\"body\"][\"appId\"] }}"
                        }
                    ]
                },
                "tableId": "App_tok",
                "operation": "get"
            },
            "credentials": {
                "supabaseApi": {
                    "id": "tlmP1CXY3ExzjJDs",
                    "name": "Supabase Automation"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "366bd343-419c-4a77-b2ce-e6124a6cc291",
            "name": "combine client id and secret",
            "type": "n8n-nodes-base.set",
            "position": [
                840,
                -140
            ],
            "parameters": {
                "options": [],
                "assignments": {
                    "assignments": [
                        {
                            "id": "4330b857-6184-4ad8-82dc-a8b806ab8077",
                            "name": "authheader",
                            "type": "string",
                            "value": "57db0bab2932f657:edfaba095e9e7ddefe2e960ce2e98345230a016d"
                        }
                    ]
                }
            },
            "typeVersion": 3.29999999999999982236431605997495353221893310546875
        },
        {
            "id": "156acb8f-3a23-40ec-b011-9db8bfa6d98b",
            "name": "Get Pipedrive acess token",
            "type": "n8n-nodes-base.httpRequest",
            "position": [
                1060,
                -140
            ],
            "parameters": {
                "url": "https:\/\/oauth.pipedrive.com\/oauth\/token",
                "method": "POST",
                "options": [],
                "sendBody": true,
                "contentType": "form-urlencoded",
                "sendHeaders": true,
                "bodyParameters": {
                    "parameters": [
                        {
                            "name": "grant_type",
                            "value": "refresh_token"
                        },
                        {
                            "name": "refresh_token",
                            "value": "={{ $node[\"Supabase- look for the record\"].json[\"ref_token\"] }}"
                        }
                    ]
                },
                "headerParameters": {
                    "parameters": [
                        {
                            "name": "Authorization",
                            "value": "=Basic {{ $json[\"authheader\"].base64Encode() }}"
                        }
                    ]
                }
            },
            "typeVersion": 4.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "3e20309e-6d50-444c-b9e1-cf6d6982e546",
            "name": "IF success",
            "type": "n8n-nodes-base.if",
            "position": [
                1240,
                -140
            ],
            "parameters": {
                "conditions": {
                    "string": [
                        {
                            "value1": "={{ Object.keys($input.first().json)[0]}}",
                            "value2": "access_token"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "1e991aa7-9888-404d-8f80-bb6ce0a3b777",
            "name": "Update thr row with new access token",
            "type": "n8n-nodes-base.supabase",
            "position": [
                1420,
                -280
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "Platform",
                            "keyValue": "Pipedrive",
                            "condition": "eq"
                        }
                    ]
                },
                "tableId": "App_tok",
                "fieldsUi": {
                    "fieldValues": [
                        {
                            "fieldId": "acc_token",
                            "fieldValue": "={{ $node[\"Get Pipedrive acess token\"].json[\"access_token\"] }}"
                        },
                        {
                            "fieldId": "ref_token",
                            "fieldValue": "={{ $node[\"Get Pipedrive acess token\"].json[\"refresh_token\"] }}"
                        }
                    ]
                },
                "matchType": "allFilters",
                "operation": "update"
            },
            "credentials": {
                "supabaseApi": {
                    "id": "tlmP1CXY3ExzjJDs",
                    "name": "Supabase Automation"
                }
            },
            "typeVersion": 1,
            "alwaysOutputData": true
        },
        {
            "id": "d0989bad-9176-44a2-86ce-db07a5e8a34c",
            "name": "Webhook",
            "type": "n8n-nodes-base.webhook",
            "position": [
                340,
                -140
            ],
            "webhookId": "937a8843-a28a-400a-b473-bdc598366fa0",
            "parameters": {
                "path": "937a8843-a28a-400a-b473-bdc598366fa0",
                "options": [],
                "httpMethod": "POST",
                "responseMode": "lastNode",
                "authentication": "basicAuth"
            },
            "credentials": {
                "httpBasicAuth": {
                    "id": "E2RYFiR9PotuglZv",
                    "name": "PJ demo"
                }
            },
            "typeVersion": 2
        },
        {
            "id": "108a2ea1-de2a-4df3-9d9f-0ce1b27a52e9",
            "name": "Receive request",
            "type": "n8n-nodes-base.webhook",
            "position": [
                280,
                680
            ],
            "webhookId": "47704458-bfa6-4d95-adf1-97fc78e35d8a",
            "parameters": {
                "path": "47704458-bfa6-4d95-adf1-97fc78e35d8a",
                "options": [],
                "httpMethod": "POST",
                "responseMode": "responseNode",
                "authentication": "basicAuth"
            },
            "credentials": {
                "httpBasicAuth": {
                    "id": "E2RYFiR9PotuglZv",
                    "name": "PJ demo"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "f983cfd1-52db-4839-88af-6386ec7c7256",
            "name": "catch Auth code",
            "type": "n8n-nodes-base.webhook",
            "position": [
                300,
                -560
            ],
            "webhookId": "aae545fb-a69d-4e20-91ce-65f105d0ea2f",
            "parameters": {
                "path": "aae545fb-a69d-4e20-91ce-65f105d0ea2f",
                "options": []
            },
            "typeVersion": 1
        }
    ],
    "active": false,
    "pinData": {
        "Receive request": [
            {
                "json": {
                    "body": {
                        "person": {
                            "email": "priya+solar@psw.com"
                        }
                    },
                    "query": [],
                    "params": [],
                    "headers": {
                        "host": "http:\/\/localhost:5678",
                        "accept": "*\/*",
                        "user-agent": "PostmanRuntime\/7.39.0",
                        "content-type": "application\/json",
                        "authorization": "Basic xxxxxxx==",
                        "cache-control": "no-cache",
                        "postman-token": "41b79257-xxxx-xxxx-xxxx-9e004cae4e9e",
                        "content-length": "52",
                        "accept-encoding": "gzip, deflate, br",
                        "x-forwarded-for": "54.86.50.139",
                        "x-forwarded-host": "localhost:5678",
                        "x-forwarded-proto": "https"
                    },
                    "webhookUrl": "http:\/\/localhost:5678\/webhook-test\/47704458-bfa6-4d95-adf1-97fc78e35d8a",
                    "executionMode": "test"
                }
            }
        ]
    },
    "settings": {
        "callerPolicy": "workflowsFromSameOwner",
        "executionOrder": "v1",
        "saveManualExecutions": true
    },
    "versionId": "54499ed8-4677-400a-9e03-d0d84f8a97b5",
    "connections": {
        "Webhook": {
            "main": [
                [
                    {
                        "node": "Supabase- look for the record",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "IF success": {
            "main": [
                [
                    {
                        "node": "Update thr row with new access token",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Stop and Error",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Receive request": {
            "main": [
                [
                    {
                        "node": "Get Pipedrive Token",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "catch Auth code": {
            "main": [
                [
                    {
                        "node": "convert clientId and secret to base64",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "IF rec not found": {
            "main": [
                [
                    {
                        "node": "Insert",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Update tokns in the record",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Pipedrive Token": {
            "main": [
                [
                    {
                        "node": "Get contact from Pipedrive",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Access Token Invalid": {
            "main": [
                [
                    {
                        "node": "Refresh Access Token",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Success",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Refresh Access Token": {
            "main": [
                [
                    {
                        "node": "Get Pipedrive Token",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Pipedrive acess token": {
            "main": [
                [
                    {
                        "node": "IF success",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get contact from Pipedrive": {
            "main": [
                [
                    {
                        "node": "Access Token Invalid",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "combine client id and secret": {
            "main": [
                [
                    {
                        "node": "Get Pipedrive acess token",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Supabase- look for the record": {
            "main": [
                [
                    {
                        "node": "combine client id and secret",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Generate Refresh Token from authcode": {
            "main": [
                [
                    {
                        "node": "Look for the related record in Supabase",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "convert clientId and secret to base64": {
            "main": [
                [
                    {
                        "node": "Generate Refresh Token from authcode",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Look for the related record in Supabase": {
            "main": [
                [
                    {
                        "node": "IF rec not found",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Filter Manual Send Triggered
View
Splitout Limit Automation Webhook
View
Property Lead Contact Enrichment from CRM
View
RAG Workflow For Company Documents stored in Google Drive
View
AI-Driven WooCommerce Product Importer with SEO
View
Limit Code Create Webhook
View
Googlebigquery Stickynote Automate Triggered
View
BambooHR AI-Powered Company Policies and Benefits Chatbot
View
Manual Code Automate Triggered
View
Mailchimp Automate Triggered
View