Skip to content

Resource API ​

The Knowify OAuth API exposes RESTful CRUD endpoints for Knowify platform resources. All endpoints require a Bearer access token and the appropriate scope.

Base URL ​

GET|POST|PUT|PATCH|DELETE /api/v1/{resource}

Authentication ​

Include your access token in every request:

bash
curl -H "Authorization: Bearer ACCESS_TOKEN" \
  https://developers.knowify.com/api/v1/projects

Available Resources ​

ResourceSlugRead ScopeWrite ScopeGET listGET :idPOSTPUTPATCHDELETESearch
Projectsprojectsprojects:readprojects:writeYesYesYesYesYesNoYes
Billsbillsbills:readbills:writeYesYesYesNoNoYes
Clientsclientsclients:readclients:writeYesYesYesYesYesYesYes
Departmentsdepartmentsdepartments:readdepartments:writeYesYesYesYesYesYes
Invoicesinvoicesinvoices:readinvoices:writeYesYesYesYesYesYes
AIA Invoicesaiainvoicesinvoices:readinvoices:writeYesYesYesNoNoNo
Itemsitemsitems:readitems:writeYesYesYesYesYesYesYes
Milestonesmilestonesmilestones:readmilestones:writeNoYesYesYesYesYes
Paymentspaymentspayments:readpayments:writeYesYesYesNoNoNo
Purchasespurchasespurchases:readpurchases:writeYesYesYesYesYesYesYes
Resourcesresourcesresources:readresources:writeYesYesYesYesYesYes
Ticketsticketstickets:readtickets:writeYesYesYesYesNoYes
Timetimetime:readtime:writeYesYesYesYesYesYes
Vendorsvendorsvendors:readvendors:writeYesYesYesYesYesYes
Allocationsallocationsallocations:readallocations:writeYesYesYesYesNoYes
Billablesbillablesbillables:readbillables:writeYesYesYesYesNoYesYes
Contractscontractscontracts:readcontracts:writeNoYesYesYesNoYes
Documentsdocumentsdocuments:readdocuments:writeNoYesYesYesYesYes
Usersusersusers:readusers:writeYesYesYesYesYesYes
Submittalssubmittalssubmittals:read—NoYesNoNoNoNo
Assetsassetsassets:readassets:writeYesYesYesYesYesYes
List Itemslist-itemslist-items:readlist-items:writeYesYesYesYesYesYesYes

The admin meta-scope grants access to all resources. The read meta-scope grants all :read access. The write meta-scope grants all :read and :write access.

Standard Endpoints ​

For each resource that supports the operation:

GET    /api/v1/{slug}                  # List with pagination
GET    /api/v1/{slug}/:id              # Get by ID
GET    /api/v1/{slug}/search?q=term    # Search (if supported)
GET    /api/v1/{slug}/since/:timestamp # Changes since ISO timestamp
POST   /api/v1/{slug}                  # Create
PUT    /api/v1/{slug}/:id              # Full update (replace)
PATCH  /api/v1/{slug}/:id              # Partial update (merge)
DELETE /api/v1/{slug}/:id              # Delete

Unsupported methods return 405 Method Not Allowed.

Query Parameters ​

ParameterTypeDefaultDescription
pageinteger1Page number
page_sizeinteger100Records per page
sortstring—Field name to sort by
sort_ascbooleantrueSort ascending (false for descending)
fieldsstring—Comma-separated field names to return
include_deletedbooleanfalseInclude soft-deleted records
scopestring—Filter scope (resource-specific)
q / filterstring—Search or filter term
startISO 8601—Date range start
endISO 8601—Date range end
projectstring—Filter by project ID
clientstring—Filter by client ID

Example: List Projects with Pagination and Sorting ​

bash
curl -H "Authorization: Bearer ACCESS_TOKEN" \
  "https://developers.knowify.com/api/v1/projects?page=1&page_size=10&sort=ProjectName&sort_asc=true"

Response Format ​

List Response ​

json
{
  "didSucceed": true,
  "data": [
    { "Id": "p1", "ProjectName": "Website Redesign", ... },
    { "Id": "p2", "ProjectName": "Office Renovation", ... }
  ],
  "total": 42,
  "limit": 10,
  "offset": 0,
  "status": 200
}

Single Resource Response ​

json
{
  "didSucceed": true,
  "data": {
    "Id": "p1",
    "ProjectName": "Website Redesign",
    "ClientId": "c123",
    "Status": "Active",
    ...
  },
  "status": 200
}

Create/Update Response ​

json
{
  "didSucceed": true,
  "data": { ... created or updated resource ... },
  "status": 200
}

Resources that support search accept a q parameter:

bash
curl -H "Authorization: Bearer ACCESS_TOKEN" \
  "https://developers.knowify.com/api/v1/projects/search?q=renovation"

Searchable fields vary by resource:

  • Projects — ProjectName, ProjectNumber
  • Clients — ClientName, CompanyName
  • Items — Description, ItemNumber
  • Vendors — VendorName, CompanyName
  • Billables — Description
  • List Items — Description

Delta Sync ​

Fetch records modified after a timestamp:

bash
curl -H "Authorization: Bearer ACCESS_TOKEN" \
  "https://developers.knowify.com/api/v1/projects/since/2024-01-01T00:00:00Z"

Returns the same paginated response format. Useful for incremental syncs.

Custom Endpoints ​

Projects ​

GET /api/v1/projects/:id/projectPlan       # Project plan details
GET /api/v1/projects/:id/submittals        # Project submittals
GET /api/v1/projects/:projectId/list-items # Project list items (with CRUD)

Invoices ​

GET /api/v1/invoices/all                   # Combined regular + AIA invoices
GET /api/v1/invoices/all/since/:timestamp  # Combined delta sync

AIA invoice IDs are prefixed with "AIA" and include an InvoiceType field.

Time ​

POST /api/v1/time/check-in                # Start a time entry
PUT  /api/v1/time/check-out/:id           # End a time entry
POST /api/v1/time/approveTime             # Approve a time entry

Special Endpoints ​

These endpoints provide account-level information:

GET /api/v1/me         # Current user info and OAuth scopes
GET /api/v1/company    # Company information
GET /api/v1/settings   # Company settings
GET /api/v1/valid      # Validate token and return granted scopes

Example: Get Current User ​

bash
curl -H "Authorization: Bearer ACCESS_TOKEN" \
  https://developers.knowify.com/api/v1/me

Response (user context):

json
{
  "didSucceed": true,
  "data": {
    "Id": "u123",
    "Name": "Jane Smith",
    "Email": "jane@example.com",
    ...
  },
  "status": 200
}

Response (client credentials / no user context):

json
{
  "didSucceed": true,
  "data": {
    "accountId": "a456",
    "clientId": "your-client-id",
    "scopes": ["projects:read", "invoices:write"]
  },
  "status": 200
}

Error Responses ​

json
{
  "didSucceed": false,
  "data": null,
  "message": "Insufficient scope. Required: projects:write",
  "status": 403
}
StatusMeaning
400Invalid request body or parameters
401Missing or invalid access token
403Token lacks required scope
404Resource not found
405Method not allowed for this resource
429Rate limit exceeded (see Errors & Rate Limiting)
500Internal server error