Skip to content

Latest commit

 

History

History
407 lines (338 loc) · 5.77 KB

api-spec-v1.md

File metadata and controls

407 lines (338 loc) · 5.77 KB

API Spec v1

Contents

All endpoints require user authorization.

/users

GET /

Gets user info

Response

{
	id: string,
	displayName: string,
	email: string,
	defaultProject: string
}

GET /sync

Gets all [sessions,] task, and projects for user [that were updated since last sync]

Request

query params:

  • [sync_token]: sync token from last sync. Defaults to "*" to get all sessions and a new sync token

Response

{
	syncToken: string,
	sessions?: [{
		taskId: string,
		startTimestamp: Date,
		duration: Date,
		note?: string,
		type: "session" | "break" | "long-break",
		edited: boolean,
		retroAdded: boolean
		lastUpdated: Date
  }],
	tasks?: [{
		id: string,
		title?: string,
		projectId: string,
		isCompleted: boolean,
		lastUpdated: Date
	}],
	projects?: [{
		id: string,
		title?: string,
		isArchived: boolean,
		lastUpdated: Date
	}]
}

/sessions

GET /

Gets all sessions for user [with a startTimestamp within the provided range]

Request

query params:

  • [start]: select sessions with startTimestamp >= start
  • [end]: select sessions with startTimestamp < end

Response

{
	sessions: [{
		taskId: string,
		startTimestamp: Date,
		duration: Date,
		note?: string,
		type: "session" | "break" | "long-break",
		edited: boolean,
		retroAdded: boolean,
		lastUpdated: Date
	}],
}

GET /:id

Gets session with given id.

Response

{
	session: {
		taskId: string,
		startTimestamp: Date,
		duration: Date,
		note?: string,
		type: "session" | "break" | "long-break",
		edited: boolean,
		retroAdded: boolean,
		lastUpdated: Date
	},
}

POST /

Creates a new session. Creates a projects and/or task as needed (if title is provided instead of id).

Note: It would be cool if active/incomplete project/task titles were searched first before creating a new record #40

Request

{
	task?: { 
		id: string, 
		isCompleted?: boolean
		projectId?: string
	},
	project?: {
		title: string
	}
	session: {
		startTimestamp: Date,
		duration: number,
		note?: string
		type: "session" | "break" | "long-break",
		retroAdded?: boolean
	}
}

Response

{
	session: {
		id: string
		taskId: string,
		startTimestamp: Date,
		duration: Date,
		note?: string,
		type: "session" | "break" | "long-break",
		edited: boolean,
		retroAdded: boolean,
		lastUpdated: Date
	},
  // Only if new task is created
	task?: {
		id: string,
		title?: string,
		projectId: string,
		isCompleted: boolean,
		lastUpdated: Date
	},
	// Only if new project is created
	project?: {
		id: string,
		title?: string,
		isArchived: boolean,
		lastUpdated: Date
	}
}

PATCH /

Used primarily by edit session workflow. Creates a projects and/or task as needed (if title is provided instead of id).

Request

{
	task?: { 
		id: string, 
		isCompleted?: boolean
		projectId?: string
	},
	project?: {
		title: string
	}
	session: {
		startTimestamp: Date,
		duration: number,
		note?: string
		type: "session" | "break" | "long-break",
		retroAdded?: boolean
	}
}

Response

{
	session: {
		id: string
		taskId: string,
		startTimestamp: Date,
		duration: Date,
		note?: string,
		type: "session" | "break" | "long-break",
		edited: boolean,
		retroAdded: boolean,
		lastUpdated: Date
	},
  // Only if new task is created
	task?: {
		id: string,
		title?: string,
		projectId: string,
		isCompleted: boolean,
		lastUpdated: Date
	},
	// Only if new project is created
	project?: {
		id: string,
		title?: string,
		isArchived: boolean,
		lastUpdated: Date
	}
}

/projects

GET /:id

Gets the project with the provided id

Response

{
	project: {
		id: string,
		title?: string,
		isArchived: boolean,
		lastUpdated: Date
	}
}

POST /

Creates a new project.

Request

{
	project: {
		title?: string,
		isArchived?: boolean
	}
}

Response

{
	project: {
		id: string,
		title?: string,
		isArchived: boolean,
		lastUpdated: Date
	}
}

/tasks

GET /:id

Gets the task with the provided id

Response

{
	task: {
		id: string,
		projectId: string,
		title?: string,
		isCompleted: boolean,
		lastUpdated: Date
	}
}

POST /

Creates a new task. If a projectId is not provided, it is assigned to the user's default project.

Request

{
	task: {
		projectId?: string,
		title?: string,
		isCompleted?: boolean
	}
}

Response

{
	task: {
		id: string,
		projectId: string,
		title?: string,
		isCompleted: boolean,
		lastUpdated: Date
	}
}