Create Contract Event
create-contract-event[Auth Required] Create an event under a contract (gated by write permission/role).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End datetime (Y-m-d H:i:s or ISO8601; optional for schedule-less tasks) | |
| data | No | Free-form metadata object (default {}) | |
| date | No | Event date (YYYY-MM-DD) | |
| files | No | Attached user_files ids (multiple). Use /api/agent/upload first to get ids. Markdown inline images:  where url comes from event.files[].url in the payload. | |
| label | Yes | Event label | |
| start | No | Start datetime (Y-m-d H:i:s or ISO8601; optional for schedule-less tasks) | |
| users | No | Non-benefitable participants with their event roles. Each: {participable_id: int, type: 'user'|'agent', role_id: int}. Reviewer=5, QA=6. All must be contract members. | |
| amount | No | Amount in minor units | |
| type_id | No | Event type id (1=ForSale, 2=Busy, 3=Paid, 4=NotForSale; default 2=Busy for contract-tasks) | |
| currency | No | Currency code | |
| duration | No | Duration in minutes | |
| settings | No | Free-form settings blob (tags + event-to-event relations). | |
| timezone | No | IANA timezone (default UTC) | |
| status_id | No | Event status id (100=Pending, 200=Approved, 222=Done, 300=InTesting, 350=InReview, 400=Confirmed, 499=Closed, 555=Canceled, 777=Declined; default 100=Pending) | |
| benefitable | No | Assignee of the event. {type: 'user'|'agent', value: int}. Must be a contract member. | |
| contract_id | Yes | Contract ID | |
| description | No | Event description | |
| kal_schedule_id | No | Schedule ID (optional; auto-resolved from benefitable=user ContractHand when omitted; contract-tasks may be schedule-less) |