> For the complete documentation index, see [llms.txt](https://docs.ibexa.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ibexa.ai/developers/rest-api/models.md).

# Models

## The AccessTokenResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AccessTokenResponseSchema":{"properties":{"access_token":{"type":"string","title":"Access Token","description":"JWT access token"},"refresh_token":{"type":"string","title":"Refresh Token","description":"Opaque refresh token"},"token_type":{"type":"string","title":"Token Type","description":"Token type","default":"bearer"}},"type":"object","required":["access_token","refresh_token"],"title":"AccessTokenResponseSchema","description":"Response schema for access token."}}}}
```

## The AccountActivationTokenDetailsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AccountActivationTokenDetailsResponseSchema":{"properties":{"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"Token expiry timestamp (UTC)"},"used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Used At","description":"Timestamp when the token was used, or null if unused"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Timestamp when the token was created"},"is_valid":{"type":"boolean","title":"Is Valid","description":"True if the token has not been used and has not expired"},"is_expired":{"type":"boolean","title":"Is Expired","description":"True if the token is past its expiry time"},"is_used":{"type":"boolean","title":"Is Used","description":"True if the token has already been consumed"},"user":{"anyOf":[{"$ref":"#/components/schemas/ActivationTokenUserResponseSchema"},{"type":"null"}],"description":"Details of the user linked to this token. Only present when the token is valid."}},"type":"object","required":["expires_at","is_valid","is_expired","is_used"],"title":"AccountActivationTokenDetailsResponseSchema"},"ActivationTokenUserResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"User ID"},"email":{"type":"string","title":"Email","description":"User email address"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"User full name"},"status":{"$ref":"#/components/schemas/UserStatus","description":"Current account status"}},"type":"object","required":["id","email","status"],"title":"ActivationTokenUserResponseSchema"},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"}}}}
```

## The ActionItem object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActionItem":{"properties":{"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee","description":"User ID of the assignee"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["label","status"],"title":"ActionItem"}}}}
```

## The ActionItemsBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActionItemsBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"action_items","title":"Type"},"actions":{"items":{"$ref":"#/components/schemas/ActionItem"},"type":"array","title":"Actions"}},"type":"object","required":["type","actions"],"title":"ActionItemsBlock"},"ActionItem":{"properties":{"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee","description":"User ID of the assignee"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["label","status"],"title":"ActionItem"}}}}
```

## The ActivateAccountRequestSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActivateAccountRequestSchema":{"properties":{"new_password":{"type":"string","title":"New Password","description":"New password to set for the account"},"job_position":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Job Position","description":"User's job position"},"job_activities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Job Activities","description":"List of job activities the user is involved in"},"newsletter_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Newsletter Consent","description":"Whether the user consents to receiving the newsletter"}},"type":"object","required":["new_password"],"title":"ActivateAccountRequestSchema"}}}}
```

## The ActivationTokenUserResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActivationTokenUserResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"User ID"},"email":{"type":"string","title":"Email","description":"User email address"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"User full name"},"status":{"$ref":"#/components/schemas/UserStatus","description":"Current account status"}},"type":"object","required":["id","email","status"],"title":"ActivationTokenUserResponseSchema"},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"}}}}
```

## The ActivityEventType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActivityEventType":{"type":"string","enum":["AGENT_CREATED","AGENT_UPDATED","AGENT_DELETED","MCP_SERVER_CREATED","MCP_SERVER_UPDATED","MCP_SERVER_DELETED","MCP_SERVER_VERIFIED","AI_MODEL_CREATED","AI_MODEL_UPDATED","AI_MODEL_DELETED","AI_MODEL_VERIFIED","EXECUTION_CREATED","EXECUTION_CANCELED","EXECUTION_RETRIED","ORGANISATION_SETTINGS_UPDATED","USER_CREATED","USER_UPDATED","USER_DELETED"],"title":"ActivityEventType","description":"Every user-attributable action this platform records to the activity log.\n\nA closed, team-maintained vocabulary - unlike `WebhookDeliveryStatus`\n(stored as a plain string specifically because its values grow ad hoc,\nsituationally), every event type here is a deliberate addition by us, so\nit is worth the stronger guarantee a real Postgres enum gives: a value\noutside this set can never reach the `activity_log` table, not even via a\nbug or a raw SQL insert. Extending this list means an ALTER TYPE\nmigration, same as any other Postgres enum."}}}}
```

## The ActivityLogListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActivityLogListResponseSchema":{"properties":{"activity_logs":{"items":{"$ref":"#/components/schemas/ActivityLogResponseSchema"},"type":"array","title":"Activity Logs"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["activity_logs","total_count"],"title":"ActivityLogListResponseSchema","description":"Response schema for a page of an organisation's activity log."},"ActivityLogResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"event_type":{"$ref":"#/components/schemas/ActivityEventType"},"source_key":{"type":"string","title":"Source Key"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","user_id","event_type","source_key","payload","created_at"],"title":"ActivityLogResponseSchema","description":"Response schema for one activity log entry."},"ActivityEventType":{"type":"string","enum":["AGENT_CREATED","AGENT_UPDATED","AGENT_DELETED","MCP_SERVER_CREATED","MCP_SERVER_UPDATED","MCP_SERVER_DELETED","MCP_SERVER_VERIFIED","AI_MODEL_CREATED","AI_MODEL_UPDATED","AI_MODEL_DELETED","AI_MODEL_VERIFIED","EXECUTION_CREATED","EXECUTION_CANCELED","EXECUTION_RETRIED","ORGANISATION_SETTINGS_UPDATED","USER_CREATED","USER_UPDATED","USER_DELETED"],"title":"ActivityEventType","description":"Every user-attributable action this platform records to the activity log.\n\nA closed, team-maintained vocabulary - unlike `WebhookDeliveryStatus`\n(stored as a plain string specifically because its values grow ad hoc,\nsituationally), every event type here is a deliberate addition by us, so\nit is worth the stronger guarantee a real Postgres enum gives: a value\noutside this set can never reach the `activity_log` table, not even via a\nbug or a raw SQL insert. Extending this list means an ALTER TYPE\nmigration, same as any other Postgres enum."}}}}
```

## The ActivityLogResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ActivityLogResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"event_type":{"$ref":"#/components/schemas/ActivityEventType"},"source_key":{"type":"string","title":"Source Key"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","user_id","event_type","source_key","payload","created_at"],"title":"ActivityLogResponseSchema","description":"Response schema for one activity log entry."},"ActivityEventType":{"type":"string","enum":["AGENT_CREATED","AGENT_UPDATED","AGENT_DELETED","MCP_SERVER_CREATED","MCP_SERVER_UPDATED","MCP_SERVER_DELETED","MCP_SERVER_VERIFIED","AI_MODEL_CREATED","AI_MODEL_UPDATED","AI_MODEL_DELETED","AI_MODEL_VERIFIED","EXECUTION_CREATED","EXECUTION_CANCELED","EXECUTION_RETRIED","ORGANISATION_SETTINGS_UPDATED","USER_CREATED","USER_UPDATED","USER_DELETED"],"title":"ActivityEventType","description":"Every user-attributable action this platform records to the activity log.\n\nA closed, team-maintained vocabulary - unlike `WebhookDeliveryStatus`\n(stored as a plain string specifically because its values grow ad hoc,\nsituationally), every event type here is a deliberate addition by us, so\nit is worth the stronger guarantee a real Postgres enum gives: a value\noutside this set can never reach the `activity_log` table, not even via a\nbug or a raw SQL insert. Extending this list means an ALTER TYPE\nmigration, same as any other Postgres enum."}}}}
```

## The AddAgentsCatalogCategoryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AddAgentsCatalogCategoryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"}},"type":"object","required":["name","language_code"],"title":"AddAgentsCatalogCategoryTranslationPayloadSchema"}}}}
```

## The AddAgentsCatalogEntryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AddAgentsCatalogEntryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog entry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Short summary of the agents catalog entry"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases","description":"Example use cases for the entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"}},"type":"object","required":["name","language_code"],"title":"AddAgentsCatalogEntryTranslationPayloadSchema"}}}}
```

## The AddMCPCatalogCategoryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AddMCPCatalogCategoryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"}},"type":"object","required":["name","language_code"],"title":"AddMCPCatalogCategoryTranslationPayloadSchema"}}}}
```

## The AddMCPCatalogEntryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AddMCPCatalogEntryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"}},"type":"object","required":["name","language_code"],"title":"AddMCPCatalogEntryTranslationPayloadSchema"}}}}
```

## The AdminAnnounceAllOrganisationsPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminAnnounceAllOrganisationsPayloadSchema":{"properties":{"message":{"type":"string","maxLength":5000,"minLength":1,"title":"Message","description":"Free-text announcement body, included in the e-mail."},"planned_action_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planned Action Date","description":"Informational date/time describing when an admin-announced action will occur; included verbatim in the e-mail body. Does not affect when the e-mail itself is sent."},"scheduled_send_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled Send Date","description":"If given, the e-mail is sent at this future date/time instead of immediately. Must not be in the past."}},"type":"object","required":["message"],"title":"AdminAnnounceAllOrganisationsPayloadSchema","description":"Pydantic schema for broadcasting an admin announcement e-mail."}}}}
```

## The AdminAnnounceAllOrganisationsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminAnnounceAllOrganisationsResponseSchema":{"properties":{"scheduled":{"type":"boolean","title":"Scheduled"},"scheduled_send_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled Send Date"}},"type":"object","required":["scheduled"],"title":"AdminAnnounceAllOrganisationsResponseSchema","description":"Pydantic schema for the announcement-broadcast acknowledgement."}}}}
```

## The AdminBlockedUserStatsByRoleResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminBlockedUserStatsByRoleResponseSchema":{"properties":{"blocked_owner_count":{"type":"integer","title":"Blocked Owner Count","description":"Number of blocked users who are organisation owners"},"blocked_admin_count":{"type":"integer","title":"Blocked Admin Count","description":"Number of blocked users with the admin role, excluding organisation owners"},"blocked_member_count":{"type":"integer","title":"Blocked Member Count","description":"Number of blocked users with the member role"}},"type":"object","required":["blocked_owner_count","blocked_admin_count","blocked_member_count"],"title":"AdminBlockedUserStatsByRoleResponseSchema","description":"Response schema for platform-wide blocked-user counts grouped by role."}}}}
```

## The AdminBudgetForecastResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminBudgetForecastResponseSchema":{"properties":{"projected_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Projected Credits Spent","description":"Projected cumulative total spend (allowance and purchased combined) by the end of the current month."},"will_exhaust_budget":{"type":"boolean","title":"Will Exhaust Budget","description":"True when the organisation is projected to run out of usable credits — allowance remaining plus purchased — before the current month ends."},"projected_exhaustion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Projected Exhaustion Date","description":"First date the organisation is projected to have spent more than it currently has available, or null when it isn't projected to run out this month."}},"type":"object","required":["projected_credits_spent","will_exhaust_budget"],"title":"AdminBudgetForecastResponseSchema","description":"Whether an organisation is projected to run out of usable credits."}}}}
```

## The AdminCostUsageStatsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCostUsageStatsResponseSchema":{"properties":{"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"count":{"type":"integer","title":"Count","description":"Number of units priced in this currency"},"sum_cost":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Sum Cost"},"average_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Cost","description":"Mean cost spent by a single unit, or null if count is 0"},"min_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Cost","description":"Lowest cost spent by a single unit, or null if count is 0"},"max_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Cost","description":"Highest cost spent by a single unit, or null if count is 0"}},"type":"object","required":["currency","count","sum_cost","average_cost","min_cost","max_cost"],"title":"AdminCostUsageStatsResponseSchema","description":"Response schema for cost statistics in one currency."}}}}
```

## The AdminCreateAllowancePlanPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCreateAllowancePlanPayloadSchema":{"properties":{"monthly_allowance":{"anyOf":[{"type":"number","minimum":0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*(?:\\d{0,10}|(?=[\\d.]{1,19}0*$)\\d{0,10}\\.\\d{0,8}0*$)"}],"title":"Monthly Allowance","description":"Monthly credit allowance cap for the organisation. Must be a non-negative value."},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","description":"IANA timezone the monthly window resets in."},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From","description":"When the plan starts applying, as a timezone-aware ISO 8601 instant. Omit to start immediately; supply a future instant to schedule ahead. It may not be in the past."}},"type":"object","required":["monthly_allowance","timezone"],"title":"AdminCreateAllowancePlanPayloadSchema","description":"Payload for opening a new allowance plan for an organisation."}}}}
```

## The AdminCreateOrganisationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCreateOrganisationPayloadSchema":{"properties":{"owner_email":{"type":"string","format":"email","title":"Owner Email"},"owner_full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Owner Full Name"},"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name"},"summary":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Summary"}},"type":"object","required":["owner_email","owner_full_name","name"],"title":"AdminCreateOrganisationPayloadSchema","description":"Pydantic schema for creating an organisation."}}}}
```

## The AdminCreateOrganisationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCreateOrganisationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"owner":{"$ref":"#/components/schemas/AdminOwnerResponseSchema"},"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/OrganisationStatus"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When the organisation was created."},"created_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who created the organisation."}},"type":"object","required":["id","owner","name","status"],"title":"AdminCreateOrganisationResponseSchema","description":"Pydantic schema for organisation creation response."},"AdminOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."},"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"},"AdminPlatformAdministratorResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminPlatformAdministratorResponseSchema","description":"Pydantic schema for the platform administrator behind a lifecycle action."}}}}
```

## The AdminCreateUserPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCreateUserPayloadSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"organisation_id":{"type":"integer","title":"Organisation Id"},"organisation_role":{"$ref":"#/components/schemas/OrganisationRole"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false}},"type":"object","required":["email","organisation_id","organisation_role"],"title":"AdminCreateUserPayloadSchema","description":"Request payload for creating a user (platform admin)."},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The AdminCreditSpendStatsByUnitResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCreditSpendStatsByUnitResponseSchema":{"properties":{"execution":{"$ref":"#/components/schemas/AdminCreditSpendStatsResponseSchema"},"conversation":{"$ref":"#/components/schemas/AdminCreditSpendStatsResponseSchema"},"total":{"$ref":"#/components/schemas/AdminCreditSpendStatsResponseSchema","description":"Deduplicated across execution/conversation overlap: its unit is the execution or conversation itself (same granularity as the execution/conversation breakdowns), so a triggered execution running inside a conversation is counted once here, not twice."}},"type":"object","required":["execution","conversation","total"],"title":"AdminCreditSpendStatsByUnitResponseSchema","description":"Response schema for platform-wide spend statistics by unit of work."},"AdminCreditSpendStatsResponseSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of units of work with recorded spend"},"sum_credits":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Sum Credits","description":"Total credits spent across all units"},"average_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Credits","description":"Average credits spent per unit, or null if count is 0"},"min_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Credits","description":"Lowest credits spent by a single unit, or null if count is 0"},"max_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Credits","description":"Highest credits spent by a single unit, or null if count is 0"}},"type":"object","required":["count","sum_credits","average_credits","min_credits","max_credits"],"title":"AdminCreditSpendStatsResponseSchema","description":"Credit-spend statistics across one kind of unit of work."}}}}
```

## The AdminCreditSpendStatsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminCreditSpendStatsResponseSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of units of work with recorded spend"},"sum_credits":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Sum Credits","description":"Total credits spent across all units"},"average_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Credits","description":"Average credits spent per unit, or null if count is 0"},"min_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Credits","description":"Lowest credits spent by a single unit, or null if count is 0"},"max_credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Credits","description":"Highest credits spent by a single unit, or null if count is 0"}},"type":"object","required":["count","sum_credits","average_credits","min_credits","max_credits"],"title":"AdminCreditSpendStatsResponseSchema","description":"Credit-spend statistics across one kind of unit of work."}}}}
```

## The AdminGetOrganisationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminGetOrganisationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"owner":{"$ref":"#/components/schemas/AdminOwnerResponseSchema"},"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/OrganisationStatus"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"agent_count":{"type":"integer","title":"Agent Count"},"default_language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Language Model Provider Id"},"default_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Model Id"},"default_embedding_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Embedding Model Provider Id"},"default_embedding_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Embedding Model Id"},"default_assistant_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Assistant Agent Id"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When the organisation was created."},"created_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who created the organisation, or null when it was not created by one."},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At","description":"When the organisation was activated. Null means no activation is recorded: either the organisation has never been activated, or it was activated before activations were recorded. Read it together with status rather than as a substitute for it."},"activated_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who activated the organisation."}},"type":"object","required":["id","owner","name","status","deleted_at","agent_count"],"title":"AdminGetOrganisationResponseSchema","description":"Pydantic schema for organisation detail response (admin view)."},"AdminOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."},"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"},"AdminPlatformAdministratorResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminPlatformAdministratorResponseSchema","description":"Pydantic schema for the platform administrator behind a lifecycle action."}}}}
```

## The AdminImportOrganisationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminImportOrganisationResponseSchema":{"properties":{"organisation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organisation Id","description":"Id assigned to the new organisation, or null for a dry run. The organisation is INACTIVE — activate it once its configuration has been checked, which is what e-mails its members."},"organisation_name":{"type":"string","title":"Organisation Name"},"users_created":{"type":"integer","title":"Users Created","description":"Number of users created, including the owner. For a dry run, the number that would be created."},"system_providers_granted":{"items":{"type":"string"},"type":"array","title":"System Providers Granted","description":"Identifiers of the system-organisation providers linked to the new organisation."},"provisioning_applied":{"type":"boolean","title":"Provisioning Applied","description":"Whether the configuration manifest actually ran. It is applied inside this request, not in the background, so by the time you read this the agents and MCP servers either exist or are named in `warnings`. False means the run failed outright and the organisation is unconfigured — re-apply the manifest before activating it. Always false for a dry run."},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","description":"Anything the import noticed but did not treat as a failure — incomplete baseline provisioning, or configuration skipped because an identifier was already taken."},"configuration":{"$ref":"#/components/schemas/AdminImportedConfigurationResponseSchema","description":"What the provisioning manifest creates. Populated for a dry run too, which is the point of one: an import cannot be rolled back once the organisation exists, so this is the chance to check that the right agents and providers are in the file."},"manual_followup":{"$ref":"#/components/schemas/ManualFollowup","description":"The document's own follow-up list, echoed back so the operator has the worklist without re-reading the file: MCP servers whose credentials must be re-entered, triggers that were not carried, and defaults that could not be set."}},"type":"object","required":["organisation_id","organisation_name","users_created","system_providers_granted","provisioning_applied","warnings","configuration","manual_followup"],"title":"AdminImportOrganisationResponseSchema","description":"Result of importing an organisation from an export document."},"AdminImportedConfigurationResponseSchema":{"properties":{"language_model_providers":{"items":{"type":"string"},"type":"array","title":"Language Model Providers","description":"Providers created for the organisation, without credentials. Set each one's key afterwards."},"mcp_servers":{"items":{"type":"string"},"type":"array","title":"Mcp Servers","description":"MCP servers created for the organisation. Any that need authentication are named under `manual_followup`."},"agents":{"items":{"type":"string"},"type":"array","title":"Agents","description":"Agents created, sub-agents first. An identifier that already exists from the platform's baseline provisioning is skipped rather than overwritten, and that is reported in `warnings`."},"knowledge_base_nodes":{"type":"integer","title":"Knowledge Base Nodes","description":"Number of knowledge-base folders and documents in the manifest."}},"type":"object","required":["language_model_providers","mcp_servers","agents","knowledge_base_nodes"],"title":"AdminImportedConfigurationResponseSchema","description":"What the document's provisioning manifest creates, by identifier."},"ManualFollowup":{"properties":{"mcp_servers_needing_credentials":{"items":{"$ref":"#/components/schemas/MCPServerNeedingCredentials"},"type":"array","title":"Mcp Servers Needing Credentials"},"dropped_triggers":{"items":{"$ref":"#/components/schemas/DroppedTrigger"},"type":"array","title":"Dropped Triggers"},"default_model_not_carried":{"type":"boolean","title":"Default Model Not Carried","description":"True when the source organisation had a default model that could not be carried. A default pointing at a provider created without credentials would be unverified, a state the application itself rejects — leaving the organisation unable to save its own settings. Set the default by hand once the provider is verified.","default":false},"default_embedding_model_not_carried":{"type":"boolean","title":"Default Embedding Model Not Carried","description":"True when the source organisation had a default embedding model that could not be carried, for the same reason. This one must be set before the knowledge base is applied, or documents publish with no chunks and are skipped by later re-embedding.","default":false},"not_yet_supported":{"items":{"$ref":"#/components/schemas/NotYetSupported"},"type":"array","title":"Not Yet Supported"}},"additionalProperties":false,"type":"object","title":"ManualFollowup","description":"The operator's worklist: everything the import cannot finish by itself.\n\nEchoed back by the import endpoint so the worklist is available without\nre-reading the file."},"MCPServerNeedingCredentials":{"properties":{"identifier":{"type":"string","minLength":1,"title":"Identifier"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the source server was configured with."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account to this server.","default":false},"removed_config_fields":{"items":{"type":"string"},"type":"array","title":"Removed Config Fields","description":"Transport configuration removed from this server's spec because it can carry credentials — 'headers' and 'env' above all, whose values are where a bearer token or an API key actually lives. The server is created with the rest of its configuration and will not work until these are restored by hand."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"MCPServerNeedingCredentials","description":"An MCP server that will not work until an admin re-enters its secret."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"DroppedTrigger":{"properties":{"agent_identifier":{"type":"string","minLength":1,"title":"Agent Identifier"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"}},"additionalProperties":false,"type":"object","required":["agent_identifier","definition_id"],"title":"DroppedTrigger","description":"A trigger that was deliberately not carried across.\n\nOnly the manual run-now trigger is exported, because every agent needs one\nto be runnable. Scheduled triggers would start firing in the target the\nmoment the organisation goes live, and webhook triggers carry a secret\ntoken — so both are recorded here and re-created by hand if still wanted."},"NotYetSupported":{"properties":{"agent_identifier":{"type":"string","minLength":1,"title":"Agent Identifier"},"feature":{"type":"string","minLength":1,"title":"Feature","description":"Name of the unsupported feature, e.g. 'evaluation_config'."},"detail":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detail","description":"Best-effort copy of the source configuration, for reference."}},"additionalProperties":false,"type":"object","required":["agent_identifier","feature"],"title":"NotYetSupported","description":"Configuration the DSL has no representation for yet.\n\nRecorded rather than dropped silently, so the operator knows what did not\ncome across. When the DSL catches up, the same file becomes valid input for\nit — that is what ``schema_version`` is for."}}}}
```

## The AdminImportedConfigurationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminImportedConfigurationResponseSchema":{"properties":{"language_model_providers":{"items":{"type":"string"},"type":"array","title":"Language Model Providers","description":"Providers created for the organisation, without credentials. Set each one's key afterwards."},"mcp_servers":{"items":{"type":"string"},"type":"array","title":"Mcp Servers","description":"MCP servers created for the organisation. Any that need authentication are named under `manual_followup`."},"agents":{"items":{"type":"string"},"type":"array","title":"Agents","description":"Agents created, sub-agents first. An identifier that already exists from the platform's baseline provisioning is skipped rather than overwritten, and that is reported in `warnings`."},"knowledge_base_nodes":{"type":"integer","title":"Knowledge Base Nodes","description":"Number of knowledge-base folders and documents in the manifest."}},"type":"object","required":["language_model_providers","mcp_servers","agents","knowledge_base_nodes"],"title":"AdminImportedConfigurationResponseSchema","description":"What the document's provisioning manifest creates, by identifier."}}}}
```

## The AdminListOrganisationsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminListOrganisationsResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"owner":{"$ref":"#/components/schemas/AdminOwnerResponseSchema"},"name":{"type":"string","title":"Name"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/OrganisationStatus"},"agent_count":{"type":"integer","title":"Agent Count"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When the organisation was created."},"created_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who created the organisation, or null when it was not created by one."},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At","description":"When the organisation was activated. Null means no activation is recorded: either the organisation has never been activated, or it was activated before activations were recorded. Read it together with status rather than as a substitute for it."},"activated_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who activated the organisation."}},"type":"object","required":["id","owner","name","deleted_at","status","agent_count"],"title":"AdminListOrganisationsResponseSchema","description":"Pydantic schema for organisation list response."},"AdminOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."},"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"},"AdminPlatformAdministratorResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminPlatformAdministratorResponseSchema","description":"Pydantic schema for the platform administrator behind a lifecycle action."}}}}
```

## The AdminModelPricingListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminModelPricingListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminModelPricingResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"AdminModelPricingListResponseSchema","description":"Paginated list response schema for model pricing snapshots."},"AdminModelPricingResponseSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["currency","created_at"],"title":"AdminModelPricingResponseSchema","description":"Current pricing snapshot embedded in model profile responses."}}}}
```

## The AdminModelPricingResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminModelPricingResponseSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["currency","created_at"],"title":"AdminModelPricingResponseSchema","description":"Current pricing snapshot embedded in model profile responses."}}}}
```

## The AdminModelProfileListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminModelProfileListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminModelProfileResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"AdminModelProfileListResponseSchema","description":"Paginated list response schema for model profiles."},"AdminModelProfileResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"provider_id":{"type":"string","title":"Provider Id"},"provider_name":{"type":"string","title":"Provider Name"},"model_id":{"type":"string","title":"Model Id"},"model_name":{"type":"string","title":"Model Name"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"weights":{"$ref":"#/components/schemas/ModelWeights"},"tool_call":{"type":"boolean","title":"Tool Call"},"reasoning":{"type":"boolean","title":"Reasoning"},"structured_output":{"type":"boolean","title":"Structured Output"},"temperature":{"type":"boolean","title":"Temperature"},"input_type":{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array","title":"Input Type"},"output_type":{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array","title":"Output Type"},"context_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Limit"},"input_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Limit"},"output_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Limit"},"knowledge":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Knowledge"},"release_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Release Date"},"last_updated":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Updated"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"docs_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Url"},"current_pricing":{"anyOf":[{"$ref":"#/components/schemas/AdminModelPricingResponseSchema"},{"type":"null"}]}},"type":"object","required":["id","identifier","provider_id","provider_name","model_id","model_name","family","weights","tool_call","reasoning","structured_output","temperature","input_type","output_type","context_limit","input_limit","output_limit","knowledge","release_date","last_updated","created_at","updated_at","comment","docs_url","current_pricing"],"title":"AdminModelProfileResponseSchema","description":"Model profile response schema for admin listing."},"ModelWeights":{"type":"string","enum":["opened","closed"],"title":"ModelWeights"},"ModelModality":{"type":"string","enum":["text","image","audio","video"],"title":"ModelModality"},"AdminModelPricingResponseSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["currency","created_at"],"title":"AdminModelPricingResponseSchema","description":"Current pricing snapshot embedded in model profile responses."}}}}
```

## The AdminModelProfileResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminModelProfileResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"provider_id":{"type":"string","title":"Provider Id"},"provider_name":{"type":"string","title":"Provider Name"},"model_id":{"type":"string","title":"Model Id"},"model_name":{"type":"string","title":"Model Name"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"weights":{"$ref":"#/components/schemas/ModelWeights"},"tool_call":{"type":"boolean","title":"Tool Call"},"reasoning":{"type":"boolean","title":"Reasoning"},"structured_output":{"type":"boolean","title":"Structured Output"},"temperature":{"type":"boolean","title":"Temperature"},"input_type":{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array","title":"Input Type"},"output_type":{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array","title":"Output Type"},"context_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Limit"},"input_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Limit"},"output_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Limit"},"knowledge":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Knowledge"},"release_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Release Date"},"last_updated":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Updated"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"docs_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Url"},"current_pricing":{"anyOf":[{"$ref":"#/components/schemas/AdminModelPricingResponseSchema"},{"type":"null"}]}},"type":"object","required":["id","identifier","provider_id","provider_name","model_id","model_name","family","weights","tool_call","reasoning","structured_output","temperature","input_type","output_type","context_limit","input_limit","output_limit","knowledge","release_date","last_updated","created_at","updated_at","comment","docs_url","current_pricing"],"title":"AdminModelProfileResponseSchema","description":"Model profile response schema for admin listing."},"ModelWeights":{"type":"string","enum":["opened","closed"],"title":"ModelWeights"},"ModelModality":{"type":"string","enum":["text","image","audio","video"],"title":"ModelModality"},"AdminModelPricingResponseSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["currency","created_at"],"title":"AdminModelPricingResponseSchema","description":"Current pricing snapshot embedded in model profile responses."}}}}
```

## The AdminOrganisationBudgetRiskListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminOrganisationBudgetRiskListItemResponseSchema":{"properties":{"organisation_id":{"type":"integer","title":"Organisation Id"},"organisation_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organisation Name","description":"The organisation's display name, or null when it can no longer be resolved."},"owner":{"anyOf":[{"$ref":"#/components/schemas/AdminOrganisationOwnerResponseSchema"},{"type":"null"}],"description":"The organisation's owner, or null when it can't be resolved."},"monthly_allowance":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Monthly Allowance","description":"The organisation's current monthly allowance cap."},"allowance_remaining":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Remaining","description":"What remains of the monthly allowance this cycle."},"purchased":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased","description":"The organisation's stored, non-expiring purchased credits."},"credits_available":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Available","description":"Total usable credits right now — allowance remaining plus purchased. The figure this listing is ranked by, ascending."},"budget_forecast":{"$ref":"#/components/schemas/AdminBudgetForecastResponseSchema"}},"type":"object","required":["organisation_id","organisation_name","owner","monthly_allowance","allowance_remaining","purchased","credits_available","budget_forecast"],"title":"AdminOrganisationBudgetRiskListItemResponseSchema","description":"One organisation's standing against its monthly credit budget."},"AdminOrganisationOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOrganisationOwnerResponseSchema","description":"The organisation owner's identity."},"AdminBudgetForecastResponseSchema":{"properties":{"projected_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Projected Credits Spent","description":"Projected cumulative total spend (allowance and purchased combined) by the end of the current month."},"will_exhaust_budget":{"type":"boolean","title":"Will Exhaust Budget","description":"True when the organisation is projected to run out of usable credits — allowance remaining plus purchased — before the current month ends."},"projected_exhaustion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Projected Exhaustion Date","description":"First date the organisation is projected to have spent more than it currently has available, or null when it isn't projected to run out this month."}},"type":"object","required":["projected_credits_spent","will_exhaust_budget"],"title":"AdminBudgetForecastResponseSchema","description":"Whether an organisation is projected to run out of usable credits."}}}}
```

## The AdminOrganisationBudgetRiskListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminOrganisationBudgetRiskListResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminOrganisationBudgetRiskListItemResponseSchema"},"type":"array","title":"Items"},"total_count":{"type":"integer","title":"Total Count","description":"Number of organisations with an active allowance plan platform-wide — the full candidate pool, not just those returned."},"currency":{"$ref":"#/components/schemas/CreditCurrency"}},"type":"object","required":["items","total_count","currency"],"title":"AdminOrganisationBudgetRiskListResponseSchema","description":"Response schema for the organisations closest to running out of credits."},"AdminOrganisationBudgetRiskListItemResponseSchema":{"properties":{"organisation_id":{"type":"integer","title":"Organisation Id"},"organisation_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organisation Name","description":"The organisation's display name, or null when it can no longer be resolved."},"owner":{"anyOf":[{"$ref":"#/components/schemas/AdminOrganisationOwnerResponseSchema"},{"type":"null"}],"description":"The organisation's owner, or null when it can't be resolved."},"monthly_allowance":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Monthly Allowance","description":"The organisation's current monthly allowance cap."},"allowance_remaining":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Remaining","description":"What remains of the monthly allowance this cycle."},"purchased":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased","description":"The organisation's stored, non-expiring purchased credits."},"credits_available":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Available","description":"Total usable credits right now — allowance remaining plus purchased. The figure this listing is ranked by, ascending."},"budget_forecast":{"$ref":"#/components/schemas/AdminBudgetForecastResponseSchema"}},"type":"object","required":["organisation_id","organisation_name","owner","monthly_allowance","allowance_remaining","purchased","credits_available","budget_forecast"],"title":"AdminOrganisationBudgetRiskListItemResponseSchema","description":"One organisation's standing against its monthly credit budget."},"AdminOrganisationOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOrganisationOwnerResponseSchema","description":"The organisation owner's identity."},"AdminBudgetForecastResponseSchema":{"properties":{"projected_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Projected Credits Spent","description":"Projected cumulative total spend (allowance and purchased combined) by the end of the current month."},"will_exhaust_budget":{"type":"boolean","title":"Will Exhaust Budget","description":"True when the organisation is projected to run out of usable credits — allowance remaining plus purchased — before the current month ends."},"projected_exhaustion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Projected Exhaustion Date","description":"First date the organisation is projected to have spent more than it currently has available, or null when it isn't projected to run out this month."}},"type":"object","required":["projected_credits_spent","will_exhaust_budget"],"title":"AdminBudgetForecastResponseSchema","description":"Whether an organisation is projected to run out of usable credits."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."}}}}
```

## The AdminOrganisationOwnerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminOrganisationOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOrganisationOwnerResponseSchema","description":"The organisation owner's identity."}}}}
```

## The AdminOwnerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."}}}}
```

## The AdminPlatformAdministratorResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminPlatformAdministratorResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminPlatformAdministratorResponseSchema","description":"Pydantic schema for the platform administrator behind a lifecycle action."}}}}
```

## The AdminStatusChangeOrganisationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminStatusChangeOrganisationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"owner":{"$ref":"#/components/schemas/AdminOwnerResponseSchema"},"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/OrganisationStatus"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When the organisation was created."},"created_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who created the organisation, or null when it was not created by one."},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At","description":"When the organisation was activated. Null means no activation is recorded: either the organisation has never been activated, or it was activated before activations were recorded. Blocking and unblocking leave it untouched."},"activated_by":{"anyOf":[{"$ref":"#/components/schemas/AdminPlatformAdministratorResponseSchema"},{"type":"null"}],"description":"The platform administrator who activated the organisation."}},"type":"object","required":["id","owner","name","status"],"title":"AdminStatusChangeOrganisationResponseSchema","description":"Pydantic schema for organisation status change response."},"AdminOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."},"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"},"AdminPlatformAdministratorResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminPlatformAdministratorResponseSchema","description":"Pydantic schema for the platform administrator behind a lifecycle action."}}}}
```

## The AdminTokenUsageStatsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminTokenUsageStatsResponseSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of units that recorded a cost"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"average_total_tokens":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Total Tokens","description":"Mean total tokens (all six fields summed) per unit, or null if count is 0"},"min_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Total Tokens","description":"Lowest total tokens spent by a single unit, or null if count is 0"},"max_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Total Tokens","description":"Highest total tokens spent by a single unit, or null if count is 0"}},"type":"object","required":["count","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","average_total_tokens","min_total_tokens","max_total_tokens"],"title":"AdminTokenUsageStatsResponseSchema","description":"Response schema for token usage statistics across one kind of unit of work."}}}}
```

## The AdminTriggerSyncResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminTriggerSyncResponseSchema":{"properties":{"task_id":{"type":"string","title":"Task Id"}},"type":"object","required":["task_id"],"title":"AdminTriggerSyncResponseSchema","description":"Response schema for a model profile sync trigger."}}}}
```

## The AdminUpdateModelProfilePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUpdateModelProfilePayloadSchema":{"properties":{"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","title":"AdminUpdateModelProfilePayloadSchema","description":"Payload schema for updating a model profile."}}}}
```

## The AdminUpdateModelProfileResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUpdateModelProfileResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["id","identifier","comment"],"title":"AdminUpdateModelProfileResponseSchema","description":"Response schema for a model profile update."}}}}
```

## The AdminUpdateOrganisationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUpdateOrganisationPayloadSchema":{"properties":{"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Summary"},"default_language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Language Model Provider Id"},"default_model_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Default Model Id"},"default_embedding_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Embedding Model Provider Id"},"default_embedding_model_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Default Embedding Model Id"},"default_assistant_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Assistant Agent Id"}},"type":"object","required":["owner_id","name"],"title":"AdminUpdateOrganisationPayloadSchema","description":"Pydantic schema for updating an organisation."}}}}
```

## The AdminUpdateOrganisationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUpdateOrganisationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"owner":{"$ref":"#/components/schemas/AdminOwnerResponseSchema"},"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/OrganisationStatus"},"default_language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Language Model Provider Id"},"default_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Model Id"},"default_embedding_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Embedding Model Provider Id"},"default_embedding_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Embedding Model Id"},"default_assistant_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Assistant Agent Id"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["id","owner","name","status"],"title":"AdminUpdateOrganisationResponseSchema","description":"Pydantic schema for organisation update response."},"AdminOwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"AdminOwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."},"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"}}}}
```

## The AdminUpdateUserPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUpdateUserPayloadSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"organisation_id":{"type":"integer","title":"Organisation Id"},"organisation_role":{"$ref":"#/components/schemas/OrganisationRole"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_superuser":{"type":"boolean","title":"Is Superuser"}},"type":"object","required":["email","organisation_id","organisation_role","is_superuser"],"title":"AdminUpdateUserPayloadSchema","description":"Request payload for updating a user (platform admin)."},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The AdminUsageStatsByUnitResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUsageStatsByUnitResponseSchema":{"properties":{"execution":{"$ref":"#/components/schemas/AdminUsageStatsResponseSchema"},"conversation":{"$ref":"#/components/schemas/AdminUsageStatsResponseSchema"},"total":{"$ref":"#/components/schemas/AdminUsageStatsResponseSchema","description":"Deduplicated across execution/conversation overlap: a conversation's totals already include every execution that ran inside it, so a triggered execution running inside a conversation is counted once here, not twice."}},"type":"object","required":["execution","conversation","total"],"title":"AdminUsageStatsByUnitResponseSchema","description":"Response schema for platform-wide usage statistics by unit of work."},"AdminUsageStatsResponseSchema":{"properties":{"tokens":{"$ref":"#/components/schemas/AdminTokenUsageStatsResponseSchema"},"cost":{"items":{"$ref":"#/components/schemas/AdminCostUsageStatsResponseSchema"},"type":"array","title":"Cost","description":"One row per currency the underlying units were priced in"}},"type":"object","required":["tokens","cost"],"title":"AdminUsageStatsResponseSchema","description":"Response schema for token and cost usage statistics across one kind\nof unit of work."},"AdminTokenUsageStatsResponseSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of units that recorded a cost"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"average_total_tokens":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Total Tokens","description":"Mean total tokens (all six fields summed) per unit, or null if count is 0"},"min_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Total Tokens","description":"Lowest total tokens spent by a single unit, or null if count is 0"},"max_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Total Tokens","description":"Highest total tokens spent by a single unit, or null if count is 0"}},"type":"object","required":["count","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","average_total_tokens","min_total_tokens","max_total_tokens"],"title":"AdminTokenUsageStatsResponseSchema","description":"Response schema for token usage statistics across one kind of unit of work."},"AdminCostUsageStatsResponseSchema":{"properties":{"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"count":{"type":"integer","title":"Count","description":"Number of units priced in this currency"},"sum_cost":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Sum Cost"},"average_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Cost","description":"Mean cost spent by a single unit, or null if count is 0"},"min_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Cost","description":"Lowest cost spent by a single unit, or null if count is 0"},"max_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Cost","description":"Highest cost spent by a single unit, or null if count is 0"}},"type":"object","required":["currency","count","sum_cost","average_cost","min_cost","max_cost"],"title":"AdminCostUsageStatsResponseSchema","description":"Response schema for cost statistics in one currency."}}}}
```

## The AdminUsageStatsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUsageStatsResponseSchema":{"properties":{"tokens":{"$ref":"#/components/schemas/AdminTokenUsageStatsResponseSchema"},"cost":{"items":{"$ref":"#/components/schemas/AdminCostUsageStatsResponseSchema"},"type":"array","title":"Cost","description":"One row per currency the underlying units were priced in"}},"type":"object","required":["tokens","cost"],"title":"AdminUsageStatsResponseSchema","description":"Response schema for token and cost usage statistics across one kind\nof unit of work."},"AdminTokenUsageStatsResponseSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of units that recorded a cost"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"average_total_tokens":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Total Tokens","description":"Mean total tokens (all six fields summed) per unit, or null if count is 0"},"min_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Total Tokens","description":"Lowest total tokens spent by a single unit, or null if count is 0"},"max_total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Total Tokens","description":"Highest total tokens spent by a single unit, or null if count is 0"}},"type":"object","required":["count","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","average_total_tokens","min_total_tokens","max_total_tokens"],"title":"AdminTokenUsageStatsResponseSchema","description":"Response schema for token usage statistics across one kind of unit of work."},"AdminCostUsageStatsResponseSchema":{"properties":{"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"count":{"type":"integer","title":"Count","description":"Number of units priced in this currency"},"sum_cost":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Sum Cost"},"average_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Cost","description":"Mean cost spent by a single unit, or null if count is 0"},"min_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Cost","description":"Lowest cost spent by a single unit, or null if count is 0"},"max_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Cost","description":"Highest cost spent by a single unit, or null if count is 0"}},"type":"object","required":["currency","count","sum_cost","average_cost","min_cost","max_cost"],"title":"AdminCostUsageStatsResponseSchema","description":"Response schema for cost statistics in one currency."}}}}
```

## The AdminUserListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUserListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminUserResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"AdminUserListResponseSchema","description":"Paginated list response schema for users (platform admin view)."},"AdminUserResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"status":{"$ref":"#/components/schemas/UserStatus"},"is_superuser":{"type":"boolean","title":"Is Superuser"},"organisation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organisation Id"},"organisation_role":{"anyOf":[{"$ref":"#/components/schemas/OrganisationRole"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name","status","is_superuser","organisation_id","organisation_role","created_at","updated_at","deleted_at"],"title":"AdminUserResponseSchema","description":"Response schema for a user (platform admin view)."},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The AdminUserResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AdminUserResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"status":{"$ref":"#/components/schemas/UserStatus"},"is_superuser":{"type":"boolean","title":"Is Superuser"},"organisation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organisation Id"},"organisation_role":{"anyOf":[{"$ref":"#/components/schemas/OrganisationRole"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name","status","is_superuser","organisation_id","organisation_role","created_at","updated_at","deleted_at"],"title":"AdminUserResponseSchema","description":"Response schema for a user (platform admin view)."},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The AgentCostForecastResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentCostForecastResponseSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"items":{"items":{"$ref":"#/components/schemas/CostForecastDaySchema"},"type":"array","title":"Items"},"credits":{"items":{"$ref":"#/components/schemas/CreditForecastDaySchema"},"type":"array","title":"Credits"}},"type":"object","required":["agent_id","items","credits"],"title":"AgentCostForecastResponseSchema","description":"Actual daily cost and credits plus end-of-month projection for a specific agent."},"CostForecastDaySchema":{"properties":{"date":{"type":"string","title":"Date","description":"Calendar date in YYYY-MM-DD format"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"},"is_projection":{"type":"boolean","title":"Is Projection","description":"True when this value is a projected estimate; False when it is a recorded actual"}},"type":"object","required":["date","cost_currency","is_projection"],"title":"CostForecastDaySchema","description":"Cost for a single calendar day — either actual or projected."},"CreditForecastDaySchema":{"properties":{"date":{"type":"string","title":"Date","description":"Calendar date in YYYY-MM-DD format"},"credits_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Amount"},"is_projection":{"type":"boolean","title":"Is Projection","description":"True when this value is a projected estimate; False when it is a recorded actual"}},"type":"object","required":["date","credits_amount","is_projection"],"title":"CreditForecastDaySchema","description":"Credits for a single calendar day — either actual or projected.\n\nCredits carry no currency, so unlike `CostForecastDaySchema` this is always\nexactly one entry per date."}}}}
```

## The AgentDefinitionSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentDefinitionSchema":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"identifier":{"type":"string","maxLength":255,"minLength":1,"title":"Identifier"},"instruction":{"type":"string","minLength":1,"title":"Instruction"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":false},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent","default":false},"language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Language Model Provider Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"mcp_servers":{"items":{"$ref":"#/components/schemas/MCPServerSuggestion"},"type":"array","title":"Mcp Servers"},"sub_agents":{"items":{"$ref":"#/components/schemas/SubAgentSuggestion"},"type":"array","title":"Sub Agents"},"triggers":{"items":{"$ref":"#/components/schemas/TriggerSuggestion"},"type":"array","title":"Triggers"},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSuggestion"},{"type":"null"}]},"eval_config":{"anyOf":[{"$ref":"#/components/schemas/EvalConfigSuggestion"},{"type":"null"}]},"recursion_limit":{"anyOf":[{"$ref":"#/components/schemas/RecursionLimitSuggestion"},{"type":"null"}]}},"type":"object","required":["name","identifier","instruction"],"title":"AgentDefinitionSchema"},"MCPServerSuggestion":{"properties":{"mcp_server_id":{"type":"integer","title":"Mcp Server Id"},"name":{"type":"string","title":"Name","default":""},"enabled_tools":{"items":{"type":"string"},"type":"array","title":"Enabled Tools"}},"type":"object","required":["mcp_server_id","enabled_tools"],"title":"MCPServerSuggestion","description":"Suggested MCP server link with tools to enable."},"SubAgentSuggestion":{"properties":{"sub_agent_id":{"type":"integer","title":"Sub Agent Id"},"name":{"type":"string","title":"Name","default":""}},"type":"object","required":["sub_agent_id"],"title":"SubAgentSuggestion","description":"Suggested sub-agent link."},"TriggerSuggestion":{"properties":{"definition_id":{"type":"string","format":"uuid","title":"Definition Id"},"config":{"anyOf":[{"$ref":"#/components/schemas/ManualTriggerConfig"},{"$ref":"#/components/schemas/ScheduleTriggerConfig"},{"$ref":"#/components/schemas/WebhookTriggerConfig"}],"title":"Config"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["definition_id","config"],"title":"TriggerSuggestion","description":"Suggested trigger for the agent.\n\nMatches the shape of POST /triggers/, but webhook definitions require the caller to\nenrich config with generated/sensitive fields before the create-trigger endpoint will\naccept it. Use build_webhook_credentials() to generate the required token and secret."},"ManualTriggerConfig":{"properties":{},"additionalProperties":false,"type":"object","title":"ManualTriggerConfig","description":"Config for the manual (Run now) trigger definition. Has no fields."},"ScheduleTriggerConfig":{"properties":{"hour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hour"},"minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minute"},"day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Week"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month"}},"additionalProperties":false,"type":"object","title":"ScheduleTriggerConfig","description":"Config for scheduler trigger definitions (daily, weekly, monthly, etc.).\n\nextra=\"ignore\" + json_schema_extra additionalProperties:false for OpenAI compatibility."},"WebhookTriggerConfig":{"properties":{"signature_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Signature Required"},"rate_limit_per_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Minute"},"ip_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ip Allowlist"},"signature_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature Header Name"},"timestamp_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp Header Name"},"idempotency_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Header Name"},"message_filter":{"anyOf":[{"$ref":"#/components/schemas/MessageFilter"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"WebhookTriggerConfig","description":"Config for webhook trigger definitions.\n\n`token` and `secret` are intentionally excluded — they are sensitive credentials that\nmust be generated by the caller (see build_webhook_credentials).\n\nextra=\"ignore\" + json_schema_extra additionalProperties:false for OpenAI compatibility."},"MessageFilter":{"properties":{"match":{"type":"string","enum":["all","any"],"title":"Match","default":"all"},"rules":{"items":{"$ref":"#/components/schemas/MessageFilterRule"},"type":"array","title":"Rules"}},"additionalProperties":false,"type":"object","required":["rules"],"title":"MessageFilter","description":"Payload filter for a webhook trigger.\n\nA payload that doesn't match is accepted but skipped — no execution is created and\nthe delivery is recorded as FILTERED."},"MessageFilterRule":{"properties":{"field":{"type":"string","title":"Field"},"operator":{"type":"string","enum":["equals","not_equals","in","contains","regex","exists"],"title":"Operator"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Value"}},"additionalProperties":false,"type":"object","required":["field","operator"],"title":"MessageFilterRule","description":"A single field/operator rule inside a webhook message filter.\n\n`value` is typed as a scalar union to satisfy OpenAI structured-output requirements\n(which reject untyped schemas). Nested-object values are not supported here but are\nnot meaningful for LLM-generated filters anyway."},"ImpactMetricSuggestion":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSuggestion","description":"Suggested impact metric — the value one run of the agent brings the organisation.\n\nMirrors ImpactMetricSchema (app.api.routes.agent.schemas): all three fields are\nrequired together, since a value with no unit is meaningless."},"EvalConfigSuggestion":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSuggestion"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage (0-100) of eligible runs that should actually be evaluated.","default":100}},"type":"object","title":"EvalConfigSuggestion","description":"LLM output for the quality-metrics estimation step.\n\nAn empty 'metrics' list is a valid, expected outcome — e.g. when the\norganisation has no metric providers configured, or none of the\navailable metrics are relevant to this agent."},"EvalMetricConfigSuggestion":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id","description":"Must be one of the ids from the provided available metrics catalog — never invent a metric_id."},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to be considered passed, in the metric's own unit and direction (see is_maximized on the catalog entry) — not a universal 0.0-1.0 scale."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution (0.0-1.0) to the agent's overall quality score."},"is_gate":{"type":"boolean","title":"Is Gate","description":"Whether this metric gates the others: if it fails, every non-gate metric is skipped for that run. Use sparingly, e.g. for a safety/compliance metric that makes the rest moot if it fails.","default":false},"reason":{"type":"string","title":"Reason","description":"Brief reason this metric was chosen.","default":""}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSuggestion","description":"Suggested per-metric evaluation config for one metric already present in\nthe org's available metric catalog.\n\nMirrors EvalMetricConfig (app.domain.agent.value_object): only metric_id,\nthreshold, weight, and is_gate are LLM-chosen. `config` (free-form rubric\noverrides) and `is_maximized` (a fallback used only for ad-hoc metrics with\nno registered EvaluationMetric) are intentionally omitted — every metric\nsuggested here comes from the real catalog, so those don't apply."},"RecursionLimitSuggestion":{"properties":{"graph_recursion_limit":{"type":"integer","maximum":100,"minimum":10,"title":"Graph Recursion Limit","description":"Suggested value for the agent's graph_recursion_limit."},"confidence":{"type":"number","maximum":1,"minimum":0,"title":"Confidence","description":"How confident this estimate is (0.0-1.0), given how explicit the instruction is about tool-call counts/repetition."},"reasoning":{"type":"string","title":"Reasoning","description":"Brief, concrete explanation of the tool/sub-agent calls counted.","default":""}},"type":"object","required":["graph_recursion_limit","confidence"],"title":"RecursionLimitSuggestion","description":"Suggested LangGraph recursion limit (max steps in the tool-calling\nloop) for an atomic agent, with a brief explanation.\n\nLower bound (10) is a product floor, not AgentAtomic's own validator\n(app.domain.agent.entity: gt=0) — a suggestion below 10 isn't useful\neven for the simplest agent, though a user can still manually set a\nlower graph_recursion_limit afterward if they want to. Upper bound\nmirrors the platform cap, AGENT_GRAPH_RECURSION_LIMIT."}}}}
```

## The AgentDetailResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentDetailResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"instruction":{"type":"string","title":"Instruction"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Always present; an uncapped budget is the scope 'unlimited'."},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Language Model Provider Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"is_model_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Model Valid"},"input_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Schema","description":"JSON Schema describing the expected input structure for this agent."},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema","description":"JSON Schema describing the expected output structure for this agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none' (no access), 'all' (whole knowledge base), or 'branch' (one or more folder subtrees)."},"knowledge_base_node_ids":{"items":{"type":"integer"},"type":"array","title":"Knowledge Base Node Ids","description":"Folder nodes the agent's knowledge-base access is confined to. Non-empty only when scope is 'branch'."},"eval_config":{"anyOf":[{"$ref":"#/components/schemas/EvalConfigSchema"},{"type":"null"}],"description":"Metrics this agent is evaluated against, with per-metric thresholds and weights."},"graph_recursion_limit":{"anyOf":[{"type":"integer","maximum":100,"exclusiveMinimum":0},{"type":"null"}],"title":"Graph Recursion Limit","description":"Per-agent override for the LangGraph recursion limit (max steps in the tool-calling loop). Must not exceed the platform cap (100). If null, LangGraph's own default (25) is used."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. Null when no impact metric is configured."},"metrics":{"$ref":"#/components/schemas/AgentMetricsSchema"}},"type":"object","required":["id","organisation_id","name","identifier","instruction","is_enabled","can_be_subagent","budget","created_by","knowledge_base_scope","metrics"],"title":"AgentDetailResponseSchema","description":"Pydantic schema for the agent detail (GET) response, including metrics."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"EvalConfigSchema":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSchema"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage of eligible runs that actually get evaluated.","default":100}},"type":"object","title":"EvalConfigSchema","description":"Pydantic schema for an agent's full evaluation configuration."},"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."},"AgentMetricsSchema":{"properties":{"success_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Ratio"}},"type":"object","title":"AgentMetricsSchema","description":"Agent execution metrics."}}}}
```

## The AgentExecutionDurationSummaryResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentExecutionDurationSummaryResponseSchema":{"properties":{"overall":{"$ref":"#/components/schemas/ExecutionDurationStatsSchema"},"by_user":{"items":{"$ref":"#/components/schemas/AgentExecutionUserDurationSchema"},"type":"array","title":"By User"}},"type":"object","required":["overall","by_user"],"title":"AgentExecutionDurationSummaryResponseSchema","description":"Duration usage summary response for a single agent."},"ExecutionDurationStatsSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of executions with a recorded duration that this average/min/max is computed over — not the total number of executions in the requested scope. PENDING/STARTED runs have no duration yet and are excluded from both."},"average_duration_seconds":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Duration Seconds"},"min_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Duration Seconds"},"max_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Seconds"}},"type":"object","required":["count","min_duration_seconds","max_duration_seconds"],"title":"ExecutionDurationStatsSchema","description":"Execution duration statistics.\n\nOnly executions with a recorded duration contribute — see\n`count`'s description."},"AgentExecutionUserDurationSchema":{"properties":{"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id","description":"Null groups executions with no attributed creator (e.g. scheduler-triggered runs)."},"execution_count":{"type":"integer","title":"Execution Count"},"average_duration_seconds":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Duration Seconds"}},"type":"object","required":["user_id","execution_count"],"title":"AgentExecutionUserDurationSchema","description":"One user's execution count and average duration for an agent."}}}}
```

## The AgentExecutionUserDurationSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentExecutionUserDurationSchema":{"properties":{"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id","description":"Null groups executions with no attributed creator (e.g. scheduler-triggered runs)."},"execution_count":{"type":"integer","title":"Execution Count"},"average_duration_seconds":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Duration Seconds"}},"type":"object","required":["user_id","execution_count"],"title":"AgentExecutionUserDurationSchema","description":"One user's execution count and average duration for an agent."}}}}
```

## The AgentExecutionsOverviewResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentExecutionsOverviewResponseSchema":{"properties":{"running":{"$ref":"#/components/schemas/RunningExecutionsSchema"},"next_scheduled":{"anyOf":[{"$ref":"#/components/schemas/NextScheduledExecutionSchema"},{"type":"null"}],"description":"The agent's next scheduled execution, or null if it has no active schedule trigger."},"last_finished":{"anyOf":[{"$ref":"#/components/schemas/LastExecutionSchema"},{"type":"null"}],"description":"The agent's most recent successful execution, or null if it has none."},"last_failed":{"anyOf":[{"$ref":"#/components/schemas/LastExecutionSchema"},{"type":"null"}],"description":"The agent's most recent failed execution, or null if it has none."},"top_triggers":{"items":{"$ref":"#/components/schemas/TopTriggerSchema"},"type":"array","title":"Top Triggers","description":"The agent's top triggers by all-time execution count, descending."},"by_trigger_type":{"items":{"$ref":"#/components/schemas/TriggerTypeExecutionCountSchema"},"type":"array","title":"By Trigger Type","description":"All-time execution counts bucketed by coarse trigger type. Always carries every TriggerType member, zero-filled where there was no matching execution."},"scheduled_this_month":{"type":"integer","title":"Scheduled This Month","description":"Executions started by a scheduler trigger since the start of the current calendar month, up to now. A historical count, not a forward projection of remaining cron fires this month."}},"type":"object","required":["running","next_scheduled","last_finished","last_failed","top_triggers","by_trigger_type","scheduled_this_month"],"title":"AgentExecutionsOverviewResponseSchema","description":"Response for the \"Executions\" tab on the Agent Details page."},"RunningExecutionsSchema":{"properties":{"total_count":{"type":"integer","title":"Total Count"},"items":{"items":{"$ref":"#/components/schemas/RunningExecutionItemSchema"},"type":"array","title":"Items"}},"type":"object","required":["total_count","items"],"title":"RunningExecutionsSchema","description":"Currently-running executions for an agent."},"RunningExecutionItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"$ref":"#/components/schemas/ExecutionStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerInfoSchema"},{"type":"null"}],"description":"The trigger that started this execution, or null if unattributed."}},"type":"object","required":["id","status","started_at","created_at","trigger"],"title":"RunningExecutionItemSchema","description":"A single currently-running execution."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."},"NextScheduledExecutionSchema":{"properties":{"next_execution_at":{"type":"string","format":"date-time","title":"Next Execution At"},"trigger":{"$ref":"#/components/schemas/TriggerInfoSchema"}},"type":"object","required":["next_execution_at","trigger"],"title":"NextScheduledExecutionSchema","description":"The earliest upcoming scheduled execution for an agent."},"LastExecutionSchema":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"$ref":"#/components/schemas/ExecutionStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerInfoSchema"},{"type":"null"}],"description":"The trigger that started this execution, or null if unattributed."}},"type":"object","required":["id","status","started_at","finished_at","created_at","trigger"],"title":"LastExecutionSchema","description":"The most recent execution in a given status."},"TopTriggerSchema":{"properties":{"trigger":{"$ref":"#/components/schemas/TriggerInfoSchema"},"execution_count":{"type":"integer","title":"Execution Count"}},"type":"object","required":["trigger","execution_count"],"title":"TopTriggerSchema","description":"One of an agent's top triggers by all-time execution count."},"TriggerTypeExecutionCountSchema":{"properties":{"trigger_type":{"$ref":"#/components/schemas/TriggerType"},"execution_count":{"type":"integer","title":"Execution Count"}},"type":"object","required":["trigger_type","execution_count"],"title":"TriggerTypeExecutionCountSchema","description":"Execution count for one coarse `TriggerType` bucket."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The AgentImpactMetricAggregateResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentImpactMetricAggregateResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AgentImpactMetricPeriodSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AgentImpactMetricAggregateResponseSchema","description":"Aggregated impact-metric response for a single agent."},"AgentImpactMetricPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"metric_type":{"type":"string","title":"Metric Type"},"unit":{"type":"string","title":"Unit"},"value":{"type":"integer","title":"Value"},"execution_count":{"type":"integer","title":"Execution Count","description":"Number of successful runs contributing to value."}},"type":"object","required":["period","metric_type","unit","value","execution_count"],"title":"AgentImpactMetricPeriodSchema","description":"Aggregated impact-metric value for one metric type/unit in a single time period, for one agent."}}}}
```

## The AgentImpactMetricPeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentImpactMetricPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"metric_type":{"type":"string","title":"Metric Type"},"unit":{"type":"string","title":"Unit"},"value":{"type":"integer","title":"Value"},"execution_count":{"type":"integer","title":"Execution Count","description":"Number of successful runs contributing to value."}},"type":"object","required":["period","metric_type","unit","value","execution_count"],"title":"AgentImpactMetricPeriodSchema","description":"Aggregated impact-metric value for one metric type/unit in a single time period, for one agent."}}}}
```

## The AgentListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"agent_type":{"type":"string","title":"Agent Type"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"metrics":{"$ref":"#/components/schemas/AgentMetricsSchema"}},"type":"object","required":["id","organisation_id","name","identifier","agent_type","is_enabled","can_be_subagent","created_by","metrics"],"title":"AgentListItemResponseSchema","description":"Pydantic schema for agent list response."},"AgentMetricsSchema":{"properties":{"success_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Ratio"}},"type":"object","title":"AgentMetricsSchema","description":"Agent execution metrics."}}}}
```

## The AgentListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentListResponseSchema":{"properties":{"agents":{"items":{"$ref":"#/components/schemas/AgentListItemResponseSchema"},"type":"array","title":"Agents"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["agents","total_count"],"title":"AgentListResponseSchema","description":"Pydantic schema for agent list response."},"AgentListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"agent_type":{"type":"string","title":"Agent Type"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"metrics":{"$ref":"#/components/schemas/AgentMetricsSchema"}},"type":"object","required":["id","organisation_id","name","identifier","agent_type","is_enabled","can_be_subagent","created_by","metrics"],"title":"AgentListItemResponseSchema","description":"Pydantic schema for agent list response."},"AgentMetricsSchema":{"properties":{"success_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Ratio"}},"type":"object","title":"AgentMetricsSchema","description":"Agent execution metrics."}}}}
```

## The AgentMCPServerLinkResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentMCPServerLinkResponseSchema":{"properties":{"mcp_server_id":{"type":"integer","title":"Mcp Server Id"},"enabled_tools":{"items":{"type":"string"},"type":"array","title":"Enabled Tools"}},"type":"object","required":["mcp_server_id","enabled_tools"],"title":"AgentMCPServerLinkResponseSchema","description":"Pydantic schema for agent-MCP server link response."}}}}
```

## The AgentMCPServerLinksResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentMCPServerLinksResponseSchema":{"properties":{"mcp_server_links":{"items":{"$ref":"#/components/schemas/AgentMCPServerLinkResponseSchema"},"type":"array","title":"Mcp Server Links"}},"type":"object","required":["mcp_server_links"],"title":"AgentMCPServerLinksResponseSchema","description":"Pydantic schema for list of agent-MCP server links."},"AgentMCPServerLinkResponseSchema":{"properties":{"mcp_server_id":{"type":"integer","title":"Mcp Server Id"},"enabled_tools":{"items":{"type":"string"},"type":"array","title":"Enabled Tools"}},"type":"object","required":["mcp_server_id","enabled_tools"],"title":"AgentMCPServerLinkResponseSchema","description":"Pydantic schema for agent-MCP server link response."}}}}
```

## The AgentMetricsSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentMetricsSchema":{"properties":{"success_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Ratio"}},"type":"object","title":"AgentMetricsSchema","description":"Agent execution metrics."}}}}
```

## The AgentNode object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"}}}}
```

## The AgentRecommendationEventResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentRecommendationEventResponseSchema":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"recommendation_result_id":{"type":"integer","title":"Recommendation Result Id"},"event_type":{"$ref":"#/components/schemas/RecommendationEventType"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["event_id","recommendation_result_id","event_type","created_at"],"title":"AgentRecommendationEventResponseSchema"},"RecommendationEventType":{"type":"string","enum":["VIEWED","ADOPTED","DISMISSED"],"title":"RecommendationEventType","description":"User-engagement events recorded against a presented recommendation result.\n\nThere is no PRESENTED value here - a result row's own existence/created_at\nis the presentation event."}}}}
```

## The AgentRecommendationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentRecommendationResponseSchema":{"properties":{"recommendation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recommendation Id","description":"Null when nothing has been persisted yet for this user/algorithm."},"data":{"items":{"$ref":"#/components/schemas/AgentRecommendationResultListItemResponseSchema"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"AgentRecommendationResponseSchema"},"AgentRecommendationResultListItemResponseSchema":{"properties":{"result_id":{"type":"integer","title":"Result Id"},"agents_catalog_entry_id":{"type":"integer","title":"Agents Catalog Entry Id"},"identifier":{"type":"string","title":"Identifier"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Engine-specific values behind this recommendation; the keys depend on the algorithm and may be absent entirely. The popularity algorithm reports installation and execution counts, where `execution_count_change_percentage` compares the last 30 days against the preceding 30 days and is null without a baseline."}},"type":"object","required":["result_id","agents_catalog_entry_id","identifier"],"title":"AgentRecommendationResultListItemResponseSchema"}}}}
```

## The AgentRecommendationResultListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentRecommendationResultListItemResponseSchema":{"properties":{"result_id":{"type":"integer","title":"Result Id"},"agents_catalog_entry_id":{"type":"integer","title":"Agents Catalog Entry Id"},"identifier":{"type":"string","title":"Identifier"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Engine-specific values behind this recommendation; the keys depend on the algorithm and may be absent entirely. The popularity algorithm reports installation and execution counts, where `execution_count_change_percentage` compares the last 30 days against the preceding 30 days and is null without a baseline."}},"type":"object","required":["result_id","agents_catalog_entry_id","identifier"],"title":"AgentRecommendationResultListItemResponseSchema"}}}}
```

## The AgentReference object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the agent. The alias can be referenced from AgentNodes (as a standalone node) or from InlineAgent sub_agents (as a sub-agent)."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this agent from AgentNodes or InlineAgent sub_agents."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"AgentReference"}}}}
```

## The AgentRequest object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentRequest":{"properties":{"instructions":{"type":"string","title":"Instructions"}},"type":"object","required":["instructions"],"title":"AgentRequest"}}}}
```

## The AgentUsageAggregateResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentUsageAggregateResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AgentUsagePeriodSchema"},"type":"array","title":"Items"},"credits":{"items":{"$ref":"#/components/schemas/CreditExecutionUsagePeriodSchema"},"type":"array","title":"Credits"}},"type":"object","required":["items","credits"],"title":"AgentUsageAggregateResponseSchema","description":"Aggregated execution usage response."},"AgentUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"agent_id":{"type":"integer","title":"Agent Id","description":"Agent ID"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"}},"type":"object","required":["period","agent_id","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","cost_currency"],"title":"AgentUsagePeriodSchema","description":"Aggregated token and cost usage for a single time period and agent."},"CreditExecutionUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"},"execution_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Execution Credits Spent"},"conversation_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Conversation Credits Spent"}},"type":"object","required":["period","credits_spent","execution_credits_spent","conversation_credits_spent"],"title":"CreditExecutionUsagePeriodSchema","description":"Credits spent on AGENT_EXECUTION consumption for a single time period.\n\nCredits carry no currency, so unlike `AgentUsagePeriodSchema`/\n`OrgUsagePeriodSchema` (which may have multiple rows per period, one per\ncurrency) this is always at most one row per period.\n\n`execution_credits_spent` and `conversation_credits_spent` are independent\nsums (rows attributed to an execution, and rows attributed to a\nconversation, respectively) — not a mutually exclusive split of\n`credits_spent`. A triggered execution running inside a conversation counts\ntoward both, so the two do not in general add up to `credits_spent`."}}}}
```

## The AgentUsageItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentUsageItemResponseSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"agent_name":{"type":"string","title":"Agent Name"},"model":{"type":"string","title":"Model","description":"Configured model's display name; comma-joined provider names for composite agents, or 'N/A' if none is configured"},"unique_users":{"type":"integer","title":"Unique Users","description":"Number of distinct users who have triggered an execution of this agent"}},"type":"object","required":["agent_id","agent_name","model","unique_users"],"title":"AgentUsageItemResponseSchema","description":"One row of the organisation's agent-usage report."}}}}
```

## The AgentUsagePeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"agent_id":{"type":"integer","title":"Agent Id","description":"Agent ID"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"}},"type":"object","required":["period","agent_id","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","cost_currency"],"title":"AgentUsagePeriodSchema","description":"Aggregated token and cost usage for a single time period and agent."}}}}
```

## The AgentUsageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentUsageResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AgentUsageItemResponseSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AgentUsageResponseSchema","description":"Organisation-wide agent-usage report response."},"AgentUsageItemResponseSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"agent_name":{"type":"string","title":"Agent Name"},"model":{"type":"string","title":"Model","description":"Configured model's display name; comma-joined provider names for composite agents, or 'N/A' if none is configured"},"unique_users":{"type":"integer","title":"Unique Users","description":"Number of distinct users who have triggered an execution of this agent"}},"type":"object","required":["agent_id","agent_name","model","unique_users"],"title":"AgentUsageItemResponseSchema","description":"One row of the organisation's agent-usage report."}}}}
```

## The AgentUsingKnowledgeNodeResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentUsingKnowledgeNodeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["id","identifier","name","is_enabled"],"title":"AgentUsingKnowledgeNodeResponseSchema","description":"Response schema for an agent that uses a given knowledge-base node."}}}}
```

## The AgentUsingMCPServerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentUsingMCPServerResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"tool_count":{"type":"integer","title":"Tool Count"}},"type":"object","required":["id","name","is_enabled","tool_count"],"title":"AgentUsingMCPServerResponseSchema","description":"Pydantic schema for an agent that uses an MCP server."}}}}
```

## The AgentsCatalogCategoryDetailSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogCategoryDetailSchema":{"properties":{"id":{"type":"integer","title":"Id"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon","description":"Icon name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"translations":{"items":{"$ref":"#/components/schemas/AgentsCatalogCategoryTranslationSchema"},"type":"array","title":"Translations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","translations","created_at","updated_at"],"title":"AgentsCatalogCategoryDetailSchema"},"AgentsCatalogCategoryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"AgentsCatalogCategoryTranslationSchema"}}}}
```

## The AgentsCatalogCategoryListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogCategoryListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentsCatalogCategorySchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"AgentsCatalogCategoryListResponseSchema"},"AgentsCatalogCategorySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon","description":"Icon name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"}},"type":"object","required":["id","name"],"title":"AgentsCatalogCategorySchema"}}}}
```

## The AgentsCatalogCategorySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogCategorySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon","description":"Icon name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"}},"type":"object","required":["id","name"],"title":"AgentsCatalogCategorySchema"}}}}
```

## The AgentsCatalogCategoryTranslationSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogCategoryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"AgentsCatalogCategoryTranslationSchema"}}}}
```

## The AgentsCatalogEntryDetailSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogEntryDetailSchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Unique identifier of the entry"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the agents catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"recommended_models":{"items":{"type":"string"},"type":"array","title":"Recommended Models","description":"Recommended language model ids"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition","description":"Agent template definition"},"mcp_catalog_entry_ids":{"items":{"type":"integer"},"type":"array","title":"Mcp Catalog Entry Ids","description":"IDs of required MCP catalog entries"},"id":{"type":"integer","title":"Id"},"translations":{"items":{"$ref":"#/components/schemas/AgentsCatalogEntryTranslationSchema"},"type":"array","title":"Translations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["identifier","category_id","id","translations","created_at","updated_at"],"title":"AgentsCatalogEntryDetailSchema"},"AgentsCatalogEntryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog entry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Short summary of the agents catalog entry"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases","description":"Example use cases for the entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"AgentsCatalogEntryTranslationSchema"}}}}
```

## The AgentsCatalogEntryListItemSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogEntryListItemSchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Unique identifier of the entry"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the agents catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"recommended_models":{"items":{"type":"string"},"type":"array","title":"Recommended Models","description":"Recommended language model ids"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition","description":"Agent template definition"},"mcp_catalog_entry_ids":{"items":{"type":"integer"},"type":"array","title":"Mcp Catalog Entry Ids","description":"IDs of required MCP catalog entries"},"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["identifier","category_id","id","created_at","updated_at"],"title":"AgentsCatalogEntryListItemSchema"}}}}
```

## The AgentsCatalogEntryListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogEntryListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentsCatalogEntryListItemSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"AgentsCatalogEntryListResponseSchema"},"AgentsCatalogEntryListItemSchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Unique identifier of the entry"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the agents catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"recommended_models":{"items":{"type":"string"},"type":"array","title":"Recommended Models","description":"Recommended language model ids"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition","description":"Agent template definition"},"mcp_catalog_entry_ids":{"items":{"type":"integer"},"type":"array","title":"Mcp Catalog Entry Ids","description":"IDs of required MCP catalog entries"},"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["identifier","category_id","id","created_at","updated_at"],"title":"AgentsCatalogEntryListItemSchema"}}}}
```

## The AgentsCatalogEntrySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogEntrySchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Unique identifier of the entry"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the agents catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"recommended_models":{"items":{"type":"string"},"type":"array","title":"Recommended Models","description":"Recommended language model ids"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition","description":"Agent template definition"},"mcp_catalog_entry_ids":{"items":{"type":"integer"},"type":"array","title":"Mcp Catalog Entry Ids","description":"IDs of required MCP catalog entries"},"id":{"type":"integer","title":"Id"},"translations":{"items":{"$ref":"#/components/schemas/AgentsCatalogEntryTranslationSchema"},"type":"array","title":"Translations"}},"type":"object","required":["identifier","category_id","id","translations"],"title":"AgentsCatalogEntrySchema"},"AgentsCatalogEntryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog entry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Short summary of the agents catalog entry"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases","description":"Example use cases for the entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"AgentsCatalogEntryTranslationSchema"}}}}
```

## The AgentsCatalogEntryTranslationSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsCatalogEntryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog entry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Short summary of the agents catalog entry"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases","description":"Example use cases for the entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"AgentsCatalogEntryTranslationSchema"}}}}
```

## The AgentsUsingKnowledgeNodeListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsUsingKnowledgeNodeListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentUsingKnowledgeNodeResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","count","total_count"],"title":"AgentsUsingKnowledgeNodeListResponseSchema","description":"Response schema for listing agents that use a given knowledge-base node."},"AgentUsingKnowledgeNodeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["id","identifier","name","is_enabled"],"title":"AgentUsingKnowledgeNodeResponseSchema","description":"Response schema for an agent that uses a given knowledge-base node."}}}}
```

## The AgentsUsingMCPServerListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AgentsUsingMCPServerListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentUsingMCPServerResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","count","total_count"],"title":"AgentsUsingMCPServerListResponseSchema","description":"Pydantic schema for the list of agents that use an MCP server."},"AgentUsingMCPServerResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"tool_count":{"type":"integer","title":"Tool Count"}},"type":"object","required":["id","name","is_enabled","tool_count"],"title":"AgentUsingMCPServerResponseSchema","description":"Pydantic schema for an agent that uses an MCP server."}}}}
```

## The AllowancePlanResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AllowancePlanResponseSchema":{"properties":{"organisation_id":{"type":"integer","title":"Organisation Id"},"monthly_allowance":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Monthly Allowance"},"timezone":{"type":"string","title":"Timezone"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From"},"effective_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective To"}},"type":"object","required":["organisation_id","monthly_allowance","timezone","effective_from","effective_to"],"title":"AllowancePlanResponseSchema","description":"Response schema for an organisation's monthly allowance plan.\n\nShared by the tenant read (``GET /credits/allowance-plans/current``)\nand the admin routes so both surfaces describe a plan identically. A plan carries no\nsurfaced id — it is identified by its effective window (``effective_from`` /\n``effective_to``), not by a key. Kept as one schema on purpose; if the admin\nsurface later needs extra fields (e.g. created_by), split it then rather than\npre-emptively."}}}}
```

## The AuthScheme object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The BalanceResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"BalanceResponseSchema":{"properties":{"monthly_allowance":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Monthly Allowance","description":"This month's allowance cap from the organisation's effective plan — the figure `allowance_remaining` counts down from and resets to next month. Zero when no allowance plan applies."},"allowance_remaining":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Remaining"},"purchased":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased"},"total":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total"},"currency":{"$ref":"#/components/schemas/CreditCurrency"}},"type":"object","required":["monthly_allowance","allowance_remaining","purchased","total","currency"],"title":"BalanceResponseSchema","description":"Response schema for an organisation's live credit balance."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."}}}}
```

## The BarChartBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"BarChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"bar_chart","title":"Type"},"title":{"type":"string","title":"Title"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels"},"data":{"items":{"type":"number"},"type":"array","title":"Data"}},"type":"object","required":["type","title","labels","data"],"title":"BarChartBlock"}}}}
```

## The Body\_files-upload\_file object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_files-upload_file":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_files-upload_file"}}}}
```

## The Body\_knowledge-base-create\_document\_from\_file object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_knowledge-base-create_document_from_file":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Summary"}},"type":"object","required":["file"],"title":"Body_knowledge-base-create_document_from_file"}}}}
```

## The Body\_login-login object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_login-login":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login-login"}}}}
```

## The Body\_organisation-admin\_import\_organisation object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_organisation-admin_import_organisation":{"properties":{"export_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Export File"}},"type":"object","required":["export_file"],"title":"Body_organisation-admin_import_organisation"}}}}
```

## The Body\_organisation-admin\_provision\_organisation object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_organisation-admin_provision_organisation":{"properties":{"manifest_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Manifest File"}},"type":"object","required":["manifest_file"],"title":"Body_organisation-admin_provision_organisation"}}}}
```

## The Body\_organisation-upload\_organisation\_logo object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_organisation-upload_organisation_logo":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_organisation-upload_organisation_logo"}}}}
```

## The Body\_users-upload\_avatar\_me object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Body_users-upload_avatar_me":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_users-upload_avatar_me"}}}}
```

## The BudgetSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."}}}}
```

## The BudgetScope object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."}}}}
```

## The ColumnsBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ColumnsBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"columns","title":"Type"},"columns":{"type":"integer","maximum":12,"minimum":2,"title":"Columns","description":"Number of columns"},"weights":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Weights","description":"Optional proportional width per column as positive integers (e.g. [2, 1] for 2:1 ratio, [1, 1] for equal columns). Must have the same length as columns. Must be integers — do NOT use floats like [0.5, 0.5]."},"blocks":{"items":{"anyOf":[{"items":{"oneOf":[{"$ref":"#/components/schemas/HeaderBlock"},{"$ref":"#/components/schemas/MarkdownBlock"},{"$ref":"#/components/schemas/DataTableBlock"},{"$ref":"#/components/schemas/MetricBlock"},{"$ref":"#/components/schemas/BarChartBlock"},{"$ref":"#/components/schemas/PieChartBlock"},{"$ref":"#/components/schemas/LineChartBlock"},{"$ref":"#/components/schemas/ActionItemsBlock"},{"$ref":"#/components/schemas/ColumnsBlock"},{"$ref":"#/components/schemas/ImageBlock"}],"discriminator":{"propertyName":"type","mapping":{"action_items":"#/components/schemas/ActionItemsBlock","bar_chart":"#/components/schemas/BarChartBlock","columns":"#/components/schemas/ColumnsBlock","data_table":"#/components/schemas/DataTableBlock","header":"#/components/schemas/HeaderBlock","image":"#/components/schemas/ImageBlock","line_chart":"#/components/schemas/LineChartBlock","markdown":"#/components/schemas/MarkdownBlock","metric":"#/components/schemas/MetricBlock","pie_chart":"#/components/schemas/PieChartBlock"}}},"type":"array"},{"oneOf":[{"$ref":"#/components/schemas/HeaderBlock"},{"$ref":"#/components/schemas/MarkdownBlock"},{"$ref":"#/components/schemas/DataTableBlock"},{"$ref":"#/components/schemas/MetricBlock"},{"$ref":"#/components/schemas/BarChartBlock"},{"$ref":"#/components/schemas/PieChartBlock"},{"$ref":"#/components/schemas/LineChartBlock"},{"$ref":"#/components/schemas/ActionItemsBlock"},{"$ref":"#/components/schemas/ColumnsBlock"},{"$ref":"#/components/schemas/ImageBlock"}],"discriminator":{"propertyName":"type","mapping":{"action_items":"#/components/schemas/ActionItemsBlock","bar_chart":"#/components/schemas/BarChartBlock","columns":"#/components/schemas/ColumnsBlock","data_table":"#/components/schemas/DataTableBlock","header":"#/components/schemas/HeaderBlock","image":"#/components/schemas/ImageBlock","line_chart":"#/components/schemas/LineChartBlock","markdown":"#/components/schemas/MarkdownBlock","metric":"#/components/schemas/MetricBlock","pie_chart":"#/components/schemas/PieChartBlock"}}}]},"type":"array","title":"Blocks","description":"One item per column, in column order. Each item is either a single block or a list of blocks for that column."}},"type":"object","required":["type","columns","blocks"],"title":"ColumnsBlock"},"HeaderBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"header","title":"Type"},"level":{"type":"integer","maximum":6,"minimum":1,"title":"Level","default":1},"text":{"type":"string","title":"Text"}},"type":"object","required":["type","text"],"title":"HeaderBlock"},"MarkdownBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"markdown","title":"Type"},"content":{"type":"string","minLength":1,"title":"Content"}},"type":"object","required":["type","content"],"title":"MarkdownBlock"},"DataTableBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"data_table","title":"Type"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"data":{"items":{"items":{},"type":"array"},"type":"array","title":"Data"}},"type":"object","required":["type","columns","data"],"title":"DataTableBlock"},"MetricBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"metric","title":"Type"},"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"},"unit":{"type":"string","title":"Unit","default":""},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["type","name","value"],"title":"MetricBlock"},"BarChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"bar_chart","title":"Type"},"title":{"type":"string","title":"Title"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels"},"data":{"items":{"type":"number"},"type":"array","title":"Data"}},"type":"object","required":["type","title","labels","data"],"title":"BarChartBlock"},"PieChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"pie_chart","title":"Type"},"title":{"type":"string","title":"Title"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels"},"data":{"items":{"type":"number"},"type":"array","title":"Data"}},"type":"object","required":["type","title","labels","data"],"title":"PieChartBlock"},"LineChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"line_chart","title":"Type"},"title":{"type":"string","title":"Title","description":"Chart title, e.g. 'Monthly Active Users'"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels","description":"Series names displayed in the legend — one entry per line on the chart. Example: ['Revenue'] for a single-line chart, ['Revenue', 'Costs'] for two lines. Do NOT put x-axis tick labels (dates, periods) here; those belong in data[i].x."},"data":{"items":{"items":{"$ref":"#/components/schemas/LineChartDataPoint"},"type":"array"},"type":"array","title":"Data","description":"One inner list per series; must have the same length as `labels`. Each element is an (x, y) point where x is the x-axis tick label (e.g. 'Jan 2024', 'Q1') and y is the numeric value."}},"type":"object","required":["type","title","labels","data"],"title":"LineChartBlock","description":"Line chart with one or more series.\n\n`labels` holds the SERIES NAMES shown in the legend (e.g. [\"Revenue\", \"Costs\"]),\nNOT the x-axis tick labels. X-axis values come from the `x` field of each data\npoint. For a single-line chart, `labels` has exactly one entry and `data` has\nexactly one inner list."},"LineChartDataPoint":{"properties":{"x":{"anyOf":[{"type":"string"},{"type":"number"}],"title":"X","description":"X-axis value, typically a date string or numeric index"},"y":{"type":"number","title":"Y","description":"Y-axis value"}},"type":"object","required":["x","y"],"title":"LineChartDataPoint"},"ActionItemsBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"action_items","title":"Type"},"actions":{"items":{"$ref":"#/components/schemas/ActionItem"},"type":"array","title":"Actions"}},"type":"object","required":["type","actions"],"title":"ActionItemsBlock"},"ActionItem":{"properties":{"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee","description":"User ID of the assignee"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["label","status"],"title":"ActionItem"},"ImageBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"image","title":"Type"},"url":{"type":"string","title":"Url"},"size":{"type":"string","enum":["sm","md","lg","full"],"title":"Size","description":"Display size of the image: sm, md, lg, or full (full container width).","default":"md"}},"type":"object","required":["type","url"],"title":"ImageBlock"}}}}
```

## The Condition object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"}}}}
```

## The ConditionalNode-Input object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ConditionalNode-Input":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Input":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Input":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"LoopNode-Input":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The ConditionalNode-Output object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ConditionalNode-Output":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Output":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Output":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"LoopNode-Output":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The ConversationFeedbackPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ConversationFeedbackPayloadSchema":{"properties":{"feedback_rate":{"type":"integer","enum":[-1,1],"title":"Feedback Rate","description":"Feedback rating: -1 (negative) or 1 (positive)"}},"type":"object","required":["feedback_rate"],"title":"ConversationFeedbackPayloadSchema","description":"Pydantic schema for submitting conversation feedback."}}}}
```

## The ConversationListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ConversationListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"agent_id":{"type":"integer","title":"Agent Id"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"feedback_rate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Rate"},"parent_conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Conversation Id","description":"ID of the parent conversation when this is a sub-agent conversation, otherwise null."}},"type":"object","required":["id","agent_id","created_by"],"title":"ConversationListItemResponseSchema","description":"Pydantic schema for conversation list item response (without state)."}}}}
```

## The ConversationListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ConversationListResponseSchema":{"properties":{"conversations":{"items":{"$ref":"#/components/schemas/ConversationListItemResponseSchema"},"type":"array","title":"Conversations"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["conversations","total_count"],"title":"ConversationListResponseSchema","description":"Pydantic schema for conversation list response."},"ConversationListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"agent_id":{"type":"integer","title":"Agent Id"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"feedback_rate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Rate"},"parent_conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Conversation Id","description":"ID of the parent conversation when this is a sub-agent conversation, otherwise null."}},"type":"object","required":["id","agent_id","created_by"],"title":"ConversationListItemResponseSchema","description":"Pydantic schema for conversation list item response (without state)."}}}}
```

## The ConversationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ConversationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"agent_id":{"type":"integer","title":"Agent Id"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"feedback_rate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Rate"},"parent_conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Conversation Id","description":"ID of the parent conversation when this is a sub-agent conversation, otherwise null."}},"type":"object","required":["id","agent_id","created_by"],"title":"ConversationResponseSchema","description":"Pydantic schema for conversation response."}}}}
```

## The CostForecastDaySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CostForecastDaySchema":{"properties":{"date":{"type":"string","title":"Date","description":"Calendar date in YYYY-MM-DD format"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"},"is_projection":{"type":"boolean","title":"Is Projection","description":"True when this value is a projected estimate; False when it is a recorded actual"}},"type":"object","required":["date","cost_currency","is_projection"],"title":"CostForecastDaySchema","description":"Cost for a single calendar day — either actual or projected."}}}}
```

## The CreateAgentCompositePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateAgentCompositePayloadSchema":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":false},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent","default":false},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Defaults to an unlimited budget."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"workflow":{"$ref":"#/components/schemas/Pipeline-Input","description":"Pipeline definition for this workflow agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none' (default, no access), 'all' (whole knowledge base), or 'branch' (one or more folder subtrees).","default":"none"},"knowledge_base_node_ids":{"items":{"type":"integer","exclusiveMinimum":0},"type":"array","title":"Knowledge Base Node Ids","description":"Folder node ids to confine the agent to. Required (one or more) when scope is 'branch'; must be omitted for 'none' or 'all'."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. Omit if this agent has no impact metric to track."}},"type":"object","required":["name","identifier","workflow"],"title":"CreateAgentCompositePayloadSchema","description":"Pydantic schema for creating a workflow agent."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"Pipeline-Input":{"properties":{"version":{"type":"string","title":"Version","description":"Schema version (e.g. '0.1')."},"initial_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Message","description":"Seed message injected as the first conversation turn before the pipeline starts."},"model_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelReference"},"type":"array","minItems":1},{"type":"null"}],"title":"Model References","description":"Language model references available in this pipeline. Each entry's alias can be referenced from inline agents."},"mcp_server_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerReference"},"type":"array"},{"type":"null"}],"title":"Mcp Server References","description":"MCP server references available in this pipeline. Each entry's alias can be referenced from inline agents."},"agent_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentReference"},"type":"array"},{"type":"null"}],"title":"Agent References","description":"Agent references available in this pipeline. Each entry can be used as a standalone AgentNode (via alias or identifier) or as a sub-agent inside inline agents (via alias in sub_agents)."},"inline_agents":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgent"},"type":"array"},{"type":"null"}],"title":"Inline Agents","description":"Inline agent definitions. Each agent's alias can be referenced from AgentNodes in the pipeline."},"pipeline":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Pipeline","description":"Root node of the execution graph.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["version","pipeline"],"title":"Pipeline"},"ModelReference":{"properties":{"provider_identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Provider Identifier","description":"Identifier of the language model provider as stored in the DB."},"model_name":{"type":"string","maxLength":255,"minLength":1,"title":"Model Name","description":"Model name as used by the provider (e.g. 'gpt-4o', 'claude-sonnet-4-5')."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this model from inline agents. Defaults to 'provider_identifier/model_name' if omitted."}},"additionalProperties":false,"type":"object","required":["provider_identifier","model_name"],"title":"ModelReference"},"MCPServerReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the MCP server."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this server from inline agents."},"enabled_tools":{"items":{"type":"string","minLength":1},"type":"array","minItems":1,"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server."}},"additionalProperties":false,"type":"object","required":["identifier","enabled_tools"],"title":"MCPServerReference"},"AgentReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the agent. The alias can be referenced from AgentNodes (as a standalone node) or from InlineAgent sub_agents (as a sub-agent)."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this agent from AgentNodes or InlineAgent sub_agents."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"AgentReference"},"InlineAgent":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Within-pipeline alias used to reference this agent from pipeline nodes."},"name":{"type":"string","minLength":1,"title":"Name","description":"Human-readable display name shown in logs and UI."},"instruction":{"type":"string","minLength":1,"title":"Instruction","description":"System prompt that defines the agent's role and behaviour."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Alias of a model from the top-level 'model_references' list. Uses the provider default if omitted."},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgentMCPServer"},"type":"array"},{"type":"null"}],"title":"Mcp Servers","description":"MCP servers to enable for this agent, resolved against 'mcp_server_references'."},"sub_agents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Agents","description":"Aliases of agents to enable as sub-agents, resolved against 'inline_agents' and 'agent_references'."}},"additionalProperties":false,"type":"object","required":["alias","name","instruction"],"title":"InlineAgent"},"InlineAgentMCPServer":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Alias of an MCP server from the top-level 'mcp_server_references' list."},"enabled_tools":{"anyOf":[{"items":{"type":"string","minLength":1},"type":"array","minItems":1},{"type":"null"}],"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server for this agent. Omit to allow all tools declared on the server reference."}},"additionalProperties":false,"type":"object","required":["alias"],"title":"InlineAgentMCPServer"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Input":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Input":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Input":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Input":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The CreateAgentCompositeResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateAgentCompositeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Always present; an uncapped budget is the scope 'unlimited'."},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"workflow":{"$ref":"#/components/schemas/Pipeline-Output","description":"Pipeline definition for this workflow agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none' (no access), 'all' (whole knowledge base), or 'branch' (one or more folder subtrees)."},"knowledge_base_node_ids":{"items":{"type":"integer"},"type":"array","title":"Knowledge Base Node Ids","description":"Folder nodes the agent's knowledge-base access is confined to. Non-empty only when scope is 'branch'."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. Null when no impact metric is configured."}},"type":"object","required":["id","organisation_id","name","identifier","is_enabled","can_be_subagent","budget","created_by","workflow","knowledge_base_scope"],"title":"CreateAgentCompositeResponseSchema","description":"Pydantic schema for workflow agent creation response."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"Pipeline-Output":{"properties":{"version":{"type":"string","title":"Version","description":"Schema version (e.g. '0.1')."},"initial_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Message","description":"Seed message injected as the first conversation turn before the pipeline starts."},"model_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelReference"},"type":"array","minItems":1},{"type":"null"}],"title":"Model References","description":"Language model references available in this pipeline. Each entry's alias can be referenced from inline agents."},"mcp_server_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerReference"},"type":"array"},{"type":"null"}],"title":"Mcp Server References","description":"MCP server references available in this pipeline. Each entry's alias can be referenced from inline agents."},"agent_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentReference"},"type":"array"},{"type":"null"}],"title":"Agent References","description":"Agent references available in this pipeline. Each entry can be used as a standalone AgentNode (via alias or identifier) or as a sub-agent inside inline agents (via alias in sub_agents)."},"inline_agents":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgent"},"type":"array"},{"type":"null"}],"title":"Inline Agents","description":"Inline agent definitions. Each agent's alias can be referenced from AgentNodes in the pipeline."},"pipeline":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Pipeline","description":"Root node of the execution graph.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["version","pipeline"],"title":"Pipeline"},"ModelReference":{"properties":{"provider_identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Provider Identifier","description":"Identifier of the language model provider as stored in the DB."},"model_name":{"type":"string","maxLength":255,"minLength":1,"title":"Model Name","description":"Model name as used by the provider (e.g. 'gpt-4o', 'claude-sonnet-4-5')."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this model from inline agents. Defaults to 'provider_identifier/model_name' if omitted."}},"additionalProperties":false,"type":"object","required":["provider_identifier","model_name"],"title":"ModelReference"},"MCPServerReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the MCP server."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this server from inline agents."},"enabled_tools":{"items":{"type":"string","minLength":1},"type":"array","minItems":1,"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server."}},"additionalProperties":false,"type":"object","required":["identifier","enabled_tools"],"title":"MCPServerReference"},"AgentReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the agent. The alias can be referenced from AgentNodes (as a standalone node) or from InlineAgent sub_agents (as a sub-agent)."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this agent from AgentNodes or InlineAgent sub_agents."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"AgentReference"},"InlineAgent":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Within-pipeline alias used to reference this agent from pipeline nodes."},"name":{"type":"string","minLength":1,"title":"Name","description":"Human-readable display name shown in logs and UI."},"instruction":{"type":"string","minLength":1,"title":"Instruction","description":"System prompt that defines the agent's role and behaviour."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Alias of a model from the top-level 'model_references' list. Uses the provider default if omitted."},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgentMCPServer"},"type":"array"},{"type":"null"}],"title":"Mcp Servers","description":"MCP servers to enable for this agent, resolved against 'mcp_server_references'."},"sub_agents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Agents","description":"Aliases of agents to enable as sub-agents, resolved against 'inline_agents' and 'agent_references'."}},"additionalProperties":false,"type":"object","required":["alias","name","instruction"],"title":"InlineAgent"},"InlineAgentMCPServer":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Alias of an MCP server from the top-level 'mcp_server_references' list."},"enabled_tools":{"anyOf":[{"items":{"type":"string","minLength":1},"type":"array","minItems":1},{"type":"null"}],"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server for this agent. Omit to allow all tools declared on the server reference."}},"additionalProperties":false,"type":"object","required":["alias"],"title":"InlineAgentMCPServer"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Output":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Output":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Output":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Output":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The CreateAgentPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateAgentPayloadSchema":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier"},"instruction":{"type":"string","maxLength":64000,"minLength":1,"title":"Instruction"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":false},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent","default":false},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Defaults to an unlimited budget."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Language Model Provider Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"input_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Schema","description":"JSON Schema describing the expected input structure for this agent."},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema","description":"JSON Schema describing the expected output structure for this agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none' (default, no access), 'all' (whole knowledge base), or 'branch' (a single folder subtree).","default":"none"},"knowledge_base_node_ids":{"items":{"type":"integer","exclusiveMinimum":0},"type":"array","title":"Knowledge Base Node Ids","description":"Folder node ids to confine the agent to. Required (one or more) when scope is 'branch'; must be omitted for 'none' or 'all'."},"eval_config":{"anyOf":[{"$ref":"#/components/schemas/EvalConfigSchema"},{"type":"null"}],"description":"Metrics this agent is evaluated against, with per-metric thresholds and weights."},"graph_recursion_limit":{"anyOf":[{"type":"integer","maximum":100,"exclusiveMinimum":0},{"type":"null"}],"title":"Graph Recursion Limit","description":"Per-agent override for the LangGraph recursion limit (max steps in the tool-calling loop). Must not exceed the platform cap (100). If null, LangGraph's own default (25) is used."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. Omit if this agent has no impact metric to track."}},"type":"object","required":["name","identifier","instruction"],"title":"CreateAgentPayloadSchema","description":"Pydantic schema for creating an agent."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"EvalConfigSchema":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSchema"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage of eligible runs that actually get evaluated.","default":100}},"type":"object","title":"EvalConfigSchema","description":"Pydantic schema for an agent's full evaluation configuration."},"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The CreateAgentResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateAgentResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"instruction":{"type":"string","title":"Instruction"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Always present; an uncapped budget is the scope 'unlimited'."},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Language Model Provider Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"is_model_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Model Valid"},"input_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Schema","description":"JSON Schema describing the expected input structure for this agent."},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema","description":"JSON Schema describing the expected output structure for this agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none' (no access), 'all' (whole knowledge base), or 'branch' (one or more folder subtrees)."},"knowledge_base_node_ids":{"items":{"type":"integer"},"type":"array","title":"Knowledge Base Node Ids","description":"Folder nodes the agent's knowledge-base access is confined to. Non-empty only when scope is 'branch'."},"eval_config":{"anyOf":[{"$ref":"#/components/schemas/EvalConfigSchema"},{"type":"null"}],"description":"Metrics this agent is evaluated against, with per-metric thresholds and weights."},"graph_recursion_limit":{"anyOf":[{"type":"integer","maximum":100,"exclusiveMinimum":0},{"type":"null"}],"title":"Graph Recursion Limit","description":"Per-agent override for the LangGraph recursion limit (max steps in the tool-calling loop). Must not exceed the platform cap (100). If null, LangGraph's own default (25) is used."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. Null when no impact metric is configured."}},"type":"object","required":["id","organisation_id","name","identifier","instruction","is_enabled","can_be_subagent","budget","created_by","knowledge_base_scope"],"title":"CreateAgentResponseSchema","description":"Pydantic schema for agent creation response."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"EvalConfigSchema":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSchema"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage of eligible runs that actually get evaluated.","default":100}},"type":"object","title":"EvalConfigSchema","description":"Pydantic schema for an agent's full evaluation configuration."},"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The CreateAgentsCatalogCategoryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateAgentsCatalogCategoryPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon","description":"Icon name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"}},"type":"object","required":["name","language_code"],"title":"CreateAgentsCatalogCategoryPayloadSchema"}}}}
```

## The CreateAgentsCatalogEntryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateAgentsCatalogEntryPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog entry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Short summary of the agents catalog entry"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases","description":"Example use cases for the entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"identifier":{"type":"string","title":"Identifier","description":"Unique identifier of the entry"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the agents catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"recommended_models":{"items":{"type":"string"},"type":"array","title":"Recommended Models","description":"Recommended language model ids"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition","description":"Agent template definition"},"mcp_catalog_entry_ids":{"items":{"type":"integer"},"type":"array","title":"Mcp Catalog Entry Ids","description":"IDs of required MCP catalog entries"}},"type":"object","required":["name","language_code","identifier","category_id"],"title":"CreateAgentsCatalogEntryPayloadSchema"}}}}
```

## The CreateConversationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateConversationPayloadSchema":{"properties":{"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id","description":"ID of the agent for this conversation. Defaults to the organisation's default assistant agent when omitted."},"subject":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subject","description":"Optional subject"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Optional context the assistant works within, as a free-form mapping (e.g. {\"report_id\": 67})."}},"type":"object","title":"CreateConversationPayloadSchema","description":"Pydantic schema for creating a conversation shell.\n\nCreation no longer sends the first message — create the conversation, then\nsend messages via ``POST /conversations/{id}/messages``.\n\n``agent_id`` is optional.  When omitted (or explicitly ``null``) the service\nfalls back to the organisation's default assistant agent.  If no default is\nconfigured a ``400 Bad Request`` is returned."}}}}
```

## The CreateExecutionPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateExecutionPayloadSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id","description":"Agent ID to run"},"args":{"additionalProperties":true,"type":"object","title":"Args","description":"Optional args to pass to the agent during execution"}},"type":"object","required":["agent_id"],"title":"CreateExecutionPayloadSchema","description":"Pydantic schema for agent run request."}}}}
```

## The CreateExecutionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateExecutionResponseSchema":{"properties":{"id":{"type":"integer","title":"Id","description":"Execution ID"}},"type":"object","required":["id"],"title":"CreateExecutionResponseSchema","description":"Pydantic schema for agent trigger response."}}}}
```

## The CreateLanguageModelProviderPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateLanguageModelProviderPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/LanguageModelProviderType"}},"type":"object","required":["name","identifier","type"],"title":"CreateLanguageModelProviderPayloadSchema","description":"Pydantic schema for creating a language model provider."},"LanguageModelProviderType":{"type":"string","enum":["openai","google","ollama","bielik","mistral","anthropic","hugging_face"],"title":"LanguageModelProviderType","description":"Supported language model provider types."}}}}
```

## The CreateMCPCatalogCategoryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateMCPCatalogCategoryPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"}},"type":"object","required":["name","language_code"],"title":"CreateMCPCatalogCategoryPayloadSchema"}}}}
```

## The CreateMCPCatalogEntryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateMCPCatalogEntryPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the MCP catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"vendor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Url","description":"Vendor URL"},"server_url":{"type":"string","title":"Server Url","description":"MCP server URL"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Website URL"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"Documentation URL"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"data_residency_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Residency Country","description":"ISO 3166-1 alpha-2 country code of the MCP server's data residency"},"vendor_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Country","description":"ISO 3166-1 alpha-2 country code of the vendor company's location"},"is_recommended":{"type":"boolean","title":"Is Recommended","description":"Whether this entry is recommended","default":false},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the MCP server expects, if any"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config","description":"Credential-free authentication template describing where the credential goes (e.g. API-key header name and location). Credential values are rejected - they belong to the MCP server created from this entry."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account before the server's tools can be used","default":false}},"type":"object","required":["name","language_code","category_id","server_url"],"title":"CreateMCPCatalogEntryPayloadSchema"},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The CreateMCPServerPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateMCPServerPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":true},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config"},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","default":false}},"type":"object","required":["name","identifier"],"title":"CreateMCPServerPayloadSchema","description":"Pydantic schema for creating an MCP server."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The CreateMCPServerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateMCPServerResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","default":false}},"type":"object","required":["id","organisation_id","name","identifier","config","is_enabled","mcp_catalog_entry_id"],"title":"CreateMCPServerResponseSchema","description":"Pydantic schema for MCP server creation response."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The CreateMetricProviderPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateMetricProviderPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/MetricProviderType"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["name","identifier","type"],"title":"CreateMetricProviderPayloadSchema","description":"Pydantic schema for creating a metric provider."},"MetricProviderType":{"type":"string","enum":["rule_based","user_feedback","deepeval","geval","ragas"],"title":"MetricProviderType","description":"Supported metric provider implementation strategies.\n\nIdentifies *which backend\ncomputes the score* (rule-based SQL aggregation, a GEval judge call,\nthe deepeval library, ...), not the specific metric being measured — a\nsingle provider type's handler can expose several metrics (see\n`EvaluationMetric`/`EvaluationMetricSet`, returned by\n`MetricProviderHandler.get_available_metrics`).\n\nOnly RULE_BASED and GEVAL have registered handlers (see\n`api/deps.py::get_metric_provider_handlers`) — the rest are reserved for\nthe implementation strategies identified in the quality-monitoring spec so\n`MetricProvider` entities of these types can already be created/configured;\nevaluating them raises `UnsupportedFeatureError` until their handlers are\nimplemented."}}}}
```

## The CreateNodePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateNodePayloadSchema":{"properties":{"node_type":{"$ref":"#/components/schemas/NodeType"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"markdown":{"type":"string","title":"Markdown","default":""},"source_file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source File Id"},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Summary","description":"Optional free-text summary of the node. Applies to folders and documents; a blank value is stored as no summary."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Free-form JSON object of the caller's own keys and values — anything the organisation wants to record against the node (owner, department, retention class, external ids). Must be an object, not an array or a scalar; at most 64 top-level keys and 16384 bytes once serialized. An empty object is stored as no metadata."}},"type":"object","required":["node_type","name"],"title":"CreateNodePayloadSchema","description":"Request schema for creating a knowledge-base node.\n\n`markdown` / `source_file_id` apply to `document` nodes; for a `folder` they\nmust be omitted (validation fails if provided). `summary` and `metadata` apply\nto both node types. Tenancy comes from the authenticated caller, not the\npayload."},"NodeType":{"type":"string","enum":["folder","document"],"title":"NodeType","description":"The node-type discriminator — the single extension point for new types.\n\nOnly the local types exist today (`folder`, `document`); the CTI design\nkeeps adding types additive."}}}}
```

## The CreateToolRequestPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateToolRequestPayloadSchema":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Optional message explaining why the tool is requested."}},"type":"object","title":"CreateToolRequestPayloadSchema"}}}}
```

## The CreateTriggerPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreateTriggerPayloadSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"agent_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Agent Args"}},"type":"object","required":["agent_id","definition_id","config"],"title":"CreateTriggerPayloadSchema","description":"Request schema for creating a trigger."}}}}
```

## The CreditCategory object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditCategory":{"type":"string","enum":["PURCHASE","MANUAL_ADJUSTMENT","LLM_TOKEN_USAGE","AGENT_EXECUTION","REVERSAL"],"title":"CreditCategory","description":"Why a ledger row exists.\n\nCREDIT rows use `PURCHASE`/`MANUAL_ADJUSTMENT`; DEBIT rows use the\nconsumption/adjustment reasons. The direction constrains which categories\nare meaningful, but the enum lists them all in one place."}}}}
```

## The CreditCurrency object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."}}}}
```

## The CreditExecutionUsagePeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditExecutionUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"},"execution_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Execution Credits Spent"},"conversation_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Conversation Credits Spent"}},"type":"object","required":["period","credits_spent","execution_credits_spent","conversation_credits_spent"],"title":"CreditExecutionUsagePeriodSchema","description":"Credits spent on AGENT_EXECUTION consumption for a single time period.\n\nCredits carry no currency, so unlike `AgentUsagePeriodSchema`/\n`OrgUsagePeriodSchema` (which may have multiple rows per period, one per\ncurrency) this is always at most one row per period.\n\n`execution_credits_spent` and `conversation_credits_spent` are independent\nsums (rows attributed to an execution, and rows attributed to a\nconversation, respectively) — not a mutually exclusive split of\n`credits_spent`. A triggered execution running inside a conversation counts\ntoward both, so the two do not in general add up to `credits_spent`."}}}}
```

## The CreditForecastDaySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditForecastDaySchema":{"properties":{"date":{"type":"string","title":"Date","description":"Calendar date in YYYY-MM-DD format"},"credits_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Amount"},"is_projection":{"type":"boolean","title":"Is Projection","description":"True when this value is a projected estimate; False when it is a recorded actual"}},"type":"object","required":["date","credits_amount","is_projection"],"title":"CreditForecastDaySchema","description":"Credits for a single calendar day — either actual or projected.\n\nCredits carry no currency, so unlike `CostForecastDaySchema` this is always\nexactly one entry per date."}}}}
```

## The CreditLedgerEntryAttributionSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditLedgerEntryAttributionSchema":{"properties":{"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["agent_id","user_id","execution_id","conversation_id"],"title":"CreditLedgerEntryAttributionSchema","description":"What one consumption was recorded against.\n\nEvery dimension is nullable: a consumption need not name any of them. Foreign-keyed\ndimensions are set to null when their target is deleted, while the ledger spend\nrow remains immutable."}}}}
```

## The CreditLedgerEntryListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditLedgerEntryListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"direction":{"$ref":"#/components/schemas/EntryDirection","description":"The sign of this row: CREDIT adds credits, DEBIT spends them. Each row stands alone — a DEBIT is not balanced by a second row."},"category":{"$ref":"#/components/schemas/CreditCategory","description":"Why the row exists."},"funding_source":{"anyOf":[{"$ref":"#/components/schemas/FundingSource"},{"type":"null"}],"description":"Which pool a DEBIT drew from — ALLOWANCE (the monthly entitlement) or PURCHASE (stored credits). Always null on a CREDIT row, where it does not apply."},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount","description":"Always positive: `direction` carries the sign, not the amount."},"currency":{"$ref":"#/components/schemas/CreditCurrency"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"When the credits moved — the business time the row is dated by."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the row was written. Later than `occurred_at` for a backdated entry."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/CreditLedgerEntryAttributionSchema"},{"type":"null"}],"description":"What the consumption was recorded against. Null for purchases and manual adjustments, which are organisation-level movements with no agent, user, execution, or conversation behind them."}},"type":"object","required":["id","direction","category","funding_source","amount","currency","occurred_at","created_at","attribution"],"title":"CreditLedgerEntryListItemResponseSchema","description":"One row of the credit ledger."},"EntryDirection":{"type":"string","enum":["CREDIT","DEBIT"],"title":"EntryDirection","description":"The sign of a single ledger row.\n\n`direction` is the sign of the one row it sits on, not a second balancing\nrow — a CREDIT adds stored credits, a DEBIT spends them."},"CreditCategory":{"type":"string","enum":["PURCHASE","MANUAL_ADJUSTMENT","LLM_TOKEN_USAGE","AGENT_EXECUTION","REVERSAL"],"title":"CreditCategory","description":"Why a ledger row exists.\n\nCREDIT rows use `PURCHASE`/`MANUAL_ADJUSTMENT`; DEBIT rows use the\nconsumption/adjustment reasons. The direction constrains which categories\nare meaningful, but the enum lists them all in one place."},"FundingSource":{"type":"string","enum":["ALLOWANCE","PURCHASE"],"title":"FundingSource","description":"Which pool a DEBIT drew from.\n\nSet on debits, `None` on credits — funding is explicit, never inferred from\na missing value. `ALLOWANCE` draws the computed monthly entitlement;\n`PURCHASE` draws the stored, non-expiring purchased pool."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."},"CreditLedgerEntryAttributionSchema":{"properties":{"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["agent_id","user_id","execution_id","conversation_id"],"title":"CreditLedgerEntryAttributionSchema","description":"What one consumption was recorded against.\n\nEvery dimension is nullable: a consumption need not name any of them. Foreign-keyed\ndimensions are set to null when their target is deleted, while the ledger spend\nrow remains immutable."}}}}
```

## The CreditLedgerEntryListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditLedgerEntryListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CreditLedgerEntryListItemResponseSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count","description":"Rows matching the filters, not just those on this page."}},"type":"object","required":["data","total_count"],"title":"CreditLedgerEntryListResponseSchema","description":"Response schema for one page of credit ledger entries."},"CreditLedgerEntryListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"direction":{"$ref":"#/components/schemas/EntryDirection","description":"The sign of this row: CREDIT adds credits, DEBIT spends them. Each row stands alone — a DEBIT is not balanced by a second row."},"category":{"$ref":"#/components/schemas/CreditCategory","description":"Why the row exists."},"funding_source":{"anyOf":[{"$ref":"#/components/schemas/FundingSource"},{"type":"null"}],"description":"Which pool a DEBIT drew from — ALLOWANCE (the monthly entitlement) or PURCHASE (stored credits). Always null on a CREDIT row, where it does not apply."},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount","description":"Always positive: `direction` carries the sign, not the amount."},"currency":{"$ref":"#/components/schemas/CreditCurrency"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"When the credits moved — the business time the row is dated by."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the row was written. Later than `occurred_at` for a backdated entry."},"attribution":{"anyOf":[{"$ref":"#/components/schemas/CreditLedgerEntryAttributionSchema"},{"type":"null"}],"description":"What the consumption was recorded against. Null for purchases and manual adjustments, which are organisation-level movements with no agent, user, execution, or conversation behind them."}},"type":"object","required":["id","direction","category","funding_source","amount","currency","occurred_at","created_at","attribution"],"title":"CreditLedgerEntryListItemResponseSchema","description":"One row of the credit ledger."},"EntryDirection":{"type":"string","enum":["CREDIT","DEBIT"],"title":"EntryDirection","description":"The sign of a single ledger row.\n\n`direction` is the sign of the one row it sits on, not a second balancing\nrow — a CREDIT adds stored credits, a DEBIT spends them."},"CreditCategory":{"type":"string","enum":["PURCHASE","MANUAL_ADJUSTMENT","LLM_TOKEN_USAGE","AGENT_EXECUTION","REVERSAL"],"title":"CreditCategory","description":"Why a ledger row exists.\n\nCREDIT rows use `PURCHASE`/`MANUAL_ADJUSTMENT`; DEBIT rows use the\nconsumption/adjustment reasons. The direction constrains which categories\nare meaningful, but the enum lists them all in one place."},"FundingSource":{"type":"string","enum":["ALLOWANCE","PURCHASE"],"title":"FundingSource","description":"Which pool a DEBIT drew from.\n\nSet on debits, `None` on credits — funding is explicit, never inferred from\na missing value. `ALLOWANCE` draws the computed monthly entitlement;\n`PURCHASE` draws the stored, non-expiring purchased pool."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."},"CreditLedgerEntryAttributionSchema":{"properties":{"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["agent_id","user_id","execution_id","conversation_id"],"title":"CreditLedgerEntryAttributionSchema","description":"What one consumption was recorded against.\n\nEvery dimension is nullable: a consumption need not name any of them. Foreign-keyed\ndimensions are set to null when their target is deleted, while the ledger spend\nrow remains immutable."}}}}
```

## The CreditSpendComparisonResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditSpendComparisonResponseSchema":{"properties":{"current":{"$ref":"#/components/schemas/CreditWindowSpendSchema"},"previous":{"$ref":"#/components/schemas/CreditWindowSpendSchema","description":"The earlier window, derived by the server from `compare_to` — not a range the caller supplies. It may be longer than `current`."},"compare_to":{"$ref":"#/components/schemas/SpendComparisonBasis","description":"The rule that produced `previous`, echoed back."},"change":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Change","description":"`current.credits_spent` minus `previous.credits_spent`. A difference of totals, not of daily rates: with `compare_to=PREVIOUS_MONTH` an in-progress month is compared against a complete one, so this is negative for most of the month. Normalise by each window's `days` before showing a trend."},"change_ratio":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Change Ratio","description":"`change` as a fraction of the previous window's total (0.2 is a 20% rise). Null when the previous window had no spend at all: growth from zero has no ratio — show `change` instead. Same totals-not-rates caveat as `change`."},"currency":{"$ref":"#/components/schemas/CreditCurrency"}},"type":"object","required":["current","previous","compare_to","change","change_ratio","currency"],"title":"CreditSpendComparisonResponseSchema","description":"Response schema for spend in a window against an earlier one."},"CreditWindowSpendSchema":{"properties":{"date_from":{"type":"string","format":"date","title":"Date From"},"date_to":{"type":"string","format":"date","title":"Date To"},"days":{"type":"integer","title":"Days","description":"Days the window covers, both ends included. The two windows of a comparison are not necessarily the same length, so divide by this before reading either total as a rate."},"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent"},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["date_from","date_to","days","allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditWindowSpendSchema","description":"Spend over one date window, with the window it covers."},"SpendComparisonBasis":{"type":"string","enum":["PREVIOUS_MONTH","PRECEDING_PERIOD"],"title":"SpendComparisonBasis","description":"What a spend comparison's previous window is.\n\nAn explicit choice rather than a rule inferred from the shape of the requested\nrange: \"the range starts on the 1st, so they must mean the previous month\"\nwould silently change basis when a caller shifted a rolling window by a day.\n\nThe window arithmetic lives on the enum so the two rules are stated in one\nplace, next to each other, where they can be compared."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."}}}}
```

## The CreditSpendSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditSpendSchema":{"properties":{"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent","description":"Credits drawn from the monthly allowance (the base entitlement) in this window."},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent","description":"Credits drawn from the purchased pool (the extra credits spent once the allowance ran out) in this window."},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent","description":"Total credits consumed in this window — the two pools summed."}},"type":"object","required":["allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditSpendSchema","description":"Credits consumed in a window, split by the pool that funded them."}}}}
```

## The CreditTopAgentSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditTopAgentSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name","description":"Null when the agent has since been deleted; the spend is still reported."},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["agent_id","agent_name","credits_spent"],"title":"CreditTopAgentSchema","description":"The agent the caller spent the most credits on, within a range."}}}}
```

## The CreditTriggerTypeUsageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditTriggerTypeUsageResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CreditTriggerTypeUsageRowSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"CreditTriggerTypeUsageResponseSchema","description":"Response schema for the by-trigger-type usage breakdown.\n\n`items` always carries every `TriggerType` member (zero-filled where there\nwas no spend) — there is no pagination here, unlike `/credits/usage`."},"CreditTriggerTypeUsageRowSchema":{"properties":{"trigger_type":{"$ref":"#/components/schemas/TriggerType"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["trigger_type","credits_spent"],"title":"CreditTriggerTypeUsageRowSchema","description":"Credits spent on AGENT_EXECUTION consumption for one trigger type."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The CreditTriggerTypeUsageRowSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditTriggerTypeUsageRowSchema":{"properties":{"trigger_type":{"$ref":"#/components/schemas/TriggerType"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["trigger_type","credits_spent"],"title":"CreditTriggerTypeUsageRowSchema","description":"Credits spent on AGENT_EXECUTION consumption for one trigger type."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The CreditUsagePeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditUsagePeriodSchema":{"properties":{"period":{"type":"string","format":"date","title":"Period","description":"First day of the bucket: the day itself for DAY, the Monday for WEEK, the 1st for MONTH."},"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent"},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["period","allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditUsagePeriodSchema","description":"Credits spent in one bucket of a usage time series."}}}}
```

## The CreditUsageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditUsageResponseSchema":{"properties":{"dimension":{"$ref":"#/components/schemas/UsageDimension"},"items":{"items":{"$ref":"#/components/schemas/CreditUsageRowSchema"},"type":"array","title":"Items"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["dimension","items","total_count"],"title":"CreditUsageResponseSchema","description":"Response schema for one page of aggregated credit usage."},"UsageDimension":{"type":"string","enum":["AGENT","USER","EXECUTION","CONVERSATION"],"title":"UsageDimension","description":"The dimension a usage aggregation groups spend by.\n\nBacks the flagship \"which agents are the most expensive?\" query and its\nsiblings; each value maps to a column on `credit_entry_attribution`.\n\n`EXECUTION` and `CONVERSATION` both group by a unit of work, and neither is a\nsubset of the other: a triggered run has an execution and charges its\nwall-clock there, while a chat turn has only a conversation (see\n`ChargeableMetric.CONVERSATION_TURN_TIME`). So an organisation that mostly\nchats reads almost nothing under `EXECUTION`, and grouping by `CONVERSATION`\nis what answers \"which conversations cost us the most?\"."},"CreditUsageRowSchema":{"properties":{"dimension_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension Id"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["dimension_id","credits_spent"],"title":"CreditUsageRowSchema","description":"Credits spent by a single dimension value (e.g. one agent).\n\nThe dimension itself is not repeated per row — it is fixed for the whole\nresponse and carried once on ``CreditUsageResponseSchema``."}}}}
```

## The CreditUsageRowSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditUsageRowSchema":{"properties":{"dimension_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension Id"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["dimension_id","credits_spent"],"title":"CreditUsageRowSchema","description":"Credits spent by a single dimension value (e.g. one agent).\n\nThe dimension itself is not repeated per row — it is fixed for the whole\nresponse and carried once on ``CreditUsageResponseSchema``."}}}}
```

## The CreditUsageSeriesResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditUsageSeriesResponseSchema":{"properties":{"granularity":{"$ref":"#/components/schemas/UsageGranularity"},"date_from":{"type":"string","format":"date","title":"Date From"},"date_to":{"type":"string","format":"date","title":"Date To"},"items":{"items":{"$ref":"#/components/schemas/CreditUsagePeriodSchema"},"type":"array","title":"Items","description":"One entry per bucket in the range, ascending. Buckets with no spend are present with zero amounts, so the series has no gaps."},"summary":{"$ref":"#/components/schemas/CreditSpendSchema","description":"The same spend aggregated over the whole range."},"currency":{"$ref":"#/components/schemas/CreditCurrency"}},"type":"object","required":["granularity","date_from","date_to","items","summary","currency"],"title":"CreditUsageSeriesResponseSchema","description":"Response schema for a usage time series over a date range."},"UsageGranularity":{"type":"string","enum":["DAY","WEEK","MONTH"],"title":"UsageGranularity","description":"The time bucket a usage time series groups spend into.\n\nDeliberately its own enum rather than the execution domain's `UsageGrouping`:\nthat one offers `TOTAL`/`YEAR` (which a credit series does not) and no `WEEK`\n(which it does), so reusing it would advertise members this aggregation\ncannot honour.\n\nThe bucket arithmetic lives on the enum because two places need to agree on\nit: the repository groups rows with the equivalent SQL `date_trunc`, and the\nservice reuses these methods to zero-fill the buckets that produced no spend.\nWere the two to disagree, a bucket would silently vanish from the series."},"CreditUsagePeriodSchema":{"properties":{"period":{"type":"string","format":"date","title":"Period","description":"First day of the bucket: the day itself for DAY, the Monday for WEEK, the 1st for MONTH."},"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent"},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["period","allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditUsagePeriodSchema","description":"Credits spent in one bucket of a usage time series."},"CreditSpendSchema":{"properties":{"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent","description":"Credits drawn from the monthly allowance (the base entitlement) in this window."},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent","description":"Credits drawn from the purchased pool (the extra credits spent once the allowance ran out) in this window."},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent","description":"Total credits consumed in this window — the two pools summed."}},"type":"object","required":["allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditSpendSchema","description":"Credits consumed in a window, split by the pool that funded them."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."}}}}
```

## The CreditWindowSpendSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"CreditWindowSpendSchema":{"properties":{"date_from":{"type":"string","format":"date","title":"Date From"},"date_to":{"type":"string","format":"date","title":"Date To"},"days":{"type":"integer","title":"Days","description":"Days the window covers, both ends included. The two windows of a comparison are not necessarily the same length, so divide by this before reading either total as a rate."},"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent"},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["date_from","date_to","days","allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditWindowSpendSchema","description":"Spend over one date window, with the window it covers."}}}}
```

## The DataTableBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"DataTableBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"data_table","title":"Type"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"data":{"items":{"items":{},"type":"array"},"type":"array","title":"Data"}},"type":"object","required":["type","columns","data"],"title":"DataTableBlock"}}}}
```

## The DocumentParseStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"DocumentParseStatus":{"type":"string","enum":["pending","processing","completed","failed"],"title":"DocumentParseStatus","description":"Lifecycle of a file-uploaded document's Markdown conversion.\n\nInline-authored documents are `COMPLETED` on creation (nothing to parse).\nA file upload starts `PENDING`, moves to `PROCESSING` when the background\ntask picks it up, then to a terminal `COMPLETED` or `FAILED`."}}}}
```

## The DroppedTrigger object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"DroppedTrigger":{"properties":{"agent_identifier":{"type":"string","minLength":1,"title":"Agent Identifier"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"}},"additionalProperties":false,"type":"object","required":["agent_identifier","definition_id"],"title":"DroppedTrigger","description":"A trigger that was deliberately not carried across.\n\nOnly the manual run-now trigger is exported, because every agent needs one\nto be runnable. Scheduled triggers would start firing in the target the\nmoment the organisation goes live, and webhook triggers carry a secret\ntoken — so both are recorded here and re-created by hand if still wanted."}}}}
```

## The EmbeddingStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EmbeddingStatus":{"type":"string","enum":["pending","ready","failed"],"title":"EmbeddingStatus","description":"Progress of embedding a version's chunks under the org's current model.\n\nInformational only: retrieval never depends on it (search joins the actual\nembedding rows, so an unembedded version simply yields no hits). `PENDING`\nuntil a publish embeds the version, `READY` once every chunk is embedded,\n`FAILED` if embedding gave up (the version then reverts to draft)."}}}}
```

## The EntryDirection object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EntryDirection":{"type":"string","enum":["CREDIT","DEBIT"],"title":"EntryDirection","description":"The sign of a single ledger row.\n\n`direction` is the sign of the one row it sits on, not a second balancing\nrow — a CREDIT adds stored credits, a DEBIT spends them."}}}}
```

## The EvalConfigSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvalConfigSchema":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSchema"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage of eligible runs that actually get evaluated.","default":100}},"type":"object","title":"EvalConfigSchema","description":"Pydantic schema for an agent's full evaluation configuration."},"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."}}}}
```

## The EvalConfigSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvalConfigSuggestion":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSuggestion"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage (0-100) of eligible runs that should actually be evaluated.","default":100}},"type":"object","title":"EvalConfigSuggestion","description":"LLM output for the quality-metrics estimation step.\n\nAn empty 'metrics' list is a valid, expected outcome — e.g. when the\norganisation has no metric providers configured, or none of the\navailable metrics are relevant to this agent."},"EvalMetricConfigSuggestion":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id","description":"Must be one of the ids from the provided available metrics catalog — never invent a metric_id."},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to be considered passed, in the metric's own unit and direction (see is_maximized on the catalog entry) — not a universal 0.0-1.0 scale."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution (0.0-1.0) to the agent's overall quality score."},"is_gate":{"type":"boolean","title":"Is Gate","description":"Whether this metric gates the others: if it fails, every non-gate metric is skipped for that run. Use sparingly, e.g. for a safety/compliance metric that makes the rest moot if it fails.","default":false},"reason":{"type":"string","title":"Reason","description":"Brief reason this metric was chosen.","default":""}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSuggestion","description":"Suggested per-metric evaluation config for one metric already present in\nthe org's available metric catalog.\n\nMirrors EvalMetricConfig (app.domain.agent.value_object): only metric_id,\nthreshold, weight, and is_gate are LLM-chosen. `config` (free-form rubric\noverrides) and `is_maximized` (a fallback used only for ad-hoc metrics with\nno registered EvaluationMetric) are intentionally omitted — every metric\nsuggested here comes from the real catalog, so those don't apply."}}}}
```

## The EvalMetricConfigSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."}}}}
```

## The EvalMetricConfigSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvalMetricConfigSuggestion":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id","description":"Must be one of the ids from the provided available metrics catalog — never invent a metric_id."},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to be considered passed, in the metric's own unit and direction (see is_maximized on the catalog entry) — not a universal 0.0-1.0 scale."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution (0.0-1.0) to the agent's overall quality score."},"is_gate":{"type":"boolean","title":"Is Gate","description":"Whether this metric gates the others: if it fails, every non-gate metric is skipped for that run. Use sparingly, e.g. for a safety/compliance metric that makes the rest moot if it fails.","default":false},"reason":{"type":"string","title":"Reason","description":"Brief reason this metric was chosen.","default":""}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSuggestion","description":"Suggested per-metric evaluation config for one metric already present in\nthe org's available metric catalog.\n\nMirrors EvalMetricConfig (app.domain.agent.value_object): only metric_id,\nthreshold, weight, and is_gate are LLM-chosen. `config` (free-form rubric\noverrides) and `is_maximized` (a fallback used only for ad-hoc metrics with\nno registered EvaluationMetric) are intentionally omitted — every metric\nsuggested here comes from the real catalog, so those don't apply."}}}}
```

## The EvaluationMetricBreakdownResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationMetricBreakdownResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EvaluationMetricPeriodSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"EvaluationMetricBreakdownResponseSchema","description":"Per-metric average-value breakdown response grouped by time period."},"EvaluationMetricPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"target_type":{"$ref":"#/components/schemas/EvaluationTargetType"},"metric_id":{"type":"string","title":"Metric Id"},"average_value":{"type":"number","title":"Average Value","description":"Average across computed values. 0.0 (not a real average) if this metric was eligible but never actually computed in this period — check count == 0 to distinguish that case."},"unit":{"type":"string","title":"Unit"},"count":{"type":"integer","title":"Count","description":"Number of computed values contributing to the average."},"passed_count":{"type":"integer","title":"Passed Count","description":"Targets of this target_type where this metric passed."},"failed_count":{"type":"integer","title":"Failed Count","description":"Targets of this target_type where this metric failed."},"not_evaluated_count":{"type":"integer","title":"Not Evaluated Count","description":"Targets of this target_type eligible for this metric with no passed/failed result yet."}},"type":"object","required":["period","target_type","metric_id","average_value","unit","count","passed_count","failed_count","not_evaluated_count"],"title":"EvaluationMetricPeriodSchema","description":"A single metric's average value and pass/fail/not-evaluated counts,\nfor one (time period, target_type)."},"EvaluationTargetType":{"type":"string","enum":["execution","message","conversation"],"title":"EvaluationTargetType","description":"What kind of thing a metric is being computed for."}}}}
```

## The EvaluationMetricPeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationMetricPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"target_type":{"$ref":"#/components/schemas/EvaluationTargetType"},"metric_id":{"type":"string","title":"Metric Id"},"average_value":{"type":"number","title":"Average Value","description":"Average across computed values. 0.0 (not a real average) if this metric was eligible but never actually computed in this period — check count == 0 to distinguish that case."},"unit":{"type":"string","title":"Unit"},"count":{"type":"integer","title":"Count","description":"Number of computed values contributing to the average."},"passed_count":{"type":"integer","title":"Passed Count","description":"Targets of this target_type where this metric passed."},"failed_count":{"type":"integer","title":"Failed Count","description":"Targets of this target_type where this metric failed."},"not_evaluated_count":{"type":"integer","title":"Not Evaluated Count","description":"Targets of this target_type eligible for this metric with no passed/failed result yet."}},"type":"object","required":["period","target_type","metric_id","average_value","unit","count","passed_count","failed_count","not_evaluated_count"],"title":"EvaluationMetricPeriodSchema","description":"A single metric's average value and pass/fail/not-evaluated counts,\nfor one (time period, target_type)."},"EvaluationTargetType":{"type":"string","enum":["execution","message","conversation"],"title":"EvaluationTargetType","description":"What kind of thing a metric is being computed for."}}}}
```

## The EvaluationMetricResultSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationMetricResultSchema":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"value":{"type":"number","title":"Value"},"unit":{"type":"string","title":"Unit"},"passed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Passed","description":"Whether this metric individually passed its configured threshold, or null if not yet evaluated."},"computed_at":{"type":"string","format":"date-time","title":"Computed At"}},"type":"object","required":["metric_id","value","unit","passed","computed_at"],"title":"EvaluationMetricResultSchema","description":"One metric's computed value for an evaluation target."}}}}
```

## The EvaluationMetricSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationMetricSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Whether a higher value passes this metric's threshold (true), or a lower one does (false, e.g. latency). Check this and `unit` before choosing an eval_config threshold for this metric_id."}},"type":"object","required":["id","name","description","unit","is_maximized"],"title":"EvaluationMetricSchema"}}}}
```

## The EvaluationOutcome object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationOutcome":{"type":"string","enum":["passed","failed","not_evaluated"],"title":"EvaluationOutcome","description":"An evaluation target's run-level result, derived from `eval_passed`.\n\n`NOT_EVALUATED` maps to `eval_passed IS NULL` (evaluation not finished\nyet, e.g. still queued or skipped by sampling before this target was\ncreated). This is deliberately the run-level aggregate only — per-metric\npass/fail is tracked separately (`EvaluationResultRecord.passed`), so\nfiltering/grouping by this enum still can't distinguish \"which metric\nfailed\"; use the per-metric results for that."}}}}
```

## The EvaluationSamplingRateResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationSamplingRateResponseSchema":{"properties":{"configured_sample_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Configured Sample Size","description":"The agent's configured eval_config.sample_size (0-100), or null if it has no evaluation config."},"actual_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Actual Rate","description":"evaluated_count / eligible_count * 100 for the period, or null if eligible_count is 0."},"evaluated_count":{"type":"integer","title":"Evaluated Count","description":"EXECUTION-type evaluation targets created in the period (i.e. not skipped by sampling)."},"eligible_count":{"type":"integer","title":"Eligible Count","description":"Every execution for the agent in the period, regardless of status."}},"type":"object","required":["configured_sample_size","actual_rate","evaluated_count","eligible_count"],"title":"EvaluationSamplingRateResponseSchema","description":"Configured vs. actually-observed evaluation sampling rate for an agent."}}}}
```

## The EvaluationSummaryPeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationSummaryPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"passed_count":{"type":"integer","title":"Passed Count","description":"Targets with eval_passed = true."},"failed_count":{"type":"integer","title":"Failed Count","description":"Targets with eval_passed = false."},"not_evaluated_count":{"type":"integer","title":"Not Evaluated Count","description":"Targets with no eval_passed recorded yet (evaluation not finished)."},"average_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Score","description":"Average overall_score across targets with a recorded score, or null if none."}},"type":"object","required":["period","passed_count","failed_count","not_evaluated_count","average_score"],"title":"EvaluationSummaryPeriodSchema","description":"Evaluation pass/fail counts and average overall_score for a single time period."}}}}
```

## The EvaluationSummaryResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationSummaryResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EvaluationSummaryPeriodSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"EvaluationSummaryResponseSchema","description":"Evaluation pass/fail and score summary response grouped by time period."},"EvaluationSummaryPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"passed_count":{"type":"integer","title":"Passed Count","description":"Targets with eval_passed = true."},"failed_count":{"type":"integer","title":"Failed Count","description":"Targets with eval_passed = false."},"not_evaluated_count":{"type":"integer","title":"Not Evaluated Count","description":"Targets with no eval_passed recorded yet (evaluation not finished)."},"average_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Score","description":"Average overall_score across targets with a recorded score, or null if none."}},"type":"object","required":["period","passed_count","failed_count","not_evaluated_count","average_score"],"title":"EvaluationSummaryPeriodSchema","description":"Evaluation pass/fail counts and average overall_score for a single time period."}}}}
```

## The EvaluationTargetDetailResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationTargetDetailResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"target_type":{"$ref":"#/components/schemas/EvaluationTargetType"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id"},"overall_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Score","description":"Weighted average across every computed metric, or null until evaluation finishes."},"outcome":{"$ref":"#/components/schemas/EvaluationOutcome"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"results":{"items":{"$ref":"#/components/schemas/EvaluationMetricResultSchema"},"type":"array","title":"Results","description":"Every metric computed for this target, in no particular order."}},"type":"object","required":["id","target_type","execution_id","message_id","conversation_id","overall_score","outcome","created_at","results"],"title":"EvaluationTargetDetailResponseSchema","description":"Evaluation-target detail: the list item plus every per-metric result."},"EvaluationTargetType":{"type":"string","enum":["execution","message","conversation"],"title":"EvaluationTargetType","description":"What kind of thing a metric is being computed for."},"EvaluationOutcome":{"type":"string","enum":["passed","failed","not_evaluated"],"title":"EvaluationOutcome","description":"An evaluation target's run-level result, derived from `eval_passed`.\n\n`NOT_EVALUATED` maps to `eval_passed IS NULL` (evaluation not finished\nyet, e.g. still queued or skipped by sampling before this target was\ncreated). This is deliberately the run-level aggregate only — per-metric\npass/fail is tracked separately (`EvaluationResultRecord.passed`), so\nfiltering/grouping by this enum still can't distinguish \"which metric\nfailed\"; use the per-metric results for that."},"EvaluationMetricResultSchema":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"value":{"type":"number","title":"Value"},"unit":{"type":"string","title":"Unit"},"passed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Passed","description":"Whether this metric individually passed its configured threshold, or null if not yet evaluated."},"computed_at":{"type":"string","format":"date-time","title":"Computed At"}},"type":"object","required":["metric_id","value","unit","passed","computed_at"],"title":"EvaluationMetricResultSchema","description":"One metric's computed value for an evaluation target."}}}}
```

## The EvaluationTargetListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationTargetListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"target_type":{"$ref":"#/components/schemas/EvaluationTargetType"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id"},"overall_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Score","description":"Weighted average across every computed metric, or null until evaluation finishes."},"outcome":{"$ref":"#/components/schemas/EvaluationOutcome"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","target_type","execution_id","message_id","conversation_id","overall_score","outcome","created_at"],"title":"EvaluationTargetListItemResponseSchema","description":"One row of the evaluation-target drill-down list — a lean projection,\nwith no per-metric results (see `EvaluationTargetDetailResponseSchema`)."},"EvaluationTargetType":{"type":"string","enum":["execution","message","conversation"],"title":"EvaluationTargetType","description":"What kind of thing a metric is being computed for."},"EvaluationOutcome":{"type":"string","enum":["passed","failed","not_evaluated"],"title":"EvaluationOutcome","description":"An evaluation target's run-level result, derived from `eval_passed`.\n\n`NOT_EVALUATED` maps to `eval_passed IS NULL` (evaluation not finished\nyet, e.g. still queued or skipped by sampling before this target was\ncreated). This is deliberately the run-level aggregate only — per-metric\npass/fail is tracked separately (`EvaluationResultRecord.passed`), so\nfiltering/grouping by this enum still can't distinguish \"which metric\nfailed\"; use the per-metric results for that."}}}}
```

## The EvaluationTargetListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationTargetListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EvaluationTargetListItemResponseSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"EvaluationTargetListResponseSchema","description":"Paginated evaluation-target drill-down list response."},"EvaluationTargetListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"target_type":{"$ref":"#/components/schemas/EvaluationTargetType"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id"},"overall_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Score","description":"Weighted average across every computed metric, or null until evaluation finishes."},"outcome":{"$ref":"#/components/schemas/EvaluationOutcome"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","target_type","execution_id","message_id","conversation_id","overall_score","outcome","created_at"],"title":"EvaluationTargetListItemResponseSchema","description":"One row of the evaluation-target drill-down list — a lean projection,\nwith no per-metric results (see `EvaluationTargetDetailResponseSchema`)."},"EvaluationTargetType":{"type":"string","enum":["execution","message","conversation"],"title":"EvaluationTargetType","description":"What kind of thing a metric is being computed for."},"EvaluationOutcome":{"type":"string","enum":["passed","failed","not_evaluated"],"title":"EvaluationOutcome","description":"An evaluation target's run-level result, derived from `eval_passed`.\n\n`NOT_EVALUATED` maps to `eval_passed IS NULL` (evaluation not finished\nyet, e.g. still queued or skipped by sampling before this target was\ncreated). This is deliberately the run-level aggregate only — per-metric\npass/fail is tracked separately (`EvaluationResultRecord.passed`), so\nfiltering/grouping by this enum still can't distinguish \"which metric\nfailed\"; use the per-metric results for that."}}}}
```

## The EvaluationTargetType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"EvaluationTargetType":{"type":"string","enum":["execution","message","conversation"],"title":"EvaluationTargetType","description":"What kind of thing a metric is being computed for."}}}}
```

## The ExecutionDurationStatsSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionDurationStatsSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of executions with a recorded duration that this average/min/max is computed over — not the total number of executions in the requested scope. PENDING/STARTED runs have no duration yet and are excluded from both."},"average_duration_seconds":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Duration Seconds"},"min_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Duration Seconds"},"max_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Seconds"}},"type":"object","required":["count","min_duration_seconds","max_duration_seconds"],"title":"ExecutionDurationStatsSchema","description":"Execution duration statistics.\n\nOnly executions with a recorded duration contribute — see\n`count`'s description."}}}}
```

## The ExecutionLanguageModelSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionLanguageModelSchema":{"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id","description":"Model identifier as the provider names it, e.g. 'gpt-4o'"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name","description":"Name of the configured provider"},"provider_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Type","description":"Provider family, e.g. 'openai' or 'anthropic'"}},"type":"object","required":["model_id","provider_name","provider_type"],"title":"ExecutionLanguageModelSchema","description":"The model the execution's agent runs on."}}}}
```

## The ExecutionListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id","description":"Execution ID"},"agent_id":{"type":"integer","title":"Agent Id","description":"Agent ID"},"agent_name":{"type":"string","title":"Agent Name","description":"Name of the agent that was run"},"args":{"additionalProperties":true,"type":"object","title":"Args","description":"Optional args to pass to the agent during execution"},"status":{"$ref":"#/components/schemas/ExecutionStatus","description":"Execution status"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Execution duration in seconds"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/ExecutionTriggerSummarySchema"},{"type":"null"}],"description":"How the run was started. Without the trigger's own settings, which a single execution carries and a list does not"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUserSchema"},{"type":"null"}],"description":"User who created the execution — the user the run is triggered on behalf of, for scheduled and webhook runs as well as manual ones"},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUserSchema"},{"type":"null"}],"description":"User who last updated the execution"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Execution started time"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"Execution finished time"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Execution created time"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"Execution updated time"},"credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Credits","description":"Total credits consumed by this execution, or null if none were recorded."}},"type":"object","required":["id","agent_id","agent_name","args","status","duration","created_by","updated_by","started_at","finished_at","created_at","updated_at"],"title":"ExecutionListItemResponseSchema","description":"Pydantic schema for agent execution list item response."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"ExecutionTriggerSummarySchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"ID of the individual trigger that fired this run, or null once that trigger has been deleted"},"definition_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Definition Id","description":"ID of the trigger definition — the kind of trigger — as listed by GET /triggers/definitions"},"type":{"$ref":"#/components/schemas/TriggerType","description":"Coarse bucket of the trigger that started this execution (MANUAL, SCHEDULER, WEBHOOK, or UNKNOWN if unattributed), derived from `definition_id`. UNKNOWN covers runs created before the platform began recording their origin, and runs it starts directly rather than through a trigger"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable name of the trigger definition, or null when the catalog does not know it"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What this kind of trigger does"}},"type":"object","required":["id","definition_id","type","label"],"title":"ExecutionTriggerSummarySchema","description":"Which trigger started an execution, without the trigger's own settings.\n\nWhat the executions list serves. Reading the settings means reading the\ntrigger row, one query per execution, which across a page would be one per\nrow — so they are offered by the single-execution endpoints only, as\n`ExecutionTriggerSchema`."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."},"ExecutionUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ExecutionUserSchema","description":"Basic user info embedded in execution responses."}}}}
```

## The ExecutionListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionListResponseSchema":{"properties":{"executions":{"items":{"$ref":"#/components/schemas/ExecutionListItemResponseSchema"},"type":"array","title":"Executions"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["executions","total_count"],"title":"ExecutionListResponseSchema","description":"Pydantic schema for agent execution list response."},"ExecutionListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id","description":"Execution ID"},"agent_id":{"type":"integer","title":"Agent Id","description":"Agent ID"},"agent_name":{"type":"string","title":"Agent Name","description":"Name of the agent that was run"},"args":{"additionalProperties":true,"type":"object","title":"Args","description":"Optional args to pass to the agent during execution"},"status":{"$ref":"#/components/schemas/ExecutionStatus","description":"Execution status"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Execution duration in seconds"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/ExecutionTriggerSummarySchema"},{"type":"null"}],"description":"How the run was started. Without the trigger's own settings, which a single execution carries and a list does not"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUserSchema"},{"type":"null"}],"description":"User who created the execution — the user the run is triggered on behalf of, for scheduled and webhook runs as well as manual ones"},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUserSchema"},{"type":"null"}],"description":"User who last updated the execution"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Execution started time"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"Execution finished time"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Execution created time"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"Execution updated time"},"credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Credits","description":"Total credits consumed by this execution, or null if none were recorded."}},"type":"object","required":["id","agent_id","agent_name","args","status","duration","created_by","updated_by","started_at","finished_at","created_at","updated_at"],"title":"ExecutionListItemResponseSchema","description":"Pydantic schema for agent execution list item response."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"ExecutionTriggerSummarySchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"ID of the individual trigger that fired this run, or null once that trigger has been deleted"},"definition_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Definition Id","description":"ID of the trigger definition — the kind of trigger — as listed by GET /triggers/definitions"},"type":{"$ref":"#/components/schemas/TriggerType","description":"Coarse bucket of the trigger that started this execution (MANUAL, SCHEDULER, WEBHOOK, or UNKNOWN if unattributed), derived from `definition_id`. UNKNOWN covers runs created before the platform began recording their origin, and runs it starts directly rather than through a trigger"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable name of the trigger definition, or null when the catalog does not know it"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What this kind of trigger does"}},"type":"object","required":["id","definition_id","type","label"],"title":"ExecutionTriggerSummarySchema","description":"Which trigger started an execution, without the trigger's own settings.\n\nWhat the executions list serves. Reading the settings means reading the\ntrigger row, one query per execution, which across a page would be one per\nrow — so they are offered by the single-execution endpoints only, as\n`ExecutionTriggerSchema`."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."},"ExecutionUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ExecutionUserSchema","description":"Basic user info embedded in execution responses."}}}}
```

## The ExecutionMCPServerSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionMCPServerSchema":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id","description":"MCP server ID"},"name":{"type":"string","title":"Name","description":"MCP server name"},"identifier":{"type":"string","title":"Identifier","description":"MCP server identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What the server provides, from its catalog entry. Null for a server added by hand rather than installed from the catalog"}},"type":"object","required":["id","name","identifier","description"],"title":"ExecutionMCPServerSchema","description":"An MCP server the execution's agent can reach."}}}}
```

## The ExecutionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionResponseSchema":{"properties":{"id":{"type":"integer","title":"Id","description":"Execution ID"},"agent_id":{"type":"integer","title":"Agent Id","description":"Agent ID"},"agent_name":{"type":"string","title":"Agent Name","description":"Name of the agent that was run"},"args":{"additionalProperties":true,"type":"object","title":"Args","description":"Optional args to pass to the agent during execution"},"status":{"$ref":"#/components/schemas/ExecutionStatus","description":"Execution status"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Execution duration in seconds"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/ExecutionTriggerSchema"},{"type":"null"}],"description":"How the run was started"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUserSchema"},{"type":"null"}],"description":"User who created the execution — the user the run is triggered on behalf of, for scheduled and webhook runs as well as manual ones"},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUserSchema"},{"type":"null"}],"description":"User who last updated the execution"},"conversation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Conversation Id","description":"Associated conversation ID"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result","description":"Execution result"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Execution started time"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"Execution finished time"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Execution created time"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"Execution updated time"},"usage":{"anyOf":[{"$ref":"#/components/schemas/ExecutionUsageSchema"},{"type":"null"}],"description":"Token usage and cost, available once execution succeeds"},"credits":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Credits","description":"Total credits consumed by this execution, or null if none were recorded."},"language_model":{"anyOf":[{"$ref":"#/components/schemas/ExecutionLanguageModelSchema"},{"type":"null"}],"description":"The model the agent runs on"},"mcp_servers":{"items":{"$ref":"#/components/schemas/ExecutionMCPServerSchema"},"type":"array","title":"Mcp Servers","description":"Verified MCP servers attached to the agent. These are what the agent can reach, not necessarily what this run called. Served only by this endpoint, never by the executions list"},"mcp_servers_count":{"type":"integer","title":"Mcp Servers Count","description":"Number of entries in `mcp_servers`","default":0},"tool_calls":{"type":"integer","title":"Tool Calls","description":"How many tool calls the run made. Excludes the platform's own system tools (file access, conversation context). 0 for a run that failed, whose conversation is discarded with it","default":0},"llm_calls":{"type":"integer","title":"Llm Calls","description":"How many times the run reached a model. Counted the same way as `tool_calls` and with the same limits: a model call that requested nothing but system tools is not counted, and a failed run reports 0","default":0},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"A short outcome-focused recap of what this run did, written by a model after the run ends. Null while it is still being written — it is generated in the background once the run finishes, so it is never present the moment the run completes and appears on a later read. Also null for a run that produced no conversation, and for cancelled and failed runs, which are not summarised. Describes the run as it ended and is not revised if the conversation is continued afterwards. Served only by this endpoint, never by the executions list"}},"type":"object","required":["id","agent_id","agent_name","args","status","duration","created_by","updated_by","conversation_id","result","started_at","finished_at","created_at","updated_at"],"title":"ExecutionResponseSchema","description":"Pydantic schema for agent execution response."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"ExecutionTriggerSchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"ID of the individual trigger that fired this run, or null once that trigger has been deleted"},"definition_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Definition Id","description":"ID of the trigger definition — the kind of trigger — as listed by GET /triggers/definitions"},"type":{"$ref":"#/components/schemas/TriggerType","description":"Coarse bucket of the trigger that started this execution (MANUAL, SCHEDULER, WEBHOOK, or UNKNOWN if unattributed), derived from `definition_id`. UNKNOWN covers runs created before the platform began recording their origin, and runs it starts directly rather than through a trigger"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable name of the trigger definition, or null when the catalog does not know it"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What this kind of trigger does"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"The trigger's own settings — a schedule's cadence, a webhook's delivery options. Webhook secrets are never included. Null once the trigger has been deleted: only the kind of trigger is recorded on the execution, the settings live on the trigger itself"}},"type":"object","required":["id","definition_id","type","label"],"title":"ExecutionTriggerSchema","description":"How an execution was started, with the firing trigger's own settings."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."},"ExecutionUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ExecutionUserSchema","description":"Basic user info embedded in execution responses."},"ExecutionUsageSchema":{"properties":{"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"}},"type":"object","required":["tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","cost_currency"],"title":"ExecutionUsageSchema","description":"Token usage and cost data for a completed execution."},"ExecutionLanguageModelSchema":{"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id","description":"Model identifier as the provider names it, e.g. 'gpt-4o'"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name","description":"Name of the configured provider"},"provider_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Type","description":"Provider family, e.g. 'openai' or 'anthropic'"}},"type":"object","required":["model_id","provider_name","provider_type"],"title":"ExecutionLanguageModelSchema","description":"The model the execution's agent runs on."},"ExecutionMCPServerSchema":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id","description":"MCP server ID"},"name":{"type":"string","title":"Name","description":"MCP server name"},"identifier":{"type":"string","title":"Identifier","description":"MCP server identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What the server provides, from its catalog entry. Null for a server added by hand rather than installed from the catalog"}},"type":"object","required":["id","name","identifier","description"],"title":"ExecutionMCPServerSchema","description":"An MCP server the execution's agent can reach."}}}}
```

## The ExecutionStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."}}}}
```

## The ExecutionStatusDistributionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionStatusDistributionResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExecutionStatusPeriodSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ExecutionStatusDistributionResponseSchema","description":"Execution status distribution response grouped by time period."},"ExecutionStatusPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"pending":{"type":"integer","title":"Pending"},"started":{"type":"integer","title":"Started"},"success":{"type":"integer","title":"Success"},"failure":{"type":"integer","title":"Failure"},"canceled":{"type":"integer","title":"Canceled"}},"type":"object","required":["period","pending","started","success","failure","canceled"],"title":"ExecutionStatusPeriodSchema","description":"Execution status counts for a single time period."}}}}
```

## The ExecutionStatusPeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionStatusPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"pending":{"type":"integer","title":"Pending"},"started":{"type":"integer","title":"Started"},"success":{"type":"integer","title":"Success"},"failure":{"type":"integer","title":"Failure"},"canceled":{"type":"integer","title":"Canceled"}},"type":"object","required":["period","pending","started","success","failure","canceled"],"title":"ExecutionStatusPeriodSchema","description":"Execution status counts for a single time period."}}}}
```

## The ExecutionStepListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionStepListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ExecutionStepResponseSchema"},"type":"array","title":"Data","description":"The steps"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor","description":"Pass as `cursor` to read the next page. Null on the last page"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page follows"}},"type":"object","required":["data","next_cursor","has_more"],"title":"ExecutionStepListResponseSchema","description":"A page of an execution's steps, oldest first."},"ExecutionStepResponseSchema":{"properties":{"id":{"type":"integer","title":"Id","description":"Step ID"},"order":{"type":"integer","title":"Order","description":"Position within the run; also the pagination cursor"},"title":{"type":"string","title":"Title","description":"What ran, derived from the tool that was called. Available as soon as the run ends"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A short account of what happened, written by a background job after the run. Null until that job completes, and permanently null if it could not run — render the step from `title` and treat this as an extra"},"status":{"$ref":"#/components/schemas/ExecutionStepStatus","description":"How the step ended. 'unknown' for steps recorded before outcomes were tracked — it does not mean the step succeeded"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name","description":"Tool that was called. Null for the agent's closing reply"},"tool_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Args","description":"Arguments the agent passed to the tool"},"tool_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Result","description":"What the tool returned. Failures are kept in full; successful results are truncated"},"mcp_server_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Server Id","description":"MCP server that served the call, as it was identified at the time. Null for an agent's own response and for tools not backed by an MCP server. Not guaranteed to still resolve: this is a record of what ran, so it keeps naming a server that has since been deleted — read `mcp_server_name` for display and treat a lookup failure as expected"},"mcp_server_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Server Name","description":"Name of the MCP server as it was at the time of the call, stored alongside the id so the record survives that server being renamed or deleted"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the step was recorded"}},"type":"object","required":["id","order","title","description","status","tool_name","tool_args","tool_result","mcp_server_id","mcp_server_name","created_at"],"title":"ExecutionStepResponseSchema","description":"One thing the agent did during a run."},"ExecutionStepStatus":{"type":"string","enum":["completed","failed","unknown"],"title":"ExecutionStepStatus","description":"How one step of a run turned out.\n\n`UNKNOWN` is a real answer, not a placeholder. Steps recorded before tool\noutcomes were persisted cannot be classified, and a step shown as completed\nwhen nobody knows whether it was is worse than one shown as unknown."}}}}
```

## The ExecutionStepResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionStepResponseSchema":{"properties":{"id":{"type":"integer","title":"Id","description":"Step ID"},"order":{"type":"integer","title":"Order","description":"Position within the run; also the pagination cursor"},"title":{"type":"string","title":"Title","description":"What ran, derived from the tool that was called. Available as soon as the run ends"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A short account of what happened, written by a background job after the run. Null until that job completes, and permanently null if it could not run — render the step from `title` and treat this as an extra"},"status":{"$ref":"#/components/schemas/ExecutionStepStatus","description":"How the step ended. 'unknown' for steps recorded before outcomes were tracked — it does not mean the step succeeded"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name","description":"Tool that was called. Null for the agent's closing reply"},"tool_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Args","description":"Arguments the agent passed to the tool"},"tool_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Result","description":"What the tool returned. Failures are kept in full; successful results are truncated"},"mcp_server_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Server Id","description":"MCP server that served the call, as it was identified at the time. Null for an agent's own response and for tools not backed by an MCP server. Not guaranteed to still resolve: this is a record of what ran, so it keeps naming a server that has since been deleted — read `mcp_server_name` for display and treat a lookup failure as expected"},"mcp_server_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Server Name","description":"Name of the MCP server as it was at the time of the call, stored alongside the id so the record survives that server being renamed or deleted"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the step was recorded"}},"type":"object","required":["id","order","title","description","status","tool_name","tool_args","tool_result","mcp_server_id","mcp_server_name","created_at"],"title":"ExecutionStepResponseSchema","description":"One thing the agent did during a run."},"ExecutionStepStatus":{"type":"string","enum":["completed","failed","unknown"],"title":"ExecutionStepStatus","description":"How one step of a run turned out.\n\n`UNKNOWN` is a real answer, not a placeholder. Steps recorded before tool\noutcomes were persisted cannot be classified, and a step shown as completed\nwhen nobody knows whether it was is worse than one shown as unknown."}}}}
```

## The ExecutionStepStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionStepStatus":{"type":"string","enum":["completed","failed","unknown"],"title":"ExecutionStepStatus","description":"How one step of a run turned out.\n\n`UNKNOWN` is a real answer, not a placeholder. Steps recorded before tool\noutcomes were persisted cannot be classified, and a step shown as completed\nwhen nobody knows whether it was is worse than one shown as unknown."}}}}
```

## The ExecutionTriggerSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionTriggerSchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"ID of the individual trigger that fired this run, or null once that trigger has been deleted"},"definition_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Definition Id","description":"ID of the trigger definition — the kind of trigger — as listed by GET /triggers/definitions"},"type":{"$ref":"#/components/schemas/TriggerType","description":"Coarse bucket of the trigger that started this execution (MANUAL, SCHEDULER, WEBHOOK, or UNKNOWN if unattributed), derived from `definition_id`. UNKNOWN covers runs created before the platform began recording their origin, and runs it starts directly rather than through a trigger"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable name of the trigger definition, or null when the catalog does not know it"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What this kind of trigger does"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"The trigger's own settings — a schedule's cadence, a webhook's delivery options. Webhook secrets are never included. Null once the trigger has been deleted: only the kind of trigger is recorded on the execution, the settings live on the trigger itself"}},"type":"object","required":["id","definition_id","type","label"],"title":"ExecutionTriggerSchema","description":"How an execution was started, with the firing trigger's own settings."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The ExecutionTriggerSummarySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionTriggerSummarySchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"ID of the individual trigger that fired this run, or null once that trigger has been deleted"},"definition_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Definition Id","description":"ID of the trigger definition — the kind of trigger — as listed by GET /triggers/definitions"},"type":{"$ref":"#/components/schemas/TriggerType","description":"Coarse bucket of the trigger that started this execution (MANUAL, SCHEDULER, WEBHOOK, or UNKNOWN if unattributed), derived from `definition_id`. UNKNOWN covers runs created before the platform began recording their origin, and runs it starts directly rather than through a trigger"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Human-readable name of the trigger definition, or null when the catalog does not know it"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What this kind of trigger does"}},"type":"object","required":["id","definition_id","type","label"],"title":"ExecutionTriggerSummarySchema","description":"Which trigger started an execution, without the trigger's own settings.\n\nWhat the executions list serves. Reading the settings means reading the\ntrigger row, one query per execution, which across a page would be one per\nrow — so they are offered by the single-execution endpoints only, as\n`ExecutionTriggerSchema`."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The ExecutionUsageSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionUsageSchema":{"properties":{"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"}},"type":"object","required":["tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","cost_currency"],"title":"ExecutionUsageSchema","description":"Token usage and cost data for a completed execution."}}}}
```

## The ExecutionUserSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ExecutionUserSchema","description":"Basic user info embedded in execution responses."}}}}
```

## The ExecutionsComparisonResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionsComparisonResponseSchema":{"properties":{"current":{"$ref":"#/components/schemas/ExecutionsWindowStatsSchema"},"previous":{"$ref":"#/components/schemas/ExecutionsWindowStatsSchema"},"compare_to":{"$ref":"#/components/schemas/SpendComparisonBasis","description":"Which rule produced the previous window (see SpendComparisonBasis)"},"change":{"type":"integer","title":"Change","description":"Absolute change in total executions against the previous window"},"change_ratio":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Change Ratio","description":"change as a fraction of the previous window's total, or null when the previous window had no executions at all"},"average_credit_cost":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Credit Cost","description":"Average credits consumed per execution in the current window, or null when the window had no executions"}},"type":"object","required":["current","previous","compare_to","change","change_ratio","average_credit_cost"],"title":"ExecutionsComparisonResponseSchema","description":"Response for the \"Execution status comparison\" card on the Executions tab:\nan agent's executions in a window against an earlier one, plus the current\nwindow's average credit cost per execution."},"ExecutionsWindowStatsSchema":{"properties":{"date_from":{"type":"string","title":"Date From","description":"Start of the window, YYYY-MM-DD, inclusive"},"date_to":{"type":"string","title":"Date To","description":"End of the window, YYYY-MM-DD, inclusive"},"total_count":{"type":"integer","title":"Total Count","description":"Total executions started in this window"},"success_count":{"type":"integer","title":"Success Count","description":"Executions that succeeded in this window"},"success_rate":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Success Rate","description":"success_count / total_count, or null when total_count is 0"},"duration_stats":{"$ref":"#/components/schemas/ExecutionDurationStatsSchema"}},"type":"object","required":["date_from","date_to","total_count","success_count","success_rate","duration_stats"],"title":"ExecutionsWindowStatsSchema","description":"Execution totals, success rate and duration stats over one closed date window."},"ExecutionDurationStatsSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of executions with a recorded duration that this average/min/max is computed over — not the total number of executions in the requested scope. PENDING/STARTED runs have no duration yet and are excluded from both."},"average_duration_seconds":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Duration Seconds"},"min_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Duration Seconds"},"max_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Seconds"}},"type":"object","required":["count","min_duration_seconds","max_duration_seconds"],"title":"ExecutionDurationStatsSchema","description":"Execution duration statistics.\n\nOnly executions with a recorded duration contribute — see\n`count`'s description."},"SpendComparisonBasis":{"type":"string","enum":["PREVIOUS_MONTH","PRECEDING_PERIOD"],"title":"SpendComparisonBasis","description":"What a spend comparison's previous window is.\n\nAn explicit choice rather than a rule inferred from the shape of the requested\nrange: \"the range starts on the 1st, so they must mean the previous month\"\nwould silently change basis when a caller shifted a rolling window by a day.\n\nThe window arithmetic lives on the enum so the two rules are stated in one\nplace, next to each other, where they can be compared."}}}}
```

## The ExecutionsWindowStatsSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ExecutionsWindowStatsSchema":{"properties":{"date_from":{"type":"string","title":"Date From","description":"Start of the window, YYYY-MM-DD, inclusive"},"date_to":{"type":"string","title":"Date To","description":"End of the window, YYYY-MM-DD, inclusive"},"total_count":{"type":"integer","title":"Total Count","description":"Total executions started in this window"},"success_count":{"type":"integer","title":"Success Count","description":"Executions that succeeded in this window"},"success_rate":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Success Rate","description":"success_count / total_count, or null when total_count is 0"},"duration_stats":{"$ref":"#/components/schemas/ExecutionDurationStatsSchema"}},"type":"object","required":["date_from","date_to","total_count","success_count","success_rate","duration_stats"],"title":"ExecutionsWindowStatsSchema","description":"Execution totals, success rate and duration stats over one closed date window."},"ExecutionDurationStatsSchema":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of executions with a recorded duration that this average/min/max is computed over — not the total number of executions in the requested scope. PENDING/STARTED runs have no duration yet and are excluded from both."},"average_duration_seconds":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Average Duration Seconds"},"min_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Duration Seconds"},"max_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Seconds"}},"type":"object","required":["count","min_duration_seconds","max_duration_seconds"],"title":"ExecutionDurationStatsSchema","description":"Execution duration statistics.\n\nOnly executions with a recorded duration contribute — see\n`count`'s description."}}}}
```

## The FileResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"FileResponseSchema":{"properties":{"uuid":{"type":"string","format":"uuid","title":"Uuid"},"organisation_id":{"type":"integer","title":"Organisation Id"},"conversation_id":{"type":"integer","title":"Conversation Id"},"original_filename":{"type":"string","title":"Original Filename"},"content_type":{"type":"string","title":"Content Type"},"file_size":{"type":"integer","title":"File Size"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["uuid","organisation_id","conversation_id","original_filename","content_type","file_size","created_by"],"title":"FileResponseSchema","description":"Pydantic schema for uploaded file response."}}}}
```

## The ForecastMethod object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ForecastMethod":{"type":"string","enum":["SEASONALITY","LINEAR"],"title":"ForecastMethod","description":"Algorithm used to project future costs in a cost forecast."}}}}
```

## The FundingSource object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"FundingSource":{"type":"string","enum":["ALLOWANCE","PURCHASE"],"title":"FundingSource","description":"Which pool a DEBIT drew from.\n\nSet on debits, `None` on credits — funding is explicit, never inferred from\na missing value. `ALLOWANCE` draws the computed monthly entitlement;\n`PURCHASE` draws the stored, non-expiring purchased pool."}}}}
```

## The HTTPValidationError object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## The HeaderBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"HeaderBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"header","title":"Type"},"level":{"type":"integer","maximum":6,"minimum":1,"title":"Level","default":1},"text":{"type":"string","title":"Text"}},"type":"object","required":["type","text"],"title":"HeaderBlock"}}}}
```

## The ImageBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ImageBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"image","title":"Type"},"url":{"type":"string","title":"Url"},"size":{"type":"string","enum":["sm","md","lg","full"],"title":"Size","description":"Display size of the image: sm, md, lg, or full (full container width).","default":"md"}},"type":"object","required":["type","url"],"title":"ImageBlock"}}}}
```

## The ImpactMetricSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The ImpactMetricSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ImpactMetricSuggestion":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSuggestion","description":"Suggested impact metric — the value one run of the agent brings the organisation.\n\nMirrors ImpactMetricSchema (app.api.routes.agent.schemas): all three fields are\nrequired together, since a value with no unit is meaningless."}}}}
```

## The InitiatePasswordResetRequestSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"InitiatePasswordResetRequestSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"InitiatePasswordResetRequestSchema"}}}}
```

## The InlineAgent object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"InlineAgent":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Within-pipeline alias used to reference this agent from pipeline nodes."},"name":{"type":"string","minLength":1,"title":"Name","description":"Human-readable display name shown in logs and UI."},"instruction":{"type":"string","minLength":1,"title":"Instruction","description":"System prompt that defines the agent's role and behaviour."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Alias of a model from the top-level 'model_references' list. Uses the provider default if omitted."},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgentMCPServer"},"type":"array"},{"type":"null"}],"title":"Mcp Servers","description":"MCP servers to enable for this agent, resolved against 'mcp_server_references'."},"sub_agents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Agents","description":"Aliases of agents to enable as sub-agents, resolved against 'inline_agents' and 'agent_references'."}},"additionalProperties":false,"type":"object","required":["alias","name","instruction"],"title":"InlineAgent"},"InlineAgentMCPServer":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Alias of an MCP server from the top-level 'mcp_server_references' list."},"enabled_tools":{"anyOf":[{"items":{"type":"string","minLength":1},"type":"array","minItems":1},{"type":"null"}],"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server for this agent. Omit to allow all tools declared on the server reference."}},"additionalProperties":false,"type":"object","required":["alias"],"title":"InlineAgentMCPServer"}}}}
```

## The InlineAgentMCPServer object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"InlineAgentMCPServer":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Alias of an MCP server from the top-level 'mcp_server_references' list."},"enabled_tools":{"anyOf":[{"items":{"type":"string","minLength":1},"type":"array","minItems":1},{"type":"null"}],"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server for this agent. Omit to allow all tools declared on the server reference."}},"additionalProperties":false,"type":"object","required":["alias"],"title":"InlineAgentMCPServer"}}}}
```

## The KnowledgeBaseInsightMetricSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeBaseInsightMetricSchema":{"properties":{"value":{"type":"integer","title":"Value","description":"Current live count."},"previous_value":{"type":"integer","title":"Previous Value","description":"Count before the current calendar month started, the baseline `change`/`change_ratio` compare against."},"change":{"type":"integer","title":"Change","description":"`value` minus `previous_value`."},"change_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change Ratio","description":"`change` as a fraction of `previous_value` (0.126 is a 12.6% rise). Null when `previous_value` is zero: growth from zero has no ratio — show `change` instead."},"series":{"anyOf":[{"items":{"$ref":"#/components/schemas/KnowledgeBaseInsightPeriodSchema"},"type":"array"},{"type":"null"}],"title":"Series","description":"New occurrences per period across the requested date range, zero-filled. Null for metrics that are inherently a snapshot rather than a flow (currently only `stale_drafts`)."}},"type":"object","required":["value","previous_value","change","change_ratio"],"title":"KnowledgeBaseInsightMetricSchema","description":"A single overview metric: its current total, last month's baseline, and change."},"KnowledgeBaseInsightPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"The bucket's calendar label, formatted per the requested `group`."},"value":{"type":"integer","title":"Value","description":"Count of new occurrences in this period."}},"type":"object","required":["period","value"],"title":"KnowledgeBaseInsightPeriodSchema","description":"One bucket of an insight metric's time series."}}}}
```

## The KnowledgeBaseInsightPeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeBaseInsightPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"The bucket's calendar label, formatted per the requested `group`."},"value":{"type":"integer","title":"Value","description":"Count of new occurrences in this period."}},"type":"object","required":["period","value"],"title":"KnowledgeBaseInsightPeriodSchema","description":"One bucket of an insight metric's time series."}}}}
```

## The KnowledgeBaseOverviewResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeBaseOverviewResponseSchema":{"properties":{"total_documents":{"$ref":"#/components/schemas/KnowledgeBaseInsightMetricSchema"},"content_citations":{"$ref":"#/components/schemas/KnowledgeBaseInsightMetricSchema"},"total_drafts":{"$ref":"#/components/schemas/KnowledgeBaseInsightMetricSchema"},"stale_drafts":{"$ref":"#/components/schemas/KnowledgeBaseInsightMetricSchema","description":"Currently-open drafts older than 60 days. `series` is always null — this is a snapshot metric, not a flow."},"failed_documents":{"$ref":"#/components/schemas/KnowledgeBaseInsightMetricSchema"},"doubled_documents":{"$ref":"#/components/schemas/KnowledgeBaseInsightMetricSchema"}},"type":"object","required":["total_documents","content_citations","total_drafts","stale_drafts","failed_documents","doubled_documents"],"title":"KnowledgeBaseOverviewResponseSchema","description":"Response schema for the Knowledge Base \"overview\" tab."},"KnowledgeBaseInsightMetricSchema":{"properties":{"value":{"type":"integer","title":"Value","description":"Current live count."},"previous_value":{"type":"integer","title":"Previous Value","description":"Count before the current calendar month started, the baseline `change`/`change_ratio` compare against."},"change":{"type":"integer","title":"Change","description":"`value` minus `previous_value`."},"change_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change Ratio","description":"`change` as a fraction of `previous_value` (0.126 is a 12.6% rise). Null when `previous_value` is zero: growth from zero has no ratio — show `change` instead."},"series":{"anyOf":[{"items":{"$ref":"#/components/schemas/KnowledgeBaseInsightPeriodSchema"},"type":"array"},{"type":"null"}],"title":"Series","description":"New occurrences per period across the requested date range, zero-filled. Null for metrics that are inherently a snapshot rather than a flow (currently only `stale_drafts`)."}},"type":"object","required":["value","previous_value","change","change_ratio"],"title":"KnowledgeBaseInsightMetricSchema","description":"A single overview metric: its current total, last month's baseline, and change."},"KnowledgeBaseInsightPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"The bucket's calendar label, formatted per the requested `group`."},"value":{"type":"integer","title":"Value","description":"Count of new occurrences in this period."}},"type":"object","required":["period","value"],"title":"KnowledgeBaseInsightPeriodSchema","description":"One bucket of an insight metric's time series."}}}}
```

## The KnowledgeBaseScope object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."}}}}
```

## The KnowledgeDocumentResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeDocumentResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"citation_count":{"type":"integer","title":"Citation Count"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"markdown":{"type":"string","title":"Markdown"},"source_file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source File Id"},"parse_status":{"$ref":"#/components/schemas/DocumentParseStatus"},"parse_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parse Error"},"publish_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish Error"},"published_version_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Published Version Id"},"version_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Number"},"status":{"anyOf":[{"$ref":"#/components/schemas/VersionStatus"},{"type":"null"}]},"embedding_status":{"anyOf":[{"$ref":"#/components/schemas/EmbeddingStatus"},{"type":"null"}]},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","organisation_id","name","slug","parent_id","path","summary","citation_count","metadata","markdown","source_file_id","parse_status","parse_error","publish_error","published_version_id","version_number","status","embedding_status","created_by","updated_by","created_at","updated_at"],"title":"KnowledgeDocumentResponseSchema","description":"Response schema for a document's full view (node metadata + body).\n\nThe body shown is the published version's, or the latest draft's when nothing\nis published yet. `published_version_id` names the live version (null for a\ndraft-only document); `version_number`/`status`/`embedding_status` describe\nthe version whose body is returned, so a client can tell live from draft.\n`publish_error` is set when that version's last publish was abandoned and it\nwas returned to an editable state — null whenever the last attempt succeeded\nor none has been made."},"DocumentParseStatus":{"type":"string","enum":["pending","processing","completed","failed"],"title":"DocumentParseStatus","description":"Lifecycle of a file-uploaded document's Markdown conversion.\n\nInline-authored documents are `COMPLETED` on creation (nothing to parse).\nA file upload starts `PENDING`, moves to `PROCESSING` when the background\ntask picks it up, then to a terminal `COMPLETED` or `FAILED`."},"VersionStatus":{"type":"string","enum":["draft","publishing","published","archived"],"title":"VersionStatus","description":"Publication state of a single knowledge-document version.\n\nA version is created `DRAFT` (editable, not live). Requesting publication\nmoves it to `PUBLISHING` (edit-locked) while its chunks are embedded; once\nthe embeddings are ready the pointer flip marks it `PUBLISHED` and the\npreviously published version becomes `ARCHIVED`. A rollback re-publishes an\n`ARCHIVED` version through the same `PUBLISHING` state. A failed go-live\nreturns the version to its pre-attempt state: a failed publish reverts to\n`DRAFT`, a failed rollback reverts to `ARCHIVED` (see `PublishOrigin`).\n\nLegal transitions are enforced by the `KnowledgeDocumentVersion` entity (its\nstatus setter is a state machine); this enum only names the states. Only\n`knowledge_document.published_version_id` decides what retrieval serves —\nthe status is descriptive history metadata for the UI."},"EmbeddingStatus":{"type":"string","enum":["pending","ready","failed"],"title":"EmbeddingStatus","description":"Progress of embedding a version's chunks under the org's current model.\n\nInformational only: retrieval never depends on it (search joins the actual\nembedding rows, so an unembedded version simply yields no hits). `PENDING`\nuntil a publish embeds the version, `READY` once every chunk is embedded,\n`FAILED` if embedding gave up (the version then reverts to draft)."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeDocumentVersionListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeDocumentVersionListResponseSchema":{"properties":{"versions":{"items":{"$ref":"#/components/schemas/KnowledgeDocumentVersionSummaryResponseSchema"},"type":"array","title":"Versions"},"published_version_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Published Version Id"}},"type":"object","required":["versions","published_version_id"],"title":"KnowledgeDocumentVersionListResponseSchema","description":"A document's version history plus which version is currently live."},"KnowledgeDocumentVersionSummaryResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"version_number":{"type":"integer","title":"Version Number"},"status":{"$ref":"#/components/schemas/VersionStatus"},"name":{"type":"string","title":"Name"},"source_file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source File Id"},"parse_status":{"$ref":"#/components/schemas/DocumentParseStatus"},"embedding_status":{"$ref":"#/components/schemas/EmbeddingStatus"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"publish_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish Error"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","version_number","status","name","source_file_id","parse_status","embedding_status","published_at","publish_error","created_by","created_at","updated_at"],"title":"KnowledgeDocumentVersionSummaryResponseSchema","description":"A version's metadata without the body — a row in the version history.\n\n`publish_error` explains a version that went into `publishing` and came back\nout without going live. This listing is where such a version is visible: the\ndocument read path shows the *published* version, so for a document that was\nalready live the reverted one is only reachable here."},"VersionStatus":{"type":"string","enum":["draft","publishing","published","archived"],"title":"VersionStatus","description":"Publication state of a single knowledge-document version.\n\nA version is created `DRAFT` (editable, not live). Requesting publication\nmoves it to `PUBLISHING` (edit-locked) while its chunks are embedded; once\nthe embeddings are ready the pointer flip marks it `PUBLISHED` and the\npreviously published version becomes `ARCHIVED`. A rollback re-publishes an\n`ARCHIVED` version through the same `PUBLISHING` state. A failed go-live\nreturns the version to its pre-attempt state: a failed publish reverts to\n`DRAFT`, a failed rollback reverts to `ARCHIVED` (see `PublishOrigin`).\n\nLegal transitions are enforced by the `KnowledgeDocumentVersion` entity (its\nstatus setter is a state machine); this enum only names the states. Only\n`knowledge_document.published_version_id` decides what retrieval serves —\nthe status is descriptive history metadata for the UI."},"DocumentParseStatus":{"type":"string","enum":["pending","processing","completed","failed"],"title":"DocumentParseStatus","description":"Lifecycle of a file-uploaded document's Markdown conversion.\n\nInline-authored documents are `COMPLETED` on creation (nothing to parse).\nA file upload starts `PENDING`, moves to `PROCESSING` when the background\ntask picks it up, then to a terminal `COMPLETED` or `FAILED`."},"EmbeddingStatus":{"type":"string","enum":["pending","ready","failed"],"title":"EmbeddingStatus","description":"Progress of embedding a version's chunks under the org's current model.\n\nInformational only: retrieval never depends on it (search joins the actual\nembedding rows, so an unembedded version simply yields no hits). `PENDING`\nuntil a publish embeds the version, `READY` once every chunk is embedded,\n`FAILED` if embedding gave up (the version then reverts to draft)."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeDocumentVersionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeDocumentVersionResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"version_number":{"type":"integer","title":"Version Number"},"status":{"$ref":"#/components/schemas/VersionStatus"},"name":{"type":"string","title":"Name"},"source_file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source File Id"},"parse_status":{"$ref":"#/components/schemas/DocumentParseStatus"},"embedding_status":{"$ref":"#/components/schemas/EmbeddingStatus"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"publish_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish Error"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"document_id":{"type":"integer","title":"Document Id"},"node_id":{"type":"integer","title":"Node Id"},"markdown":{"type":"string","title":"Markdown"},"parse_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parse Error"},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]}},"type":"object","required":["id","version_number","status","name","source_file_id","parse_status","embedding_status","published_at","publish_error","created_by","created_at","updated_at","document_id","node_id","markdown","parse_error","updated_by"],"title":"KnowledgeDocumentVersionResponseSchema","description":"A single version's full view — the history-row metadata plus the body."},"VersionStatus":{"type":"string","enum":["draft","publishing","published","archived"],"title":"VersionStatus","description":"Publication state of a single knowledge-document version.\n\nA version is created `DRAFT` (editable, not live). Requesting publication\nmoves it to `PUBLISHING` (edit-locked) while its chunks are embedded; once\nthe embeddings are ready the pointer flip marks it `PUBLISHED` and the\npreviously published version becomes `ARCHIVED`. A rollback re-publishes an\n`ARCHIVED` version through the same `PUBLISHING` state. A failed go-live\nreturns the version to its pre-attempt state: a failed publish reverts to\n`DRAFT`, a failed rollback reverts to `ARCHIVED` (see `PublishOrigin`).\n\nLegal transitions are enforced by the `KnowledgeDocumentVersion` entity (its\nstatus setter is a state machine); this enum only names the states. Only\n`knowledge_document.published_version_id` decides what retrieval serves —\nthe status is descriptive history metadata for the UI."},"DocumentParseStatus":{"type":"string","enum":["pending","processing","completed","failed"],"title":"DocumentParseStatus","description":"Lifecycle of a file-uploaded document's Markdown conversion.\n\nInline-authored documents are `COMPLETED` on creation (nothing to parse).\nA file upload starts `PENDING`, moves to `PROCESSING` when the background\ntask picks it up, then to a terminal `COMPLETED` or `FAILED`."},"EmbeddingStatus":{"type":"string","enum":["pending","ready","failed"],"title":"EmbeddingStatus","description":"Progress of embedding a version's chunks under the org's current model.\n\nInformational only: retrieval never depends on it (search joins the actual\nembedding rows, so an unembedded version simply yields no hits). `PENDING`\nuntil a publish embeds the version, `READY` once every chunk is embedded,\n`FAILED` if embedding gave up (the version then reverts to draft)."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeDocumentVersionSummaryResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeDocumentVersionSummaryResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"version_number":{"type":"integer","title":"Version Number"},"status":{"$ref":"#/components/schemas/VersionStatus"},"name":{"type":"string","title":"Name"},"source_file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source File Id"},"parse_status":{"$ref":"#/components/schemas/DocumentParseStatus"},"embedding_status":{"$ref":"#/components/schemas/EmbeddingStatus"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"publish_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish Error"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","version_number","status","name","source_file_id","parse_status","embedding_status","published_at","publish_error","created_by","created_at","updated_at"],"title":"KnowledgeDocumentVersionSummaryResponseSchema","description":"A version's metadata without the body — a row in the version history.\n\n`publish_error` explains a version that went into `publishing` and came back\nout without going live. This listing is where such a version is visible: the\ndocument read path shows the *published* version, so for a document that was\nalready live the reverted one is only reachable here."},"VersionStatus":{"type":"string","enum":["draft","publishing","published","archived"],"title":"VersionStatus","description":"Publication state of a single knowledge-document version.\n\nA version is created `DRAFT` (editable, not live). Requesting publication\nmoves it to `PUBLISHING` (edit-locked) while its chunks are embedded; once\nthe embeddings are ready the pointer flip marks it `PUBLISHED` and the\npreviously published version becomes `ARCHIVED`. A rollback re-publishes an\n`ARCHIVED` version through the same `PUBLISHING` state. A failed go-live\nreturns the version to its pre-attempt state: a failed publish reverts to\n`DRAFT`, a failed rollback reverts to `ARCHIVED` (see `PublishOrigin`).\n\nLegal transitions are enforced by the `KnowledgeDocumentVersion` entity (its\nstatus setter is a state machine); this enum only names the states. Only\n`knowledge_document.published_version_id` decides what retrieval serves —\nthe status is descriptive history metadata for the UI."},"DocumentParseStatus":{"type":"string","enum":["pending","processing","completed","failed"],"title":"DocumentParseStatus","description":"Lifecycle of a file-uploaded document's Markdown conversion.\n\nInline-authored documents are `COMPLETED` on creation (nothing to parse).\nA file upload starts `PENDING`, moves to `PROCESSING` when the background\ntask picks it up, then to a terminal `COMPLETED` or `FAILED`."},"EmbeddingStatus":{"type":"string","enum":["pending","ready","failed"],"title":"EmbeddingStatus","description":"Progress of embedding a version's chunks under the org's current model.\n\nInformational only: retrieval never depends on it (search joins the actual\nembedding rows, so an unembedded version simply yields no hits). `PENDING`\nuntil a publish embeds the version, `READY` once every chunk is embedded,\n`FAILED` if embedding gave up (the version then reverts to draft)."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeNodeListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeNodeListResponseSchema":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/KnowledgeNodeResponseSchema"},"type":"array","title":"Nodes"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["nodes","total_count"],"title":"KnowledgeNodeListResponseSchema","description":"Schema for a flat list of nodes (roots or a node's children)."},"KnowledgeNodeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"node_type":{"$ref":"#/components/schemas/NodeType"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"citation_count":{"type":"integer","title":"Citation Count"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"name_translations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Name Translations","description":"Per-language display-name overrides (ISO 639-1 keys), for the two system-managed root folders only — null for every other node. `name` always stays the canonical English string; the caller decides which (if any) of these to show."}},"type":"object","required":["id","organisation_id","node_type","name","slug","parent_id","path","summary","citation_count","metadata","created_by","updated_by","created_at","updated_at"],"title":"KnowledgeNodeResponseSchema","description":"Response schema for a knowledge-base node (tree view, no document body)."},"NodeType":{"type":"string","enum":["folder","document"],"title":"NodeType","description":"The node-type discriminator — the single extension point for new types.\n\nOnly the local types exist today (`folder`, `document`); the CTI design\nkeeps adding types additive."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeNodeResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeNodeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"node_type":{"$ref":"#/components/schemas/NodeType"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"citation_count":{"type":"integer","title":"Citation Count"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"name_translations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Name Translations","description":"Per-language display-name overrides (ISO 639-1 keys), for the two system-managed root folders only — null for every other node. `name` always stays the canonical English string; the caller decides which (if any) of these to show."}},"type":"object","required":["id","organisation_id","node_type","name","slug","parent_id","path","summary","citation_count","metadata","created_by","updated_by","created_at","updated_at"],"title":"KnowledgeNodeResponseSchema","description":"Response schema for a knowledge-base node (tree view, no document body)."},"NodeType":{"type":"string","enum":["folder","document"],"title":"NodeType","description":"The node-type discriminator — the single extension point for new types.\n\nOnly the local types exist today (`folder`, `document`); the CTI design\nkeeps adding types additive."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeNodeSortField object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeNodeSortField":{"type":"string","enum":["name","citations"],"title":"KnowledgeNodeSortField","description":"What a node listing is ordered by.\n\n`NAME` is the default and means the tree's natural reading order: folders\nbefore documents, then name A-Z. `CITATIONS` orders by how often agents have\nread a node's documents, which deliberately drops the folders-first grouping\n(see `SortDirection`) — ranking by usage is pointless if containers and\nleaves are ranked in separate blocks."}}}}
```

## The KnowledgeNodeTreeResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeNodeTreeResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"node_type":{"$ref":"#/components/schemas/NodeType"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"citation_count":{"type":"integer","title":"Citation Count"},"status":{"anyOf":[{"$ref":"#/components/schemas/VersionStatus"},{"type":"null"}]},"created_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"updated_by":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeNodeUserSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"children":{"items":{"$ref":"#/components/schemas/KnowledgeNodeTreeResponseSchema"},"type":"array","title":"Children"},"name_translations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Name Translations","description":"Per-language display-name overrides (ISO 639-1 keys), for the two system-managed root folders only — null for every other node. `name` always stays the canonical English string; the caller decides which (if any) of these to show."}},"type":"object","required":["id","organisation_id","node_type","name","slug","parent_id","path","summary","citation_count","status","created_by","updated_by","created_at","updated_at","children"],"title":"KnowledgeNodeTreeResponseSchema","description":"Recursive response schema for a node hierarchy (tree view).\n\nDeliberately narrower than `KnowledgeNodeResponseSchema`: this is a structure\nview covering a whole organisation, so per-node payload multiplies across every\nnode in the tree. Audit fields are left out for that reason and `metadata` is\ntoo — read it per node from the get-node endpoint."},"NodeType":{"type":"string","enum":["folder","document"],"title":"NodeType","description":"The node-type discriminator — the single extension point for new types.\n\nOnly the local types exist today (`folder`, `document`); the CTI design\nkeeps adding types additive."},"VersionStatus":{"type":"string","enum":["draft","publishing","published","archived"],"title":"VersionStatus","description":"Publication state of a single knowledge-document version.\n\nA version is created `DRAFT` (editable, not live). Requesting publication\nmoves it to `PUBLISHING` (edit-locked) while its chunks are embedded; once\nthe embeddings are ready the pointer flip marks it `PUBLISHED` and the\npreviously published version becomes `ARCHIVED`. A rollback re-publishes an\n`ARCHIVED` version through the same `PUBLISHING` state. A failed go-live\nreturns the version to its pre-attempt state: a failed publish reverts to\n`DRAFT`, a failed rollback reverts to `ARCHIVED` (see `PublishOrigin`).\n\nLegal transitions are enforced by the `KnowledgeDocumentVersion` entity (its\nstatus setter is a state machine); this enum only names the states. Only\n`knowledge_document.published_version_id` decides what retrieval serves —\nthe status is descriptive history metadata for the UI."},"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The KnowledgeNodeUserSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"KnowledgeNodeUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"KnowledgeNodeUserSchema","description":"Basic info about a node's creator/updater."}}}}
```

## The LanguageModelProviderListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LanguageModelProviderListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/LanguageModelProviderType"},"owner_organisation_id":{"type":"integer","title":"Owner Organisation Id"},"has_credentials":{"type":"boolean","title":"Has Credentials"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"}},"type":"object","required":["id","name","identifier","type","owner_organisation_id","has_credentials","verified_at"],"title":"LanguageModelProviderListItemResponseSchema","description":"Pydantic schema for language model provider list item."},"LanguageModelProviderType":{"type":"string","enum":["openai","google","ollama","bielik","mistral","anthropic","hugging_face"],"title":"LanguageModelProviderType","description":"Supported language model provider types."}}}}
```

## The LanguageModelProviderListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LanguageModelProviderListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LanguageModelProviderListItemResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","count","total_count"],"title":"LanguageModelProviderListResponseSchema","description":"Pydantic schema for language model provider list response."},"LanguageModelProviderListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/LanguageModelProviderType"},"owner_organisation_id":{"type":"integer","title":"Owner Organisation Id"},"has_credentials":{"type":"boolean","title":"Has Credentials"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"}},"type":"object","required":["id","name","identifier","type","owner_organisation_id","has_credentials","verified_at"],"title":"LanguageModelProviderListItemResponseSchema","description":"Pydantic schema for language model provider list item."},"LanguageModelProviderType":{"type":"string","enum":["openai","google","ollama","bielik","mistral","anthropic","hugging_face"],"title":"LanguageModelProviderType","description":"Supported language model provider types."}}}}
```

## The LanguageModelProviderResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LanguageModelProviderResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/LanguageModelProviderType"},"owner_organisation_id":{"type":"integer","title":"Owner Organisation Id"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"has_credentials":{"type":"boolean","title":"Has Credentials"},"model_set":{"anyOf":[{"$ref":"#/components/schemas/ModelSetResponseSchema"},{"type":"null"}]},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"}},"type":"object","required":["id","name","identifier","type","owner_organisation_id","config","has_credentials","model_set","verified_at"],"title":"LanguageModelProviderResponseSchema","description":"Pydantic schema for language model provider detail response."},"LanguageModelProviderType":{"type":"string","enum":["openai","google","ollama","bielik","mistral","anthropic","hugging_face"],"title":"LanguageModelProviderType","description":"Supported language model provider types."},"ModelSetResponseSchema":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ModelResponseSchema"},"type":"array","title":"Models"}},"type":"object","required":["models"],"title":"ModelSetResponseSchema","description":"Pydantic schema for a set of language models."},"ModelResponseSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created"},"model_type":{"$ref":"#/components/schemas/ModelType"},"status":{"$ref":"#/components/schemas/ModelStatus","default":"enabled"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"weights":{"anyOf":[{"$ref":"#/components/schemas/ModelWeights"},{"type":"null"}]},"tool_call":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tool Call"},"reasoning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reasoning"},"structured_output":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Structured Output"},"temperature":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Temperature"},"input_type":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array"},{"type":"null"}],"title":"Input Type"},"output_type":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array"},{"type":"null"}],"title":"Output Type"},"context_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Limit"},"input_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Limit"},"output_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Limit"},"knowledge":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Knowledge"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"summary":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Summary"},"docs_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Url"},"pricing":{"anyOf":[{"$ref":"#/components/schemas/ModelProfilePricingSchema"},{"type":"null"}]}},"type":"object","required":["id","name","created","model_type"],"title":"ModelResponseSchema","description":"Provider model merged with its model profile data where available."},"ModelType":{"type":"string","enum":["chat","embedding"],"title":"ModelType"},"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"},"ModelWeights":{"type":"string","enum":["opened","closed"],"title":"ModelWeights"},"ModelModality":{"type":"string","enum":["text","image","audio","video"],"title":"ModelModality"},"ModelProfilePricingSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"}},"type":"object","required":["currency","created_at","text_input","text_output","cache_read","cache_write","audio_input","audio_output","image_input","image_output"],"title":"ModelProfilePricingSchema","description":"Current pricing snapshot for a model."}}}}
```

## The LanguageModelProviderType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LanguageModelProviderType":{"type":"string","enum":["openai","google","ollama","bielik","mistral","anthropic","hugging_face"],"title":"LanguageModelProviderType","description":"Supported language model provider types."}}}}
```

## The LanguageModelProviderTypeListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LanguageModelProviderTypeListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LanguageModelProviderTypeSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"LanguageModelProviderTypeListResponseSchema"},"LanguageModelProviderTypeSchema":{"properties":{"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema"}},"type":"object","required":["identifier","name","description","config_schema"],"title":"LanguageModelProviderTypeSchema"}}}}
```

## The LanguageModelProviderTypeSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LanguageModelProviderTypeSchema":{"properties":{"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema"}},"type":"object","required":["identifier","name","description","config_schema"],"title":"LanguageModelProviderTypeSchema"}}}}
```

## The LastExecutionSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LastExecutionSchema":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"$ref":"#/components/schemas/ExecutionStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerInfoSchema"},{"type":"null"}],"description":"The trigger that started this execution, or null if unattributed."}},"type":"object","required":["id","status","started_at","finished_at","created_at","trigger"],"title":"LastExecutionSchema","description":"The most recent execution in a given status."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."}}}}
```

## The LineChartBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LineChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"line_chart","title":"Type"},"title":{"type":"string","title":"Title","description":"Chart title, e.g. 'Monthly Active Users'"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels","description":"Series names displayed in the legend — one entry per line on the chart. Example: ['Revenue'] for a single-line chart, ['Revenue', 'Costs'] for two lines. Do NOT put x-axis tick labels (dates, periods) here; those belong in data[i].x."},"data":{"items":{"items":{"$ref":"#/components/schemas/LineChartDataPoint"},"type":"array"},"type":"array","title":"Data","description":"One inner list per series; must have the same length as `labels`. Each element is an (x, y) point where x is the x-axis tick label (e.g. 'Jan 2024', 'Q1') and y is the numeric value."}},"type":"object","required":["type","title","labels","data"],"title":"LineChartBlock","description":"Line chart with one or more series.\n\n`labels` holds the SERIES NAMES shown in the legend (e.g. [\"Revenue\", \"Costs\"]),\nNOT the x-axis tick labels. X-axis values come from the `x` field of each data\npoint. For a single-line chart, `labels` has exactly one entry and `data` has\nexactly one inner list."},"LineChartDataPoint":{"properties":{"x":{"anyOf":[{"type":"string"},{"type":"number"}],"title":"X","description":"X-axis value, typically a date string or numeric index"},"y":{"type":"number","title":"Y","description":"Y-axis value"}},"type":"object","required":["x","y"],"title":"LineChartDataPoint"}}}}
```

## The LineChartDataPoint object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LineChartDataPoint":{"properties":{"x":{"anyOf":[{"type":"string"},{"type":"number"}],"title":"X","description":"X-axis value, typically a date string or numeric index"},"y":{"type":"number","title":"Y","description":"Y-axis value"}},"type":"object","required":["x","y"],"title":"LineChartDataPoint"}}}}
```

## The LinkMCPServerPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LinkMCPServerPayloadSchema":{"properties":{"enabled_tools":{"items":{"type":"string"},"type":"array","title":"Enabled Tools","description":"List of tool names to enable for this agent-server link"}},"type":"object","title":"LinkMCPServerPayloadSchema","description":"Pydantic schema for linking an MCP server to an agent."}}}}
```

## The LoopNode-Input object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LoopNode-Input":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Input":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Input":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Input":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"}}}}
```

## The LoopNode-Output object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"LoopNode-Output":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Output":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Output":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Output":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"}}}}
```

## The MCPCatalogCategoryDetailSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogCategoryDetailSchema":{"properties":{"id":{"type":"integer","title":"Id"},"translations":{"items":{"$ref":"#/components/schemas/MCPCatalogCategoryTranslationSchema"},"type":"array","title":"Translations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","translations","created_at","updated_at"],"title":"MCPCatalogCategoryDetailSchema"},"MCPCatalogCategoryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"MCPCatalogCategoryTranslationSchema"}}}}
```

## The MCPCatalogCategoryListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogCategoryListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MCPCatalogCategorySchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"MCPCatalogCategoryListResponseSchema"},"MCPCatalogCategorySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"}},"type":"object","required":["id","name"],"title":"MCPCatalogCategorySchema"}}}}
```

## The MCPCatalogCategorySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogCategorySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"}},"type":"object","required":["id","name"],"title":"MCPCatalogCategorySchema"}}}}
```

## The MCPCatalogCategoryTranslationSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogCategoryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"MCPCatalogCategoryTranslationSchema"}}}}
```

## The MCPCatalogEntryDetailSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogEntryDetailSchema":{"properties":{"category_id":{"type":"integer","title":"Category Id","description":"ID of the MCP catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"vendor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Url","description":"Vendor URL"},"server_url":{"type":"string","title":"Server Url","description":"MCP server URL"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Website URL"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"Documentation URL"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"data_residency_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Residency Country","description":"ISO 3166-1 alpha-2 country code of the MCP server's data residency"},"vendor_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Country","description":"ISO 3166-1 alpha-2 country code of the vendor company's location"},"is_recommended":{"type":"boolean","title":"Is Recommended","description":"Whether this entry is recommended","default":false},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the MCP server expects, if any"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config","description":"Credential-free authentication template describing where the credential goes (e.g. API-key header name and location). Credential values are rejected - they belong to the MCP server created from this entry."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account before the server's tools can be used","default":false},"id":{"type":"integer","title":"Id"},"is_data_residency_in_eu":{"type":"boolean","title":"Is Data Residency In Eu","description":"Whether the data residency country is within the European Union"},"translations":{"items":{"$ref":"#/components/schemas/MCPCatalogEntryTranslationSchema"},"type":"array","title":"Translations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category_id","server_url","id","is_data_residency_in_eu","translations","created_at","updated_at"],"title":"MCPCatalogEntryDetailSchema"},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"MCPCatalogEntryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"MCPCatalogEntryTranslationSchema"}}}}
```

## The MCPCatalogEntryListItemSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogEntryListItemSchema":{"properties":{"category_id":{"type":"integer","title":"Category Id","description":"ID of the MCP catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"vendor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Url","description":"Vendor URL"},"server_url":{"type":"string","title":"Server Url","description":"MCP server URL"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Website URL"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"Documentation URL"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"data_residency_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Residency Country","description":"ISO 3166-1 alpha-2 country code of the MCP server's data residency"},"vendor_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Country","description":"ISO 3166-1 alpha-2 country code of the vendor company's location"},"is_recommended":{"type":"boolean","title":"Is Recommended","description":"Whether this entry is recommended","default":false},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the MCP server expects, if any"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config","description":"Credential-free authentication template describing where the credential goes (e.g. API-key header name and location). Credential values are rejected - they belong to the MCP server created from this entry."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account before the server's tools can be used","default":false},"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_data_residency_in_eu":{"type":"boolean","title":"Is Data Residency In Eu","description":"Whether the data residency country is within the European Union"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category_id","server_url","id","is_data_residency_in_eu","created_at","updated_at"],"title":"MCPCatalogEntryListItemSchema"},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The MCPCatalogEntryListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogEntryListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MCPCatalogEntryListItemSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"MCPCatalogEntryListResponseSchema"},"MCPCatalogEntryListItemSchema":{"properties":{"category_id":{"type":"integer","title":"Category Id","description":"ID of the MCP catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"vendor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Url","description":"Vendor URL"},"server_url":{"type":"string","title":"Server Url","description":"MCP server URL"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Website URL"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"Documentation URL"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"data_residency_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Residency Country","description":"ISO 3166-1 alpha-2 country code of the MCP server's data residency"},"vendor_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Country","description":"ISO 3166-1 alpha-2 country code of the vendor company's location"},"is_recommended":{"type":"boolean","title":"Is Recommended","description":"Whether this entry is recommended","default":false},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the MCP server expects, if any"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config","description":"Credential-free authentication template describing where the credential goes (e.g. API-key header name and location). Credential values are rejected - they belong to the MCP server created from this entry."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account before the server's tools can be used","default":false},"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_data_residency_in_eu":{"type":"boolean","title":"Is Data Residency In Eu","description":"Whether the data residency country is within the European Union"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category_id","server_url","id","is_data_residency_in_eu","created_at","updated_at"],"title":"MCPCatalogEntryListItemSchema"},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The MCPCatalogEntrySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogEntrySchema":{"properties":{"category_id":{"type":"integer","title":"Category Id","description":"ID of the MCP catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"vendor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Url","description":"Vendor URL"},"server_url":{"type":"string","title":"Server Url","description":"MCP server URL"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Website URL"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"Documentation URL"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"data_residency_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Residency Country","description":"ISO 3166-1 alpha-2 country code of the MCP server's data residency"},"vendor_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Country","description":"ISO 3166-1 alpha-2 country code of the vendor company's location"},"is_recommended":{"type":"boolean","title":"Is Recommended","description":"Whether this entry is recommended","default":false},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the MCP server expects, if any"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config","description":"Credential-free authentication template describing where the credential goes (e.g. API-key header name and location). Credential values are rejected - they belong to the MCP server created from this entry."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account before the server's tools can be used","default":false},"id":{"type":"integer","title":"Id"},"is_data_residency_in_eu":{"type":"boolean","title":"Is Data Residency In Eu","description":"Whether the data residency country is within the European Union"},"translations":{"items":{"$ref":"#/components/schemas/MCPCatalogEntryTranslationSchema"},"type":"array","title":"Translations"}},"type":"object","required":["category_id","server_url","id","is_data_residency_in_eu","translations"],"title":"MCPCatalogEntrySchema"},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"MCPCatalogEntryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"MCPCatalogEntryTranslationSchema"}}}}
```

## The MCPCatalogEntryTranslationSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPCatalogEntryTranslationSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog entry"},"language_code":{"type":"string","title":"Language Code","description":"ISO 639-1 language code for the translation"},"id":{"type":"integer","title":"Id"}},"type":"object","required":["name","language_code","id"],"title":"MCPCatalogEntryTranslationSchema"}}}}
```

## The MCPServerCatalogEntrySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerCatalogEntrySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"MCPServerCatalogEntrySchema","description":"Basic MCP catalog entry info embedded in MCP server responses."}}}}
```

## The MCPServerConnectionPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerConnectionPayloadSchema":{"properties":{"scheme":{"$ref":"#/components/schemas/AuthScheme"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["scheme"],"title":"MCPServerConnectionPayloadSchema","description":"Pydantic schema for establishing a user-scope MCP server connection."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The MCPServerConnectionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerConnectionResponseSchema":{"properties":{"connected":{"type":"boolean","title":"Connected"},"scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["connected","scheme","config","connected_at","expires_at"],"title":"MCPServerConnectionResponseSchema","description":"Pydantic schema for a user-scope MCP server connection's status.\n\n``config`` is always sanitized - sensitive fields (tokens, passwords,\nAPI key values, cookie values) are masked and never echoed back."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The MCPServerIconSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerIconSchema":{"properties":{"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"},"mimeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mimetype"},"sizes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sizes"}},"type":"object","title":"MCPServerIconSchema","description":"Pydantic schema for an MCP server icon."}}}}
```

## The MCPServerInfoSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerInfoSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"websiteUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Websiteurl"},"icons":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerIconSchema"},"type":"array"},{"type":"null"}],"title":"Icons"}},"type":"object","title":"MCPServerInfoSchema","description":"Pydantic schema for MCP server info returned during initialization."},"MCPServerIconSchema":{"properties":{"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"},"mimeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mimetype"},"sizes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sizes"}},"type":"object","title":"MCPServerIconSchema","description":"Pydantic schema for an MCP server icon."}}}}
```

## The MCPServerListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"verification_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Error"},"verification_status":{"type":"string","title":"Verification Status"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"mcp_catalog_entry":{"anyOf":[{"$ref":"#/components/schemas/MCPServerCatalogEntrySchema"},{"type":"null"}]},"icons":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerIconSchema"},"type":"array"},{"type":"null"}],"title":"Icons"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config"},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","default":false},"version":{"$ref":"#/components/schemas/MCPServerVersionSchema"}},"type":"object","required":["id","organisation_id","name","identifier","verified_at","verification_error","verification_status","is_enabled","mcp_catalog_entry_id","version"],"title":"MCPServerListItemResponseSchema","description":"Pydantic schema for MCP server list item response."},"MCPServerCatalogEntrySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"MCPServerCatalogEntrySchema","description":"Basic MCP catalog entry info embedded in MCP server responses."},"MCPServerIconSchema":{"properties":{"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"},"mimeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mimetype"},"sizes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sizes"}},"type":"object","title":"MCPServerIconSchema","description":"Pydantic schema for an MCP server icon."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"MCPServerVersionSchema":{"properties":{"installed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed"},"available":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available"},"new_version_available":{"type":"boolean","title":"New Version Available","default":false},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"}},"type":"object","title":"MCPServerVersionSchema","description":"Pydantic schema for an MCP server's version / update availability.\n\n``installed`` is the version reported at the last successful verification;\n``available`` is the newest version seen upstream by the most recent version\ncheck. ``new_version_available`` is derived from the two by Semantic\nVersioning precedence, so it is never stale relative to them, and it stays\nfalse for a rollback or for versions that cannot be ordered."}}}}
```

## The MCPServerListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MCPServerListItemResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","count","total_count"],"title":"MCPServerListResponseSchema","description":"Pydantic schema for MCP server list response."},"MCPServerListItemResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"verification_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Error"},"verification_status":{"type":"string","title":"Verification Status"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"mcp_catalog_entry":{"anyOf":[{"$ref":"#/components/schemas/MCPServerCatalogEntrySchema"},{"type":"null"}]},"icons":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerIconSchema"},"type":"array"},{"type":"null"}],"title":"Icons"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config"},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","default":false},"version":{"$ref":"#/components/schemas/MCPServerVersionSchema"}},"type":"object","required":["id","organisation_id","name","identifier","verified_at","verification_error","verification_status","is_enabled","mcp_catalog_entry_id","version"],"title":"MCPServerListItemResponseSchema","description":"Pydantic schema for MCP server list item response."},"MCPServerCatalogEntrySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"MCPServerCatalogEntrySchema","description":"Basic MCP catalog entry info embedded in MCP server responses."},"MCPServerIconSchema":{"properties":{"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"},"mimeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mimetype"},"sizes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sizes"}},"type":"object","title":"MCPServerIconSchema","description":"Pydantic schema for an MCP server icon."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"MCPServerVersionSchema":{"properties":{"installed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed"},"available":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available"},"new_version_available":{"type":"boolean","title":"New Version Available","default":false},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"}},"type":"object","title":"MCPServerVersionSchema","description":"Pydantic schema for an MCP server's version / update availability.\n\n``installed`` is the version reported at the last successful verification;\n``available`` is the newest version seen upstream by the most recent version\ncheck. ``new_version_available`` is derived from the two by Semantic\nVersioning precedence, so it is never stale relative to them, and it stays\nfalse for a rollback or for versions that cannot be ordered."}}}}
```

## The MCPServerNeedingCredentials object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerNeedingCredentials":{"properties":{"identifier":{"type":"string","minLength":1,"title":"Identifier"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the source server was configured with."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account to this server.","default":false},"removed_config_fields":{"items":{"type":"string"},"type":"array","title":"Removed Config Fields","description":"Transport configuration removed from this server's spec because it can carry credentials — 'headers' and 'env' above all, whose values are where a bearer token or an API key actually lives. The server is created with the rest of its configuration and will not work until these are restored by hand."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"MCPServerNeedingCredentials","description":"An MCP server that will not work until an admin re-enters its secret."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The MCPServerReference object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the MCP server."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this server from inline agents."},"enabled_tools":{"items":{"type":"string","minLength":1},"type":"array","minItems":1,"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server."}},"additionalProperties":false,"type":"object","required":["identifier","enabled_tools"],"title":"MCPServerReference"}}}}
```

## The MCPServerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolResponseSchema"},"type":"array"},{"type":"null"}],"title":"Tools"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"verification_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Error"},"verification_status":{"type":"string","title":"Verification Status"},"server_info":{"anyOf":[{"$ref":"#/components/schemas/MCPServerInfoSchema"},{"type":"null"}]},"is_enabled":{"type":"boolean","title":"Is Enabled"},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"mcp_catalog_entry":{"anyOf":[{"$ref":"#/components/schemas/MCPServerCatalogEntrySchema"},{"type":"null"}]},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config"},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","default":false},"version":{"$ref":"#/components/schemas/MCPServerVersionSchema"}},"type":"object","required":["id","organisation_id","name","identifier","config","tools","verified_at","verification_error","verification_status","server_info","is_enabled","mcp_catalog_entry_id","version"],"title":"MCPServerResponseSchema","description":"Pydantic schema for MCP server response."},"ToolResponseSchema":{"properties":{"name":{"type":"string","title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"type":"string","title":"Description"},"display_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Description"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema"},"annotations":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Annotations"},"status":{"$ref":"#/components/schemas/ToolStatus"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"}},"type":"object","required":["name","title","description","display_description","input_schema","output_schema","annotations","status","categories"],"title":"ToolResponseSchema","description":"Pydantic schema for tool response."},"ToolStatus":{"type":"string","enum":["enabled","disabled"],"title":"ToolStatus"},"MCPServerInfoSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"websiteUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Websiteurl"},"icons":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerIconSchema"},"type":"array"},{"type":"null"}],"title":"Icons"}},"type":"object","title":"MCPServerInfoSchema","description":"Pydantic schema for MCP server info returned during initialization."},"MCPServerIconSchema":{"properties":{"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"},"mimeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mimetype"},"sizes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sizes"}},"type":"object","title":"MCPServerIconSchema","description":"Pydantic schema for an MCP server icon."},"MCPServerCatalogEntrySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"MCPServerCatalogEntrySchema","description":"Basic MCP catalog entry info embedded in MCP server responses."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"MCPServerVersionSchema":{"properties":{"installed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed"},"available":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available"},"new_version_available":{"type":"boolean","title":"New Version Available","default":false},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"}},"type":"object","title":"MCPServerVersionSchema","description":"Pydantic schema for an MCP server's version / update availability.\n\n``installed`` is the version reported at the last successful verification;\n``available`` is the newest version seen upstream by the most recent version\ncheck. ``new_version_available`` is derived from the two by Semantic\nVersioning precedence, so it is never stale relative to them, and it stays\nfalse for a rollback or for versions that cannot be ordered."}}}}
```

## The MCPServerSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerSuggestion":{"properties":{"mcp_server_id":{"type":"integer","title":"Mcp Server Id"},"name":{"type":"string","title":"Name","default":""},"enabled_tools":{"items":{"type":"string"},"type":"array","title":"Enabled Tools"}},"type":"object","required":["mcp_server_id","enabled_tools"],"title":"MCPServerSuggestion","description":"Suggested MCP server link with tools to enable."}}}}
```

## The MCPServerVersionSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MCPServerVersionSchema":{"properties":{"installed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed"},"available":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available"},"new_version_available":{"type":"boolean","title":"New Version Available","default":false},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"}},"type":"object","title":"MCPServerVersionSchema","description":"Pydantic schema for an MCP server's version / update availability.\n\n``installed`` is the version reported at the last successful verification;\n``available`` is the newest version seen upstream by the most recent version\ncheck. ``new_version_available`` is derived from the two by Semantic\nVersioning precedence, so it is never stale relative to them, and it stays\nfalse for a rollback or for versions that cannot be ordered."}}}}
```

## The ManualFollowup object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ManualFollowup":{"properties":{"mcp_servers_needing_credentials":{"items":{"$ref":"#/components/schemas/MCPServerNeedingCredentials"},"type":"array","title":"Mcp Servers Needing Credentials"},"dropped_triggers":{"items":{"$ref":"#/components/schemas/DroppedTrigger"},"type":"array","title":"Dropped Triggers"},"default_model_not_carried":{"type":"boolean","title":"Default Model Not Carried","description":"True when the source organisation had a default model that could not be carried. A default pointing at a provider created without credentials would be unverified, a state the application itself rejects — leaving the organisation unable to save its own settings. Set the default by hand once the provider is verified.","default":false},"default_embedding_model_not_carried":{"type":"boolean","title":"Default Embedding Model Not Carried","description":"True when the source organisation had a default embedding model that could not be carried, for the same reason. This one must be set before the knowledge base is applied, or documents publish with no chunks and are skipped by later re-embedding.","default":false},"not_yet_supported":{"items":{"$ref":"#/components/schemas/NotYetSupported"},"type":"array","title":"Not Yet Supported"}},"additionalProperties":false,"type":"object","title":"ManualFollowup","description":"The operator's worklist: everything the import cannot finish by itself.\n\nEchoed back by the import endpoint so the worklist is available without\nre-reading the file."},"MCPServerNeedingCredentials":{"properties":{"identifier":{"type":"string","minLength":1,"title":"Identifier"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the source server was configured with."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account to this server.","default":false},"removed_config_fields":{"items":{"type":"string"},"type":"array","title":"Removed Config Fields","description":"Transport configuration removed from this server's spec because it can carry credentials — 'headers' and 'env' above all, whose values are where a bearer token or an API key actually lives. The server is created with the rest of its configuration and will not work until these are restored by hand."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"MCPServerNeedingCredentials","description":"An MCP server that will not work until an admin re-enters its secret."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"},"DroppedTrigger":{"properties":{"agent_identifier":{"type":"string","minLength":1,"title":"Agent Identifier"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"}},"additionalProperties":false,"type":"object","required":["agent_identifier","definition_id"],"title":"DroppedTrigger","description":"A trigger that was deliberately not carried across.\n\nOnly the manual run-now trigger is exported, because every agent needs one\nto be runnable. Scheduled triggers would start firing in the target the\nmoment the organisation goes live, and webhook triggers carry a secret\ntoken — so both are recorded here and re-created by hand if still wanted."},"NotYetSupported":{"properties":{"agent_identifier":{"type":"string","minLength":1,"title":"Agent Identifier"},"feature":{"type":"string","minLength":1,"title":"Feature","description":"Name of the unsupported feature, e.g. 'evaluation_config'."},"detail":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detail","description":"Best-effort copy of the source configuration, for reference."}},"additionalProperties":false,"type":"object","required":["agent_identifier","feature"],"title":"NotYetSupported","description":"Configuration the DSL has no representation for yet.\n\nRecorded rather than dropped silently, so the operator knows what did not\ncome across. When the DSL catches up, the same file becomes valid input for\nit — that is what ``schema_version`` is for."}}}}
```

## The ManualTriggerConfig object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ManualTriggerConfig":{"properties":{},"additionalProperties":false,"type":"object","title":"ManualTriggerConfig","description":"Config for the manual (Run now) trigger definition. Has no fields."}}}}
```

## The MarkAllNotificationsReadPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MarkAllNotificationsReadPayloadSchema":{"properties":{"before_id":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Before Id","description":"Id of the last notification the client rendered; it and everything older is marked read. Omit to clear all notifications."}},"type":"object","title":"MarkAllNotificationsReadPayloadSchema","description":"Payload bounding a bulk mark-as-read to what the client has rendered."}}}}
```

## The MarkAllNotificationsReadResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MarkAllNotificationsReadResponseSchema":{"properties":{"updated_count":{"type":"integer","title":"Updated Count"}},"type":"object","required":["updated_count"],"title":"MarkAllNotificationsReadResponseSchema","description":"Response schema for the bulk mark-as-read command."}}}}
```

## The MarkdownBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MarkdownBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"markdown","title":"Type"},"content":{"type":"string","minLength":1,"title":"Content"}},"type":"object","required":["type","content"],"title":"MarkdownBlock"}}}}
```

## The Message object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Message":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Message"}}}}
```

## The MessageFilter object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MessageFilter":{"properties":{"match":{"type":"string","enum":["all","any"],"title":"Match","default":"all"},"rules":{"items":{"$ref":"#/components/schemas/MessageFilterRule"},"type":"array","title":"Rules"}},"additionalProperties":false,"type":"object","required":["rules"],"title":"MessageFilter","description":"Payload filter for a webhook trigger.\n\nA payload that doesn't match is accepted but skipped — no execution is created and\nthe delivery is recorded as FILTERED."},"MessageFilterRule":{"properties":{"field":{"type":"string","title":"Field"},"operator":{"type":"string","enum":["equals","not_equals","in","contains","regex","exists"],"title":"Operator"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Value"}},"additionalProperties":false,"type":"object","required":["field","operator"],"title":"MessageFilterRule","description":"A single field/operator rule inside a webhook message filter.\n\n`value` is typed as a scalar union to satisfy OpenAI structured-output requirements\n(which reject untyped schemas). Nested-object values are not supported here but are\nnot meaningful for LLM-generated filters anyway."}}}}
```

## The MessageFilterRule object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MessageFilterRule":{"properties":{"field":{"type":"string","title":"Field"},"operator":{"type":"string","enum":["equals","not_equals","in","contains","regex","exists"],"title":"Operator"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Value"}},"additionalProperties":false,"type":"object","required":["field","operator"],"title":"MessageFilterRule","description":"A single field/operator rule inside a webhook message filter.\n\n`value` is typed as a scalar union to satisfy OpenAI structured-output requirements\n(which reject untyped schemas). Nested-object values are not supported here but are\nnot meaningful for LLM-generated filters anyway."}}}}
```

## The MessageListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MessageListResponseSchema":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/app__api__routes__message__message__MessageResponseSchema"},"type":"array","title":"Messages"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["messages","next_cursor","has_more"],"title":"MessageListResponseSchema","description":"Pydantic schema for paginated message list response."},"app__api__routes__message__message__MessageResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"conversation_id":{"type":"integer","title":"Conversation Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"tool_status":{"anyOf":[{"$ref":"#/components/schemas/ToolCallStatus"},{"type":"null"}],"description":"How a tool call ended. Null on every message that is not a tool result, and on tool results from runs that predate the outcome being recorded — null never means the call succeeded"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","conversation_id","role","content","action","tool_name","created_at"],"title":"MessageResponseSchema","description":"Pydantic schema for message response."},"ToolCallStatus":{"type":"string","enum":["success","error"],"title":"ToolCallStatus","description":"How a tool call ended, as the model was told.\n\nA failing tool does not end the run: tool errors are turned into ordinary\ntool messages carrying this status, so the agent can read the failure and\ncarry on. That makes this the only record of which calls actually worked —\nabsence of the status means unknown, never success."}}}}
```

## The MetricBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MetricBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"metric","title":"Type"},"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"},"unit":{"type":"string","title":"Unit","default":""},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["type","name","value"],"title":"MetricBlock"}}}}
```

## The MetricProviderListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MetricProviderListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetricProviderResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","count","total_count"],"title":"MetricProviderListResponseSchema","description":"Pydantic schema for metric provider list response."},"MetricProviderResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/MetricProviderType"},"owner_organisation_id":{"type":"integer","title":"Owner Organisation Id"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["id","name","identifier","type","owner_organisation_id","config"],"title":"MetricProviderResponseSchema","description":"Pydantic schema for metric provider detail/list response."},"MetricProviderType":{"type":"string","enum":["rule_based","user_feedback","deepeval","geval","ragas"],"title":"MetricProviderType","description":"Supported metric provider implementation strategies.\n\nIdentifies *which backend\ncomputes the score* (rule-based SQL aggregation, a GEval judge call,\nthe deepeval library, ...), not the specific metric being measured — a\nsingle provider type's handler can expose several metrics (see\n`EvaluationMetric`/`EvaluationMetricSet`, returned by\n`MetricProviderHandler.get_available_metrics`).\n\nOnly RULE_BASED and GEVAL have registered handlers (see\n`api/deps.py::get_metric_provider_handlers`) — the rest are reserved for\nthe implementation strategies identified in the quality-monitoring spec so\n`MetricProvider` entities of these types can already be created/configured;\nevaluating them raises `UnsupportedFeatureError` until their handlers are\nimplemented."}}}}
```

## The MetricProviderResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MetricProviderResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/MetricProviderType"},"owner_organisation_id":{"type":"integer","title":"Owner Organisation Id"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["id","name","identifier","type","owner_organisation_id","config"],"title":"MetricProviderResponseSchema","description":"Pydantic schema for metric provider detail/list response."},"MetricProviderType":{"type":"string","enum":["rule_based","user_feedback","deepeval","geval","ragas"],"title":"MetricProviderType","description":"Supported metric provider implementation strategies.\n\nIdentifies *which backend\ncomputes the score* (rule-based SQL aggregation, a GEval judge call,\nthe deepeval library, ...), not the specific metric being measured — a\nsingle provider type's handler can expose several metrics (see\n`EvaluationMetric`/`EvaluationMetricSet`, returned by\n`MetricProviderHandler.get_available_metrics`).\n\nOnly RULE_BASED and GEVAL have registered handlers (see\n`api/deps.py::get_metric_provider_handlers`) — the rest are reserved for\nthe implementation strategies identified in the quality-monitoring spec so\n`MetricProvider` entities of these types can already be created/configured;\nevaluating them raises `UnsupportedFeatureError` until their handlers are\nimplemented."}}}}
```

## The MetricProviderType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MetricProviderType":{"type":"string","enum":["rule_based","user_feedback","deepeval","geval","ragas"],"title":"MetricProviderType","description":"Supported metric provider implementation strategies.\n\nIdentifies *which backend\ncomputes the score* (rule-based SQL aggregation, a GEval judge call,\nthe deepeval library, ...), not the specific metric being measured — a\nsingle provider type's handler can expose several metrics (see\n`EvaluationMetric`/`EvaluationMetricSet`, returned by\n`MetricProviderHandler.get_available_metrics`).\n\nOnly RULE_BASED and GEVAL have registered handlers (see\n`api/deps.py::get_metric_provider_handlers`) — the rest are reserved for\nthe implementation strategies identified in the quality-monitoring spec so\n`MetricProvider` entities of these types can already be created/configured;\nevaluating them raises `UnsupportedFeatureError` until their handlers are\nimplemented."}}}}
```

## The MetricProviderTypeListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MetricProviderTypeListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetricProviderTypeSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"MetricProviderTypeListResponseSchema"},"MetricProviderTypeSchema":{"properties":{"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema"},"available_metrics":{"items":{"$ref":"#/components/schemas/EvaluationMetricSchema"},"type":"array","title":"Available Metrics"}},"type":"object","required":["identifier","name","description","config_schema","available_metrics"],"title":"MetricProviderTypeSchema"},"EvaluationMetricSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Whether a higher value passes this metric's threshold (true), or a lower one does (false, e.g. latency). Check this and `unit` before choosing an eval_config threshold for this metric_id."}},"type":"object","required":["id","name","description","unit","is_maximized"],"title":"EvaluationMetricSchema"}}}}
```

## The MetricProviderTypeSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MetricProviderTypeSchema":{"properties":{"identifier":{"type":"string","title":"Identifier"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema"},"available_metrics":{"items":{"$ref":"#/components/schemas/EvaluationMetricSchema"},"type":"array","title":"Available Metrics"}},"type":"object","required":["identifier","name","description","config_schema","available_metrics"],"title":"MetricProviderTypeSchema"},"EvaluationMetricSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Whether a higher value passes this metric's threshold (true), or a lower one does (false, e.g. latency). Check this and `unit` before choosing an eval_config threshold for this metric_id."}},"type":"object","required":["id","name","description","unit","is_maximized"],"title":"EvaluationMetricSchema"}}}}
```

## The ModelModality object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelModality":{"type":"string","enum":["text","image","audio","video"],"title":"ModelModality"}}}}
```

## The ModelProfilePricingSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelProfilePricingSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"}},"type":"object","required":["currency","created_at","text_input","text_output","cache_read","cache_write","audio_input","audio_output","image_input","image_output"],"title":"ModelProfilePricingSchema","description":"Current pricing snapshot for a model."}}}}
```

## The ModelReference object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelReference":{"properties":{"provider_identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Provider Identifier","description":"Identifier of the language model provider as stored in the DB."},"model_name":{"type":"string","maxLength":255,"minLength":1,"title":"Model Name","description":"Model name as used by the provider (e.g. 'gpt-4o', 'claude-sonnet-4-5')."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this model from inline agents. Defaults to 'provider_identifier/model_name' if omitted."}},"additionalProperties":false,"type":"object","required":["provider_identifier","model_name"],"title":"ModelReference"}}}}
```

## The ModelResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelResponseSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created"},"model_type":{"$ref":"#/components/schemas/ModelType"},"status":{"$ref":"#/components/schemas/ModelStatus","default":"enabled"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"weights":{"anyOf":[{"$ref":"#/components/schemas/ModelWeights"},{"type":"null"}]},"tool_call":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tool Call"},"reasoning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reasoning"},"structured_output":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Structured Output"},"temperature":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Temperature"},"input_type":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array"},{"type":"null"}],"title":"Input Type"},"output_type":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array"},{"type":"null"}],"title":"Output Type"},"context_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Limit"},"input_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Limit"},"output_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Limit"},"knowledge":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Knowledge"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"summary":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Summary"},"docs_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Url"},"pricing":{"anyOf":[{"$ref":"#/components/schemas/ModelProfilePricingSchema"},{"type":"null"}]}},"type":"object","required":["id","name","created","model_type"],"title":"ModelResponseSchema","description":"Provider model merged with its model profile data where available."},"ModelType":{"type":"string","enum":["chat","embedding"],"title":"ModelType"},"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"},"ModelWeights":{"type":"string","enum":["opened","closed"],"title":"ModelWeights"},"ModelModality":{"type":"string","enum":["text","image","audio","video"],"title":"ModelModality"},"ModelProfilePricingSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"}},"type":"object","required":["currency","created_at","text_input","text_output","cache_read","cache_write","audio_input","audio_output","image_input","image_output"],"title":"ModelProfilePricingSchema","description":"Current pricing snapshot for a model."}}}}
```

## The ModelSetResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelSetResponseSchema":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ModelResponseSchema"},"type":"array","title":"Models"}},"type":"object","required":["models"],"title":"ModelSetResponseSchema","description":"Pydantic schema for a set of language models."},"ModelResponseSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created"},"model_type":{"$ref":"#/components/schemas/ModelType"},"status":{"$ref":"#/components/schemas/ModelStatus","default":"enabled"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"weights":{"anyOf":[{"$ref":"#/components/schemas/ModelWeights"},{"type":"null"}]},"tool_call":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tool Call"},"reasoning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reasoning"},"structured_output":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Structured Output"},"temperature":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Temperature"},"input_type":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array"},{"type":"null"}],"title":"Input Type"},"output_type":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelModality"},"type":"array"},{"type":"null"}],"title":"Output Type"},"context_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Limit"},"input_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Input Limit"},"output_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Output Limit"},"knowledge":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Knowledge"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"summary":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Summary"},"docs_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Url"},"pricing":{"anyOf":[{"$ref":"#/components/schemas/ModelProfilePricingSchema"},{"type":"null"}]}},"type":"object","required":["id","name","created","model_type"],"title":"ModelResponseSchema","description":"Provider model merged with its model profile data where available."},"ModelType":{"type":"string","enum":["chat","embedding"],"title":"ModelType"},"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"},"ModelWeights":{"type":"string","enum":["opened","closed"],"title":"ModelWeights"},"ModelModality":{"type":"string","enum":["text","image","audio","video"],"title":"ModelModality"},"ModelProfilePricingSchema":{"properties":{"currency":{"type":"string","title":"Currency"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"text_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Input"},"text_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Text Output"},"cache_read":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Read"},"cache_write":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cache Write"},"audio_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Input"},"audio_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Audio Output"},"image_input":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Input"},"image_output":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Image Output"}},"type":"object","required":["currency","created_at","text_input","text_output","cache_read","cache_write","audio_input","audio_output","image_input","image_output"],"title":"ModelProfilePricingSchema","description":"Current pricing snapshot for a model."}}}}
```

## The ModelStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"}}}}
```

## The ModelStatusUpdateSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelStatusUpdateSchema":{"properties":{"model_id":{"type":"string","title":"Model Id"},"status":{"$ref":"#/components/schemas/ModelStatus"}},"type":"object","required":["model_id","status"],"title":"ModelStatusUpdateSchema","description":"Pydantic schema for a single model's status within a bulk update."},"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"}}}}
```

## The ModelType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelType":{"type":"string","enum":["chat","embedding"],"title":"ModelType"}}}}
```

## The ModelUsageItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelUsageItemResponseSchema":{"properties":{"model":{"type":"string","title":"Model","description":"Display name of the model, e.g. 'GPT-4o'"},"agents_using_model":{"type":"integer","title":"Agents Using Model","description":"Number of atomic agents in the organisation configured with this model"},"agents_with_executions":{"type":"integer","title":"Agents With Executions","description":"Of those agents, how many have run at least one execution"},"agent_categories":{"items":{"type":"string"},"type":"array","title":"Agent Categories","description":"Deduped display names of catalog categories among agents using this model"}},"type":"object","required":["model","agents_using_model","agents_with_executions","agent_categories"],"title":"ModelUsageItemResponseSchema","description":"One row of the organisation's model-usage report."}}}}
```

## The ModelUsageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelUsageResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ModelUsageItemResponseSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ModelUsageResponseSchema","description":"Organisation-wide model-usage report response."},"ModelUsageItemResponseSchema":{"properties":{"model":{"type":"string","title":"Model","description":"Display name of the model, e.g. 'GPT-4o'"},"agents_using_model":{"type":"integer","title":"Agents Using Model","description":"Number of atomic agents in the organisation configured with this model"},"agents_with_executions":{"type":"integer","title":"Agents With Executions","description":"Of those agents, how many have run at least one execution"},"agent_categories":{"items":{"type":"string"},"type":"array","title":"Agent Categories","description":"Deduped display names of catalog categories among agents using this model"}},"type":"object","required":["model","agents_using_model","agents_with_executions","agent_categories"],"title":"ModelUsageItemResponseSchema","description":"One row of the organisation's model-usage report."}}}}
```

## The ModelWeights object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ModelWeights":{"type":"string","enum":["opened","closed"],"title":"ModelWeights"}}}}
```

## The MoveNodePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"MoveNodePayloadSchema":{"properties":{"new_parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"New Parent Id"}},"type":"object","title":"MoveNodePayloadSchema","description":"Request schema for reparenting a node (null parent ⇒ move to root)."}}}}
```

## The NextScheduledExecutionSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NextScheduledExecutionSchema":{"properties":{"next_execution_at":{"type":"string","format":"date-time","title":"Next Execution At"},"trigger":{"$ref":"#/components/schemas/TriggerInfoSchema"}},"type":"object","required":["next_execution_at","trigger"],"title":"NextScheduledExecutionSchema","description":"The earliest upcoming scheduled execution for an agent."},"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."}}}}
```

## The NodeType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NodeType":{"type":"string","enum":["folder","document"],"title":"NodeType","description":"The node-type discriminator — the single extension point for new types.\n\nOnly the local types exist today (`folder`, `document`); the CTI design\nkeeps adding types additive."}}}}
```

## The NotYetSupported object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotYetSupported":{"properties":{"agent_identifier":{"type":"string","minLength":1,"title":"Agent Identifier"},"feature":{"type":"string","minLength":1,"title":"Feature","description":"Name of the unsupported feature, e.g. 'evaluation_config'."},"detail":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detail","description":"Best-effort copy of the source configuration, for reference."}},"additionalProperties":false,"type":"object","required":["agent_identifier","feature"],"title":"NotYetSupported","description":"Configuration the DSL has no representation for yet.\n\nRecorded rather than dropped silently, so the operator knows what did not\ncome across. When the DSL catches up, the same file becomes valid input for\nit — that is what ``schema_version`` is for."}}}}
```

## The NotificationChannel object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."}}}}
```

## The NotificationListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationListResponseSchema":{"properties":{"notifications":{"items":{"$ref":"#/components/schemas/NotificationResponseSchema"},"type":"array","title":"Notifications"},"next_before_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Before Id","description":"Pass as `before_id` to fetch the next page; null on the last page"}},"type":"object","required":["notifications","next_before_id"],"title":"NotificationListResponseSchema","description":"Response schema for one keyset page of notifications, newest first."},"NotificationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"type":{"$ref":"#/components/schemas/NotificationType"},"priority":{"$ref":"#/components/schemas/NotificationPriority"},"sender":{"$ref":"#/components/schemas/NotificationSenderSchema"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"body":{"type":"string","title":"Body","description":"Rendered markdown body"},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"Type-specific data for the client (deep links, template variables)"},"group_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Key"},"resolved_action_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Action Id"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","type","priority","sender","subject","body","payload","group_key","resolved_action_id","read_at","created_at"],"title":"NotificationResponseSchema","description":"Response schema for a single notification as its recipient sees it."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."},"NotificationPriority":{"type":"string","enum":["CRITICAL","HIGH","MEDIUM","LOW"],"title":"NotificationPriority","description":"How urgent a notification is, and the queue its deliveries dispatch on."},"NotificationSenderSchema":{"properties":{"type":{"$ref":"#/components/schemas/SenderType"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["type","id","name"],"title":"NotificationSenderSchema","description":"Sender info embedded in a notification response."},"SenderType":{"type":"string","enum":["SYSTEM","AGENT","USER"],"title":"SenderType","description":"What produced the notification."}}}}
```

## The NotificationPreferenceListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationPreferenceListResponseSchema":{"properties":{"preferences":{"items":{"$ref":"#/components/schemas/NotificationPreferenceResponseSchema"},"type":"array","title":"Preferences"}},"type":"object","required":["preferences"],"title":"NotificationPreferenceListResponseSchema","description":"Response schema for the caller's effective preferences, one entry per type."},"NotificationPreferenceResponseSchema":{"properties":{"notification_type":{"$ref":"#/components/schemas/NotificationType"},"channels":{"items":{"$ref":"#/components/schemas/NotificationChannel"},"type":"array","title":"Channels","description":"Channels the type currently reaches the caller on"},"user_configurable":{"type":"boolean","title":"User Configurable","description":"Whether preferences apply at all; a type that is not configurable always reports its default channels and rejects a preference"}},"type":"object","required":["notification_type","channels","user_configurable"],"title":"NotificationPreferenceResponseSchema","description":"Response schema for what one notification type actually resolves to."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."},"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."}}}}
```

## The NotificationPreferenceResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationPreferenceResponseSchema":{"properties":{"notification_type":{"$ref":"#/components/schemas/NotificationType"},"channels":{"items":{"$ref":"#/components/schemas/NotificationChannel"},"type":"array","title":"Channels","description":"Channels the type currently reaches the caller on"},"user_configurable":{"type":"boolean","title":"User Configurable","description":"Whether preferences apply at all; a type that is not configurable always reports its default channels and rejects a preference"}},"type":"object","required":["notification_type","channels","user_configurable"],"title":"NotificationPreferenceResponseSchema","description":"Response schema for what one notification type actually resolves to."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."},"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."}}}}
```

## The NotificationPriority object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationPriority":{"type":"string","enum":["CRITICAL","HIGH","MEDIUM","LOW"],"title":"NotificationPriority","description":"How urgent a notification is, and the queue its deliveries dispatch on."}}}}
```

## The NotificationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"type":{"$ref":"#/components/schemas/NotificationType"},"priority":{"$ref":"#/components/schemas/NotificationPriority"},"sender":{"$ref":"#/components/schemas/NotificationSenderSchema"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"body":{"type":"string","title":"Body","description":"Rendered markdown body"},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"Type-specific data for the client (deep links, template variables)"},"group_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Key"},"resolved_action_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Action Id"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","type","priority","sender","subject","body","payload","group_key","resolved_action_id","read_at","created_at"],"title":"NotificationResponseSchema","description":"Response schema for a single notification as its recipient sees it."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."},"NotificationPriority":{"type":"string","enum":["CRITICAL","HIGH","MEDIUM","LOW"],"title":"NotificationPriority","description":"How urgent a notification is, and the queue its deliveries dispatch on."},"NotificationSenderSchema":{"properties":{"type":{"$ref":"#/components/schemas/SenderType"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["type","id","name"],"title":"NotificationSenderSchema","description":"Sender info embedded in a notification response."},"SenderType":{"type":"string","enum":["SYSTEM","AGENT","USER"],"title":"SenderType","description":"What produced the notification."}}}}
```

## The NotificationSenderSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationSenderSchema":{"properties":{"type":{"$ref":"#/components/schemas/SenderType"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["type","id","name"],"title":"NotificationSenderSchema","description":"Sender info embedded in a notification response."},"SenderType":{"type":"string","enum":["SYSTEM","AGENT","USER"],"title":"SenderType","description":"What produced the notification."}}}}
```

## The NotificationType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."}}}}
```

## The NotificationTypeActionSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationTypeActionSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Value to send back as the resolving action"},"label":{"type":"string","title":"Label"}},"type":"object","required":["id","label"],"title":"NotificationTypeActionSchema","description":"Response schema for one action a notification type offers its recipient."}}}}
```

## The NotificationTypeListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationTypeListItemResponseSchema":{"properties":{"type":{"$ref":"#/components/schemas/NotificationType"},"default_priority":{"$ref":"#/components/schemas/NotificationPriority","description":"Priority a notification of this type is created with"},"default_channels":{"items":{"$ref":"#/components/schemas/NotificationChannel"},"type":"array","title":"Default Channels","description":"Channels the type reaches a recipient on before their preferences are applied; what it currently resolves to for the caller is `GET /notifications/preferences/`"},"actions":{"items":{"$ref":"#/components/schemas/NotificationTypeActionSchema"},"type":"array","title":"Actions","description":"Actions a recipient can resolve this type's notifications with"},"user_configurable":{"type":"boolean","title":"User Configurable","description":"Whether preferences apply at all; a type that is not configurable always delivers on its default channels and rejects a preference"}},"type":"object","required":["type","default_priority","default_channels","actions","user_configurable"],"title":"NotificationTypeListItemResponseSchema","description":"Response schema for one notification type the platform can send."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."},"NotificationPriority":{"type":"string","enum":["CRITICAL","HIGH","MEDIUM","LOW"],"title":"NotificationPriority","description":"How urgent a notification is, and the queue its deliveries dispatch on."},"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."},"NotificationTypeActionSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Value to send back as the resolving action"},"label":{"type":"string","title":"Label"}},"type":"object","required":["id","label"],"title":"NotificationTypeActionSchema","description":"Response schema for one action a notification type offers its recipient."}}}}
```

## The NotificationTypeListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"NotificationTypeListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NotificationTypeListItemResponseSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"NotificationTypeListResponseSchema","description":"Response schema for the catalog of notification types."},"NotificationTypeListItemResponseSchema":{"properties":{"type":{"$ref":"#/components/schemas/NotificationType"},"default_priority":{"$ref":"#/components/schemas/NotificationPriority","description":"Priority a notification of this type is created with"},"default_channels":{"items":{"$ref":"#/components/schemas/NotificationChannel"},"type":"array","title":"Default Channels","description":"Channels the type reaches a recipient on before their preferences are applied; what it currently resolves to for the caller is `GET /notifications/preferences/`"},"actions":{"items":{"$ref":"#/components/schemas/NotificationTypeActionSchema"},"type":"array","title":"Actions","description":"Actions a recipient can resolve this type's notifications with"},"user_configurable":{"type":"boolean","title":"User Configurable","description":"Whether preferences apply at all; a type that is not configurable always delivers on its default channels and rejects a preference"}},"type":"object","required":["type","default_priority","default_channels","actions","user_configurable"],"title":"NotificationTypeListItemResponseSchema","description":"Response schema for one notification type the platform can send."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."},"NotificationPriority":{"type":"string","enum":["CRITICAL","HIGH","MEDIUM","LOW"],"title":"NotificationPriority","description":"How urgent a notification is, and the queue its deliveries dispatch on."},"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."},"NotificationTypeActionSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Value to send back as the resolving action"},"label":{"type":"string","title":"Label"}},"type":"object","required":["id","label"],"title":"NotificationTypeActionSchema","description":"Response schema for one action a notification type offers its recipient."}}}}
```

## The OrgCostForecastResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgCostForecastResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CostForecastDaySchema"},"type":"array","title":"Items"},"credits":{"items":{"$ref":"#/components/schemas/CreditForecastDaySchema"},"type":"array","title":"Credits"}},"type":"object","required":["items","credits"],"title":"OrgCostForecastResponseSchema","description":"Actual daily cost and credits plus end-of-month projection for an organisation."},"CostForecastDaySchema":{"properties":{"date":{"type":"string","title":"Date","description":"Calendar date in YYYY-MM-DD format"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"},"is_projection":{"type":"boolean","title":"Is Projection","description":"True when this value is a projected estimate; False when it is a recorded actual"}},"type":"object","required":["date","cost_currency","is_projection"],"title":"CostForecastDaySchema","description":"Cost for a single calendar day — either actual or projected."},"CreditForecastDaySchema":{"properties":{"date":{"type":"string","title":"Date","description":"Calendar date in YYYY-MM-DD format"},"credits_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Amount"},"is_projection":{"type":"boolean","title":"Is Projection","description":"True when this value is a projected estimate; False when it is a recorded actual"}},"type":"object","required":["date","credits_amount","is_projection"],"title":"CreditForecastDaySchema","description":"Credits for a single calendar day — either actual or projected.\n\nCredits carry no currency, so unlike `CostForecastDaySchema` this is always\nexactly one entry per date."}}}}
```

## The OrgCreateUserPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgCreateUserPayloadSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"organisation_role":{"$ref":"#/components/schemas/OrganisationRole","default":"member"}},"type":"object","required":["email"],"title":"OrgCreateUserPayloadSchema","description":"Request payload for creating a user within an organisation."},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The OrgImpactMetricAggregateResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgImpactMetricAggregateResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OrgImpactMetricPeriodSchema"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"OrgImpactMetricAggregateResponseSchema","description":"Aggregated organisation-wide impact-metric response."},"OrgImpactMetricPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"metric_type":{"type":"string","title":"Metric Type"},"unit":{"type":"string","title":"Unit"},"value":{"type":"integer","title":"Value"},"execution_count":{"type":"integer","title":"Execution Count","description":"Number of successful runs contributing to value."}},"type":"object","required":["period","metric_type","unit","value","execution_count"],"title":"OrgImpactMetricPeriodSchema","description":"Aggregated impact-metric value for one metric type/unit in a single time period."}}}}
```

## The OrgImpactMetricPeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgImpactMetricPeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"metric_type":{"type":"string","title":"Metric Type"},"unit":{"type":"string","title":"Unit"},"value":{"type":"integer","title":"Value"},"execution_count":{"type":"integer","title":"Execution Count","description":"Number of successful runs contributing to value."}},"type":"object","required":["period","metric_type","unit","value","execution_count"],"title":"OrgImpactMetricPeriodSchema","description":"Aggregated impact-metric value for one metric type/unit in a single time period."}}}}
```

## The OrgUpdateUserPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgUpdateUserPayloadSchema":{"properties":{"organisation_role":{"$ref":"#/components/schemas/OrganisationRole"}},"type":"object","required":["organisation_role"],"title":"OrgUpdateUserPayloadSchema","description":"Request payload for updating a user's role within an organisation."},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The OrgUsageAggregateResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgUsageAggregateResponseSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OrgUsagePeriodSchema"},"type":"array","title":"Items"},"credits":{"items":{"$ref":"#/components/schemas/CreditExecutionUsagePeriodSchema"},"type":"array","title":"Credits"}},"type":"object","required":["items","credits"],"title":"OrgUsageAggregateResponseSchema","description":"Aggregated organisation-wide execution usage response."},"OrgUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"}},"type":"object","required":["period","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","cost_currency"],"title":"OrgUsagePeriodSchema","description":"Aggregated token and cost usage for a single time period across an organisation."},"CreditExecutionUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"},"execution_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Execution Credits Spent"},"conversation_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Conversation Credits Spent"}},"type":"object","required":["period","credits_spent","execution_credits_spent","conversation_credits_spent"],"title":"CreditExecutionUsagePeriodSchema","description":"Credits spent on AGENT_EXECUTION consumption for a single time period.\n\nCredits carry no currency, so unlike `AgentUsagePeriodSchema`/\n`OrgUsagePeriodSchema` (which may have multiple rows per period, one per\ncurrency) this is always at most one row per period.\n\n`execution_credits_spent` and `conversation_credits_spent` are independent\nsums (rows attributed to an execution, and rows attributed to a\nconversation, respectively) — not a mutually exclusive split of\n`credits_spent`. A triggered execution running inside a conversation counts\ntoward both, so the two do not in general add up to `credits_spent`."}}}}
```

## The OrgUsagePeriodSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgUsagePeriodSchema":{"properties":{"period":{"type":"string","title":"Period","description":"Period label (e.g. '2024-01-15', '2024-01', '2024')"},"tokens_input":{"type":"integer","title":"Tokens Input"},"tokens_output":{"type":"integer","title":"Tokens Output"},"tokens_cache_read":{"type":"integer","title":"Tokens Cache Read"},"tokens_cache_write":{"type":"integer","title":"Tokens Cache Write"},"tokens_audio_input":{"type":"integer","title":"Tokens Audio Input"},"tokens_audio_output":{"type":"integer","title":"Tokens Audio Output"},"cost_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Amount"},"cost_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Currency"}},"type":"object","required":["period","tokens_input","tokens_output","tokens_cache_read","tokens_cache_write","tokens_audio_input","tokens_audio_output","cost_currency"],"title":"OrgUsagePeriodSchema","description":"Aggregated token and cost usage for a single time period across an organisation."}}}}
```

## The OrgUserListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgUserListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OrgUserResponseSchema"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"OrgUserListResponseSchema","description":"Paginated list response schema for users (organisation admin/owner view)."},"OrgUserResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"organisation_role":{"$ref":"#/components/schemas/OrganisationRole"},"status":{"$ref":"#/components/schemas/UserStatus"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name","organisation_role","status","created_at","updated_at"],"title":"OrgUserResponseSchema","description":"Response schema for a user (organisation admin/owner view)."},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"}}}}
```

## The OrgUserResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgUserResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"organisation_role":{"$ref":"#/components/schemas/OrganisationRole"},"status":{"$ref":"#/components/schemas/UserStatus"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name","organisation_role","status","created_at","updated_at"],"title":"OrgUserResponseSchema","description":"Response schema for a user (organisation admin/owner view)."},"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"}}}}
```

## The OrgUserStatsResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrgUserStatsResponseSchema":{"properties":{"total_users":{"type":"integer","title":"Total Users","description":"Number of users in the organisation, excluding deleted ones"},"total_admin_users":{"type":"integer","title":"Total Admin Users","description":"Number of users with the admin role in the organisation"},"total_blocked_users":{"type":"integer","title":"Total Blocked Users","description":"Number of users with the BLOCKED status in the organisation"}},"type":"object","required":["total_users","total_admin_users","total_blocked_users"],"title":"OrgUserStatsResponseSchema","description":"Response schema for aggregated organisation user counts."}}}}
```

## The OrganisationResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrganisationResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"owner":{"$ref":"#/components/schemas/OwnerResponseSchema"},"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/OrganisationStatus"},"default_language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Language Model Provider Id"},"default_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Model Id"},"default_embedding_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Embedding Model Provider Id"},"default_embedding_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Embedding Model Id"},"default_assistant_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Assistant Agent Id"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Cacheable URL to the organisation's logo, or null if none is set"}},"type":"object","required":["id","owner","name","summary","status","default_language_model_provider_id","default_model_id","default_embedding_model_provider_id","default_embedding_model_id","default_assistant_agent_id"],"title":"OrganisationResponseSchema","description":"Pydantic schema for organisation response."},"OwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"OwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."},"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"}}}}
```

## The OrganisationRole object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrganisationRole":{"type":"string","enum":["admin","member"],"title":"OrganisationRole","description":"Role of a user within their organisation."}}}}
```

## The OrganisationStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OrganisationStatus":{"type":"string","enum":["INACTIVE","ACTIVE","BLOCKED"],"title":"OrganisationStatus","description":"Enum representing the status of an organisation.\n\nState machine with three operations:\n- activate: INACTIVE -> ACTIVE\n- block: ACTIVE -> BLOCKED\n- unblock: BLOCKED -> ACTIVE\n\nStatus flow: INACTIVE -> ACTIVE <-> BLOCKED\n\n- INACTIVE: Default state for newly created organisations\n- ACTIVE: Organisation is active and operational\n- BLOCKED: Organisation is blocked and cannot perform operations"}}}}
```

## The OwnCreditUsageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OwnCreditUsageResponseSchema":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"date_from":{"type":"string","format":"date","title":"Date From"},"date_to":{"type":"string","format":"date","title":"Date To"},"items":{"items":{"$ref":"#/components/schemas/CreditUsagePeriodSchema"},"type":"array","title":"Items","description":"One entry per day in the range, ascending. Days with no spend are present with zero amounts, so the series has no gaps."},"avg_daily_spend":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Avg Daily Spend","description":"Mean credits_spent per day across the range, zero days included."},"most_expensive_day":{"anyOf":[{"$ref":"#/components/schemas/CreditUsagePeriodSchema"},{"type":"null"}],"description":"The single highest-spend day in the range. Ties go to the earliest day. Null when every day in the range spent nothing — there is no peak to report, not a peak on day one."},"comparison":{"$ref":"#/components/schemas/CreditSpendComparisonResponseSchema","description":"Spend in this range against an equally long window immediately before it (preceding period; the previous window length matches the requested range)."},"top_agent":{"anyOf":[{"$ref":"#/components/schemas/CreditTopAgentSchema"},{"type":"null"}],"description":"The agent the caller spent the most credits on in this range. Null when nothing in the range is attributed to an agent."},"currency":{"$ref":"#/components/schemas/CreditCurrency"}},"type":"object","required":["user_id","date_from","date_to","items","avg_daily_spend","most_expensive_day","comparison","top_agent","currency"],"title":"OwnCreditUsageResponseSchema","description":"Response schema for the caller's own daily spend series, plus stats."},"CreditUsagePeriodSchema":{"properties":{"period":{"type":"string","format":"date","title":"Period","description":"First day of the bucket: the day itself for DAY, the Monday for WEEK, the 1st for MONTH."},"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent"},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["period","allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditUsagePeriodSchema","description":"Credits spent in one bucket of a usage time series."},"CreditSpendComparisonResponseSchema":{"properties":{"current":{"$ref":"#/components/schemas/CreditWindowSpendSchema"},"previous":{"$ref":"#/components/schemas/CreditWindowSpendSchema","description":"The earlier window, derived by the server from `compare_to` — not a range the caller supplies. It may be longer than `current`."},"compare_to":{"$ref":"#/components/schemas/SpendComparisonBasis","description":"The rule that produced `previous`, echoed back."},"change":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Change","description":"`current.credits_spent` minus `previous.credits_spent`. A difference of totals, not of daily rates: with `compare_to=PREVIOUS_MONTH` an in-progress month is compared against a complete one, so this is negative for most of the month. Normalise by each window's `days` before showing a trend."},"change_ratio":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Change Ratio","description":"`change` as a fraction of the previous window's total (0.2 is a 20% rise). Null when the previous window had no spend at all: growth from zero has no ratio — show `change` instead. Same totals-not-rates caveat as `change`."},"currency":{"$ref":"#/components/schemas/CreditCurrency"}},"type":"object","required":["current","previous","compare_to","change","change_ratio","currency"],"title":"CreditSpendComparisonResponseSchema","description":"Response schema for spend in a window against an earlier one."},"CreditWindowSpendSchema":{"properties":{"date_from":{"type":"string","format":"date","title":"Date From"},"date_to":{"type":"string","format":"date","title":"Date To"},"days":{"type":"integer","title":"Days","description":"Days the window covers, both ends included. The two windows of a comparison are not necessarily the same length, so divide by this before reading either total as a rate."},"allowance_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Allowance Credits Spent"},"purchased_credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchased Credits Spent"},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["date_from","date_to","days","allowance_credits_spent","purchased_credits_spent","credits_spent"],"title":"CreditWindowSpendSchema","description":"Spend over one date window, with the window it covers."},"SpendComparisonBasis":{"type":"string","enum":["PREVIOUS_MONTH","PRECEDING_PERIOD"],"title":"SpendComparisonBasis","description":"What a spend comparison's previous window is.\n\nAn explicit choice rather than a rule inferred from the shape of the requested\nrange: \"the range starts on the 1st, so they must mean the previous month\"\nwould silently change basis when a caller shifted a rolling window by a day.\n\nThe window arithmetic lives on the enum so the two rules are stated in one\nplace, next to each other, where they can be compared."},"CreditCurrency":{"type":"string","enum":["credits"],"title":"CreditCurrency","description":"The unit a ledger amount is denominated in.\n\nAlways `CREDITS` for now — modelled as an enum (not a bare string) so\npricing and balance components import a typed member and the set of valid\ncurrency has a single source of truth.\n\nThe value is intentionally lowercase (`\"credits\"`): unlike the\nclassification enums it is the currency token persisted on every row, and\nlowercase is the form used across the schema and stored data."},"CreditTopAgentSchema":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name","description":"Null when the agent has since been deleted; the spend is still reported."},"credits_spent":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Credits Spent"}},"type":"object","required":["agent_id","agent_name","credits_spent"],"title":"CreditTopAgentSchema","description":"The agent the caller spent the most credits on, within a range."}}}}
```

## The OwnerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"OwnerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"OwnerResponseSchema","description":"Pydantic schema for basic owner info embedded in organisation responses."}}}}
```

## The ParallelNode-Input object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ParallelNode-Input":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Input":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ConditionalNode-Input":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Input":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The ParallelNode-Output object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ParallelNode-Output":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Output":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ConditionalNode-Output":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Output":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The PieChartBlock object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"PieChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"pie_chart","title":"Type"},"title":{"type":"string","title":"Title"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels"},"data":{"items":{"type":"number"},"type":"array","title":"Data"}},"type":"object","required":["type","title","labels","data"],"title":"PieChartBlock"}}}}
```

## The Pipeline-Input object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Pipeline-Input":{"properties":{"version":{"type":"string","title":"Version","description":"Schema version (e.g. '0.1')."},"initial_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Message","description":"Seed message injected as the first conversation turn before the pipeline starts."},"model_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelReference"},"type":"array","minItems":1},{"type":"null"}],"title":"Model References","description":"Language model references available in this pipeline. Each entry's alias can be referenced from inline agents."},"mcp_server_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerReference"},"type":"array"},{"type":"null"}],"title":"Mcp Server References","description":"MCP server references available in this pipeline. Each entry's alias can be referenced from inline agents."},"agent_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentReference"},"type":"array"},{"type":"null"}],"title":"Agent References","description":"Agent references available in this pipeline. Each entry can be used as a standalone AgentNode (via alias or identifier) or as a sub-agent inside inline agents (via alias in sub_agents)."},"inline_agents":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgent"},"type":"array"},{"type":"null"}],"title":"Inline Agents","description":"Inline agent definitions. Each agent's alias can be referenced from AgentNodes in the pipeline."},"pipeline":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Pipeline","description":"Root node of the execution graph.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["version","pipeline"],"title":"Pipeline"},"ModelReference":{"properties":{"provider_identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Provider Identifier","description":"Identifier of the language model provider as stored in the DB."},"model_name":{"type":"string","maxLength":255,"minLength":1,"title":"Model Name","description":"Model name as used by the provider (e.g. 'gpt-4o', 'claude-sonnet-4-5')."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this model from inline agents. Defaults to 'provider_identifier/model_name' if omitted."}},"additionalProperties":false,"type":"object","required":["provider_identifier","model_name"],"title":"ModelReference"},"MCPServerReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the MCP server."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this server from inline agents."},"enabled_tools":{"items":{"type":"string","minLength":1},"type":"array","minItems":1,"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server."}},"additionalProperties":false,"type":"object","required":["identifier","enabled_tools"],"title":"MCPServerReference"},"AgentReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the agent. The alias can be referenced from AgentNodes (as a standalone node) or from InlineAgent sub_agents (as a sub-agent)."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this agent from AgentNodes or InlineAgent sub_agents."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"AgentReference"},"InlineAgent":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Within-pipeline alias used to reference this agent from pipeline nodes."},"name":{"type":"string","minLength":1,"title":"Name","description":"Human-readable display name shown in logs and UI."},"instruction":{"type":"string","minLength":1,"title":"Instruction","description":"System prompt that defines the agent's role and behaviour."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Alias of a model from the top-level 'model_references' list. Uses the provider default if omitted."},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgentMCPServer"},"type":"array"},{"type":"null"}],"title":"Mcp Servers","description":"MCP servers to enable for this agent, resolved against 'mcp_server_references'."},"sub_agents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Agents","description":"Aliases of agents to enable as sub-agents, resolved against 'inline_agents' and 'agent_references'."}},"additionalProperties":false,"type":"object","required":["alias","name","instruction"],"title":"InlineAgent"},"InlineAgentMCPServer":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Alias of an MCP server from the top-level 'mcp_server_references' list."},"enabled_tools":{"anyOf":[{"items":{"type":"string","minLength":1},"type":"array","minItems":1},{"type":"null"}],"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server for this agent. Omit to allow all tools declared on the server reference."}},"additionalProperties":false,"type":"object","required":["alias"],"title":"InlineAgentMCPServer"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Input":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Input":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Input":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Input":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The Pipeline-Output object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"Pipeline-Output":{"properties":{"version":{"type":"string","title":"Version","description":"Schema version (e.g. '0.1')."},"initial_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Message","description":"Seed message injected as the first conversation turn before the pipeline starts."},"model_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/ModelReference"},"type":"array","minItems":1},{"type":"null"}],"title":"Model References","description":"Language model references available in this pipeline. Each entry's alias can be referenced from inline agents."},"mcp_server_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerReference"},"type":"array"},{"type":"null"}],"title":"Mcp Server References","description":"MCP server references available in this pipeline. Each entry's alias can be referenced from inline agents."},"agent_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentReference"},"type":"array"},{"type":"null"}],"title":"Agent References","description":"Agent references available in this pipeline. Each entry can be used as a standalone AgentNode (via alias or identifier) or as a sub-agent inside inline agents (via alias in sub_agents)."},"inline_agents":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgent"},"type":"array"},{"type":"null"}],"title":"Inline Agents","description":"Inline agent definitions. Each agent's alias can be referenced from AgentNodes in the pipeline."},"pipeline":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Pipeline","description":"Root node of the execution graph.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["version","pipeline"],"title":"Pipeline"},"ModelReference":{"properties":{"provider_identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Provider Identifier","description":"Identifier of the language model provider as stored in the DB."},"model_name":{"type":"string","maxLength":255,"minLength":1,"title":"Model Name","description":"Model name as used by the provider (e.g. 'gpt-4o', 'claude-sonnet-4-5')."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this model from inline agents. Defaults to 'provider_identifier/model_name' if omitted."}},"additionalProperties":false,"type":"object","required":["provider_identifier","model_name"],"title":"ModelReference"},"MCPServerReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the MCP server."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this server from inline agents."},"enabled_tools":{"items":{"type":"string","minLength":1},"type":"array","minItems":1,"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server."}},"additionalProperties":false,"type":"object","required":["identifier","enabled_tools"],"title":"MCPServerReference"},"AgentReference":{"properties":{"identifier":{"type":"string","maxLength":100,"minLength":1,"title":"Identifier","description":"Identifier of the agent. The alias can be referenced from AgentNodes (as a standalone node) or from InlineAgent sub_agents (as a sub-agent)."},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Within-pipeline alias used to reference this agent from AgentNodes or InlineAgent sub_agents."}},"additionalProperties":false,"type":"object","required":["identifier"],"title":"AgentReference"},"InlineAgent":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Within-pipeline alias used to reference this agent from pipeline nodes."},"name":{"type":"string","minLength":1,"title":"Name","description":"Human-readable display name shown in logs and UI."},"instruction":{"type":"string","minLength":1,"title":"Instruction","description":"System prompt that defines the agent's role and behaviour."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Alias of a model from the top-level 'model_references' list. Uses the provider default if omitted."},"mcp_servers":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineAgentMCPServer"},"type":"array"},{"type":"null"}],"title":"Mcp Servers","description":"MCP servers to enable for this agent, resolved against 'mcp_server_references'."},"sub_agents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Agents","description":"Aliases of agents to enable as sub-agents, resolved against 'inline_agents' and 'agent_references'."}},"additionalProperties":false,"type":"object","required":["alias","name","instruction"],"title":"InlineAgent"},"InlineAgentMCPServer":{"properties":{"alias":{"type":"string","minLength":1,"title":"Alias","description":"Alias of an MCP server from the top-level 'mcp_server_references' list."},"enabled_tools":{"anyOf":[{"items":{"type":"string","minLength":1},"type":"array","minItems":1},{"type":"null"}],"title":"Enabled Tools","description":"Allowlist of tool names to expose from this server for this agent. Omit to allow all tools declared on the server reference."}},"additionalProperties":false,"type":"object","required":["alias"],"title":"InlineAgentMCPServer"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"SequentialNode-Output":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"ParallelNode-Output":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Output":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Output":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The PreferredLocale object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"PreferredLocale":{"type":"string","enum":["en-US","es-ES","fr-FR","de-DE"],"title":"PreferredLocale","description":"Locales the product's UI is currently translated into."}}}}
```

## The ProviderMetricCountListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ProviderMetricCountListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ProviderMetricCountSchema"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ProviderMetricCountListResponseSchema","description":"Evaluation counts grouped by provider type response.\n\nA metric with no registered provider type (an ad-hoc/custom-rubric\nmetric) contributes to no group here."},"ProviderMetricCountSchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"The provider type's identifier, e.g. 'geval'."},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["identifier","name","count"],"title":"ProviderMetricCountSchema","description":"Total evaluation count for every metric a provider type computes."}}}}
```

## The ProviderMetricCountSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ProviderMetricCountSchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"The provider type's identifier, e.g. 'geval'."},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["identifier","name","count"],"title":"ProviderMetricCountSchema","description":"Total evaluation count for every metric a provider type computes."}}}}
```

## The RecommendationAlgorithm object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RecommendationAlgorithm":{"type":"string","enum":["random","llm","embedding_cosine","behavioral","popularity","user_based_cf","item_based_cf"],"title":"RecommendationAlgorithm","description":"Identifies which engine computed a recommendation run.\n\nRANDOM, LLM and POPULARITY have engine implementations today; the rest are\nreserved so the enum/DB type doesn't need another migration when those\nengines are added later."}}}}
```

## The RecommendationEventType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RecommendationEventType":{"type":"string","enum":["VIEWED","ADOPTED","DISMISSED"],"title":"RecommendationEventType","description":"User-engagement events recorded against a presented recommendation result.\n\nThere is no PRESENTED value here - a result row's own existence/created_at\nis the presentation event."}}}}
```

## The RecordAgentRecommendationEventPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RecordAgentRecommendationEventPayloadSchema":{"properties":{"event_type":{"$ref":"#/components/schemas/RecommendationEventType","description":"Which engagement event occurred against this result"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Engine/UI-specific context for this event"}},"type":"object","required":["event_type"],"title":"RecordAgentRecommendationEventPayloadSchema"},"RecommendationEventType":{"type":"string","enum":["VIEWED","ADOPTED","DISMISSED"],"title":"RecommendationEventType","description":"User-engagement events recorded against a presented recommendation result.\n\nThere is no PRESENTED value here - a result row's own existence/created_at\nis the presentation event."}}}}
```

## The RecursionLimitSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RecursionLimitSuggestion":{"properties":{"graph_recursion_limit":{"type":"integer","maximum":100,"minimum":10,"title":"Graph Recursion Limit","description":"Suggested value for the agent's graph_recursion_limit."},"confidence":{"type":"number","maximum":1,"minimum":0,"title":"Confidence","description":"How confident this estimate is (0.0-1.0), given how explicit the instruction is about tool-call counts/repetition."},"reasoning":{"type":"string","title":"Reasoning","description":"Brief, concrete explanation of the tool/sub-agent calls counted.","default":""}},"type":"object","required":["graph_recursion_limit","confidence"],"title":"RecursionLimitSuggestion","description":"Suggested LangGraph recursion limit (max steps in the tool-calling\nloop) for an atomic agent, with a brief explanation.\n\nLower bound (10) is a product floor, not AgentAtomic's own validator\n(app.domain.agent.entity: gt=0) — a suggestion below 10 isn't useful\neven for the simplest agent, though a user can still manually set a\nlower graph_recursion_limit afterward if they want to. Upper bound\nmirrors the platform cap, AGENT_GRAPH_RECURSION_LIMIT."}}}}
```

## The RefreshTokenRequestSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RefreshTokenRequestSchema":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token","description":"Opaque refresh token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequestSchema","description":"Request schema for refresh token endpoint."}}}}
```

## The ReportAgentSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ReportAgentSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["id","name","identifier","is_enabled"],"title":"ReportAgentSchema","description":"Basic agent info embedded in report list responses."}}}}
```

## The ReportListItemSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ReportListItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/ReportStatus"},"owner_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"owner":{"anyOf":[{"$ref":"#/components/schemas/ReportUserSchema"},{"type":"null"}]},"agent":{"anyOf":[{"$ref":"#/components/schemas/ReportAgentSchema"},{"type":"null"}]},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","organisation_id","title","summary","status","owner_id","agent_id","owner","agent","execution_id","created_at","updated_at"],"title":"ReportListItemSchema","description":"Response schema for a report in a list."},"ReportStatus":{"type":"string","enum":["DRAFT","IN_REVIEW","PUBLISHED"],"title":"ReportStatus","description":"Enum representing the status of a report.\n\nState machine with four operations:\n- submit_for_review: DRAFT -> IN_REVIEW\n- publish: IN_REVIEW -> PUBLISHED\n- unpublish: PUBLISHED -> IN_REVIEW\n- return_to_draft: IN_REVIEW -> DRAFT, or PUBLISHED -> DRAFT\n\nStatus flow: DRAFT <-> IN_REVIEW <-> PUBLISHED, with a direct\nPUBLISHED -> DRAFT shortcut via return_to_draft.\n\n- DRAFT: Report is being authored and not yet submitted for review\n- IN_REVIEW: Report is under review before publication\n- PUBLISHED: Report is published"},"ReportUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ReportUserSchema","description":"Basic user info embedded in report list responses."},"ReportAgentSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["id","name","identifier","is_enabled"],"title":"ReportAgentSchema","description":"Basic agent info embedded in report list responses."}}}}
```

## The ReportListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ReportListResponseSchema":{"properties":{"reports":{"items":{"$ref":"#/components/schemas/ReportListItemSchema"},"type":"array","title":"Reports"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["reports","total_count"],"title":"ReportListResponseSchema","description":"Response schema for the paginated report list endpoint."},"ReportListItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"status":{"$ref":"#/components/schemas/ReportStatus"},"owner_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"owner":{"anyOf":[{"$ref":"#/components/schemas/ReportUserSchema"},{"type":"null"}]},"agent":{"anyOf":[{"$ref":"#/components/schemas/ReportAgentSchema"},{"type":"null"}]},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","organisation_id","title","summary","status","owner_id","agent_id","owner","agent","execution_id","created_at","updated_at"],"title":"ReportListItemSchema","description":"Response schema for a report in a list."},"ReportStatus":{"type":"string","enum":["DRAFT","IN_REVIEW","PUBLISHED"],"title":"ReportStatus","description":"Enum representing the status of a report.\n\nState machine with four operations:\n- submit_for_review: DRAFT -> IN_REVIEW\n- publish: IN_REVIEW -> PUBLISHED\n- unpublish: PUBLISHED -> IN_REVIEW\n- return_to_draft: IN_REVIEW -> DRAFT, or PUBLISHED -> DRAFT\n\nStatus flow: DRAFT <-> IN_REVIEW <-> PUBLISHED, with a direct\nPUBLISHED -> DRAFT shortcut via return_to_draft.\n\n- DRAFT: Report is being authored and not yet submitted for review\n- IN_REVIEW: Report is under review before publication\n- PUBLISHED: Report is published"},"ReportUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ReportUserSchema","description":"Basic user info embedded in report list responses."},"ReportAgentSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["id","name","identifier","is_enabled"],"title":"ReportAgentSchema","description":"Basic agent info embedded in report list responses."}}}}
```

## The ReportResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ReportResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"blocks":{"items":{"oneOf":[{"$ref":"#/components/schemas/HeaderBlock"},{"$ref":"#/components/schemas/MarkdownBlock"},{"$ref":"#/components/schemas/DataTableBlock"},{"$ref":"#/components/schemas/MetricBlock"},{"$ref":"#/components/schemas/BarChartBlock"},{"$ref":"#/components/schemas/PieChartBlock"},{"$ref":"#/components/schemas/LineChartBlock"},{"$ref":"#/components/schemas/ActionItemsBlock"},{"$ref":"#/components/schemas/ColumnsBlock"},{"$ref":"#/components/schemas/ImageBlock"}],"discriminator":{"propertyName":"type","mapping":{"action_items":"#/components/schemas/ActionItemsBlock","bar_chart":"#/components/schemas/BarChartBlock","columns":"#/components/schemas/ColumnsBlock","data_table":"#/components/schemas/DataTableBlock","header":"#/components/schemas/HeaderBlock","image":"#/components/schemas/ImageBlock","line_chart":"#/components/schemas/LineChartBlock","markdown":"#/components/schemas/MarkdownBlock","metric":"#/components/schemas/MetricBlock","pie_chart":"#/components/schemas/PieChartBlock"}}},"type":"array","title":"Blocks"},"status":{"$ref":"#/components/schemas/ReportStatus"},"owner_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","organisation_id","title","summary","blocks","status","owner_id","agent_id","execution_id","created_by","updated_by","created_at","updated_at"],"title":"ReportResponseSchema","description":"Response schema for a single report."},"HeaderBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"header","title":"Type"},"level":{"type":"integer","maximum":6,"minimum":1,"title":"Level","default":1},"text":{"type":"string","title":"Text"}},"type":"object","required":["type","text"],"title":"HeaderBlock"},"MarkdownBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"markdown","title":"Type"},"content":{"type":"string","minLength":1,"title":"Content"}},"type":"object","required":["type","content"],"title":"MarkdownBlock"},"DataTableBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"data_table","title":"Type"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"data":{"items":{"items":{},"type":"array"},"type":"array","title":"Data"}},"type":"object","required":["type","columns","data"],"title":"DataTableBlock"},"MetricBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"metric","title":"Type"},"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"},"unit":{"type":"string","title":"Unit","default":""},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["type","name","value"],"title":"MetricBlock"},"BarChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"bar_chart","title":"Type"},"title":{"type":"string","title":"Title"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels"},"data":{"items":{"type":"number"},"type":"array","title":"Data"}},"type":"object","required":["type","title","labels","data"],"title":"BarChartBlock"},"PieChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"pie_chart","title":"Type"},"title":{"type":"string","title":"Title"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels"},"data":{"items":{"type":"number"},"type":"array","title":"Data"}},"type":"object","required":["type","title","labels","data"],"title":"PieChartBlock"},"LineChartBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"line_chart","title":"Type"},"title":{"type":"string","title":"Title","description":"Chart title, e.g. 'Monthly Active Users'"},"labels":{"items":{"type":"string"},"type":"array","title":"Labels","description":"Series names displayed in the legend — one entry per line on the chart. Example: ['Revenue'] for a single-line chart, ['Revenue', 'Costs'] for two lines. Do NOT put x-axis tick labels (dates, periods) here; those belong in data[i].x."},"data":{"items":{"items":{"$ref":"#/components/schemas/LineChartDataPoint"},"type":"array"},"type":"array","title":"Data","description":"One inner list per series; must have the same length as `labels`. Each element is an (x, y) point where x is the x-axis tick label (e.g. 'Jan 2024', 'Q1') and y is the numeric value."}},"type":"object","required":["type","title","labels","data"],"title":"LineChartBlock","description":"Line chart with one or more series.\n\n`labels` holds the SERIES NAMES shown in the legend (e.g. [\"Revenue\", \"Costs\"]),\nNOT the x-axis tick labels. X-axis values come from the `x` field of each data\npoint. For a single-line chart, `labels` has exactly one entry and `data` has\nexactly one inner list."},"LineChartDataPoint":{"properties":{"x":{"anyOf":[{"type":"string"},{"type":"number"}],"title":"X","description":"X-axis value, typically a date string or numeric index"},"y":{"type":"number","title":"Y","description":"Y-axis value"}},"type":"object","required":["x","y"],"title":"LineChartDataPoint"},"ActionItemsBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"action_items","title":"Type"},"actions":{"items":{"$ref":"#/components/schemas/ActionItem"},"type":"array","title":"Actions"}},"type":"object","required":["type","actions"],"title":"ActionItemsBlock"},"ActionItem":{"properties":{"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee","description":"User ID of the assignee"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["label","status"],"title":"ActionItem"},"ColumnsBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"columns","title":"Type"},"columns":{"type":"integer","maximum":12,"minimum":2,"title":"Columns","description":"Number of columns"},"weights":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Weights","description":"Optional proportional width per column as positive integers (e.g. [2, 1] for 2:1 ratio, [1, 1] for equal columns). Must have the same length as columns. Must be integers — do NOT use floats like [0.5, 0.5]."},"blocks":{"items":{"anyOf":[{"items":{"oneOf":[{"$ref":"#/components/schemas/HeaderBlock"},{"$ref":"#/components/schemas/MarkdownBlock"},{"$ref":"#/components/schemas/DataTableBlock"},{"$ref":"#/components/schemas/MetricBlock"},{"$ref":"#/components/schemas/BarChartBlock"},{"$ref":"#/components/schemas/PieChartBlock"},{"$ref":"#/components/schemas/LineChartBlock"},{"$ref":"#/components/schemas/ActionItemsBlock"},{"$ref":"#/components/schemas/ColumnsBlock"},{"$ref":"#/components/schemas/ImageBlock"}],"discriminator":{"propertyName":"type","mapping":{"action_items":"#/components/schemas/ActionItemsBlock","bar_chart":"#/components/schemas/BarChartBlock","columns":"#/components/schemas/ColumnsBlock","data_table":"#/components/schemas/DataTableBlock","header":"#/components/schemas/HeaderBlock","image":"#/components/schemas/ImageBlock","line_chart":"#/components/schemas/LineChartBlock","markdown":"#/components/schemas/MarkdownBlock","metric":"#/components/schemas/MetricBlock","pie_chart":"#/components/schemas/PieChartBlock"}}},"type":"array"},{"oneOf":[{"$ref":"#/components/schemas/HeaderBlock"},{"$ref":"#/components/schemas/MarkdownBlock"},{"$ref":"#/components/schemas/DataTableBlock"},{"$ref":"#/components/schemas/MetricBlock"},{"$ref":"#/components/schemas/BarChartBlock"},{"$ref":"#/components/schemas/PieChartBlock"},{"$ref":"#/components/schemas/LineChartBlock"},{"$ref":"#/components/schemas/ActionItemsBlock"},{"$ref":"#/components/schemas/ColumnsBlock"},{"$ref":"#/components/schemas/ImageBlock"}],"discriminator":{"propertyName":"type","mapping":{"action_items":"#/components/schemas/ActionItemsBlock","bar_chart":"#/components/schemas/BarChartBlock","columns":"#/components/schemas/ColumnsBlock","data_table":"#/components/schemas/DataTableBlock","header":"#/components/schemas/HeaderBlock","image":"#/components/schemas/ImageBlock","line_chart":"#/components/schemas/LineChartBlock","markdown":"#/components/schemas/MarkdownBlock","metric":"#/components/schemas/MetricBlock","pie_chart":"#/components/schemas/PieChartBlock"}}}]},"type":"array","title":"Blocks","description":"One item per column, in column order. Each item is either a single block or a list of blocks for that column."}},"type":"object","required":["type","columns","blocks"],"title":"ColumnsBlock"},"ImageBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","const":"image","title":"Type"},"url":{"type":"string","title":"Url"},"size":{"type":"string","enum":["sm","md","lg","full"],"title":"Size","description":"Display size of the image: sm, md, lg, or full (full container width).","default":"md"}},"type":"object","required":["type","url"],"title":"ImageBlock"},"ReportStatus":{"type":"string","enum":["DRAFT","IN_REVIEW","PUBLISHED"],"title":"ReportStatus","description":"Enum representing the status of a report.\n\nState machine with four operations:\n- submit_for_review: DRAFT -> IN_REVIEW\n- publish: IN_REVIEW -> PUBLISHED\n- unpublish: PUBLISHED -> IN_REVIEW\n- return_to_draft: IN_REVIEW -> DRAFT, or PUBLISHED -> DRAFT\n\nStatus flow: DRAFT <-> IN_REVIEW <-> PUBLISHED, with a direct\nPUBLISHED -> DRAFT shortcut via return_to_draft.\n\n- DRAFT: Report is being authored and not yet submitted for review\n- IN_REVIEW: Report is under review before publication\n- PUBLISHED: Report is published"}}}}
```

## The ReportStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ReportStatus":{"type":"string","enum":["DRAFT","IN_REVIEW","PUBLISHED"],"title":"ReportStatus","description":"Enum representing the status of a report.\n\nState machine with four operations:\n- submit_for_review: DRAFT -> IN_REVIEW\n- publish: IN_REVIEW -> PUBLISHED\n- unpublish: PUBLISHED -> IN_REVIEW\n- return_to_draft: IN_REVIEW -> DRAFT, or PUBLISHED -> DRAFT\n\nStatus flow: DRAFT <-> IN_REVIEW <-> PUBLISHED, with a direct\nPUBLISHED -> DRAFT shortcut via return_to_draft.\n\n- DRAFT: Report is being authored and not yet submitted for review\n- IN_REVIEW: Report is under review before publication\n- PUBLISHED: Report is published"}}}}
```

## The ReportUserSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ReportUserSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","full_name"],"title":"ReportUserSchema","description":"Basic user info embedded in report list responses."}}}}
```

## The ResetPasswordRequestSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ResetPasswordRequestSchema":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequestSchema"}}}}
```

## The RunningExecutionItemSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RunningExecutionItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"$ref":"#/components/schemas/ExecutionStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerInfoSchema"},{"type":"null"}],"description":"The trigger that started this execution, or null if unattributed."}},"type":"object","required":["id","status","started_at","created_at","trigger"],"title":"RunningExecutionItemSchema","description":"A single currently-running execution."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."}}}}
```

## The RunningExecutionsSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"RunningExecutionsSchema":{"properties":{"total_count":{"type":"integer","title":"Total Count"},"items":{"items":{"$ref":"#/components/schemas/RunningExecutionItemSchema"},"type":"array","title":"Items"}},"type":"object","required":["total_count","items"],"title":"RunningExecutionsSchema","description":"Currently-running executions for an agent."},"RunningExecutionItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"$ref":"#/components/schemas/ExecutionStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"trigger":{"anyOf":[{"$ref":"#/components/schemas/TriggerInfoSchema"},{"type":"null"}],"description":"The trigger that started this execution, or null if unattributed."}},"type":"object","required":["id","status","started_at","created_at","trigger"],"title":"RunningExecutionItemSchema","description":"A single currently-running execution."},"ExecutionStatus":{"type":"string","enum":["PENDING","STARTED","SUCCESS","FAILURE","CANCELED"],"title":"ExecutionStatus","description":"Status values for an execution."},"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."}}}}
```

## The ScheduleTriggerConfig object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ScheduleTriggerConfig":{"properties":{"hour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hour"},"minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minute"},"day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Week"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month"}},"additionalProperties":false,"type":"object","title":"ScheduleTriggerConfig","description":"Config for scheduler trigger definitions (daily, weekly, monthly, etc.).\n\nextra=\"ignore\" + json_schema_extra additionalProperties:false for OpenAI compatibility."}}}}
```

## The SendMessagePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SendMessagePayloadSchema":{"properties":{"content":{"type":"string","title":"Content","description":"Message content to add to conversation","default":""},"file_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"File Ids","description":"IDs of files previously uploaded to this conversation to attach to the message"}},"type":"object","title":"SendMessagePayloadSchema","description":"Pydantic schema for sending a message to a conversation."}}}}
```

## The SendMessageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SendMessageResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"agent_id":{"type":"integer","title":"Agent Id"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","agent_id","created_by"],"title":"SendMessageResponseSchema","description":"Pydantic schema returned after sending a message — the conversation\nsummary (the agent-generated messages are fetched via the messages list\nendpoint; token/cost counters are not exposed here)."}}}}
```

## The SenderType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SenderType":{"type":"string","enum":["SYSTEM","AGENT","USER"],"title":"SenderType","description":"What produced the notification."}}}}
```

## The SequentialNode-Input object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SequentialNode-Input":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"ParallelNode-Input":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Input":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Input":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Input"},{"$ref":"#/components/schemas/ParallelNode-Input"},{"$ref":"#/components/schemas/ConditionalNode-Input"},{"$ref":"#/components/schemas/LoopNode-Input"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Input","loop":"#/components/schemas/LoopNode-Input","parallel":"#/components/schemas/ParallelNode-Input","sequential":"#/components/schemas/SequentialNode-Input"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The SequentialNode-Output object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SequentialNode-Output":{"properties":{"type":{"type":"string","const":"sequential","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed one after another. Each node receives the full accumulated message history from all prior nodes."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"SequentialNode"},"AgentNode":{"oneOf":[{"required":["alias"]},{"required":["identifier"]}],"properties":{"type":{"type":"string","const":"agent","title":"Type"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias","description":"Alias of an inline agent from 'inline_agents' or an agent from 'agent_references'."},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier","description":"DB identifier of an agent. Use 'alias' instead to reference a declared agent reference."}},"additionalProperties":false,"type":"object","required":["type"],"title":"AgentNode"},"ParallelNode-Output":{"properties":{"type":{"type":"string","const":"parallel","title":"Type"},"nodes":{"items":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"type":"array","minItems":2,"title":"Nodes","description":"Child nodes executed concurrently. All branches receive the same input state; their outputs are merged afterwards."}},"additionalProperties":false,"type":"object","required":["type","nodes"],"title":"ParallelNode"},"ConditionalNode-Output":{"properties":{"type":{"type":"string","const":"conditional","title":"Type"},"condition":{"$ref":"#/components/schemas/Condition","description":"Condition evaluated against the last message's JSON content to decide which branch to take."},"true_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"True Node","description":"Node executed when the condition evaluates to true.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}},"false_node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"False Node","description":"Node executed when the condition evaluates to false.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","condition","true_node","false_node"],"title":"ConditionalNode"},"Condition":{"properties":{"json_path":{"type":"string","title":"Json Path","description":"JSONPath expression evaluated against the last message's JSON content (e.g. '$.score', '$.status')."},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte"],"title":"Operator","description":"Comparison operator applied between the extracted value and 'value'.","default":"eq"},"value":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Value","description":"Value to compare against. May be a string, number, boolean, or null."}},"additionalProperties":false,"type":"object","required":["json_path"],"title":"Condition"},"LoopNode-Output":{"properties":{"type":{"type":"string","const":"loop","title":"Type"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Hard cap on iterations. The loop always stops here even if finish_condition is never met."},"finish_condition":{"$ref":"#/components/schemas/Condition","description":"Checked after each iteration. Loop exits early when this evaluates to true."},"node":{"oneOf":[{"$ref":"#/components/schemas/AgentNode"},{"$ref":"#/components/schemas/SequentialNode-Output"},{"$ref":"#/components/schemas/ParallelNode-Output"},{"$ref":"#/components/schemas/ConditionalNode-Output"},{"$ref":"#/components/schemas/LoopNode-Output"}],"title":"Node","description":"The node executed on each iteration.","discriminator":{"propertyName":"type","mapping":{"agent":"#/components/schemas/AgentNode","conditional":"#/components/schemas/ConditionalNode-Output","loop":"#/components/schemas/LoopNode-Output","parallel":"#/components/schemas/ParallelNode-Output","sequential":"#/components/schemas/SequentialNode-Output"}}}},"additionalProperties":false,"type":"object","required":["type","max_iterations","finish_condition","node"],"title":"LoopNode"}}}}
```

## The SetCredentialsPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SetCredentialsPayloadSchema":{"properties":{"credentials":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credentials"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"SetCredentialsPayloadSchema","description":"Pydantic schema for setting provider credentials and configuration."}}}}
```

## The SetNotificationPreferencePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SetNotificationPreferencePayloadSchema":{"properties":{"channel":{"$ref":"#/components/schemas/NotificationChannel"},"enabled":{"type":"boolean","title":"Enabled"},"notification_type":{"anyOf":[{"$ref":"#/components/schemas/NotificationType"},{"type":"null"}],"description":"Type the preference applies to; omit to set the caller's channel-wide default, which every type falls back to"}},"type":"object","required":["channel","enabled"],"title":"SetNotificationPreferencePayloadSchema","description":"Payload schema for one preference the caller is setting."},"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."}}}}
```

## The SortDirection object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SortDirection":{"type":"string","enum":["asc","desc"],"title":"SortDirection","description":"Ascending or descending order for a sorted listing."}}}}
```

## The SpendComparisonBasis object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SpendComparisonBasis":{"type":"string","enum":["PREVIOUS_MONTH","PRECEDING_PERIOD"],"title":"SpendComparisonBasis","description":"What a spend comparison's previous window is.\n\nAn explicit choice rather than a rule inferred from the shape of the requested\nrange: \"the range starts on the 1st, so they must mean the previous month\"\nwould silently change basis when a caller shifted a rolling window by a day.\n\nThe window arithmetic lives on the enum so the two rules are stated in one\nplace, next to each other, where they can be compared."}}}}
```

## The SubAgentLinkResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SubAgentLinkResponseSchema":{"properties":{"sub_agent_id":{"type":"integer","title":"Sub Agent Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"}},"type":"object","required":["sub_agent_id","name","identifier"],"title":"SubAgentLinkResponseSchema","description":"Schema for sub-agent link response."}}}}
```

## The SubAgentLinksResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SubAgentLinksResponseSchema":{"properties":{"sub_agent_links":{"items":{"$ref":"#/components/schemas/SubAgentLinkResponseSchema"},"type":"array","title":"Sub Agent Links"}},"type":"object","required":["sub_agent_links"],"title":"SubAgentLinksResponseSchema","description":"Pydantic schema for list of sub-agent links."},"SubAgentLinkResponseSchema":{"properties":{"sub_agent_id":{"type":"integer","title":"Sub Agent Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"}},"type":"object","required":["sub_agent_id","name","identifier"],"title":"SubAgentLinkResponseSchema","description":"Schema for sub-agent link response."}}}}
```

## The SubAgentSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SubAgentSuggestion":{"properties":{"sub_agent_id":{"type":"integer","title":"Sub Agent Id"},"name":{"type":"string","title":"Name","default":""}},"type":"object","required":["sub_agent_id"],"title":"SubAgentSuggestion","description":"Suggested sub-agent link."}}}}
```

## The SuggestedActionListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SuggestedActionListItemResponseSchema":{"properties":{"action_type":{"$ref":"#/components/schemas/SuggestedActionType"},"reference":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Reference"}},"type":"object","required":["action_type","reference"],"title":"SuggestedActionListItemResponseSchema"},"SuggestedActionType":{"type":"string","enum":["synchronize_model_profiles","activate_organisation","create_mcp_catalog_category","add_mcp_catalog_entry","create_agents_catalog_category","add_agents_catalog_entry","create_allowance_plan","link_llm_provider_to_organisation","add_llm_provider","set_llm_provider_credentials","configure_default_model","configure_default_embedding_model","add_mcp_server","add_mcp_server_from_catalog","verify_mcp_server","enable_mcp_server","link_mcp_server_to_agent","configure_evaluation_metric_provider","configure_default_assistant_agent","invite_members","analyze_organisation_cost_forecast","analyze_organisation_evaluation","check_agent_usage","ask_admin_to_configure_llm_provider","ask_admin_to_add_mcp_server","ask_admin_to_verify_mcp_server","upload_avatar","sign_up_for_newsletter","fulfill_job_position","fulfill_job_activities","add_first_agent_from_catalog","launch_recommended_agent","create_first_agent","enable_agent","configure_evaluation_metric","create_first_schedule","create_first_agent_chain","check_agent_evaluation","upload_first_knowledge_base_document","have_first_conversation","submit_conversation_feedback","create_first_report","submit_report_for_review","publish_report","create_first_automation","add_next_agent","begin_next_conversation","upload_next_knowledge_base_document","create_next_report"],"title":"SuggestedActionType","description":"A distinct onboarding/setup nudge that can be surfaced to a user."}}}}
```

## The SuggestedActionListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SuggestedActionListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SuggestedActionListItemResponseSchema"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"SuggestedActionListResponseSchema"},"SuggestedActionListItemResponseSchema":{"properties":{"action_type":{"$ref":"#/components/schemas/SuggestedActionType"},"reference":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Reference"}},"type":"object","required":["action_type","reference"],"title":"SuggestedActionListItemResponseSchema"},"SuggestedActionType":{"type":"string","enum":["synchronize_model_profiles","activate_organisation","create_mcp_catalog_category","add_mcp_catalog_entry","create_agents_catalog_category","add_agents_catalog_entry","create_allowance_plan","link_llm_provider_to_organisation","add_llm_provider","set_llm_provider_credentials","configure_default_model","configure_default_embedding_model","add_mcp_server","add_mcp_server_from_catalog","verify_mcp_server","enable_mcp_server","link_mcp_server_to_agent","configure_evaluation_metric_provider","configure_default_assistant_agent","invite_members","analyze_organisation_cost_forecast","analyze_organisation_evaluation","check_agent_usage","ask_admin_to_configure_llm_provider","ask_admin_to_add_mcp_server","ask_admin_to_verify_mcp_server","upload_avatar","sign_up_for_newsletter","fulfill_job_position","fulfill_job_activities","add_first_agent_from_catalog","launch_recommended_agent","create_first_agent","enable_agent","configure_evaluation_metric","create_first_schedule","create_first_agent_chain","check_agent_evaluation","upload_first_knowledge_base_document","have_first_conversation","submit_conversation_feedback","create_first_report","submit_report_for_review","publish_report","create_first_automation","add_next_agent","begin_next_conversation","upload_next_knowledge_base_document","create_next_report"],"title":"SuggestedActionType","description":"A distinct onboarding/setup nudge that can be surfaced to a user."}}}}
```

## The SuggestedActionType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"SuggestedActionType":{"type":"string","enum":["synchronize_model_profiles","activate_organisation","create_mcp_catalog_category","add_mcp_catalog_entry","create_agents_catalog_category","add_agents_catalog_entry","create_allowance_plan","link_llm_provider_to_organisation","add_llm_provider","set_llm_provider_credentials","configure_default_model","configure_default_embedding_model","add_mcp_server","add_mcp_server_from_catalog","verify_mcp_server","enable_mcp_server","link_mcp_server_to_agent","configure_evaluation_metric_provider","configure_default_assistant_agent","invite_members","analyze_organisation_cost_forecast","analyze_organisation_evaluation","check_agent_usage","ask_admin_to_configure_llm_provider","ask_admin_to_add_mcp_server","ask_admin_to_verify_mcp_server","upload_avatar","sign_up_for_newsletter","fulfill_job_position","fulfill_job_activities","add_first_agent_from_catalog","launch_recommended_agent","create_first_agent","enable_agent","configure_evaluation_metric","create_first_schedule","create_first_agent_chain","check_agent_evaluation","upload_first_knowledge_base_document","have_first_conversation","submit_conversation_feedback","create_first_report","submit_report_for_review","publish_report","create_first_automation","add_next_agent","begin_next_conversation","upload_next_knowledge_base_document","create_next_report"],"title":"SuggestedActionType","description":"A distinct onboarding/setup nudge that can be surfaced to a user."}}}}
```

## The ToolCallStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolCallStatus":{"type":"string","enum":["success","error"],"title":"ToolCallStatus","description":"How a tool call ended, as the model was told.\n\nA failing tool does not end the run: tool errors are turned into ordinary\ntool messages carrying this status, so the agent can read the failure and\ncarry on. That makes this the only record of which calls actually worked —\nabsence of the status means unknown, never success."}}}}
```

## The ToolRequestEntrySummarySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolRequestEntrySummarySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"ToolRequestEntrySummarySchema"}}}}
```

## The ToolRequestListItemSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolRequestListItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"entry":{"$ref":"#/components/schemas/ToolRequestEntrySummarySchema"},"user":{"$ref":"#/components/schemas/ToolRequestUserSummarySchema"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","entry","user","message","created_at","updated_at"],"title":"ToolRequestListItemSchema"},"ToolRequestEntrySummarySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"ToolRequestEntrySummarySchema"},"ToolRequestUserSummarySchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","name"],"title":"ToolRequestUserSummarySchema"}}}}
```

## The ToolRequestListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolRequestListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ToolRequestListItemSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"ToolRequestListResponseSchema"},"ToolRequestListItemSchema":{"properties":{"id":{"type":"integer","title":"Id"},"entry":{"$ref":"#/components/schemas/ToolRequestEntrySummarySchema"},"user":{"$ref":"#/components/schemas/ToolRequestUserSummarySchema"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","entry","user","message","created_at","updated_at"],"title":"ToolRequestListItemSchema"},"ToolRequestEntrySummarySchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","name","icon_url"],"title":"ToolRequestEntrySummarySchema"},"ToolRequestUserSummarySchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","name"],"title":"ToolRequestUserSummarySchema"}}}}
```

## The ToolRequestResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolRequestResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"mcp_catalog_entry_id":{"type":"integer","title":"Mcp Catalog Entry Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","mcp_catalog_entry_id","user_id","message","created_at","updated_at"],"title":"ToolRequestResponseSchema"}}}}
```

## The ToolRequestUserSummarySchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolRequestUserSummarySchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","name"],"title":"ToolRequestUserSummarySchema"}}}}
```

## The ToolResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolResponseSchema":{"properties":{"name":{"type":"string","title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"type":"string","title":"Description"},"display_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Description"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema"},"annotations":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Annotations"},"status":{"$ref":"#/components/schemas/ToolStatus"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"}},"type":"object","required":["name","title","description","display_description","input_schema","output_schema","annotations","status","categories"],"title":"ToolResponseSchema","description":"Pydantic schema for tool response."},"ToolStatus":{"type":"string","enum":["enabled","disabled"],"title":"ToolStatus"}}}}
```

## The ToolStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ToolStatus":{"type":"string","enum":["enabled","disabled"],"title":"ToolStatus"}}}}
```

## The TopTriggerSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TopTriggerSchema":{"properties":{"trigger":{"$ref":"#/components/schemas/TriggerInfoSchema"},"execution_count":{"type":"integer","title":"Execution Count"}},"type":"object","required":["trigger","execution_count"],"title":"TopTriggerSchema","description":"One of an agent's top triggers by all-time execution count."},"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."}}}}
```

## The TriggerCategoryListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerCategoryListResponseSchema":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/TriggerCategoryResponseSchema"},"type":"array","title":"Categories"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["categories","total_count"],"title":"TriggerCategoryListResponseSchema","description":"Pydantic schema for the trigger category list response."},"TriggerCategoryResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"type":"string","title":"Label"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","label","icon_url"],"title":"TriggerCategoryResponseSchema","description":"Pydantic schema for a trigger category list item."}}}}
```

## The TriggerCategoryResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerCategoryResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"type":"string","title":"Label"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["id","label","icon_url"],"title":"TriggerCategoryResponseSchema","description":"Pydantic schema for a trigger category list item."}}}}
```

## The TriggerDefinitionListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerDefinitionListResponseSchema":{"properties":{"definitions":{"items":{"$ref":"#/components/schemas/TriggerDefinitionResponseSchema"},"type":"array","title":"Definitions"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["definitions","total_count"],"title":"TriggerDefinitionListResponseSchema","description":"Pydantic schema for the trigger definition list response."},"TriggerDefinitionResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"label":{"type":"string","title":"Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"categories":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Categories"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema"}},"type":"object","required":["id","source_id","label","description","icon_url","categories","config_schema"],"title":"TriggerDefinitionResponseSchema","description":"Pydantic schema for a trigger definition list item."}}}}
```

## The TriggerDefinitionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerDefinitionResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"label":{"type":"string","title":"Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"categories":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Categories"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema"}},"type":"object","required":["id","source_id","label","description","icon_url","categories","config_schema"],"title":"TriggerDefinitionResponseSchema","description":"Pydantic schema for a trigger definition list item."}}}}
```

## The TriggerInfoSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerInfoSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id","description":"ID of the trigger's definition (its type)"},"label":{"type":"string","title":"Label","description":"Human-readable trigger definition label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Trigger config (e.g. schedule fields). Sensitive webhook fields are redacted."}},"type":"object","required":["id","definition_id","label","description","icon_url","config"],"title":"TriggerInfoSchema","description":"Resolved trigger info attached to an execution or aggregate row."}}}}
```

## The TriggerListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerListResponseSchema":{"properties":{"triggers":{"items":{"$ref":"#/components/schemas/TriggerResponseSchema"},"type":"array","title":"Triggers"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["triggers","total_count"],"title":"TriggerListResponseSchema","description":"Response schema for the paginated trigger list endpoint."},"TriggerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organisation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organisation Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["id","organisation_id","agent_id","created_by","definition_id","config"],"title":"TriggerResponseSchema","description":"Response schema for a trigger."}}}}
```

## The TriggerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organisation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organisation Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"definition_id":{"type":"string","format":"uuid","title":"Definition Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["id","organisation_id","agent_id","created_by","definition_id","config"],"title":"TriggerResponseSchema","description":"Response schema for a trigger."}}}}
```

## The TriggerSuggestion object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerSuggestion":{"properties":{"definition_id":{"type":"string","format":"uuid","title":"Definition Id"},"config":{"anyOf":[{"$ref":"#/components/schemas/ManualTriggerConfig"},{"$ref":"#/components/schemas/ScheduleTriggerConfig"},{"$ref":"#/components/schemas/WebhookTriggerConfig"}],"title":"Config"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["definition_id","config"],"title":"TriggerSuggestion","description":"Suggested trigger for the agent.\n\nMatches the shape of POST /triggers/, but webhook definitions require the caller to\nenrich config with generated/sensitive fields before the create-trigger endpoint will\naccept it. Use build_webhook_credentials() to generate the required token and secret."},"ManualTriggerConfig":{"properties":{},"additionalProperties":false,"type":"object","title":"ManualTriggerConfig","description":"Config for the manual (Run now) trigger definition. Has no fields."},"ScheduleTriggerConfig":{"properties":{"hour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hour"},"minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minute"},"day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Week"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month"}},"additionalProperties":false,"type":"object","title":"ScheduleTriggerConfig","description":"Config for scheduler trigger definitions (daily, weekly, monthly, etc.).\n\nextra=\"ignore\" + json_schema_extra additionalProperties:false for OpenAI compatibility."},"WebhookTriggerConfig":{"properties":{"signature_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Signature Required"},"rate_limit_per_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Minute"},"ip_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ip Allowlist"},"signature_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature Header Name"},"timestamp_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp Header Name"},"idempotency_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Header Name"},"message_filter":{"anyOf":[{"$ref":"#/components/schemas/MessageFilter"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"WebhookTriggerConfig","description":"Config for webhook trigger definitions.\n\n`token` and `secret` are intentionally excluded — they are sensitive credentials that\nmust be generated by the caller (see build_webhook_credentials).\n\nextra=\"ignore\" + json_schema_extra additionalProperties:false for OpenAI compatibility."},"MessageFilter":{"properties":{"match":{"type":"string","enum":["all","any"],"title":"Match","default":"all"},"rules":{"items":{"$ref":"#/components/schemas/MessageFilterRule"},"type":"array","title":"Rules"}},"additionalProperties":false,"type":"object","required":["rules"],"title":"MessageFilter","description":"Payload filter for a webhook trigger.\n\nA payload that doesn't match is accepted but skipped — no execution is created and\nthe delivery is recorded as FILTERED."},"MessageFilterRule":{"properties":{"field":{"type":"string","title":"Field"},"operator":{"type":"string","enum":["equals","not_equals","in","contains","regex","exists"],"title":"Operator"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Value"}},"additionalProperties":false,"type":"object","required":["field","operator"],"title":"MessageFilterRule","description":"A single field/operator rule inside a webhook message filter.\n\n`value` is typed as a scalar union to satisfy OpenAI structured-output requirements\n(which reject untyped schemas). Nested-object values are not supported here but are\nnot meaningful for LLM-generated filters anyway."}}}}
```

## The TriggerType object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The TriggerTypeExecutionCountSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"TriggerTypeExecutionCountSchema":{"properties":{"trigger_type":{"$ref":"#/components/schemas/TriggerType"},"execution_count":{"type":"integer","title":"Execution Count"}},"type":"object","required":["trigger_type","execution_count"],"title":"TriggerTypeExecutionCountSchema","description":"Execution count for one coarse `TriggerType` bucket."},"TriggerType":{"type":"string","enum":["MANUAL","SCHEDULER","WEBHOOK","UNKNOWN"],"title":"TriggerType","description":"Coarse bucket a snapshotted `trigger_definition_id` maps to.\n\nScheduler alone has six definition ids (one per cadence), all of which\nbucket to SCHEDULER — this is \"how was it started\", not \"which specific\ntrigger fired\" (see `top_triggers_by_execution_count` for the latter)."}}}}
```

## The UnreadNotificationCountResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UnreadNotificationCountResponseSchema":{"properties":{"unread_count":{"type":"integer","title":"Unread Count"},"cap":{"type":"integer","title":"Cap"}},"type":"object","required":["unread_count","cap"],"title":"UnreadNotificationCountResponseSchema","description":"Response schema for the unread badge.\n\n`unread_count` saturates at `cap`, so a value equal to it means \"at least that many\""}}}}
```

## The UpdateAgentPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateAgentPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"instruction":{"type":"string","title":"Instruction"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Required on update: this is a full replacement, so the budget must be restated every time — an existing cap must never be lifted by omitting the field."},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Language Model Provider Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"input_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Schema","description":"JSON Schema describing the expected input structure for this agent."},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema","description":"JSON Schema describing the expected output structure for this agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none', 'all', or 'branch'. Required on update: this is a full replacement, so the scope must be restated every time — an agent's access must never change by omitting the field.","default":"none"},"knowledge_base_node_ids":{"items":{"type":"integer","exclusiveMinimum":0},"type":"array","title":"Knowledge Base Node Ids","description":"Folder node ids to confine the agent to. Required (one or more) when scope is 'branch'; must be omitted for 'none' or 'all'."},"eval_config":{"anyOf":[{"$ref":"#/components/schemas/EvalConfigSchema"},{"type":"null"}],"description":"Metrics this agent is evaluated against, with per-metric thresholds and weights."},"graph_recursion_limit":{"anyOf":[{"type":"integer","maximum":100,"exclusiveMinimum":0},{"type":"null"}],"title":"Graph Recursion Limit","description":"Per-agent override for the LangGraph recursion limit (max steps in the tool-calling loop). Must not exceed the platform cap (100). If null, LangGraph's own default (25) is used."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. This is a full replacement: omitting the field clears any existing impact metric, it does not leave it unchanged."}},"type":"object","required":["name","identifier","instruction","is_enabled","can_be_subagent","budget"],"title":"UpdateAgentPayloadSchema","description":"Pydantic schema for updating an agent."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"EvalConfigSchema":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSchema"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage of eligible runs that actually get evaluated.","default":100}},"type":"object","title":"EvalConfigSchema","description":"Pydantic schema for an agent's full evaluation configuration."},"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The UpdateAgentResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateAgentResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"instruction":{"type":"string","title":"Instruction"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"can_be_subagent":{"type":"boolean","title":"Can Be Subagent"},"budget":{"$ref":"#/components/schemas/BudgetSchema","description":"Agent budget in credits. Always present; an uncapped budget is the scope 'unlimited'."},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Language Model Provider Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"is_model_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Model Valid"},"input_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Schema","description":"JSON Schema describing the expected input structure for this agent."},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema","description":"JSON Schema describing the expected output structure for this agent."},"knowledge_base_scope":{"$ref":"#/components/schemas/KnowledgeBaseScope","description":"Knowledge-base access: 'none' (no access), 'all' (whole knowledge base), or 'branch' (one or more folder subtrees)."},"knowledge_base_node_ids":{"items":{"type":"integer"},"type":"array","title":"Knowledge Base Node Ids","description":"Folder nodes the agent's knowledge-base access is confined to. Non-empty only when scope is 'branch'."},"eval_config":{"anyOf":[{"$ref":"#/components/schemas/EvalConfigSchema"},{"type":"null"}],"description":"Metrics this agent is evaluated against, with per-metric thresholds and weights."},"graph_recursion_limit":{"anyOf":[{"type":"integer","maximum":100,"exclusiveMinimum":0},{"type":"null"}],"title":"Graph Recursion Limit","description":"Per-agent override for the LangGraph recursion limit (max steps in the tool-calling loop). Must not exceed the platform cap (100). If null, LangGraph's own default (25) is used."},"agents_catalog_entry_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"title":"Agents Catalog Entry Id","description":"Optional reference to the agents catalog entry this agent was created from. Used to track catalog template popularity."},"impact_metric":{"anyOf":[{"$ref":"#/components/schemas/ImpactMetricSchema"},{"type":"null"}],"description":"The impact (ROI) one run of this agent generates. Null when no impact metric is configured."}},"type":"object","required":["id","organisation_id","name","identifier","instruction","is_enabled","can_be_subagent","budget","created_by","knowledge_base_scope"],"title":"UpdateAgentResponseSchema","description":"Pydantic schema for agent update response."},"BudgetSchema":{"properties":{"scope":{"$ref":"#/components/schemas/BudgetScope","description":"Budget scope: 'limited' (capped at 'amount' credits) or 'unlimited' (uncapped, the default).","default":"unlimited"},"amount":{"type":"integer","minimum":0,"title":"Amount","description":"Budget amount in whole credits. Required when scope is 'limited'; must be 0 (or omitted) when scope is 'unlimited'.","default":0},"currency":{"type":"string","const":"credits","title":"Currency","description":"Always 'credits' — agent budgets are denominated in the platform's virtual currency only.","default":"credits"}},"type":"object","title":"BudgetSchema","description":"Agent budget, denominated in credits.\n\nAn uncapped budget is the named scope 'unlimited', never a null budget or a\nnegative amount — a cap can only be lifted by saying so. Requests may omit\nthe whole budget (it defaults to unlimited), but never `amount` on a\n'limited' budget: a missing cap must not silently become zero credits."},"BudgetScope":{"type":"string","enum":["limited","unlimited"],"title":"BudgetScope","description":"Whether an agent's credit spend is capped.\n\nAn uncapped budget is a positive, named value (`UNLIMITED`) — never a\nnegative amount, an empty currency, or a missing field — so a cap can never\nbe lifted by a value that merely looks absent. Callers branch on\n`is_limited` / `is_unlimited`, never on the amount."},"KnowledgeBaseScope":{"type":"string","enum":["none","all","branch"],"title":"KnowledgeBaseScope","description":"How much of the organisation's knowledge base an agent may access.\n\nThe default is `NONE` (no access): access is a deliberate opt-in, so linking\nthe knowledge-base tools to an agent never silently grants the whole KB.\nWhole-KB access is a positive, named value (`ALL`) — never the absence of a\nbranch — so it can never be granted by a forgotten field. Enforcement branches\non `is_none` / `is_all` / `is_branch`, never on whether a node id happens to be\nset."},"EvalConfigSchema":{"properties":{"metrics":{"items":{"$ref":"#/components/schemas/EvalMetricConfigSchema"},"type":"array","title":"Metrics"},"sample_size":{"type":"number","maximum":100,"minimum":0,"title":"Sample Size","description":"Percentage of eligible runs that actually get evaluated.","default":100}},"type":"object","title":"EvalConfigSchema","description":"Pydantic schema for an agent's full evaluation configuration."},"EvalMetricConfigSchema":{"properties":{"metric_id":{"type":"string","maxLength":100,"minLength":1,"title":"Metric Id"},"threshold":{"type":"number","minimum":0,"title":"Threshold","description":"The value this metric must reach to pass, in the metric's own unit/scale (e.g. 80.0 for an 80% success_rate, 5.0 for a 5-second latency cap, 0.7 for a 0.0-1.0 correctness score). Check GET /metric-providers/types for this metric_id's `unit` and `is_maximized` before choosing a threshold."},"weight":{"type":"number","maximum":1,"minimum":0,"title":"Weight","description":"This metric's contribution to the overall quality score."},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Metric-specific settings, e.g. a custom rubric or expected-tools list."},"is_gate":{"type":"boolean","title":"Is Gate","description":"If true, the other configured metrics are skipped whenever this one fails.","default":false},"is_maximized":{"type":"boolean","title":"Is Maximized","description":"Only consulted for ad-hoc/custom-rubric metrics with no registered definition (e.g. config.rubric metrics like 'verbosity' where a LOW score should pass). Ignored for any metric_id with a registered EvaluationMetric — its intrinsic direction always wins (check GET /metric-providers/types).","default":true}},"type":"object","required":["metric_id","threshold","weight"],"title":"EvalMetricConfigSchema","description":"Pydantic schema for one metric's evaluation configuration."},"ImpactMetricSchema":{"properties":{"metric_type":{"type":"string","maxLength":50,"minLength":1,"title":"Metric Type","description":"Kind of impact this agent generates per run, e.g. 'Saved time', 'Saved money', 'Resolved issues', 'New leads'."},"value":{"type":"integer","minimum":0,"title":"Value","description":"Impact generated per run, denominated in 'unit'."},"unit":{"type":"string","maxLength":20,"minLength":1,"title":"Unit","description":"Unit 'value' is denominated in, e.g. 'min', 'hours', 'EUR', 'leads'."}},"type":"object","required":["metric_type","value","unit"],"title":"ImpactMetricSchema","description":"The impact (ROI) one run of the agent generates.\n\nAll three fields are required together — there is no partial state such as\na value with no unit. An agent with no impact metric configured omits this\nfield entirely (or sends it as `null`) rather than sending a partial object."}}}}
```

## The UpdateAgentsCatalogCategoryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateAgentsCatalogCategoryPayloadSchema":{"properties":{"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon","description":"Icon name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"}},"type":"object","title":"UpdateAgentsCatalogCategoryPayloadSchema"}}}}
```

## The UpdateAgentsCatalogCategoryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateAgentsCatalogCategoryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog category"}},"type":"object","required":["name"],"title":"UpdateAgentsCatalogCategoryTranslationPayloadSchema"}}}}
```

## The UpdateAgentsCatalogEntryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateAgentsCatalogEntryPayloadSchema":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Unique identifier of the entry"},"category_id":{"type":"integer","title":"Category Id","description":"ID of the agents catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"recommended_models":{"items":{"type":"string"},"type":"array","title":"Recommended Models","description":"Recommended language model ids"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition","description":"Agent template definition"},"mcp_catalog_entry_ids":{"items":{"type":"integer"},"type":"array","title":"Mcp Catalog Entry Ids","description":"IDs of required MCP catalog entries"}},"type":"object","required":["identifier","category_id"],"title":"UpdateAgentsCatalogEntryPayloadSchema"}}}}
```

## The UpdateAgentsCatalogEntryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateAgentsCatalogEntryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the agents catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the agents catalog entry"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Short summary of the agents catalog entry"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases","description":"Example use cases for the entry"}},"type":"object","required":["name"],"title":"UpdateAgentsCatalogEntryTranslationPayloadSchema"}}}}
```

## The UpdateConversationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateConversationPayloadSchema":{"properties":{"subject":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subject","description":"Optional subject"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Context the assistant works within, as a free-form mapping (e.g. {\"report_id\": 67}). Replaces the stored context."}},"type":"object","title":"UpdateConversationPayloadSchema","description":"Pydantic schema for updating a conversation's editable metadata.\n\nFields are applied with PATCH semantics: an omitted field is left unchanged,\nwhile a field sent as ``null`` clears the stored value. ``context`` fully\nreplaces the stored mapping (no deep merge)."}}}}
```

## The UpdateDocumentContentPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateDocumentContentPayloadSchema":{"properties":{"markdown":{"type":"string","title":"Markdown","default":""},"source_file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source File Id"}},"type":"object","title":"UpdateDocumentContentPayloadSchema","description":"Request schema for replacing a document's body.\n\nPUT semantics — the body is replaced wholesale; an empty payload clears it\n(an empty document is allowed). Only valid for `document` nodes."}}}}
```

## The UpdateLanguageModelProviderPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateLanguageModelProviderPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/LanguageModelProviderType"}},"additionalProperties":false,"type":"object","required":["name","identifier","type"],"title":"UpdateLanguageModelProviderPayloadSchema","description":"Pydantic schema for updating a language model provider."},"LanguageModelProviderType":{"type":"string","enum":["openai","google","ollama","bielik","mistral","anthropic","hugging_face"],"title":"LanguageModelProviderType","description":"Supported language model provider types."}}}}
```

## The UpdateMCPCatalogCategoryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateMCPCatalogCategoryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog category"}},"type":"object","required":["name"],"title":"UpdateMCPCatalogCategoryTranslationPayloadSchema"}}}}
```

## The UpdateMCPCatalogEntryPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateMCPCatalogEntryPayloadSchema":{"properties":{"category_id":{"type":"integer","title":"Category Id","description":"ID of the MCP catalog category"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"Vendor name"},"vendor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Url","description":"Vendor URL"},"server_url":{"type":"string","title":"Server Url","description":"MCP server URL"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Website URL"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"Documentation URL"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url","description":"Icon URL"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Hex color code (e.g. #FF0000)"},"data_residency_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Residency Country","description":"ISO 3166-1 alpha-2 country code of the MCP server's data residency"},"vendor_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Country","description":"ISO 3166-1 alpha-2 country code of the vendor company's location"},"is_recommended":{"type":"boolean","title":"Is Recommended","description":"Whether this entry is recommended","default":false},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}],"description":"Authentication scheme the MCP server expects, if any"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config","description":"Credential-free authentication template describing where the credential goes (e.g. API-key header name and location). Credential values are rejected - they belong to the MCP server created from this entry."},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","description":"Whether each user must connect their own account before the server's tools can be used","default":false}},"type":"object","required":["category_id","server_url"],"title":"UpdateMCPCatalogEntryPayloadSchema"},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The UpdateMCPCatalogEntryTranslationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateMCPCatalogEntryTranslationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the MCP catalog entry"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the MCP catalog entry"}},"type":"object","required":["name"],"title":"UpdateMCPCatalogEntryTranslationPayloadSchema"}}}}
```

## The UpdateMCPServerPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateMCPServerPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config"},"requires_user_connection":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requires User Connection"}},"type":"object","required":["name","identifier"],"title":"UpdateMCPServerPayloadSchema","description":"Pydantic schema for updating an MCP server."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The UpdateMCPServerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateMCPServerResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"organisation_id":{"type":"integer","title":"Organisation Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"mcp_catalog_entry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Catalog Entry Id"},"auth_scheme":{"anyOf":[{"$ref":"#/components/schemas/AuthScheme"},{"type":"null"}]},"requires_user_connection":{"type":"boolean","title":"Requires User Connection","default":false}},"type":"object","required":["id","organisation_id","name","identifier","config","is_enabled","mcp_catalog_entry_id"],"title":"UpdateMCPServerResponseSchema","description":"Pydantic schema for MCP server update response."},"AuthScheme":{"type":"string","enum":["none","basic","bearer","api_key","cookie","oauth2"],"title":"AuthScheme"}}}}
```

## The UpdateMetricProviderPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateMetricProviderPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"type":{"$ref":"#/components/schemas/MetricProviderType"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["name","identifier","type"],"title":"UpdateMetricProviderPayloadSchema","description":"Pydantic schema for updating a metric provider."},"MetricProviderType":{"type":"string","enum":["rule_based","user_feedback","deepeval","geval","ragas"],"title":"MetricProviderType","description":"Supported metric provider implementation strategies.\n\nIdentifies *which backend\ncomputes the score* (rule-based SQL aggregation, a GEval judge call,\nthe deepeval library, ...), not the specific metric being measured — a\nsingle provider type's handler can expose several metrics (see\n`EvaluationMetric`/`EvaluationMetricSet`, returned by\n`MetricProviderHandler.get_available_metrics`).\n\nOnly RULE_BASED and GEVAL have registered handlers (see\n`api/deps.py::get_metric_provider_handlers`) — the rest are reserved for\nthe implementation strategies identified in the quality-monitoring spec so\n`MetricProvider` entities of these types can already be created/configured;\nevaluating them raises `UnsupportedFeatureError` until their handlers are\nimplemented."}}}}
```

## The UpdateModelStatusPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateModelStatusPayloadSchema":{"properties":{"status":{"$ref":"#/components/schemas/ModelStatus"}},"type":"object","required":["status"],"title":"UpdateModelStatusPayloadSchema","description":"Pydantic schema for updating a model's status."},"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"}}}}
```

## The UpdateModelStatusesPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateModelStatusesPayloadSchema":{"properties":{"updates":{"items":{"$ref":"#/components/schemas/ModelStatusUpdateSchema"},"type":"array","minItems":1,"title":"Updates"}},"type":"object","required":["updates"],"title":"UpdateModelStatusesPayloadSchema","description":"Pydantic schema for updating multiple models' statuses in one request."},"ModelStatusUpdateSchema":{"properties":{"model_id":{"type":"string","title":"Model Id"},"status":{"$ref":"#/components/schemas/ModelStatus"}},"type":"object","required":["model_id","status"],"title":"ModelStatusUpdateSchema","description":"Pydantic schema for a single model's status within a bulk update."},"ModelStatus":{"type":"string","enum":["enabled","disabled"],"title":"ModelStatus"}}}}
```

## The UpdateNodePayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateNodePayloadSchema":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Summary","description":"Free-text summary of the node. Omit to leave it unchanged, or pass null (or a blank string) to clear it."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Free-form JSON object of the caller's own keys and values — anything the organisation wants to record against the node (owner, department, retention class, external ids). Must be an object, not an array or a scalar; at most 64 top-level keys and 16384 bytes once serialized. An empty object is stored as no metadata. Replaces the stored object wholesale rather than merging into it: keys absent from the value you send are removed. Omit to leave it unchanged, or pass null to clear it."}},"type":"object","title":"UpdateNodePayloadSchema","description":"Request schema for a node's own attributes (not the document body).\n\nPATCH semantics: an omitted field is left unchanged. A `null` summary or\n`metadata` clears it; `name` cannot be nulled (a node always has one) — omit\nit instead. At least one field must be present, so a payload that would change\nnothing is rejected rather than silently bumping the audit stamps.\n\n`None` therefore means two different things in this schema — the default for a\nfield the client omitted, and an explicit \"clear it\" — and only\n`model_fields_set` separates them. `to_dto` is what resolves that ambiguity, so\nthe two readings never escape this class."}}}}
```

## The UpdateNotificationPreferencesPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateNotificationPreferencesPayloadSchema":{"properties":{"preferences":{"items":{"$ref":"#/components/schemas/SetNotificationPreferencePayloadSchema"},"type":"array","minItems":1,"title":"Preferences"}},"type":"object","required":["preferences"],"title":"UpdateNotificationPreferencesPayloadSchema","description":"Payload schema for a batch of preferences applied as one transaction."},"SetNotificationPreferencePayloadSchema":{"properties":{"channel":{"$ref":"#/components/schemas/NotificationChannel"},"enabled":{"type":"boolean","title":"Enabled"},"notification_type":{"anyOf":[{"$ref":"#/components/schemas/NotificationType"},{"type":"null"}],"description":"Type the preference applies to; omit to set the caller's channel-wide default, which every type falls back to"}},"type":"object","required":["channel","enabled"],"title":"SetNotificationPreferencePayloadSchema","description":"Payload schema for one preference the caller is setting."},"NotificationChannel":{"type":"string","enum":["IN_APP","EMAIL","PUSH"],"title":"NotificationChannel","description":"A way a notification can reach the recipient."},"NotificationType":{"type":"string","enum":["EXECUTION_COMPLETED","EXECUTION_FAILED","BUDGET_THRESHOLD_REACHED","BUDGET_DEPLETED","REPORT_READY"],"title":"NotificationType","description":"The kinds of fact the platform notifies a user about."}}}}
```

## The UpdateOrganisationPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateOrganisationPayloadSchema":{"properties":{"name":{"type":"string","title":"Name"},"summary":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Summary"},"default_language_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Language Model Provider Id"},"default_model_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Default Model Id"},"default_embedding_model_provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Embedding Model Provider Id"},"default_embedding_model_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Default Embedding Model Id"},"default_assistant_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Assistant Agent Id"}},"type":"object","required":["name"],"title":"UpdateOrganisationPayloadSchema","description":"Pydantic schema for updating user's organisation."}}}}
```

## The UpdateToolStatusPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateToolStatusPayloadSchema":{"properties":{"status":{"$ref":"#/components/schemas/ToolStatus"}},"type":"object","required":["status"],"title":"UpdateToolStatusPayloadSchema","description":"Pydantic schema for updating a tool's status."},"ToolStatus":{"type":"string","enum":["enabled","disabled"],"title":"ToolStatus"}}}}
```

## The UpdateTriggerPayloadSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UpdateTriggerPayloadSchema":{"properties":{"config":{"additionalProperties":true,"type":"object","title":"Config"},"agent_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Agent Args"}},"type":"object","required":["config"],"title":"UpdateTriggerPayloadSchema","description":"Request body for updating a trigger.\n\n`config` is merged into the stored config at the top level: keys present\nin the body overwrite stored values, omitted keys are preserved. This\nmakes partial edits possible — in particular sensitive webhook keys\n(`token`, `secret`), which are stripped on read and so can never be\nechoed back by a client. Send an explicit `null` to clear a field. The\nmerge happens in `_validate_update_trigger_payload`.\n`agent_args` is optional and behaves like `config`: omit it to keep the\nexisting value, or send it (a value, or `null` for \"no extra args\") to\nreplace it. The route distinguishes omitted from explicit via\n`model_fields_set`; the service preserves the existing beat kwargs when\nit's omitted (they aren't persisted on the row)."}}}}
```

## The UsageDimension object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UsageDimension":{"type":"string","enum":["AGENT","USER","EXECUTION","CONVERSATION"],"title":"UsageDimension","description":"The dimension a usage aggregation groups spend by.\n\nBacks the flagship \"which agents are the most expensive?\" query and its\nsiblings; each value maps to a column on `credit_entry_attribution`.\n\n`EXECUTION` and `CONVERSATION` both group by a unit of work, and neither is a\nsubset of the other: a triggered run has an execution and charges its\nwall-clock there, while a chat turn has only a conversation (see\n`ChargeableMetric.CONVERSATION_TURN_TIME`). So an organisation that mostly\nchats reads almost nothing under `EXECUTION`, and grouping by `CONVERSATION`\nis what answers \"which conversations cost us the most?\"."}}}}
```

## The UsageGranularity object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UsageGranularity":{"type":"string","enum":["DAY","WEEK","MONTH"],"title":"UsageGranularity","description":"The time bucket a usage time series groups spend into.\n\nDeliberately its own enum rather than the execution domain's `UsageGrouping`:\nthat one offers `TOTAL`/`YEAR` (which a credit series does not) and no `WEEK`\n(which it does), so reusing it would advertise members this aggregation\ncannot honour.\n\nThe bucket arithmetic lives on the enum because two places need to agree on\nit: the repository groups rows with the equivalent SQL `date_trunc`, and the\nservice reuses these methods to zero-fill the buckets that produced no spend.\nWere the two to disagree, a bucket would silently vanish from the series."}}}}
```

## The UsageGrouping object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UsageGrouping":{"type":"string","enum":["TOTAL","DAY","MONTH","YEAR"],"title":"UsageGrouping","description":"Time-period granularity for aggregated execution usage."}}}}
```

## The UserAdoptionResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserAdoptionResponseSchema":{"properties":{"invited_count":{"type":"integer","title":"Invited Count","description":"Number of users invited to the organisation (all non-deleted users)"},"activated_count":{"type":"integer","title":"Activated Count","description":"Number of users who have activated their account (ACTIVE status)"}},"type":"object","required":["invited_count","activated_count"],"title":"UserAdoptionResponseSchema","description":"Response schema for user adoption statistics."}}}}
```

## The UserAgentRecommendationListItemResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserAgentRecommendationListItemResponseSchema":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"recommendation_id":{"type":"integer","title":"Recommendation Id"},"data":{"items":{"$ref":"#/components/schemas/AgentRecommendationResultListItemResponseSchema"},"type":"array","title":"Data"}},"type":"object","required":["user_id","recommendation_id","data"],"title":"UserAgentRecommendationListItemResponseSchema"},"AgentRecommendationResultListItemResponseSchema":{"properties":{"result_id":{"type":"integer","title":"Result Id"},"agents_catalog_entry_id":{"type":"integer","title":"Agents Catalog Entry Id"},"identifier":{"type":"string","title":"Identifier"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Engine-specific values behind this recommendation; the keys depend on the algorithm and may be absent entirely. The popularity algorithm reports installation and execution counts, where `execution_count_change_percentage` compares the last 30 days against the preceding 30 days and is null without a baseline."}},"type":"object","required":["result_id","agents_catalog_entry_id","identifier"],"title":"AgentRecommendationResultListItemResponseSchema"}}}}
```

## The UserAgentRecommendationListResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserAgentRecommendationListResponseSchema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserAgentRecommendationListItemResponseSchema"},"type":"array","title":"Data"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["data","total_count"],"title":"UserAgentRecommendationListResponseSchema"},"UserAgentRecommendationListItemResponseSchema":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"recommendation_id":{"type":"integer","title":"Recommendation Id"},"data":{"items":{"$ref":"#/components/schemas/AgentRecommendationResultListItemResponseSchema"},"type":"array","title":"Data"}},"type":"object","required":["user_id","recommendation_id","data"],"title":"UserAgentRecommendationListItemResponseSchema"},"AgentRecommendationResultListItemResponseSchema":{"properties":{"result_id":{"type":"integer","title":"Result Id"},"agents_catalog_entry_id":{"type":"integer","title":"Agents Catalog Entry Id"},"identifier":{"type":"string","title":"Identifier"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Engine-specific values behind this recommendation; the keys depend on the algorithm and may be absent entirely. The popularity algorithm reports installation and execution counts, where `execution_count_change_percentage` compares the last 30 days against the preceding 30 days and is null without a baseline."}},"type":"object","required":["result_id","agents_catalog_entry_id","identifier"],"title":"AgentRecommendationResultListItemResponseSchema"}}}}
```

## The UserMeResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserMeResponseSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"User ID"},"email":{"type":"string","title":"Email","description":"User email"},"status":{"$ref":"#/components/schemas/UserStatus","description":"User account status"},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"Whether the user is a superuser"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"User's full name"},"organisation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organisation Id","description":"Organisation ID"},"job_position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Position","description":"User's job position"},"job_activities":{"items":{"type":"string"},"type":"array","title":"Job Activities","description":"User's job activities"},"newsletter_consent":{"type":"boolean","title":"Newsletter Consent","description":"Newsletter consent","default":false},"preferred_locale":{"anyOf":[{"$ref":"#/components/schemas/PreferredLocale"},{"type":"null"}],"description":"User's preferred locale for the product UI"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"Cacheable URL to the user's avatar, or null if none is set"}},"type":"object","required":["id","email","status","is_superuser"],"title":"UserMeResponseSchema","description":"Response schema for current user information."},"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"},"PreferredLocale":{"type":"string","enum":["en-US","es-ES","fr-FR","de-DE"],"title":"PreferredLocale","description":"Locales the product's UI is currently translated into."}}}}
```

## The UserStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserStatus":{"type":"string","enum":["ACTIVE","INACTIVE","BLOCKED"],"title":"UserStatus","description":"Account status of a user.\n\nState machine transitions:\n- INACTIVE → ACTIVE (activate)\n- ACTIVE → INACTIVE (deactivate)\n- ACTIVE → BLOCKED (block)\n- BLOCKED → ACTIVE (unblock)"}}}}
```

## The UserUpdateMeRequestSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserUpdateMeRequestSchema":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"},"job_position":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Job Position"},"job_activities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Job Activities"},"newsletter_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Newsletter Consent"},"preferred_locale":{"anyOf":[{"$ref":"#/components/schemas/PreferredLocale"},{"type":"null"}],"description":"Must be one of the product's supported UI locales"}},"type":"object","title":"UserUpdateMeRequestSchema","description":"Request schema for updating current user."},"PreferredLocale":{"type":"string","enum":["en-US","es-ES","fr-FR","de-DE"],"title":"PreferredLocale","description":"Locales the product's UI is currently translated into."}}}}
```

## The UserUpdatePasswordRequestSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"UserUpdatePasswordRequestSchema":{"properties":{"current_password":{"type":"string","maxLength":64,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":64,"minLength":15,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"UserUpdatePasswordRequestSchema","description":"Request schema for updating password."}}}}
```

## The ValidationError object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## The VerifyMCPServerResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"VerifyMCPServerResponseSchema":{"properties":{"status":{"type":"string","title":"Status"},"tools":{"items":{"$ref":"#/components/schemas/ToolResponseSchema"},"type":"array","title":"Tools"},"tool_count":{"type":"integer","title":"Tool Count"},"verified_at":{"type":"string","format":"date-time","title":"Verified At"},"server_info":{"anyOf":[{"$ref":"#/components/schemas/MCPServerInfoSchema"},{"type":"null"}]},"version":{"$ref":"#/components/schemas/MCPServerVersionSchema"}},"type":"object","required":["status","tools","tool_count","verified_at","server_info","version"],"title":"VerifyMCPServerResponseSchema","description":"Pydantic schema for MCP server verification response."},"ToolResponseSchema":{"properties":{"name":{"type":"string","title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"type":"string","title":"Description"},"display_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Description"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"},"output_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Schema"},"annotations":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Annotations"},"status":{"$ref":"#/components/schemas/ToolStatus"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"}},"type":"object","required":["name","title","description","display_description","input_schema","output_schema","annotations","status","categories"],"title":"ToolResponseSchema","description":"Pydantic schema for tool response."},"ToolStatus":{"type":"string","enum":["enabled","disabled"],"title":"ToolStatus"},"MCPServerInfoSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"websiteUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Websiteurl"},"icons":{"anyOf":[{"items":{"$ref":"#/components/schemas/MCPServerIconSchema"},"type":"array"},{"type":"null"}],"title":"Icons"}},"type":"object","title":"MCPServerInfoSchema","description":"Pydantic schema for MCP server info returned during initialization."},"MCPServerIconSchema":{"properties":{"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src"},"mimeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mimetype"},"sizes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sizes"}},"type":"object","title":"MCPServerIconSchema","description":"Pydantic schema for an MCP server icon."},"MCPServerVersionSchema":{"properties":{"installed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed"},"available":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available"},"new_version_available":{"type":"boolean","title":"New Version Available","default":false},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"}},"type":"object","title":"MCPServerVersionSchema","description":"Pydantic schema for an MCP server's version / update availability.\n\n``installed`` is the version reported at the last successful verification;\n``available`` is the newest version seen upstream by the most recent version\ncheck. ``new_version_available`` is derived from the two by Semantic\nVersioning precedence, so it is never stale relative to them, and it stays\nfalse for a rollback or for versions that cannot be ordered."}}}}
```

## The VersionStatus object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"VersionStatus":{"type":"string","enum":["draft","publishing","published","archived"],"title":"VersionStatus","description":"Publication state of a single knowledge-document version.\n\nA version is created `DRAFT` (editable, not live). Requesting publication\nmoves it to `PUBLISHING` (edit-locked) while its chunks are embedded; once\nthe embeddings are ready the pointer flip marks it `PUBLISHED` and the\npreviously published version becomes `ARCHIVED`. A rollback re-publishes an\n`ARCHIVED` version through the same `PUBLISHING` state. A failed go-live\nreturns the version to its pre-attempt state: a failed publish reverts to\n`DRAFT`, a failed rollback reverts to `ARCHIVED` (see `PublishOrigin`).\n\nLegal transitions are enforced by the `KnowledgeDocumentVersion` entity (its\nstatus setter is a state machine); this enum only names the states. Only\n`knowledge_document.published_version_id` decides what retrieval serves —\nthe status is descriptive history metadata for the UI."}}}}
```

## The WebhookResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"WebhookResponseSchema":{"properties":{"execution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["execution_id","status"],"title":"WebhookResponseSchema","description":"Response schema for webhook endpoint."}}}}
```

## The WebhookTriggerConfig object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"WebhookTriggerConfig":{"properties":{"signature_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Signature Required"},"rate_limit_per_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Minute"},"ip_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ip Allowlist"},"signature_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature Header Name"},"timestamp_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp Header Name"},"idempotency_header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Header Name"},"message_filter":{"anyOf":[{"$ref":"#/components/schemas/MessageFilter"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"WebhookTriggerConfig","description":"Config for webhook trigger definitions.\n\n`token` and `secret` are intentionally excluded — they are sensitive credentials that\nmust be generated by the caller (see build_webhook_credentials).\n\nextra=\"ignore\" + json_schema_extra additionalProperties:false for OpenAI compatibility."},"MessageFilter":{"properties":{"match":{"type":"string","enum":["all","any"],"title":"Match","default":"all"},"rules":{"items":{"$ref":"#/components/schemas/MessageFilterRule"},"type":"array","title":"Rules"}},"additionalProperties":false,"type":"object","required":["rules"],"title":"MessageFilter","description":"Payload filter for a webhook trigger.\n\nA payload that doesn't match is accepted but skipped — no execution is created and\nthe delivery is recorded as FILTERED."},"MessageFilterRule":{"properties":{"field":{"type":"string","title":"Field"},"operator":{"type":"string","enum":["equals","not_equals","in","contains","regex","exists"],"title":"Operator"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Value"}},"additionalProperties":false,"type":"object","required":["field","operator"],"title":"MessageFilterRule","description":"A single field/operator rule inside a webhook message filter.\n\n`value` is typed as a scalar union to satisfy OpenAI structured-output requirements\n(which reject untyped schemas). Nested-object values are not supported here but are\nnot meaningful for LLM-generated filters anyway."}}}}
```

## The app\_\_api\_\_routes\_\_message\_\_message\_\_MessageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"app__api__routes__message__message__MessageResponseSchema":{"properties":{"id":{"type":"integer","title":"Id"},"conversation_id":{"type":"integer","title":"Conversation Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"tool_status":{"anyOf":[{"$ref":"#/components/schemas/ToolCallStatus"},{"type":"null"}],"description":"How a tool call ended. Null on every message that is not a tool result, and on tool results from runs that predate the outcome being recorded — null never means the call succeeded"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","conversation_id","role","content","action","tool_name","created_at"],"title":"MessageResponseSchema","description":"Pydantic schema for message response."},"ToolCallStatus":{"type":"string","enum":["success","error"],"title":"ToolCallStatus","description":"How a tool call ended, as the model was told.\n\nA failing tool does not end the run: tool errors are turned into ordinary\ntool messages carrying this status, so the agent can read the failure and\ncarry on. That makes this the only record of which calls actually worked —\nabsence of the status means unknown, never success."}}}}
```

## The app\_\_api\_\_routes\_\_schemas\_\_MessageResponseSchema object

```json
{"openapi":"3.1.0","info":{"title":"Ibexa Agentic Marketing Platform","version":"0.1.0"},"components":{"schemas":{"app__api__routes__schemas__MessageResponseSchema":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"MessageResponseSchema","description":"Response schema for simple message responses."}}}}
```
