Update a project's terms of service (bumps the version)
Replaces the content and bumps the version; the effective date is reset to 30 days out. Every human user of the project is emailed the LGPD art. 9 §6 change notice for the new version. Updating a project without terms is a 404 — use `POST` to introduce them. The authenticated actor must be an admin or owner of the project.
/projects/{project_id}/terms-of-serviceReplaces the content and bumps the version; the effective date is
reset to 30 days out. Every human user of the project is emailed
the LGPD art. 9 §6 change notice for the new version. Updating a
project without terms is a 404 — use POST to introduce them.
The authenticated actor must be an admin or owner of the project.
JWT issued by IdentityX, signed with Ed25519
In: header
Path Parameters
Project ID.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Request body for introducing or updating a project's terms of service.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X PUT "https://example.com/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/terms-of-service" \ -H "Content-Type: application/json" \ -d '{ "content": "string" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
"version": 1,
"content": "string",
"effective_at": "2019-08-24T14:15:22Z",
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 400,
"title": "Validation Failed"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 401,
"title": "Unauthenticated"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 403,
"title": "Insufficient Role"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 404,
"title": "Not Found"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 500,
"title": "Internal Server Error"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 503,
"title": "Identity Unavailable"
}Introduce a project's terms of service (v1) POST
Creates the project's first terms document as version 1. This is the migration from "no terms" (v0): every human user of the project is emailed the LGPD art. 9 §6 change notice — the new content, the effective date (30 days out), the continued-use clause, and the account-termination path for those who disagree. Creating when terms already exist is a 409 — use `PUT` to update. The authenticated actor must be an admin or owner of the project.
List a project's terms acceptances GET
Serves the consent ledger to project admins: who agreed to which version, when, with the content hash that pins the exact document (the proof artifact LGPD art. 8 §2 demands). The authenticated actor must be an admin or owner of the project.