rapirestful-authenticationtodoist

Cannot connect to todoist REST API with R


I am not very good with working with API's "From scratch" so to speak. My issue here is probably more to do with my ignorance of RESTful API's than the Todoist API specifically, but I'm struggling with Todoist because all of their documentation is geared around python and I'm not sure why my feeble attempts are failing. Once I get connected/authenticated I think I'll be fine.

Todoist documentation

I've tried a couple of configurations using httr::GET(). I would appreciate a little push here as I get started.

Things I've tried, where key is my api token:

library(httr)
r<-GET("https://beta.todoist.com/API/v8/", add_headers(hdr))

for hdr, I've used a variety of things:

I also tried with projects at the end of the url


Solution

  • UPDATE These are now implemented in the R package rtodoist.


    I think you nearly had it except the url? (or maybe it changed since then) and the header. The following works for me, replacing my_todoist_token with API token found here.

    library(jsonlite)
    library(httr)
    projects_api_url <- "https://api.todoist.com/rest/v1/projects"
    
    # to get the project as a data frame
    header <- add_headers(Authorization = paste("Bearer ", my_todoist_token))
    project_df <- GET(url = projects_api_url, header) %>%
      content("text", encoding = "UTF-8") %>%
      fromJSON(flatten = TRUE)
    
    # to create a new project
    # unfortunately no way to change the dot color associated with project
    header2 <- add_headers(
      Authorization  = paste("Bearer ", my_todoist_token),
      `Content-Type` = "application/json",
      `X-Request-Id` = uuid::UUIDgenerate())
    
    POST(url = projects_api_url, header2,
         body = list(name = "Your New Project Name"
                     # parent = parentID
                     ),
         encode = "json")
    
    # get a project given project id
    GET(url = paste0(projects_api_url, "/", project_df$id[10]),
        header) %>%
      content("text", encoding = "UTF-8") %>%
      fromJSON(flatten = TRUE)
    
    # update a project 
    POST(url = paste0(projects_api_url, "/", project_df$id[10]),
        header2, body = list(name = "IBS-AR Biometric 2019"), encode = "json")