{ "nodes": [ { "name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [ 270, 300 ], "parameters": {}, "typeVersion": 1, "id": "create-and-enroll-tapfiliate-affiliate-0" }, { "name": "Set affiliate details", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const firstname='',lastname='',email='',programId='',tag='';if(!firstname.trim()||!lastname.trim()||!/^\\S+@\\S+\\.\\S+$/.test(email.trim())||!/^[A-Za-z0-9_-]+$/.test(programId)||!tag.trim())throw Error('Enter affiliate details, program ID and tag');return [{json:{firstname:firstname.trim(),lastname:lastname.trim(),email:email.trim(),programId,tag:tag.trim()}}];" }, "id": "create-and-enroll-tapfiliate-affiliate-1" }, { "name": "Create affiliate", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "parameters": { "method": "POST", "url": "https://api.tapfiliate.com/1.6/affiliates/", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "contentType": "json", "specifyBody": "json", "jsonBody": "={{ JSON.stringify({firstname:$json.firstname,lastname:$json.lastname,email:$json.email}) }}", "options": { "timeout": 30000 } }, "id": "create-and-enroll-tapfiliate-affiliate-2" }, { "name": "Prepare tag", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const id=$input.first().json.id,s=$('Set affiliate details').first().json;if(typeof id!=='string'||!/^[A-Za-z0-9_-]+$/.test(id))throw Error('Missing affiliate ID');return [{json:{id,tag:s.tag,url:'https://api.tapfiliate.com/1.6/affiliates/'+encodeURIComponent(id)+'/meta-data/tag/'}}];" }, "id": "create-and-enroll-tapfiliate-affiliate-3" }, { "name": "Set affiliate tag", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "parameters": { "method": "PUT", "url": "={{ $json.url }}", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "contentType": "json", "specifyBody": "json", "jsonBody": "={{ JSON.stringify({value:$json.tag}) }}", "options": { "timeout": 30000 } }, "id": "create-and-enroll-tapfiliate-affiliate-4" }, { "name": "Prepare enrollment", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const s=$('Set affiliate details').first().json,p=$('Prepare tag').first().json;if($input.first().json.value!==s.tag)throw Error('Tapfiliate did not confirm metadata');return [{json:{id:p.id,url:'https://api.tapfiliate.com/1.6/programs/'+encodeURIComponent(s.programId)+'/affiliates/'}}];" }, "id": "create-and-enroll-tapfiliate-affiliate-5" }, { "name": "Add to program", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "parameters": { "method": "POST", "url": "={{ $json.url }}", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "contentType": "json", "specifyBody": "json", "jsonBody": "={{ JSON.stringify({affiliate:{id:$json.id}}) }}", "options": { "timeout": 30000 } }, "id": "create-and-enroll-tapfiliate-affiliate-6" }, { "name": "Confirm enrollment", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const a=$input.first().json,id=$('Prepare tag').first().json.id;if(!a||a.id!==id)throw Error('Tapfiliate did not confirm the same affiliate');return [{json:{id:a.id,approved:a.approved??null,referralLink:a.referral_link?.link??null}}];" }, "id": "create-and-enroll-tapfiliate-affiliate-7" } ], "connections": { "On clicking 'execute'": { "main": [ [ { "node": "Set affiliate details", "type": "main", "index": 0 } ] ] }, "Set affiliate details": { "main": [ [ { "node": "Create affiliate", "type": "main", "index": 0 } ] ] }, "Create affiliate": { "main": [ [ { "node": "Prepare tag", "type": "main", "index": 0 } ] ] }, "Prepare tag": { "main": [ [ { "node": "Set affiliate tag", "type": "main", "index": 0 } ] ] }, "Set affiliate tag": { "main": [ [ { "node": "Prepare enrollment", "type": "main", "index": 0 } ] ] }, "Prepare enrollment": { "main": [ [ { "node": "Add to program", "type": "main", "index": 0 } ] ] }, "Add to program": { "main": [ [ { "node": "Confirm enrollment", "type": "main", "index": 0 } ] ] } }, "name": "Create and Enroll a Tapfiliate Affiliate", "active": false, "pinData": {} }