Update a compliance project

posthttps://api.expiryedge.com/v1/updateComplianceProject
editor or admin60/minAny method
Request
curl -X POST 'https://api.expiryedge.com/v1/updateComplianceProject?id=cp_3Mn8wX' \
  -H "Authorization: Bearer $EXPIRYEDGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "Completed"
}'
Response
{
  "message": "Project updated successfully.",
  "project": {
    "id": "cp_3Mn8wX",
    "name": "Northwind Dental - 2026 License Renewals",
    "clientId": "cc_7Rt2vQ",
    "status": "In Progress",
    "startDate": "2026-09-01",
    "dueDate": "2026-10-15",
    "description": "Collect and renew all state dental licenses.",
    "owner": "Priya Shah",
    "customFields": {
      "board": "State Board of Dentistry"
    },
    "isArchived": false,
    "archivedAt": null,
    "organization_id": "org_northwind",
    "user_id": "u_71bXq",
    "createdAt": "2026-09-27T14:05:00.000Z",
    "updatedAt": "2026-09-27T14:05:00.000Z"
  }
}

Partial update: only the fields you send are changed. id goes in the query string. A new clientId must be a client in your organization (400 otherwise).

Query parameters

  • idstringrequired
    Project id.

Body parameters

application/json
  • namestring
    Required on create; cannot be blank on update.
  • clientIdstring
    Compliance client id in your organization. Required on create.
  • statusstring
    Any other value is stored as Not Started.
    AllowedNot StartedIn ProgressOn HoldCompletedCancelled
  • startDatestring
    Stored as sent (not validated); the web app sends YYYY-MM-DD. Empty string when unset.
  • dueDatestring
    Stored as sent (not validated); the web app sends YYYY-MM-DD. Empty string when unset.
  • descriptionstring
  • ownerstring
    Free-text owner name.
  • customFieldsmap of string
    Free-form key/value pairs. Keys are trimmed; values are stored as strings.

Returns

200
Updated.
  • messagestring
  • projectobject
    A project belonging to a compliance client.

Errors

400
The request is missing required fields or contains invalid values.
401
Missing, expired or invalid bearer token.
403
Authenticated, but your role or organization does not allow this action.
404
The record does not exist or is not in your organization.
429
Too many requests for this endpoint from your IP. Wait Retry-After seconds.
500
Unexpected server error. Retry later; quote requestId to support.