How To: Canon Camera Control API (CCAPI)

(This page is a work in progress. Last updated March 13, 2021)

Canon CCAPI Background Info

On February 2019, Canon released the official Camera Control API (CCAPI) which allows tinkerers, hackers, and developers to create software that interacts with Canon cameras using a web API.

Canon has been releasing a wired camera control SDK for years. This time, they went one up and released a web API. This means there is no more need to sniff wifi packets and reverse engineer HTTP commands. As far as I know, Canon is the only big camera manufacturer to release a web API to the general public.

When first launched, the only camera supported was the EOS RP but canon has been adding support to all newly released cameras since. Here is a list of supported cameras:

  • Canon EOS R5
  • Canon EOS R6
  • Canon Rebel T8i
  • Canon Rebel SL3
  • EOS RP
  • PowerShot SX70 HS
  • EOS Rebel SL3
  • PowerShot G5 Mark II
  • PowerShot G7 Mark III
  • EOS M200
  • EOS 90D
  • EOS M6 Mark II
  • EOS 1DX Mark III
  • EOS M50 Mark II

Access the CCAPI

In order to enable CCAPI, you need to make sure your camera is running the latest firmware and activate the API through a desktop app. After activating the CCAPI, you can operate the camera using HTTP commands.

The CCAPI desktop activation tool and the CCAPI documentation is available through Canon’s developer community websites. Sign up for the Developer Community in your geographical area…. or lie about where you live – there’s no address verification.

North, Central, and South America: https://developercommunity.usa.canon.com/
EMEA and Asia: https://developers.canon-europe.com/s/
Oceania: https://www.canon.com.au/support/support-news/support-news/

Although activating the CCAPI only takes a couple of seconds, I wish Canon would ship the cameras with the CCAPI already activated.

Once the CCAPI is activated, a new menu option appears under WiFi connections. Connecting the camera to a WiFi network works just like any other wireless device out there. Find the network, enter a password if needed, connect, done!

The camera will display its IP address and the connection port you should use to send HTTP commands. There’s no HTTP authentication required so once you connect the camera to WiFi, you are ready to send HTTP requests to the camera.

Project Examples

Make sure to check out my CCAPI Github repos. I use a Raspberry Pi Zero W to control my Canon EOS RP.

Wireless Intervalometer

This simple NodeJS script functions as a WiFi intervalometer.

  • Setup the Raspberry Pi in Access Point mode following this guide. No need to follow the steps after Add routing and masquerade for this application.
  • Install NodeJS and download the script linked above
  • Connect the camera to the Raspberry Pi access point network
  • Connect a cellphone to the Raspberry Pi access point network
  • Use the browser on your to access the User Interface. The interface will execute the intervalometer script on the Raspberry Pi.
  • Feel free to disconnect the phone from the Raspberry Pi once shooting has started

HTTP API Call format:

You can also send HTTP calls to the Raspberry Pi, bypassing the user interface.

{RPi IP Address}:{PORT}/interval/{number of shots}/{wait}/{delay}

Number of Shots: Number of pictures the camera will take
Wait: Number of seconds between shots
Delay: Number of seconds to wait before starting the sequence of shots

The Script will turn off the LCD on the back of the camera by default during shooting.