Blink Arming - IFTT Alternative using API


In light of the changes to IFTT, I have created a piston below to utilize API endpoints for arming and disarming of Blink camera systems. As with IFTT, you can still only arm/disarm the module itself, not individual cameras (unless you setup a mini as its own system for example). Note: this is one way communication, if you change the armed status by other means (i.e. Blink App) it will not be reported to ST.

blinkSTdevices - a device list of virtual switches in ST, I made these previously for use with IFTT
blinkNames - a string list of system/camera names as they exist in Blink, listed in the same order as the above virtual switches. For example, Switch 3 is actually called Blink Front, module 1 name in blink is Front.

Triggers - any change in any of the defined virtual switches


  • To access certain API endpoints, a auth token is required and the endpoint can sometimes be regionally defined. Luckily both these values are retrievable via the login endpoint.
  • The piston first attempts a GET request to retrieve your system data, if either the auth token or region is invalid, a new login request is generated and those values are retrieved to be passed along with future requests. (Results in fewer calls to the API if we only login when necessary)
  • The piston then determines the active ST device, matches it to the blink device, sending the correlating network id and command.

Turning on/off virtual switches too quickly can interrupt the piston resulting in missed commands. Please keep this in mind. I have a schedule piston that arms/disarms (turns on/off the virtual switches) under various conditions. To ensure each run of the piston is complete, I have set a wait of 1 sec between on/off commands (average run time of 500ms).

Open to suggestions, piston is below…

IFTTT PRO alternative?
Blink pistons... where is my mistake
Blink piston not work! Help

Nice work :+1:


Thanks so much for this piston. I’m a newbie, was able to bring over the piston, setup the virtual switches, edit the piston with all this information. Put in my Blink login information, but nothing happens. The piston shows that it is run, but I never see anything change on the Blink side. How do I know if the API call to Blink is working, is there a way to test just this piece or do you have any suggestions to test out where it might be failing? Again thanks!!


Nevermind - I got it working!! It was my newbie status of properly setting up the GET and POST commands. Once I properly set up the expressions and got all my variables right, it worked like a charm. Again thanks for this Piston!


A follow up question - now that I have this working - when I trigger one of my 2 modules, I get an email from Blink indicating that they see a login into my account and asking me to verify it by entering a verification code into my Blink App, but since my App didn’t make this call, there is no way to do this. Am I missing some sort of authentication or is there something I need to do for validation that I missed from the piston? It is working, but just wondering whether Blink will shut down my account eventually because it thinks there is some sort of intrusion. Thanks again!


Thanks for brining this to my attention, I did not get such an email but I was also using the bling desktop app so it is possible I have already authorized from my home network. Can you check the $response in the log? Should look something like:

account:[email_verification_required:false, email_verified:true, id:57405], app_updates:[code:105, message:An app update is required, update_available:true, update_required:true], cameras:....

Hoping email_verificaiton_required is true for you and I can use that as a flag in the piston.

I have found some documentation on submitting a PIN though I’m not certain the best way to build into the piston. I will test some possibilities, suggestions are also welcome.

You can submit manually via postman if you are so inclined.
Documentation is found here
Use the most recent data from your piston (accout ID, client ID and auth token). Using a consitent client ID should prevent future PIN requests per the documentation.


hi I’m new to webcore, and I don’t have much experience in piston design … I’ve made pistons for very basic operations, for my air conditioner, and television. now I would like to configure my Blink camera, but I don’t understand what values to change in your piston (I only understood the email and password credentials as well as the device name on ST) Could you help me understand how to do it. Thanks.:grinning:


Once you have selected your ST Virtual Switches, update the blinkNames variable list with the names of your blink modules according to Blink App. For example, my first ST virtual switch is called Front and is associated with blink module also called Front. The two lists need to read in the same order.

blinkSTDevices = Front,x,y,z
blinkNames = Front,x,y,z

then email/password and the piston should do the rest anytime one of those switches changes (either on or off).

I will be curious to see if you also receive an email verification code as other users have mentioned.


Thank you for your answer! I tried but surely I make some mistakes. So, my synchronization module (blink side) is called security, the camera inside it (always blink side) is called garage door. When I arm blink (from its app.) It tells me security is armed. My virtual switch is called garage door. Then I don’t understand:

  1. in the piston do I have to modify (under define) only blinkstdevice and blinknames and then insert the blin login credentials?

do not need to change other items

2) should I also use the name of the synchronization module (security) or, otherwise, the name of the camera (garage door)?
3) will blinkstdevice be called security or garage door?
Thanks for your time. I am inexperienced in the world of webcore …


You do need to modify all four variables

Arming/disarming can only be done at the sync module level, not the individual camera.
BlinkSTdevice would be garage door (virtual device)
BlinkNames would be security (sync module)


I entered blinkstdevice (virtual switch) and blink name (blink module) and the credentials! I gave the same name to the virtual switch and the blink synchronization module. but it does not work. what am I doing wrong.


so it looks better


Can you post logs, it doesnt appear that your connecting to the blink api successfully


I made several attempts, but always the same result


The piston won’t process using the test button, only when you turn on/off the switch in ST.


I did not use the key for the test! I used ST’s virtual switch on / off. I wonder if maybe, using the new app. ST maybe (I remember reading) that the smart switch is not working. I installed the smart switch by going to IDE> device> + new device> Type> virtual switch.
Is it possible that the non-functioning caused by the new application?


Apologies, I see now. The bottom event was test then it did receive on event. The piston should have immediately started setting variables and made a web request. There are no conditions to prevent that from happening.

I use alot of virtual switches jn the new app so i dont think that is the issue, it definetly received the event.

At this point, it might be worth starting over with a new import.


I’m sure I’m wasting your time! and I thank you for the answers you give me. I tried to re-import the piston and now the log is like this! it seems to try to access blink but then something goes wrong.

I also tried changing the name of the blink sync module, thinking that space might give problems. But nothing! I read above that a user, to get the piston to work, changed GET and POST. Do you think I need to change anything in GET and POST?


hi, I have tried many times to make this piston work but without success. I also asked the designer of the piston, but I couldn’t get it to work! would you tell me, please, how did you edit GET and POST? and what other changes you made. Thanks, I am a newbie in webcore and am not getting it to work.


I mocked up a piston to pull data from the blink API, it does not take any actions (arming/disarming). It will log you into the API then retrieve your blink data (the same data required in the original piston). This should help us figure out what we need to update in the original piston for you (my guess is there is something odd about the name of your sync module on the blink side).

Import the piston, update your email/password, and the number of sync modules (I have 4, sounds like you only have 1). Hit test after the updates to execute. The variable, module_name, is what we are interested in, that is what we will use to update the original piston variable, blink_names.