Back online
Developer Documentation

Plan of Day
API Reference

Integrate AI-powered field reporting into your applications.
Send jobsite data in, get professional reports and hundreds of KPIs out.

API access is a Custom-plan add-on — see plans

Base URL

https://planofday.com/api/v1

What You Can Build

Everything you need to integrate field reporting into your platform

RESTful JSON API

Read your projects, daily report snapshots, and KPI metrics as clean JSON.

API Key Authentication

Bearer token auth (pod_sk_ keys). Create and revoke keys anytime from your dashboard.

KPI Access

Pull a project's latest KPI metrics programmatically — the same real recorded fields the dashboard shows.

Full Data Export

Download all of a project's structured data as a ZIP (CSV + JSON per entity). Your data is never hostage.

Rate Limiting

Per-key rate limiting (120 requests/minute) with clear 429 responses.

API Endpoints

Core endpoints for projects, daily reports, KPIs, and data export

GET/api/v1/projects
GET/api/v1/projects/:id/reports
GET/api/v1/projects/:id/kpis
GET/api/v1/projects/:id/export

Code Examples

Get started in minutes with these examples

List ProjectsGET
// List your projects
const res = await fetch('https://planofday.com/api/v1/projects', {
  headers: { 'Authorization': 'Bearer pod_sk_...' }
});
const { projects } = await res.json();
// => { projects: [ { id, name, status, created_at, updated_at }, ... ] }
Retrieve Project KPIsGET
// Get a project's latest KPI metrics
const kpis = await fetch(
  'https://planofday.com/api/v1/projects/PROJECT_ID/kpis',
  { headers: { 'Authorization': 'Bearer pod_sk_...' } }
).then(r => r.json());

// => {
//   project_id: "...",
//   snapshot: { id, snapshot_date, day_number, field_count, coverage_percent },
//   metrics: { ...the project's real recorded fields... }  // null if no data yet
// }
Export Project DataGET
// Download all of a project's structured data as a ZIP
const res = await fetch(
  'https://planofday.com/api/v1/projects/PROJECT_ID/export',
  { headers: { 'Authorization': 'Bearer pod_sk_...' } }
);
const zipBlob = await res.blob();
// ZIP: manifest.json + data/<entity>.csv + data/<entity>.json for every entity
// (snapshots, contracts, RFIs, change orders, pay apps, safety, schedule, ...).

Authentication

All API requests require a Bearer token in the Authorization header

Authorization: Bearer pod_sk_your_api_key_here

API keys

Create and manage them in Dashboard → Developer → API Keys. Shown once at creation; store it securely.

pod_sk_...

Response Format

Consistent JSON responses with clear status codes

200

Success

Request completed successfully

201

Created

Resource created successfully

401

Unauthorized

Invalid or missing API key

429

Rate Limited

Too many requests — retry after cooldown

Ready to Build?

Start your free trial, then add API Access on a Custom plan to integrate your projects, reports, and KPIs into your own tools.