title_body: Do drones with inflight API access for control inputs exist? I am a software engineer brand new to drones.
  
  I want a drone where I have full access to all of the flight controls programmatically. For example, I can run a python script and once executed, it sends a command to the drone and it moves up or something like that.
  
  I also want to be able to do this outside and not require something like a wifi signal.
  
  I think the cheap 100 dollar DJI Ryze Tello sounds good, but I can't tell from the demos how much I actually have access to the drone programmatically or if DJI is a good option to start with. Any suggestions would be great.
upvoted_answer: All multicopter drones use a flight controller. This flight controller is usually a small board with a micro controller like an ARM F4/F7 on it:
  
  
  
  One job of the flight controller is to receive and decode the control inputs of the receiver. This is another board with antennas:
  
  
  
  Nearly all receivers use a serial protocol to communicate with the flight control. So you can send commands via the serial protocol.
  
  Serial interface
  
  This would be a very simple way to send commands to the flight control but the downside is that you need to build your own radio receiver or find a way to send commands to the receiver directly.
  
  MSP
  
  Another simple option would be the MSP protocol that is used by a number of different open source projects. It is another serial interface but with this protocol you can read and write information from/to the flight control. See https://github.com/iNavFlight/inav/blob/bcd4caef92bff67e91350456903a5cdd1d779840/src/main/msp/msp_protocol.h for a list of available messages in the protocol.
  
  Warning: it's not recommended to control the drone via this interface alone but it is possible.
  
  Ground control software
  
  Other open source projects offer a ground control program that allows to send commands to the drone during flight. One example is QGC http://qgroundcontrol.com/ with the MAVLink protocol: https://mavlink.io/en/ that communicates with PX4 Pro or ArduPilot flight controllers. 
  
  So you would need a drone with the flight controller, a telemetry radio ( https://ardupilot.org/copter/docs/common-sik-telemetry-radio.html ) and a PC to run the ground control software. 
  
  I don't know what the DJI drone can do but you have many open source options to start with. Maybe it's a good idea that you start with a simple drone setup to learn the basics and then move on to the more advanced stuff like controlling the drone via software commands.