{"openapi":"3.1.0","info":{"title":"Spade API","description":"\n    Unified Spade API. Routes are namespaced by path:\n\n    - /v0/platform/*      Gateway (orgs, users, memberships, API keys, capability catalog)\n    - /v0/auth/resolve    Auth resolver\n    - /v0/integrations/*  Third-party integrations (QuickBooks, OneFeed, FarmES, ...)\n    - /v0/data/*          SpadeQL endpoint\n    - /v0/farm/*          Spade Farm product API (farms, pens, dashboards)\n    - /v0/enterprise/*    Spade Enterprise product API\n\n    ## Authentication\n    Every authenticated route accepts either:\n    - `X-API-Key: sk_(org|user|service)_...` (or `Authorization: Bearer <same>`)\n    - `Authorization: Bearer <JWT>`\n    ","version":"1.0.0"},"paths":{"/v0/platform/organizations/usage":{"get":{"tags":["platform","analytics","public"],"summary":"Get API usage statistics for the caller's organization over a time range.","description":"Get organization-wide usage stats","operationId":"get_organization_usage","parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","pattern":"^(hourly|daily|monthly)$","default":"hourly","title":"Granularity"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["analytics:read"],"x-spade-public":true,"x-mcp-tags":["analytics"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/analytics-contract":{"get":{"tags":["platform","analytics","public"],"summary":"How Spade identifies customers in product analytics. Call this before querying analytics. Join a farm name via get_org_by_slug, then filter by the organization UUID group. distinct_id is the internal Spade user UUID. Errors are $exception, not a custom exception event.","description":"Tiny taxonomy for Claude/ChatGPT + MCP. Keep this payload small.","operationId":"analytics_contract","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analytics Contract V0 Platform Analytics Contract Get"}}}}},"x-spade-public":true,"x-mcp-tags":["analytics"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/sites":{"get":{"tags":["platform","orgs","public"],"summary":"List all sites (physical locations) belonging to a farm organization.","operationId":"list_farm_sites","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"environment","in":"query","required":false,"schema":{"type":"string","default":"production","title":"Environment"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteOut"},"title":"Response List Farm Sites V0 Platform Orgs  Org Id  Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["farms","sites"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Create a new site (physical location) under a farm organization.","operationId":"create_farm_site","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"environment","in":"query","required":false,"schema":{"type":"string","default":"production","title":"Environment"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","sites"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/viewer-access":{"get":{"tags":["platform","orgs","public"],"summary":"Return the caller's access origin, optional site ceiling, write_site_ids (null / [] / farm list), unfiltered production site count, and data domains for a farm organization. site_ids is visibility (null = whole org). write_site_ids is write capability and is not a visibility clip. domains is the resolved DataScope bag. Origin data + empty means connected, not shared lake domains (not all domains).","operationId":"get_farm_viewer_access","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewerAccessOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["farms","sites"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/sites/{site_id}":{"put":{"tags":["platform","orgs","public"],"summary":"Update an existing farm site's name, address, or contact details.","operationId":"update_farm_site","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"environment","in":"query","required":false,"schema":{"type":"string","default":"production","title":"Environment"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","sites"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Delete a farm site. Fails if integrations still reference it.","operationId":"delete_farm_site","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"environment","in":"query","required":false,"schema":{"type":"string","default":"production","title":"Environment"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","sites"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/integration-providers":{"get":{"tags":["platform","orgs","public"],"summary":"List available integration providers (e.g. DairyComp, FeedWatch) for a farm.","operationId":"list_farm_integration_providers","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/integrations":{"get":{"tags":["platform","orgs","public"],"summary":"List all configured integrations for a farm organization.","operationId":"list_farm_integrations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Create a new data integration for a farm (e.g. connect DairyComp or FeedWatch).","operationId":"create_farm_integration","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/integrations/{integration_id}":{"get":{"tags":["platform","orgs","public"],"summary":"Get a single farm integration by ID.","operationId":"get_farm_integration","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["platform","orgs","public"],"summary":"Update configuration for an existing farm integration.","operationId":"update_farm_integration","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Remove a data integration from a farm organization.","operationId":"delete_farm_integration","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/integrations/{integration_id}/channels":{"get":{"tags":["platform","orgs","public"],"summary":"List channels configured for a farm integration.","operationId":"list_farm_integration_channels","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["channels","farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Add a new channel (api or streamer; read or write) to a farm integration.","operationId":"add_farm_integration_channel","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["channels","farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/integrations/{integration_id}/channels/{channel_id}":{"patch":{"tags":["platform","orgs","public"],"summary":"Update a channel on a farm integration (direction, device binding, health fields).","operationId":"update_farm_integration_channel","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["channels","farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Delete a channel from a farm integration.","operationId":"delete_farm_integration_channel","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["channels","farms","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/integrations/oauth/{provider}/authorize_url":{"post":{"tags":["platform","orgs","public"],"summary":"Get the OAuth authorization URL to connect a third-party integration provider.","description":"Farm-scoped wrapper around ``POST /integrations/v1/auth/{provider}/authorize_url``.\n\nLives on the farm router so the dashboard can build the OAuth start URL\nwithout crossing service boundaries from the browser. The integrations\nservice still does the per-site lookup and the cross-tenant gate inside\n``get_integration_model`` — this wrapper only adds the farm-org access\ncheck that's standard for everything under ``/platform/v1/orgs/...``.","operationId":"get_farm_integration_authorize_url","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","description":"Site whose per-site OAuth slot to authorize","title":"Site Id"},"description":"Site whose per-site OAuth slot to authorize"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["farms","integrations","oauth"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-maps":{"get":{"tags":["platform","orgs","public"],"summary":"List Farm Entity Maps","operationId":"list_farm_entity_maps_v0_platform_orgs__org_id__entity_maps_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"integration_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"}},{"name":"internal_entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Entity Type"}},{"name":"concept_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Concept Id"}},{"name":"unmapped","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unmapped"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Create Farm Entity Map","operationId":"create_farm_entity_map_v0_platform_orgs__org_id__entity_maps_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-maps/bulk":{"post":{"tags":["platform","orgs","public"],"summary":"Bulk Create Farm Entity Maps","operationId":"bulk_create_farm_entity_maps_v0_platform_orgs__org_id__entity_maps_bulk_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapBulkIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-maps/merge":{"post":{"tags":["platform","orgs","public"],"summary":"Merge Farm Entity Maps","operationId":"merge_farm_entity_maps_v0_platform_orgs__org_id__entity_maps_merge_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapMergeIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-maps/{map_id}":{"put":{"tags":["platform","orgs","public"],"summary":"Update Farm Entity Map","operationId":"update_farm_entity_map_v0_platform_orgs__org_id__entity_maps__map_id__put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Delete Farm Entity Map","operationId":"delete_farm_entity_map_v0_platform_orgs__org_id__entity_maps__map_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-maps/{map_id}/unmap":{"post":{"tags":["platform","orgs","public"],"summary":"Unmap Farm Entity Map","operationId":"unmap_farm_entity_map_v0_platform_orgs__org_id__entity_maps__map_id__unmap_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-rollups":{"get":{"tags":["platform","orgs","public"],"summary":"List Farm Entity Rollups","operationId":"list_farm_entity_rollups_v0_platform_orgs__org_id__entity_rollups_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"target_entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Entity Type"}},{"name":"target_internal_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Internal Id"}},{"name":"metric","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Create Farm Entity Rollup","operationId":"create_farm_entity_rollup_v0_platform_orgs__org_id__entity_rollups_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRollupIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/entity-rollups/{rollup_id}":{"put":{"tags":["platform","orgs","public"],"summary":"Update Farm Entity Rollup","operationId":"update_farm_entity_rollup_v0_platform_orgs__org_id__entity_rollups__rollup_id__put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"rollup_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rollup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRollupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Delete Farm Entity Rollup","operationId":"delete_farm_entity_rollup_v0_platform_orgs__org_id__entity_rollups__rollup_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"rollup_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rollup Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/etl/sources":{"get":{"tags":["platform","ETL","public"],"summary":"List all ETL data sources as flat integration+site records. Filter by provider, org_id, site_id, integration_id, channel_transport, or channel_direction.","description":"Return active ETL data sources as flat per-site records.\n\nInactive integrations are excluded. Channels need a live direction\n(declared ∧ can_* ∧ grant); ``channel_direction`` is that live set\n(r/w/rw). Consumers accept direction via set membership, never ``==``.","operationId":"list_etl_sources","parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by organisation ID","title":"Org Id"},"description":"Filter by organisation ID"},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by site ID","title":"Site Id"},"description":"Filter by site ID"},{"name":"integration_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by integration ID","title":"Integration Id"},"description":"Filter by integration ID"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider slug (e.g. 'foremost', 'tmr_tracker')","title":"Provider"},"description":"Filter by provider slug (e.g. 'foremost', 'tmr_tracker')"},{"name":"channel_transport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by channel transport (api, streamer, email, scraper)","title":"Channel Transport"},"description":"Filter by channel transport (api, streamer, email, scraper)"},{"name":"channel_direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact-class filter on *live* channel direction: 'r', 'w', or 'rw'. Optional — the default list does not require it. Channels with no live direction are omitted from the payload. Consumers of the payload must use set membership (read: in ('r','rw'); write: in ('w','rw')), never equality.","title":"Channel Direction"},"description":"Exact-class filter on *live* channel direction: 'r', 'w', or 'rw'. Optional — the default list does not require it. Channels with no live direction are omitted from the payload. Consumers of the payload must use set membership (read: in ('r','rw'); write: in ('w','rw')), never equality."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationETLOut"},"title":"Response List Etl Sources V0 Platform Etl Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["etl:read"],"x-spade-public":true,"x-mcp-tags":["etl"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/scopes/catalog":{"get":{"tags":["platform","scopes","public"],"summary":"Get the scope catalog for the API-key permission picker, pre-filtered for the caller's org.","description":"Return the scope catalog the API-key picker should render.\n\nEvery resource here is a top-level entry from the capability catalog\n(see :func:`app.auth.catalog.known_top_level_resources`) and is\ntherefore grantable via :func:`app.auth.scopes.assert_can_mint`.\n``visible`` is pre-computed against the caller's org so the FE can\nrender the table without re-deriving the rules.","operationId":"get_scope_catalog","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Scope Catalog V0 Platform Scopes Catalog Get"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["scopes"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/catalog/capabilities":{"get":{"tags":["platform","catalog","public"],"summary":"List every capability (permission) the platform knows about, with slug, resource, and kind.","description":"List every capability the platform knows about.\n\nEach row carries the slug, the top-level resource, a ``kind``\nclassifier (``gated_by_api_access`` for proxied data services,\n``always_available`` for gateway-internal, ``custom`` for new\nnamespaces) and a one-line description suitable for picker UIs.","operationId":"list_capabilities","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},"type":"object","title":"Response List Capabilities V0 Platform Catalog Capabilities Get"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["catalog"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/catalog/bundles":{"get":{"tags":["platform","catalog","public"],"summary":"List capability bundles and their expanded capability sets.","description":"List every capability bundle and its expanded capability set.\n\n``expanded_capabilities`` is the recursive flatten — including\nnested bundles — so the consumer doesn't have to walk the bundle\ngraph itself when rendering a role.","operationId":"list_capability_bundles","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"type":"object","title":"Response List Bundles V0 Platform Catalog Bundles Get"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["catalog"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/catalog/roles":{"get":{"tags":["platform","catalog","public"],"summary":"List all built-in roles and their expanded capability sets.","description":"List every built-in role plus its expanded capability set.\n\nCustom roles defined per-org live in :class:`CustomRole` and are\nsurfaced via the org-scoped ``/platform/v1/orgs/{org_id}/roles`` endpoint\n(Phase 1.5), not here. Built-in roles are immutable from a tenant\nperspective.\n\n``default_by_org_type`` is a map of ``Organization.type`` → default\nseat slug, not a list — the invite pickers read that key as SoT.","operationId":"list_builtin_roles","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Roles V0 Platform Catalog Roles Get"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["catalog"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/catalog/data-domains":{"get":{"tags":["platform","catalog","public"],"summary":"List the closed data-domain vocabulary and default consent packs.","description":"Closed data-domain list plus default consent packs by org type.","operationId":"list_data_domains","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Data Domains V0 Platform Catalog Data Domains Get"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["catalog"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/geocoding/reverse":{"get":{"tags":["platform","geocoding","public"],"summary":"Resolve a latitude/longitude pair to a full address plus its street, city, state and zip parts.","operationId":"reverse_geocode_coordinates","parameters":[{"name":"latitude","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude in decimal degrees","title":"Latitude"},"description":"Latitude in decimal degrees"},{"name":"longitude","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude in decimal degrees","title":"Longitude"},"description":"Longitude in decimal degrees"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseGeocodeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["geocoding"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/geocoding/forward":{"get":{"tags":["platform","geocoding","public"],"summary":"Resolve a street, city, state and zip into a latitude/longitude pair plus the provider's formatted address.","operationId":"forward_geocode_address","parameters":[{"name":"street_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address including house number","title":"Street Name"},"description":"Street address including house number"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City, town or village","title":"City"},"description":"City, town or village"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State, province or region, abbreviated or full","title":"State"},"description":"State, province or region, abbreviated or full"},{"name":"zip_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Postal code","title":"Zip Code"},"description":"Postal code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForwardGeocodeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["geocoding"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/me":{"get":{"tags":["platform","me","public"],"summary":"Return the resolved identity (principal) for the current caller's credential.","description":"Return the resolved :class:`Principal` for the current caller.\n\nIdentical payload to :func:`/auth/v1/resolve` — the duplicate route\nexists so first-party clients (Dev Portal / Farm / Enterprise) can\nuse a self-describing URL while server-to-server callers reuse the\nauth-resolve name.","operationId":"get_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Me V0 Platform Me Get"}}}}},"x-spade-public":true,"x-mcp-tags":["identity"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/me/organizations":{"get":{"tags":["platform","me","public"],"summary":"List every organization the calling user is a member of, with their role in each.","description":"List every org the calling user is a member of (one row per org).\n\n``role`` / ``membership_id`` come from the org-ceiling seat\n(``site_id`` null). Site assignments stay on members detail.\n\nService-account credentials (no bound user) get an empty list. We\nintentionally do not infer a \"synthetic\" org membership for service\nkeys here — they belong to *one* org (the org_id on the key) and\nthe org-switcher doesn't apply to them.\n\nWhen ``q`` is provided, results are filtered server-side and sorted\nby trigram similarity to ``q`` (descending) instead of alphabetically.\nThe filter runs against the ``gateway.organizations`` trigram GIN\nindex created in revision ``d4e5f6a7b8c9``.","operationId":"list_my_organizations","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Optional fuzzy-search filter on organization name. Uses pg_trgm similarity (``name % :q``) when 3+ chars; falls back to a case-insensitive prefix match for shorter queries.","title":"Q"},"description":"Optional fuzzy-search filter on organization name. Uses pg_trgm similarity (``name % :q``) when 3+ chars; falls back to a case-insensitive prefix match for shorter queries."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum memberships to return.","default":200,"title":"Limit"},"description":"Maximum memberships to return."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","additionalProperties":true}},"title":"Response List My Organizations V0 Platform Me Organizations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"x-mcp-tags":["identity","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}":{"get":{"tags":["platform","orgs","public"],"summary":"Look up an organization by its UUID. Returns name, type, plan, and contact info.","description":"Return basic org metadata visible to any member.","operationId":"get_org","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["platform","orgs","public"],"summary":"Update organization branding (logo). Requires memberships:write.","operationId":"update_org","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/assets/presign":{"post":{"tags":["platform","orgs","public"],"summary":"Mint a presigned S3 PUT for an organization branding asset (logo).","operationId":"presign_org_asset","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgAssetPresignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgAssetPresignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/logo":{"get":{"tags":["platform","orgs","public"],"summary":"Stream the organization's logo image. 404 if none is set.","operationId":"get_org_logo","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{developer_org_id}/owned-orgs":{"get":{"tags":["platform","orgs","public"],"summary":"List all farm organizations owned by a developer org.","operationId":"list_owned_farm_orgs","parameters":[{"name":"developer_org_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgSummary"},"title":"Response List Owned Farm Orgs V0 Platform Orgs  Developer Org Id  Owned Orgs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["farms","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Create a new farm organization owned by the given developer org.","operationId":"create_owned_farm_org","parameters":[{"name":"developer_org_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmOrgCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmOrgBootstrapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["farms","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{developer_org_id}/owned-orgs/{farm_org_id}":{"patch":{"tags":["platform","orgs","public"],"summary":"Update name or contact details of a farm org owned by a developer org.","operationId":"update_owned_farm_org","parameters":[{"name":"developer_org_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Org Id"}},{"name":"farm_org_id","in":"path","required":true,"schema":{"type":"string","title":"Farm Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmOrgUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["farms","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Soft-delete a farm organization owned by a developer org.","operationId":"delete_owned_farm_org","parameters":[{"name":"developer_org_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Org Id"}},{"name":"farm_org_id","in":"path","required":true,"schema":{"type":"string","title":"Farm Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["farms","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members":{"get":{"tags":["platform","orgs","public"],"summary":"List all members of an organization with their roles.","description":"List every member of ``org_id`` along with their role slug.","operationId":"list_org_members","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MembershipResponse"},"title":"Response List Members V0 Platform Orgs  Org Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["members","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Add an existing user to an organization with a given role.","description":"Add a user to an org with a given role.\n\nThe user must already exist in ``users`` (they must have signed in\nat least once). If they aren't on the platform yet, send an\ninvitation first; this endpoint does not auto-provision pending users.","operationId":"add_org_member","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["members","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{membership_id}":{"patch":{"tags":["platform","orgs","public"],"summary":"Change a member's role within an organization.","description":"Change a member's role slug.","operationId":"update_org_member","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","title":"Membership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["members","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Remove a member from an organization.","description":"Remove a member from the org.","operationId":"remove_org_member","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","title":"Membership Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["members","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{membership_id}/site-assignments":{"put":{"tags":["platform","orgs","public"],"summary":"Replace a member's per-site seats. The org-ceiling stays live.","description":"Replace site seats for a member.\n\nSite PUT replaces site seats only. The org-ceiling stays live.\nSame slug at org and site is allowed (narrowing). Empty list\nclears site seats and leaves the org-ceiling as-is.","operationId":"replace_org_member_site_assignments","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","title":"Membership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteAssignmentsReplace"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["members","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{membership_id}/activate":{"post":{"tags":["platform","orgs","public"],"summary":"Activate Member","operationId":"activate_member_v0_platform_orgs__org_id__members__membership_id__activate_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","title":"Membership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{membership_id}/suspend":{"post":{"tags":["platform","orgs","public"],"summary":"Suspend Member","operationId":"suspend_member_v0_platform_orgs__org_id__members__membership_id__suspend_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","title":"Membership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{membership_id}/deactivate":{"post":{"tags":["platform","orgs","public"],"summary":"Deactivate Member","operationId":"deactivate_member_v0_platform_orgs__org_id__members__membership_id__deactivate_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"membership_id","in":"path","required":true,"schema":{"type":"string","title":"Membership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{user_id}/audit-logs":{"get":{"tags":["platform","orgs","public"],"summary":"List membership audit events for a user within an organization.","description":"List membership audit events for a user within an organization.","operationId":"list_org_member_audit_logs","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MembershipAuditLogResponse"},"title":"Response List Member Audit Logs V0 Platform Orgs  Org Id  Members  User Id  Audit Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["members","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/invitations":{"get":{"tags":["platform","orgs","public"],"summary":"List pending and historical email invitations for an organization.","description":"List pending / historical invitations for ``org_id``.\n\nReturns ``[]`` if the org cannot send invitations.","operationId":"list_org_invitations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/gateway__app__api__v1__orgs__InvitationResponse"},"title":"Response List Invitations V0 Platform Orgs  Org Id  Invitations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["invitations","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Send an email invitation to join an organization with a specified role.","description":"Send an email invitation to join ``org_id`` with ``body.role``.\n\nWhen ``body.application`` is set, this delegates to the\napplication-aware ``user_management.invite_user`` (see\n``/platform/v1/apps/{application}/orgs/{org_id}/invitations`` for\nthe same call surfaced under a per-app path).","operationId":"send_org_invitation","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__orgs__SendInvitationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__orgs__InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["invitations","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/invitations/{invitation_id}":{"delete":{"tags":["platform","orgs","public"],"summary":"Revoke a pending invitation to an organization.","description":"Revoke a pending invitation. Returns the revoked invitation.","operationId":"revoke_org_invitation","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__orgs__InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["invitations","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/roles":{"get":{"tags":["platform","orgs","public"],"summary":"List custom roles defined for an organization.","operationId":"list_org_custom_roles","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomRoleResponse"},"title":"Response List Custom Roles V0 Platform Orgs  Org Id  Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["roles:read"],"x-spade-public":true,"x-mcp-tags":["orgs","roles"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Create a custom role with a specific set of capabilities for an organization.","description":"Define a per-org custom role composed of bundles and capabilities.","operationId":"create_org_custom_role","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomRoleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomRoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["roles:write"],"x-spade-public":true,"x-mcp-tags":["orgs","roles"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/roles/{role_id}":{"patch":{"tags":["platform","orgs","public"],"summary":"Update a custom role's name, description, or capabilities.","description":"Update a per-org custom role in place (no delete+recreate).","operationId":"update_org_custom_role","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomRolePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomRoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["roles:write"],"x-spade-public":true,"x-mcp-tags":["orgs","roles"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","orgs","public"],"summary":"Delete a custom role from an organization.","operationId":"delete_org_custom_role","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["roles:write"],"x-spade-public":true,"x-mcp-tags":["orgs","roles"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/shared-roles":{"get":{"tags":["platform","orgs","public"],"summary":"List live share roles this org offers (grantor) and has accepted (grantee overlay extras). Grantor extras stay on the offer row; grantee extras hang on a user-less overlay in the grantee org.","operationId":"list_org_shared_roles","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SharedRoleOut"},"title":"Response List Shared Roles V0 Platform Orgs  Org Id  Shared Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["roles:read"],"x-spade-public":true,"x-mcp-tags":["orgs","roles","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/grants":{"get":{"tags":["platform","orgs","public"],"summary":"List per-user permission grants within an organization.","operationId":"list_org_grants","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GrantResponse"},"title":"Response List Grants V0 Platform Orgs  Org Id  Grants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["grants:read"],"x-spade-public":true,"x-mcp-tags":["grants","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","orgs","public"],"summary":"Add or remove an explicit per-user capability on a member org-ceiling seat or a participant host seat. Pass user_role_id when the person has more than one host seat.","description":"Write one extra on a member ceiling or participant host seat.\n\nPolarity vs that seat's role pack (parent-cover counts as in-role):\n\n* in-role + ``remove`` → upsert a remove extra\n* in-role + ``add`` → 400 (restore by terminating the remove extra)\n* not in-role + ``add`` → upsert an add extra\n* not in-role + ``remove`` → 400 (revoke by terminating the add extra)","operationId":"create_org_grant","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["grants:write"],"x-spade-public":true,"x-mcp-tags":["grants","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/grants/{grant_id}":{"delete":{"tags":["platform","orgs","public"],"summary":"Revoke a per-user permission grant from an organization.","operationId":"revoke_org_grant","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","title":"Grant Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["grants:write"],"x-spade-public":true,"x-mcp-tags":["grants","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/by-slug/{slug}":{"get":{"tags":["platform","orgs","public"],"summary":"Look up an organization by its URL slug. Returns the org id, slug, and name. Use this UUID as the analytics organization group when asking if a farm is slow or broken. See analytics_contract for the rest of the identity contract.","description":"Resolve an org slug to its UUID + metadata.","operationId":"get_org_by_slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","description":"The org slug to look up.","title":"Slug"},"description":"The org slug to look up."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlugResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"x-mcp-tags":["orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/slug":{"patch":{"tags":["platform","orgs","public"],"summary":"Set or update the URL slug for an organization. Requires memberships:write scope.","description":"Set or update the slug for an organization.","operationId":"update_org_slug","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlugUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlugResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/organization-relationships":{"get":{"tags":["platform","organization-relationships","public"],"summary":"List organization relationships (network edges) for an organization.","operationId":"list_org_relationships","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relationship Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"direction","in":"query","required":false,"schema":{"enum":["from","to","either"],"type":"string","default":"from","title":"Direction"}},{"name":"include_ended","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Ended"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RelationshipOut"},"title":"Response List Relationships V0 Platform Orgs  Org Id  Organization Relationships Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["orgs","relationships"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","organization-relationships","public"],"summary":"Create Relationship","operationId":"create_relationship_v0_platform_orgs__org_id__organization_relationships_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/organization-relationships/{relationship_id}":{"get":{"tags":["platform","organization-relationships","public"],"summary":"Get a single organization relationship by id.","operationId":"get_org_relationship","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["orgs","relationships"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["platform","organization-relationships","public"],"summary":"Update Relationship","operationId":"update_relationship_v0_platform_orgs__org_id__organization_relationships__relationship_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","organization-relationships","public"],"summary":"End Relationship","description":"End a relationship (soft). Never hard-delete.\n\nEither party (grantee or host) may end. Terminates participant seats\non the host for people whose home org is the grantee.","operationId":"end_relationship_v0_platform_orgs__org_id__organization_relationships__relationship_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/organization-relationships/{relationship_id}/change-request":{"post":{"tags":["platform","organization-relationships","public"],"summary":"Create Change Request","description":"Recipient (grantee) proposes a full grant set on a live edge.\n\nDoes not mutate grants. Grantor reviews via Incoming / email link.\nA new Send revokes any other pending purpose=change wishlist for this edge.","operationId":"create_change_request_v0_platform_orgs__org_id__organization_relationships__relationship_id__change_request_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeRequestCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeRequestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/org-invitations":{"post":{"tags":["platform","org-invitations","public"],"summary":"Create Org Invitation","operationId":"create_org_invitation_v0_platform_orgs__org_id__org_invitations_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"get":{"tags":["platform","org-invitations","public"],"summary":"List org-to-org connect/claim invitations for an organization.","operationId":"list_relationship_invitations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"direction","in":"query","required":false,"schema":{"enum":["outgoing","incoming","either"],"type":"string","default":"outgoing","title":"Direction"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgInvitationOut"},"title":"Response List Org Invitations V0 Platform Orgs  Org Id  Org Invitations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["invitations","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/org-invitations/{invitation_id}/accept":{"post":{"tags":["platform","org-invitations","public"],"summary":"Accept Org Invitation As Org","description":"Accept a pending connect invite into ``org_id`` (admin of invitee org).","operationId":"accept_org_invitation_as_org_v0_platform_orgs__org_id__org_invitations__invitation_id__accept_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/org-invitations/{invitation_id}/accept-with-consent":{"post":{"tags":["platform","org-invitations","public"],"summary":"Accept Org Invitation With Consent As Org","description":"Settings inbound accept — admin of ``org_id``, no token required.","operationId":"accept_org_invitation_with_consent_as_org_v0_platform_orgs__org_id__org_invitations__invitation_id__accept_with_consent_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationAcceptWithConsent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/org-invitations/{invitation_id}/decline":{"post":{"tags":["platform","org-invitations","public"],"summary":"Decline Org Invitation As Org","description":"Decline a pending invite from Settings (no token on list DTOs).","operationId":"decline_org_invitation_as_org_v0_platform_orgs__org_id__org_invitations__invitation_id__decline_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/org-invitations/{invitation_id}/revoke":{"post":{"tags":["platform","org-invitations","public"],"summary":"Revoke Org Invitation","operationId":"revoke_org_invitation_v0_platform_orgs__org_id__org_invitations__invitation_id__revoke_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/org-invitations/{invitation_id}/resend":{"post":{"tags":["platform","org-invitations","public"],"summary":"Resend Org Invitation","operationId":"resend_org_invitation_v0_platform_orgs__org_id__org_invitations__invitation_id__resend_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PermissionEmailsOptIn"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/org-invitations/by-token/{token}":{"get":{"tags":["platform","org-invitations","public"],"summary":"Preview Org Invitation","operationId":"preview_org_invitation_v0_platform_org_invitations_by_token__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationPreview"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/org-invitations/by-token/{token}/accept":{"post":{"tags":["platform","org-invitations","public"],"summary":"Accept Org Invitation","operationId":"accept_org_invitation_v0_platform_org_invitations_by_token__token__accept_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationAccept"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/org-invitations/by-token/{token}/accept-with-consent":{"post":{"tags":["platform","org-invitations","public"],"summary":"Accept Org Invitation With Consent","operationId":"accept_org_invitation_with_consent_v0_platform_org_invitations_by_token__token__accept_with_consent_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationAcceptWithConsent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/org-invitations/by-token/{token}/decline":{"post":{"tags":["platform","org-invitations","public"],"summary":"Decline Org Invitation","operationId":"decline_org_invitation_v0_platform_org_invitations_by_token__token__decline_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/managed-farms":{"post":{"tags":["platform","managed-farms","public"],"summary":"Create Managed Farm","description":"Create a local-only ghost farm + enterprise edge + org share.","operationId":"create_managed_farm_v0_platform_orgs__org_id__managed_farms_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedFarmCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedFarmOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"get":{"tags":["platform","managed-farms","public"],"summary":"List farm orgs this enterprise created and operates on a producer's behalf.","description":"Farms this org created (`created_by_org_id`) — claimed, invited, or still ghost.","operationId":"list_managed_farms","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ManagedFarmListItem"},"title":"Response List Managed Farms V0 Platform Orgs  Org Id  Managed Farms Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["managed-farms","orgs"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/data-grants":{"get":{"tags":["platform","data-grants","public"],"summary":"List active data-sharing grants for an organization.","operationId":"list_data_grants","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"}},{"name":"resource_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resource Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DataGrantOut"},"title":"Response List Data Grants V0 Platform Orgs  Org Id  Data Grants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:read"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","data-grants","public"],"summary":"Create Data Grant","operationId":"create_data_grant_v0_platform_orgs__org_id__data_grants_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataGrantCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataGrantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["platform","data-grants","public"],"summary":"Replace Data Grants","operationId":"replace_data_grants_v0_platform_orgs__org_id__data_grants_put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataGrantReplaceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DataGrantOut"},"title":"Response Replace Data Grants V0 Platform Orgs  Org Id  Data Grants Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/data-grants/allowed-sites":{"get":{"tags":["platform","data-grants","public"],"summary":"List sites available for a data-grant picker on a relationship.","description":"Sites available for a data-grant picker (not DataScope farm sites).","operationId":"list_data_grant_allowed_sites","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AllowedSiteOut"},"title":"Response List Allowed Sites For Data Grants V0 Platform Orgs  Org Id  Data Grants Allowed Sites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:read"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/data-grants/{grant_id}":{"patch":{"tags":["platform","data-grants","public"],"summary":"Patch Data Grant","operationId":"patch_data_grant_v0_platform_orgs__org_id__data_grants__grant_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataGrantPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataGrantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/data-grants/{grant_id}/revoke":{"post":{"tags":["platform","data-grants","public"],"summary":"Revoke Data Grant","operationId":"revoke_data_grant_v0_platform_orgs__org_id__data_grants__grant_id__revoke_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataGrantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/members/{user_id}/data-grants":{"get":{"tags":["platform","data-grants","public"],"summary":"List active user-level data grants for an org member.","operationId":"list_member_data_grants","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"relationship_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"}},{"name":"resource_org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resource Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DataGrantOut"},"title":"Response List Member Data Grants V0 Platform Orgs  Org Id  Members  User Id  Data Grants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:read"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["platform","data-grants","public"],"summary":"Replace user-level data grants for an org member (subset of org ceiling).","operationId":"replace_member_data_grants","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberDataGrantReplaceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DataGrantOut"},"title":"Response Replace Member Data Grants V0 Platform Orgs  Org Id  Members  User Id  Data Grants Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/participant-roles":{"get":{"tags":["platform","data-grants","public"],"summary":"List participant roles (active and revoked) on hosts this org shares with (as host or grantee). Rows stay until the relationship ends.","operationId":"list_participant_roles","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantRoleOut"},"title":"Response List Participant Roles V0 Platform Orgs  Org Id  Participant Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:read"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/participant-roles/revoke":{"post":{"tags":["platform","data-grants","public"],"summary":"Revoke a participant role (set roles.status=terminated). Host or grantee. Omit role_id to terminate every seat on the relationship; set role_id and site_id (null = org-ceiling) to terminate that seat only. Stored assignment scopes are kept.","operationId":"revoke_participant_role","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantRoleActionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantRoleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/participant-roles/restore":{"post":{"tags":["platform","data-grants","public"],"summary":"Restore a revoked participant role (set roles.status=active). Host or grantee. Omit role_id to restore every seat on the relationship; set role_id and site_id (null = org-ceiling) to restore that seat only. Same role_id and stored scopes come back.","operationId":"restore_participant_role","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantRoleActionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantRoleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data.sharing:write"],"x-spade-public":true,"x-mcp-tags":["orgs","sharing"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/apps/{application}/orgs/{org_id}/invitations":{"post":{"tags":["platform","public"],"summary":"Send an invitation to join an org under a specific application (Farm, Enterprise, etc.).","description":"Send an invitation into ``org_id`` under the given ``application``.\n\nPath-bound application takes precedence over body; the body field\nis kept so the same shape works against the per-application paths\nAND the legacy ``/orgs/{org_id}/invitations`` path (added there as\nan optional field).","operationId":"app_send_invitation","parameters":[{"name":"application","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Application"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppInvitationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__user_management__InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["invitations","user-management"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"get":{"tags":["platform","public"],"summary":"List invitations for an org under a specific application.","operationId":"app_list_invitations","parameters":[{"name":"application","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Application"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/gateway__app__api__v1__user_management__InvitationResponse"},"title":"Response App List Invitations V0 Platform Apps  Application  Orgs  Org Id  Invitations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:read"],"x-spade-public":true,"x-mcp-tags":["invitations","user-management"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/apps/{application}/orgs/{org_id}/invitations/{invitation_id}/resend":{"post":{"tags":["platform","public"],"summary":"Resend a pending invitation email for an org under a specific application.","operationId":"app_resend_invitation","parameters":[{"name":"application","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Application"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__user_management__InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["invitations","user-management"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/apps/{application}/orgs/{org_id}/invitations/{invitation_id}/reinvite":{"post":{"tags":["platform","public"],"summary":"Send a fresh invitation for an expired invite, preserving the previously assigned role.","operationId":"app_reinvite_user","parameters":[{"name":"application","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Application"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__user_management__InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["invitations","user-management"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/apps/{application}/orgs/{org_id}/invitations/{invitation_id}":{"delete":{"tags":["platform","public"],"summary":"Remove an invitation: revoke if pending, or dismiss expired locally (hide from list). Other states are rejected.","operationId":"app_revoke_invitation","parameters":[{"name":"application","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Application"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/gateway__app__api__v1__user_management__InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["invitations","user-management"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/apps/{application}/orgs":{"post":{"tags":["platform","public"],"summary":"Create a new organization with an initial owner for a specific application.","description":"Create an organization for ``application``, optionally with an owner.\n\nWhen the owner user id is omitted, only the local org\n(and default API access) are created — no owner membership.\nThe path's ``application`` is the source of truth; the body field\nis kept symmetric with the other endpoints in this module.","operationId":"app_bootstrap_org","parameters":[{"name":"application","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Application"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BootstrapOrgRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BootstrapOrgResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["memberships:write"],"x-spade-public":true,"x-mcp-tags":["orgs","user-management"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/api-keys":{"get":{"tags":["platform","api-keys","public"],"summary":"List active org-level API keys (sk_org_*) for an organization.","description":"List active ``sk_org_*`` keys for an org.","operationId":"list_org_api_keys","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KeyResponse"},"title":"Response List Org Keys V0 Platform Orgs  Org Id  Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","api-keys","public"],"summary":"Mint a new org-level API key (sk_org_*) with specified permissions.","description":"Mint a new ``sk_org_*`` key bound to ``org_id``.","operationId":"create_org_api_key","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgKeyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyMintResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:write"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/orgs/{org_id}/api-keys/{key_id}":{"patch":{"tags":["platform","api-keys","public"],"summary":"Update permissions and/or name of an org-level API key (sk_org_*).","description":"Edit the permissions (and optionally name) of an existing ``sk_org_*`` key.","operationId":"update_org_api_key","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:write"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","api-keys","public"],"summary":"Revoke an org-level API key, immediately disabling it.","operationId":"revoke_org_api_key","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:write"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/me/api-keys":{"get":{"tags":["platform","api-keys","public"],"summary":"List the calling user's personal API keys (sk_user_*) in the current org.","description":"List the calling user's ``sk_user_*`` keys in the current org.","operationId":"list_my_api_keys","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KeyResponse"},"type":"array","title":"Response List My Keys V0 Platform Me Api Keys Get"}}}}},"x-spade-scopes":["api_keys:read"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["platform","api-keys","public"],"summary":"Mint a personal API key (sk_user_*) scoped to the caller's current capabilities.","description":"Mint a new ``sk_user_*`` key for the calling user.\n\nThe key's permission list must be a subset of the user's\n*currently effective* capabilities — we won't let a user mint a\nkey that escalates beyond what they themselves can do today. The\nresolver re-intersects with the user's effective capabilities at\nevery request, so any subsequent role / grant revocation\nimmediately defangs the key.","operationId":"create_my_api_key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyMintResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:write"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/platform/me/api-keys/{key_id}":{"patch":{"tags":["platform","api-keys","public"],"summary":"Update permissions and/or name of one of the caller's personal API keys (sk_user_*).","description":"Edit the permissions (and optionally name) of an existing ``sk_user_*`` key.","operationId":"update_my_api_key","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:write"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["platform","api-keys","public"],"summary":"Revoke one of the calling user's personal API keys.","operationId":"revoke_my_api_key","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["api_keys:write"],"x-spade-public":true,"x-mcp-tags":["api-keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/auth/resolve":{"get":{"tags":["auth","auth","public"],"summary":"Resolve the calling credential into a full principal (identity, org, capabilities, roles).","description":"Return the resolved :class:`Principal` for the calling credential.\n\nIdempotent and side-effect-free apart from refreshing\n``api_keys.last_used_at`` (handled by the underlying resolver). The\nresponse is suitable for caching by the calling service for the\nlifetime of the credential — a few seconds is plenty.","operationId":"resolve_principal","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Resolve Principal V0 Auth Resolve Get"}}}}},"x-spade-public":true,"x-mcp-tags":["auth"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/providers":{"get":{"tags":["integrations","integration","public"],"summary":"List all supported integration providers with display names, logos, auth types, and field schemas.","description":"Returns a list of supported integration providers with display names, logos, and documentation links.","operationId":"integration_list_providers","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProviderInfo"},"type":"array","title":"Response List Providers V0 Integrations Providers Get"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["integrations","providers"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/integration":{"get":{"tags":["integrations","integration","public"],"summary":"List integrations with optional filters by org, site, and provider.","description":"Get a list of integrations.\nFilters:\n- org_id: Organization ID\n- site_id: Site ID\n- provider: Provider name\nReturns IntegrationETLOut for ETL users, IntegrationOut for regular users (see schemas below for details).\n\nExample response for ETL users:\n```json\n[\n  {\n    \"organization_id\": \"1234567890\",\n    \"site_id\": \"1234567890\",\n    \"integration_id\": \"1234567890\",\n    \"provider\": \"onefeed\",\n    \"provider_rate_limit_seconds\": 60,\n    \"provider_endpoints\": [\"facilities/recipes\", \"facilities/feeding\", \"pens/intake\"]\n  }\n  ]\n```","operationId":"integration_list","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search integrations by provider","title":"Search"},"description":"Search integrations by provider"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"title":"Limit","description":"Maximum number of results to return","default":100},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"title":"Offset","description":"Number of results to skip for pagination","default":0},"description":"Number of results to skip for pagination"},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization ID","description":"Filter by organization ID"},"description":"Filter by organization ID"},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site ID","description":"Filter by site ID"},"description":"Filter by site ID"},{"name":"integration_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration ID","description":"Filter by integration ID"},"description":"Filter by integration ID"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"Filter by provider name"},"description":"Filter by provider name"},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Filter by exact contact email address"},"description":"Filter by exact contact email address"},{"name":"channel_transport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Transport","description":"Filter by channel transport (api, streamer, email, scraper, bovisync, ddw)"},"description":"Filter by channel transport (api, streamer, email, scraper, bovisync, ddw)"},{"name":"channel_direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Direction","description":"Filter by channel direction: 'r' (read-only), 'w' (write-only), 'rw' (bidirectional)"},"description":"Filter by channel direction: 'r' (read-only), 'w' (write-only), 'rw' (bidirectional)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/IntegrationOut"},{"$ref":"#/components/schemas/IntegrationETLOut"}]},"title":"Response Read Integrations V0 Integrations Integration Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["integrations","integration","public"],"summary":"Create a new integration with provider, site, and credential configuration.","description":"Create a new integration.\n\n## Request Body: IntegrationIn\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| provider | string | Yes | Integration provider (e.g., 'onefeed', 'quickbooks') |\n| integration_type | string | Yes | Type of integration (e.g., 'feeding', 'accounting') |\n| organization_id | string | Yes | ID of the organization |\n| site_id | string | Yes | ID of the site to associate with |\n| meta_data | MetaDataInput | No | Provider-specific configuration |\n\n## meta_data Structure (MetaDataInput)\n\nPer-site config — one entry per site_id linked to this integration::\n\n```json\n{\n    \"sites\": [\n        {\n            \"site_id\": \"site-456\",\n            \"public\": {\"facility_id\": \"12345\"},\n            \"secret\": {\"api_key\": \"abc\"},\n            \"installed\": false\n        }\n    ]\n}\n```\n\n- **public**: non-sensitive per-site config (stored in DB ``meta_data``).\n- **secret**: per-site credentials (fanned out to AWS Secrets Manager).\n- **installed**: streamer-source only — operator-asserted physical install at this site.","operationId":"integration_create","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["integrations","integration","public"],"summary":"Update an existing integration by ID with partial field changes.","description":"Update an existing integration. Only `id` is required - include only the fields you want to update.\n\n## Request Body: IntegrationUpdate\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| id | string | **Yes** | Integration ID to update |\n| provider | string | No | Integration provider (e.g., 'onefeed', 'quickbooks') |\n| integration_type | string | No | Type of integration |\n| site_id | string | No | ID of the site (can be changed to reassign) |\n| is_active | bool | No | Whether the integration is active |\n| is_connected | bool | No | Whether the integration is connected |\n| meta_data | MetaDataInput | No | Provider-specific configuration |\n\n**Not updatable**: `organization_id` (requires creating a new integration)\n\n## Example: Disable an integration\n\n```json\n{\n    \"id\": \"47446280-b6c9-4488-85f5-0b1b0daee648\",\n    \"is_active\": false\n}\n```\n\n## Example: Reassign to a different site\n\n```json\n{\n    \"id\": \"47446280-b6c9-4488-85f5-0b1b0daee648\",\n    \"site_id\": \"new-site-789\"\n}\n```","operationId":"integration_update","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/integration/{integration_id}":{"get":{"tags":["integrations","integration","public"],"summary":"Get a single integration by ID, scoped to the authenticated organization.","description":"Fetch a single integration by ID, scoped to the authenticated organization.","operationId":"integration_get","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["integrations","integration","public"],"summary":"Delete an integration by ID, removing its site relationship and stored secrets.","description":"Delete an integration by ID. Also removes the integration-site relationship and any stored secrets.","operationId":"integration_delete","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/integration/{integration_id}/channels":{"get":{"tags":["integrations","channels","public"],"summary":"List all channels (api, streamer / read, write) for an integration.","description":"Return all channels configured for an integration.","operationId":"integration_list_channels","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/integrations__app__core__models__schema__ChannelOut"},"title":"Response Get Channels V0 Integrations Integration  Integration Id  Channels Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"x-mcp-tags":["channels","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["integrations","channels","public"],"summary":"Add a channel to an integration. Direction (can_read/can_write) is bounded by the transport's declared data_directions (defaults: read on, write off). Permission grants remain open to farm users.","description":"Add a new channel to an existing integration.\n\nChannels are integration-scoped (they apply to the whole integration, not specific\nsites). A streamer channel requires a valid ``device_id`` bound to a device in the\nsame farm org.","operationId":"integration_add_channel","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/integrations__app__core__models__schema__ChannelIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/integrations__app__core__models__schema__ChannelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["channels","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/integration/{integration_id}/channels/{channel_id}":{"patch":{"tags":["integrations","channels","public"],"summary":"Update a channel. Direction (can_read/can_write) must stay within the transport's declared data_directions; permission grants (authorize ingest/push) stay open to farm users.","description":"Partially update a channel — read/write flags, device binding, health fields.","operationId":"integration_update_channel","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/integrations__app__core__models__schema__ChannelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["channels","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["integrations","channels","public"],"summary":"Delete a channel from an integration.","description":"Delete a channel from an integration.","operationId":"integration_delete_channel","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/integrations__app__core__models__schema__ChannelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"x-mcp-tags":["channels","integrations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-maps":{"get":{"tags":["integrations","entity-maps","public"],"summary":"List entity maps","operationId":"get_entity_maps_v0_integrations_entity_maps_get","parameters":[{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"integration_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"}},{"name":"internal_entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Entity Type"}},{"name":"concept_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Concept Id"}},{"name":"unmapped","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unmapped"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityMapOut"},"title":"Response Get Entity Maps V0 Integrations Entity Maps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["integrations","entity-maps","public"],"summary":"Create or upsert an entity map","operationId":"post_entity_map_v0_integrations_entity_maps_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-maps/bulk":{"post":{"tags":["integrations","entity-maps","public"],"summary":"Bulk upsert entity maps","operationId":"post_entity_maps_bulk_v0_integrations_entity_maps_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapBulkIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EntityMapOut"},"type":"array","title":"Response Post Entity Maps Bulk V0 Integrations Entity Maps Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-maps/merge":{"post":{"tags":["integrations","entity-maps","public"],"summary":"Merge maps under a shared concept_id","operationId":"post_entity_maps_merge_v0_integrations_entity_maps_merge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapMergeIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EntityMapOut"},"type":"array","title":"Response Post Entity Maps Merge V0 Integrations Entity Maps Merge Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-maps/{map_id}":{"put":{"tags":["integrations","entity-maps","public"],"summary":"Update an entity map","operationId":"put_entity_map_v0_integrations_entity_maps__map_id__put","parameters":[{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["integrations","entity-maps","public"],"summary":"Soft-delete an entity map","operationId":"remove_entity_map_v0_integrations_entity_maps__map_id__delete","parameters":[{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-maps/{map_id}/unmap":{"post":{"tags":["integrations","entity-maps","public"],"summary":"Unmap (close) an entity map without deleting it","operationId":"post_entity_map_unmap_v0_integrations_entity_maps__map_id__unmap_post","parameters":[{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityMapOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-rollups":{"get":{"tags":["integrations","entity-rollups","public"],"summary":"List entity rollups","operationId":"get_entity_rollups_v0_integrations_entity_rollups_get","parameters":[{"name":"target_entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Entity Type"}},{"name":"target_internal_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Internal Id"}},{"name":"metric","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityRollupOut"},"title":"Response Get Entity Rollups V0 Integrations Entity Rollups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["integrations","entity-rollups","public"],"summary":"Create an entity rollup","operationId":"post_entity_rollup_v0_integrations_entity_rollups_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRollupIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRollupOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/integrations/entity-rollups/{rollup_id}":{"put":{"tags":["integrations","entity-rollups","public"],"summary":"Update an entity rollup","operationId":"put_entity_rollup_v0_integrations_entity_rollups__rollup_id__put","parameters":[{"name":"rollup_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rollup Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRollupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRollupOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["integrations","entity-rollups","public"],"summary":"Soft-delete an entity rollup","operationId":"remove_entity_rollup_v0_integrations_entity_rollups__rollup_id__delete","parameters":[{"name":"rollup_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rollup Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["integrations:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/data/sources":{"get":{"tags":["data","data","public"],"summary":"List available Databricks tables and views with their column schemas.","description":"List available data sources (tables/views) with their schemas.\n\nThis endpoint returns all tables and views available in the specified\ncatalog and schema, along with their column definitions.\n\n**Parameters:**\n- `catalog`: Optional catalog name (defaults to configured catalog)\n- `schema`: Optional schema name (defaults to configured schema)\n\n**Example Response:**\n```json\n{\n  \"sources\": [\n    {\n      \"name\": \"customers\",\n      \"type\": \"TABLE\",\n      \"catalog\": \"main\",\n      \"schema\": \"sales\",\n      \"full_name\": \"main.sales.customers\",\n      \"fields\": [\n        {\"name\": \"id\", \"type\": \"bigint\", \"nullable\": true},\n        {\"name\": \"name\", \"type\": \"string\", \"nullable\": true}\n      ],\n      \"comment\": \"Customer dimension table\"\n    }\n  ],\n  \"catalog\": \"main\",\n  \"schema\": \"sales\",\n  \"total_count\": 1\n}\n```","operationId":"data_list_sources","parameters":[{"name":"catalog","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog"}},{"name":"schema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSourcesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data:read"],"x-spade-public":true,"x-mcp-tags":["data","sources"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/data/query":{"post":{"tags":["data","data","public"],"summary":"Execute a validated read-only SQL query against Databricks and return results.","description":"Execute a SQL query against Databricks.\n\nThis endpoint:\n1. Validates the SQL query to prevent SQL injection\n2. Checks query complexity\n3. Executes the query against Databricks\n4. Returns results with metadata\n\n**Security Features:**\n- Only SELECT queries are allowed\n- Dangerous SQL keywords are blocked (DROP, DELETE, UPDATE, etc.)\n- Result row limits\n- Query complexity checks\n\nPass ``?format=csv`` for a UTF-8 (BOM) CSV download instead of JSON.\n\n**Example Request:**\n```json\n{\n    \"query\": \"SELECT * FROM my_table LIMIT 10\",\n    \"catalog\": \"my_catalog\",\n    \"schema\": \"my_schema\",\n    \"max_rows\": 100\n}\n```","operationId":"data_execute_query","parameters":[{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Response format: `json` (default) or `csv`.","title":"Format"},"description":"Response format: `json` (default) or `csv`."},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataQueryRequest"}}}},"responses":{"200":{"description":"Query results as JSON (`columns` / `rows`) by default, or UTF-8 CSV (with BOM) when `format=csv`.","content":{"application/json":{"schema":{"description":"Response model for SQL query execution","properties":{"columns":{"items":{"type":"string"},"title":"Columns","type":"array"},"rows":{"items":{"items":{},"type":"array"},"title":"Rows","type":"array"},"row_count":{"title":"Row Count","type":"integer"},"execution_time_ms":{"title":"Execution Time Ms","type":"number"},"catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"}},"required":["columns","rows","row_count","execution_time_ms"],"title":"DataQueryResponse","type":"object"}},"text/csv":{"schema":{"type":"string"},"example":"col_a,col_b\n1,2\n"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data:read"],"x-spade-public":true,"x-mcp-tags":["data","query"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/data/genie/ask":{"post":{"tags":["data","data","public"],"summary":"Ask Databricks Genie a natural-language question and get generated SQL.","description":"Ask Databricks Genie a natural-language question.\n\nGenie translates the question into a SQL query using the configured\nGenie space's table metadata, instructions, and example queries.\n\nThe endpoint handles the full conversation lifecycle internally:\n1. Creates (or reuses) a conversation\n2. Sends the question\n3. Polls until Genie responds (up to ~2 minutes)\n4. Returns the generated SQL\n\nInvariant: SQL-only response (sql + description). Genie-executed result\nrows are never surfaced here; tenant row data must go through the\nRLS-guarded ``POST /v0/data/query``.\n\n**Example Request:**\n```json\n{\n    \"question\": \"What were total sales last month?\",\n    \"conversation_id\": null\n}\n```\n\n**Example Response:**\n```json\n{\n    \"conversation_id\": \"abc123\",\n    \"message_id\": \"msg456\",\n    \"status\": \"COMPLETED\",\n    \"sql\": \"SELECT SUM(amount) FROM orders WHERE ...\",\n    \"description\": \"Total sales for the previous calendar month\"\n}\n```","operationId":"data_genie_ask","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenieAskRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenieAskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["data:read"],"x-spade-public":true,"x-mcp-tags":["data","genie"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/data/genie/spaces":{"get":{"tags":["data","data","public"],"summary":"List available Databricks Genie spaces for the space selector.","description":"List available Genie spaces from Databricks.\n\nReturns space metadata (id, title, description) so the frontend\ncan populate a space selector dropdown.","operationId":"data_list_genie_spaces","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-spade-scopes":["data:read"],"x-spade-public":true,"x-mcp-tags":["data","genie"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/users":{"get":{"tags":["farm","farm-users","public"],"summary":"List all users in the caller's org.","description":"List every user in the caller's org.\n\nIdentity comes from gateway DB; org membership via ``roles``.","operationId":"farm_list_users","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/farm__app__api__v1__users__UserResponse"},"title":"Response List Users V0 Farm Orgs  Org Id  Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.users:read"],"x-spade-public":true,"x-mcp-tags":["farm","users"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/org-settings":{"get":{"tags":["farm","farm-org","public"],"summary":"Get the caller's organization settings (contact, address, timezone, etc.).","operationId":"farm_get_org_settings","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["company","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-org","public"],"summary":"Update the caller's organization settings.","operationId":"farm_update_org_settings","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["company","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens":{"get":{"tags":["farm","farm-pens","public"],"summary":"List all pens for the caller's organization.","operationId":"farm_list_pens","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter pens to a specific site id","title":"Site Id"},"description":"Filter pens to a specific site id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenResponse"},"title":"Response List Pens V0 Farm Orgs  Org Id  Pens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-pens","public"],"summary":"Create a new pen in the caller's organization.","operationId":"farm_create_pen","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/bulk":{"patch":{"tags":["farm","farm-pens","public"],"summary":"Apply a single partial update (e.g. set pen_type_id, site_id, is_ignored) to many pens at once.","description":"Apply one partial update to all pens in ``pen_ids`` (scoped to org).","operationId":"farm_bulk_update_pens","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenBulkUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenResponse"},"title":"Response Bulk Update Pens V0 Farm Orgs  Org Id  Pens Bulk Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-pens","public"],"summary":"Bulk create pens within the organization (always inserts; never upserts by pen_number).","description":"Always insert new pens. pen_number is a label and may duplicate within an org or site. Use PATCH /pens/{id} or PATCH /pens/bulk to update.","operationId":"farm_bulk_upsert_pens","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenBulkUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenResponse"},"title":"Response Bulk Upsert Pens V0 Farm Orgs  Org Id  Pens Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/{pen_id}":{"patch":{"tags":["farm","farm-pens","public"],"summary":"Update a pen's details by ID.","operationId":"farm_update_pen","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-pens","public"],"summary":"Soft-delete a pen by ID.","operationId":"farm_delete_pen","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/{pen_id}/tags":{"put":{"tags":["farm","farm-pens","public"],"summary":"Replace all tag assignments on a pen.","operationId":"farm_replace_pen_tags","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenTagAssignmentBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pen-structure-options":{"get":{"tags":["farm","farm-pens","public"],"summary":"Get allowed enum values for pen structure fields (stall layouts, feed barrier types, bedding types).","description":"Return allowed values for pen structure enum fields.","operationId":"farm_get_pen_structure_options","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenStructureOptionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/by-registry/{registry_pen_id}":{"get":{"tags":["farm","farm-pens","public"],"summary":"Look up a local pen by its Databricks pen registry ID.","description":"Look up local pen data by Databricks registry pen ID.","operationId":"farm_get_pen_by_registry_id","parameters":[{"name":"registry_pen_id","in":"path","required":true,"schema":{"type":"string","title":"Registry Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/{pen_id}/history":{"get":{"tags":["farm","farm-pens","public"],"summary":"List all lifecycle history periods for a single pen.","description":"List all lifecycle periods for a pen.","operationId":"farm_list_pen_history","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenHistoryResponse"},"title":"Response List Pen History V0 Farm Orgs  Org Id  Pens  Pen Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-pens","public"],"summary":"Manually open a new pen history period (supports backdating via effective_from).","description":"Manually create a new history period (backdating supported).","operationId":"farm_create_pen_history_period","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenHistoryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pen-history":{"get":{"tags":["farm","farm-pens","public"],"summary":"Org-wide paginated pen history log with optional filters (pen_type_id, site_id, effective date range).","description":"Org-wide pen history log, paginated and filterable.","operationId":"farm_list_org_pen_history","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"pen_type_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},{"name":"effective_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Effective After"},"description":"YYYY-MM-DD"},{"name":"effective_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Effective Before"},"description":"YYYY-MM-DD"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"title":"Limit","description":"Maximum number of results to return","default":100},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"title":"Offset","description":"Number of results to skip for pagination","default":0},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenHistoryResponse"},"title":"Response List Org Pen History V0 Farm Orgs  Org Id  Pen History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/registry":{"get":{"tags":["farm","farm-pens","public"],"summary":"List org-scoped pen registry rows from Databricks (filterable, searchable, paginated).","description":"List org-scoped pen registry rows from Databricks with filters, search, and pagination.","operationId":"farm_list_pen_registry","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source system (e.g. dc305, onefeed)","title":"Provider"},"description":"Filter by source system (e.g. dc305, onefeed)"},{"name":"provider_org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one provider org (the provider's own org id)","title":"Provider Org Id"},"description":"Filter to one provider org (the provider's own org id)"},{"name":"provider_site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one provider site (the provider's own site id)","title":"Provider Site Id"},"description":"Filter to one provider site (the provider's own site id)"},{"name":"pen_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by pen type","title":"Pen Type"},"description":"Filter by pen type"},{"name":"first_seen_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pens first seen on or after this date (YYYY-MM-DD)","title":"First Seen After"},"description":"Pens first seen on or after this date (YYYY-MM-DD)"},{"name":"last_seen_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pens last seen on or before this date (YYYY-MM-DD)","title":"Last Seen Before"},"description":"Pens last seen on or before this date (YYYY-MM-DD)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive search over pen_number + pen_name","title":"Q"},"description":"Case-insensitive search over pen_number + pen_name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"title":"Limit","description":"Maximum number of results to return","default":100},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"title":"Offset","description":"Number of results to skip for pagination","default":0},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenRegistryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["databricks","farm","pens","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/registry/sources":{"get":{"tags":["farm","farm-pens","public"],"summary":"List the distinct source systems (provider + provider org/site) in the org's pen registry with counts.","description":"Distinct providers (and their provider org/site) present in this org's pen registry, with pen counts.","operationId":"farm_list_pen_registry_sources","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenRegistrySource"},"title":"Response List Pen Registry Sources V0 Farm Orgs  Org Id  Pens Registry Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["databricks","farm","pens","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/registry/{registry_pen_id}":{"get":{"tags":["farm","farm-pens","public"],"summary":"Fetch a single org-scoped pen registry row from Databricks by its UUID.","description":"Fetch one pen registry row by its UUID, scoped to the caller's org (404 if not in org).","operationId":"farm_get_pen_registry_row","parameters":[{"name":"registry_pen_id","in":"path","required":true,"schema":{"type":"string","title":"Registry Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenRegistryRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["databricks","farm","pens","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/import-from-registry/preview":{"post":{"tags":["farm","farm-pens","public"],"summary":"Preview importing pens from a registry source (read-only).","description":"Dry-run of an import: one item per registry pen with default_action create_and_map or skip_already_mapped, plus informational same_number_pens. No writes. No auto-merge by pen_number.","operationId":"farm_preview_import_pens_from_registry","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/import-from-registry":{"post":{"tags":["farm","farm-pens","public"],"summary":"Commit importing pens from a registry source (accepted items only when provided).","description":"Materialise Spade pens from registry rows and create pen_maps. When ``items`` is provided, only those rows are processed (accepted preview selections). create_and_map always inserts a new pen — never reuses by pen_number. map_to_existing requires an explicit pen_id. Already-mapped registry pens are skipped so the same source can be reapplied across sites.","operationId":"farm_import_pens_from_registry","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportFromRegistryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportFromRegistryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pens","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/{pen_id}/maps":{"get":{"tags":["farm","farm-pens","public"],"summary":"List Pen Maps","description":"List active mappings for a pen.","operationId":"list_pen_maps_v0_farm_orgs__org_id__pens__pen_id__maps_get","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenMapResponse"},"title":"Response List Pen Maps V0 Farm Orgs  Org Id  Pens  Pen Id  Maps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-pens","public"],"summary":"Create Pen Map","description":"Create a new pen map linking pen to an integration + registry entry.","operationId":"create_pen_map_v0_farm_orgs__org_id__pens__pen_id__maps_post","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenMapCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenMapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pens/{pen_id}/maps/{map_id}":{"delete":{"tags":["farm","farm-pens","public"],"summary":"Delete Pen Map","description":"Soft-delete a pen map.","operationId":"delete_pen_map_v0_farm_orgs__org_id__pens__pen_id__maps__map_id__delete","parameters":[{"name":"pen_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pen Id"}},{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pen-maps":{"get":{"tags":["farm","farm-pens","public"],"summary":"List Org Pen Maps","description":"List all pen maps for the org, optionally filtered by integration.","operationId":"list_org_pen_maps_v0_farm_orgs__org_id__pen_maps_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"integration_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenMapResponse"},"title":"Response List Org Pen Maps V0 Farm Orgs  Org Id  Pen Maps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pen-maps/by-registry/{registry_pen_id}":{"get":{"tags":["farm","farm-pens","public"],"summary":"Resolve a Databricks pen registry ID to its internal pen plus all sibling pen_map rows that resolve to the same canonical pen.","description":"Given a Databricks pen registry UUID, return the internal pen it maps to (with site_id, geometry, tags) plus every other active pen_map row pointing at the same internal pen — so a caller can see every source-system row that resolves to the canonical pen.","operationId":"farm_get_pen_with_maps_by_registry_id","parameters":[{"name":"registry_pen_id","in":"path","required":true,"schema":{"type":"string","title":"Registry Pen Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenWithMapsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","pens"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pen-tags":{"get":{"tags":["farm","farm-pens","public"],"summary":"List all pen tags for the caller's organization.","operationId":"farm_list_pen_tags","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PenTagResponse"},"title":"Response List Pen Tags V0 Farm Orgs  Org Id  Pen Tags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["farm","pen_tags"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-pens","public"],"summary":"Create a new pen tag with a name and color.","operationId":"farm_create_pen_tag","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenTagCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pen_tags"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/pen-tags/{tag_id}":{"patch":{"tags":["farm","farm-pens","public"],"summary":"Update a pen tag's name or color by ID.","operationId":"farm_update_pen_tag","parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenTagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PenTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pen_tags"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-pens","public"],"summary":"Soft-delete a pen tag by ID.","operationId":"farm_delete_pen_tag","parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","pen_tags"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/locations":{"get":{"tags":["farm","farm-locations","public"],"summary":"List locations (pens, buildings, points, lines) for a site in the caller's organization. Supports optional type, parent_id, BBOX, and include_archived filters.","operationId":"farm_list_locations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Gateway site id","title":"Site Id"},"description":"Gateway site id"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by location_type (repeatable)","title":"Type"},"description":"Filter by location_type (repeatable)"},{"name":"parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only children of this location","title":"Parent Id"},"description":"Only children of this location"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"minLon,minLat,maxLon,maxLat — applies ST_Intersects","title":"Bbox"},"description":"minLon,minLat,maxLon,maxLat — applies ST_Intersects"},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocationResponse"},"title":"Response List Locations V0 Farm Orgs  Org Id  Locations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","locations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-locations","public"],"summary":"Create Location","operationId":"create_location_v0_farm_orgs__org_id__locations_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/locations/{location_id}":{"get":{"tags":["farm","farm-locations","public"],"summary":"Fetch a single location by id (returns archived rows too).","operationId":"farm_get_location","parameters":[{"name":"location_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Location Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","locations"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-locations","public"],"summary":"Update Location","operationId":"update_location_v0_farm_orgs__org_id__locations__location_id__patch","parameters":[{"name":"location_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Location Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-locations","public"],"summary":"Delete Location","description":"Hard delete a location.\n\nDefault UX path is the ``archived`` flag (set via PATCH). This is the\nescape hatch for genuine mistakes. Children get their ``parent_id``\nset to NULL by the FK ``ON DELETE SET NULL`` rule.","operationId":"delete_location_v0_farm_orgs__org_id__locations__location_id__delete","parameters":[{"name":"location_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Location Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/sites/{site_id}/tanks":{"get":{"tags":["farm","farm-tanks","farm-tanks","public"],"summary":"List Tanks","operationId":"list_tanks_v0_farm_orgs__org_id__sites__site_id__tanks_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TankOut"},"title":"Response List Tanks V0 Farm Orgs  Org Id  Sites  Site Id  Tanks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-tanks","farm-tanks","public"],"summary":"Create Tank","operationId":"create_tank_v0_farm_orgs__org_id__sites__site_id__tanks_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TankCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TankOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/sites/{site_id}/tanks/{tank_id}":{"get":{"tags":["farm","farm-tanks","farm-tanks","public"],"summary":"Get Tank","operationId":"get_tank_v0_farm_orgs__org_id__sites__site_id__tanks__tank_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"tank_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TankOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-tanks","farm-tanks","public"],"summary":"Update Tank","operationId":"update_tank_v0_farm_orgs__org_id__sites__site_id__tanks__tank_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"tank_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TankUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TankOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-tanks","farm-tanks","public"],"summary":"Delete Tank","operationId":"delete_tank_v0_farm_orgs__org_id__sites__site_id__tanks__tank_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}},{"name":"tank_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tank Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-buckets":{"get":{"tags":["farm","farm-finance","public"],"summary":"List org-scoped canonical (and custom) financial buckets, seeding the system catalog if missing.","description":"List org-scoped financial buckets. Seeds the 15 canonical buckets on first list.","operationId":"farm_list_financial_buckets","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FinancialBucketOut"},"title":"Response List Financial Buckets V0 Farm Orgs  Org Id  Financial Buckets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","finance"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-finance","public"],"summary":"Create a custom financial bucket","operationId":"create_financial_bucket_v0_farm_orgs__org_id__financial_buckets_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialBucketCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialBucketOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-buckets/ensure-canonical":{"post":{"tags":["farm","farm-finance","public"],"summary":"Ensure canonical financial buckets","operationId":"post_ensure_canonical_buckets_v0_farm_orgs__org_id__financial_buckets_ensure_canonical_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FinancialBucketOut"},"title":"Response Post Ensure Canonical Buckets V0 Farm Orgs  Org Id  Financial Buckets Ensure Canonical Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-buckets/{bucket_id}/exception":{"get":{"tags":["farm","farm-finance","public"],"summary":"Get the live exception (legitimate zero / embedded elsewhere) on a financial bucket, if any.","operationId":"farm_get_financial_bucket_exception","parameters":[{"name":"bucket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bucket Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketExceptionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","finance"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["farm","farm-finance","public"],"summary":"Upsert a bucket exception","operationId":"upsert_bucket_exception_v0_farm_orgs__org_id__financial_buckets__bucket_id__exception_put","parameters":[{"name":"bucket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bucket Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketExceptionUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketExceptionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-finance","public"],"summary":"Clear a bucket exception","operationId":"delete_bucket_exception_v0_farm_orgs__org_id__financial_buckets__bucket_id__exception_delete","parameters":[{"name":"bucket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bucket Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-buckets/{bucket_id}/maps":{"post":{"tags":["farm","farm-finance","public"],"summary":"Map a registry account onto a bucket","operationId":"create_financial_account_map_v0_farm_orgs__org_id__financial_buckets__bucket_id__maps_post","parameters":[{"name":"bucket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bucket Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialAccountMapCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialAccountMapOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-accounts/registry":{"get":{"tags":["farm","farm-finance","public"],"summary":"List org-scoped financial account registry rows from Databricks (filterable, searchable, paginated).","operationId":"farm_list_financial_account_registry","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source system","title":"Provider"},"description":"Filter by source system"},{"name":"provider_org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one provider org (the provider's own org id)","title":"Provider Org Id"},"description":"Filter to one provider org (the provider's own org id)"},{"name":"report_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by report source (pl_detail / balance_sheet_detail)","title":"Report Source"},"description":"Filter by report source (pl_detail / balance_sheet_detail)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive search over account_code + account_name","title":"Q"},"description":"Case-insensitive search over account_code + account_name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"title":"Limit","description":"Maximum number of results to return","default":100},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"title":"Offset","description":"Number of results to skip for pagination","default":0},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialAccountRegistryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["databricks","farm","finance","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-accounts/registry/sources":{"get":{"tags":["farm","farm-finance","public"],"summary":"List the distinct source systems (provider + provider org + report source) in the org's financial account registry with counts.","operationId":"farm_list_financial_account_registry_sources","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FinancialAccountRegistrySource"},"title":"Response List Financial Account Registry Sources V0 Farm Orgs  Org Id  Financial Accounts Registry Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["databricks","farm","finance","registry"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-account-maps":{"get":{"tags":["farm","farm-finance","public"],"summary":"List org-scoped financial account maps (including ignored accounts).","operationId":"farm_list_financial_account_maps","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FinancialAccountMapOut"},"title":"Response List Financial Account Maps V0 Farm Orgs  Org Id  Financial Account Maps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","finance"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-account-maps/ignore":{"post":{"tags":["farm","farm-finance","public"],"summary":"Ignore a registry account","operationId":"ignore_financial_account_v0_farm_orgs__org_id__financial_account_maps_ignore_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialAccountIgnore"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialAccountMapOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/financial-account-maps/{map_id}":{"delete":{"tags":["farm","farm-finance","public"],"summary":"Unmap a financial account","operationId":"delete_financial_account_map_v0_farm_orgs__org_id__financial_account_maps__map_id__delete","parameters":[{"name":"map_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Map Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/dashboards":{"get":{"tags":["farm","farm-dashboards","public"],"summary":"List all saved dashboards for the caller's organization.","operationId":"farm_list_dashboards","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardResponse"},"title":"Response List Dashboards V0 Farm Orgs  Org Id  Dashboards Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-dashboards","public"],"summary":"Create a new saved dashboard for the caller's organization.","operationId":"farm_create_dashboard","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/farm__app__api__v1__dashboards__DashboardCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/dashboards/{dashboard_id}":{"get":{"tags":["farm","farm-dashboards","public"],"summary":"Retrieve a single dashboard by ID.","operationId":"farm_get_dashboard","parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-dashboards","public"],"summary":"Update a dashboard's name, state, or default flag.","operationId":"farm_update_dashboard","parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/farm__app__api__v1__dashboards__DashboardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-dashboards","public"],"summary":"Delete a saved dashboard by ID.","operationId":"farm_delete_dashboard","parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/dashboards/order":{"patch":{"tags":["farm","farm-dashboards","public"],"summary":"Set the caller's personal dashboard order for this organization.","operationId":"farm_reorder_dashboards","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Response Reorder Dashboards V0 Farm Orgs  Org Id  Dashboards Order Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/dashboards/{dashboard_id}/query":{"post":{"tags":["farm","farm-dashboards","public"],"summary":"Run an SQL query scoped to a specific dashboard's data.","description":"Delegate the underlying data query to the in-process data router.\n\nLooks up the dashboard to confirm tenant ownership, then forwards\nthe SQL payload to ``data.app.services.query.run_user_query`` (the\nsame code path ``/data/v1/sql`` uses). Avoids the loopback HTTP hop\nthe spade-farm version had.","operationId":"farm_query_dashboard","parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardQueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Query Dashboard V0 Farm Orgs  Org Id  Dashboards  Dashboard Id  Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["dashboards","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/events":{"get":{"tags":["farm","farm-events","public"],"summary":"List Farm Timeline events for an organization, newest start date first. Supports category, site, and date-range filters, with limit/offset pagination. Date filters match events whose interval overlaps [from, to].","operationId":"farm_list_events","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/EventCategory"}},{"type":"null"}],"description":"Restrict to these categories; omit for all","title":"Category"},"description":"Restrict to these categories; omit for all"},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Restrict to one site; org-wide events are always included","title":"Site Id"},"description":"Restrict to one site; org-wide events are always included"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"title":"Limit","description":"Maximum number of results to return","default":100},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"title":"Offset","description":"Number of results to skip for pagination","default":0},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FarmEventResponse"},"title":"Response List Events V0 Farm Orgs  Org Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-events","public"],"summary":"Create a Farm Timeline event for an organization.","operationId":"farm_create_event","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/events/{event_id}":{"get":{"tags":["farm","farm-events","public"],"summary":"Retrieve a single Farm Timeline event by id.","operationId":"farm_get_event","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-events","public"],"summary":"Update a Farm Timeline event's fields.","operationId":"farm_update_event","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-events","public"],"summary":"Soft-delete a Farm Timeline event by id.","operationId":"farm_delete_event","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/events/{event_id}/metric-card-prefs":{"get":{"tags":["farm","farm-events","public"],"summary":"Get the calling user's metric card preferences for one Farm Timeline event's impact pane. Empty arrays mean the user has never customised this event's pane, so the client shows the live default set.","operationId":"farm_get_event_metric_card_prefs","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventMetricCardPrefsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-events","public"],"summary":"Update the calling user's metric card preferences for one Farm Timeline event's impact pane. Only the lists present in the body are written; an omitted list is left as it was. Creates the row on first use, with every list not sent starting empty.","operationId":"farm_update_event_metric_card_prefs","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventMetricCardPrefsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FarmEventMetricCardPrefsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["events","farm"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/manual-inputs/prices":{"get":{"tags":["farm","farm-manual-inputs","public"],"summary":"List org-scoped manually-entered prices (milk, feed, ...) from Databricks.","description":"List active (non-deleted) logical manual prices for an org, filtered by price_type, with computed effective_through. One item per input_id (site siblings collapsed).","operationId":"farm_list_manual_prices","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"price_type","in":"query","required":true,"schema":{"type":"string","description":"Price kind to list (e.g. 'milk').","title":"Price Type"},"description":"Price kind to list (e.g. 'milk')."},{"name":"integration_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optionally restrict to one manual integration.","title":"Integration Id"},"description":"Optionally restrict to one manual integration."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm.dashboards:read"],"x-spade-public":true,"x-mcp-tags":["databricks","farm","manual-inputs","prices"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["farm","farm-manual-inputs","public"],"summary":"Add a manually-entered price for a manual integration (type/currency/unit from the integration).","description":"Fan-out INSERT one physical row per current integration site. Same-date re-entry soft-deletes prior siblings then inserts a new logical entry. Type/currency/unit come from the integration.","operationId":"farm_create_manual_price","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","manual-inputs","prices"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/manual-inputs/prices/{price_id}":{"patch":{"tags":["farm","farm-manual-inputs","public"],"summary":"Replace an existing manually-entered price (value and/or effective date) via soft-delete + insert.","description":"Append-only edit: soft-delete active siblings for this input_id, then INSERT a new fan-out (new input_id) from the current integration site list.","operationId":"farm_update_manual_price","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"price_id","in":"path","required":true,"schema":{"type":"string","title":"Price Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","manual-inputs","prices"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["farm","farm-manual-inputs","public"],"summary":"Soft delete a manually-entered price entry (all site siblings).","description":"Soft-delete all active site siblings for this logical entry (input_id). Never a hard delete.","operationId":"farm_delete_manual_price","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"price_id","in":"path","required":true,"schema":{"type":"string","title":"Price Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","manual-inputs","prices"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/orgs/{org_id}/templates/dashboards":{"get":{"tags":["farm","farm-templates","public"],"summary":"List dashboard templates published to the given org.","operationId":"farm_list_dashboard_templates","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardTemplateResponse"},"title":"Response List Dashboard Templates V0 Farm Orgs  Org Id  Templates Dashboards Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","templates"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/me/preferences":{"get":{"tags":["farm","farm-me","public"],"summary":"Get the current user's farm preferences (timezone, units, etc.).","operationId":"farm_get_my_preferences","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesResponse"}}}}},"x-spade-public":true,"x-mcp-tags":["farm","me"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["farm","farm-me","public"],"summary":"Update the current user's farm preferences.","operationId":"farm_update_my_preferences","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"x-mcp-tags":["farm","me"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/me/principal":{"get":{"tags":["farm","farm-me","public"],"summary":"Get the current user's identity, org, scopes, and preferences in one call.","description":"One-shot identity payload the spade-farm UI can hydrate from.\n\nCombines AuthContext-derived bits (Spade ids, super-admin flag,\neffective scopes) with the farm-side ``user_preferences`` row.\nReplaces ``getPrincipal()`` in spade-farm + a separate\n``/me/preferences`` round trip. While staff are viewing as a user,\nskip inserting a preferences row so we do not mutate their identity.","operationId":"farm_get_my_principal","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrincipalResponse"}}}}},"x-spade-public":true,"x-mcp-tags":["farm","me"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/pen-types":{"get":{"tags":["farm","farm-lookups","public"],"summary":"List all pen type reference values.","operationId":"farm_list_pen_types","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PenTypeResponse"},"type":"array","title":"Response List Pen Types V0 Farm Pen Types Get"}}}}},"x-spade-public":true,"x-mcp-tags":["farm","lookups"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/lactation-groups":{"get":{"tags":["farm","farm-lookups","public"],"summary":"List all lactation group reference values.","operationId":"farm_list_lactation_groups","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LactationGroupResponse"},"type":"array","title":"Response List Lactation Groups V0 Farm Lactation Groups Get"}}}}},"x-spade-public":true,"x-mcp-tags":["farm","lookups"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/dim-groups":{"get":{"tags":["farm","farm-lookups","public"],"summary":"List all DIM (days in milk) group reference values.","operationId":"farm_list_dim_groups","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DimGroupResponse"},"type":"array","title":"Response List Dim Groups V0 Farm Dim Groups Get"}}}}},"x-spade-public":true,"x-mcp-tags":["farm","lookups"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/templates/kpis":{"get":{"tags":["farm","farm-templates","public"],"summary":"List all available KPI chart templates.","operationId":"farm_list_kpi_templates","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ChartTemplateResponse"},"type":"array","title":"Response List Kpi Templates V0 Farm Templates Kpis Get"}}}}},"x-spade-scopes":["farm:read"],"x-spade-public":true,"x-mcp-tags":["farm","templates"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/farm/onboarding/bootstrap":{"post":{"tags":["farm","farm-onboarding","public"],"summary":"Run first-time farm setup: create org settings and user prefs.","operationId":"farm_bootstrap_onboarding","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingBootstrapRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingBootstrapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["farm:write"],"x-spade-public":true,"x-mcp-tags":["farm","onboarding"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/ping":{"get":{"tags":["enterprise","enterprise-health","public"],"summary":"Ping","operationId":"ping_v0_enterprise_orgs__org_id__ping_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/preferences/me":{"get":{"tags":["enterprise","enterprise-preferences","public"],"summary":"Get My Preferences","operationId":"get_my_preferences_v0_enterprise_orgs__org_id__preferences_me_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["enterprise","enterprise-preferences","public"],"summary":"Put My Preferences","operationId":"put_my_preferences_v0_enterprise_orgs__org_id__preferences_me_put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesPut"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms":{"get":{"tags":["enterprise","enterprise-forms","public"],"summary":"List Forms","operationId":"list_forms_v0_enterprise_orgs__org_id__forms_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormOut"},"title":"Response List Forms V0 Enterprise Orgs  Org Id  Forms Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-forms","public"],"summary":"Create Form","operationId":"create_form_v0_enterprise_orgs__org_id__forms_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms/{form_id}":{"get":{"tags":["enterprise","enterprise-forms","public"],"summary":"Get Form","operationId":"get_form_v0_enterprise_orgs__org_id__forms__form_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-forms","public"],"summary":"Update Form","operationId":"update_form_v0_enterprise_orgs__org_id__forms__form_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-forms","public"],"summary":"Delete Form","operationId":"delete_form_v0_enterprise_orgs__org_id__forms__form_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms/{form_id}/publish":{"post":{"tags":["enterprise","enterprise-forms","public"],"summary":"Publish Form","operationId":"publish_form_v0_enterprise_orgs__org_id__forms__form_id__publish_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms/{form_id}/archive":{"post":{"tags":["enterprise","enterprise-forms","public"],"summary":"Archive Form","operationId":"archive_form_v0_enterprise_orgs__org_id__forms__form_id__archive_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms/{form_id}/duplicate":{"post":{"tags":["enterprise","enterprise-forms","public"],"summary":"Duplicate Form","operationId":"duplicate_form_v0_enterprise_orgs__org_id__forms__form_id__duplicate_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms/{form_id}/new-version":{"post":{"tags":["enterprise","enterprise-forms","public"],"summary":"New Form Version","description":"Bump version in place and return to draft (thin cutover helper).","operationId":"new_form_version_v0_enterprise_orgs__org_id__forms__form_id__new_version_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/forms/{form_id}/assign":{"post":{"tags":["enterprise","enterprise-forms","public"],"summary":"Assign Form Batch","operationId":"assign_form_batch_v0_enterprise_orgs__org_id__forms__form_id__assign_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"form_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Form Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAssignBatch"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormAssignmentOut"},"title":"Response Assign Form Batch V0 Enterprise Orgs  Org Id  Forms  Form Id  Assign Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/form-templates":{"get":{"tags":["enterprise","enterprise-form-templates","public"],"summary":"List Form Templates","operationId":"list_form_templates_v0_enterprise_orgs__org_id__form_templates_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormTemplateOut"},"title":"Response List Form Templates V0 Enterprise Orgs  Org Id  Form Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-form-templates","public"],"summary":"Create Form Template","operationId":"create_form_template_v0_enterprise_orgs__org_id__form_templates_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormTemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/form-templates/{template_id}":{"get":{"tags":["enterprise","enterprise-form-templates","public"],"summary":"Get Form Template","operationId":"get_form_template_v0_enterprise_orgs__org_id__form_templates__template_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-form-templates","public"],"summary":"Update Form Template","operationId":"update_form_template_v0_enterprise_orgs__org_id__form_templates__template_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-form-templates","public"],"summary":"Delete Form Template","operationId":"delete_form_template_v0_enterprise_orgs__org_id__form_templates__template_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/form-assignments":{"get":{"tags":["enterprise","enterprise-form-assignments","public"],"summary":"List Form Assignments","operationId":"list_form_assignments_v0_enterprise_orgs__org_id__form_assignments_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormAssignmentOut"},"title":"Response List Form Assignments V0 Enterprise Orgs  Org Id  Form Assignments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-form-assignments","public"],"summary":"Create Form Assignment","operationId":"create_form_assignment_v0_enterprise_orgs__org_id__form_assignments_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAssignmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAssignmentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/form-assignments/{assignment_id}":{"get":{"tags":["enterprise","enterprise-form-assignments","public"],"summary":"Get Form Assignment","operationId":"get_form_assignment_v0_enterprise_orgs__org_id__form_assignments__assignment_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"assignment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assignment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAssignmentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-form-assignments","public"],"summary":"Update Form Assignment","operationId":"update_form_assignment_v0_enterprise_orgs__org_id__form_assignments__assignment_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"assignment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assignment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAssignmentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAssignmentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-form-assignments","public"],"summary":"Delete Form Assignment","operationId":"delete_form_assignment_v0_enterprise_orgs__org_id__form_assignments__assignment_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"assignment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assignment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/form-submissions":{"get":{"tags":["enterprise","enterprise-form-submissions","public"],"summary":"List Form Submissions","operationId":"list_form_submissions_v0_enterprise_orgs__org_id__form_submissions_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormSubmissionOut"},"title":"Response List Form Submissions V0 Enterprise Orgs  Org Id  Form Submissions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-form-submissions","public"],"summary":"Create Form Submission","operationId":"create_form_submission_v0_enterprise_orgs__org_id__form_submissions_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmissionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmissionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/form-submissions/{submission_id}":{"get":{"tags":["enterprise","enterprise-form-submissions","public"],"summary":"Get Form Submission","operationId":"get_form_submission_v0_enterprise_orgs__org_id__form_submissions__submission_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmissionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-form-submissions","public"],"summary":"Delete Form Submission","operationId":"delete_form_submission_v0_enterprise_orgs__org_id__form_submissions__submission_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/validation-rule-templates":{"get":{"tags":["enterprise","enterprise-validation-rule-templates","public"],"summary":"List Validation Rule Templates","operationId":"list_validation_rule_templates_v0_enterprise_orgs__org_id__validation_rule_templates_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ValidationRuleTemplateOut"},"title":"Response List Validation Rule Templates V0 Enterprise Orgs  Org Id  Validation Rule Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-validation-rule-templates","public"],"summary":"Create Validation Rule Template","operationId":"create_validation_rule_template_v0_enterprise_orgs__org_id__validation_rule_templates_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationRuleTemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationRuleTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/validation-rule-templates/{template_id}":{"get":{"tags":["enterprise","enterprise-validation-rule-templates","public"],"summary":"Get Validation Rule Template","operationId":"get_validation_rule_template_v0_enterprise_orgs__org_id__validation_rule_templates__template_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationRuleTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-validation-rule-templates","public"],"summary":"Update Validation Rule Template","operationId":"update_validation_rule_template_v0_enterprise_orgs__org_id__validation_rule_templates__template_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationRuleTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationRuleTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-validation-rule-templates","public"],"summary":"Delete Validation Rule Template","operationId":"delete_validation_rule_template_v0_enterprise_orgs__org_id__validation_rule_templates__template_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/action-plan-definitions":{"get":{"tags":["enterprise","enterprise-action-plan-definitions","public"],"summary":"List Action Plan Definitions","operationId":"list_action_plan_definitions_v0_enterprise_orgs__org_id__action_plan_definitions_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActionPlanDefinitionOut"},"title":"Response List Action Plan Definitions V0 Enterprise Orgs  Org Id  Action Plan Definitions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-action-plan-definitions","public"],"summary":"Create Action Plan Definition","operationId":"create_action_plan_definition_v0_enterprise_orgs__org_id__action_plan_definitions_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionPlanDefinitionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionPlanDefinitionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/action-plan-definitions/{definition_id}":{"get":{"tags":["enterprise","enterprise-action-plan-definitions","public"],"summary":"Get Action Plan Definition","operationId":"get_action_plan_definition_v0_enterprise_orgs__org_id__action_plan_definitions__definition_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"definition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Definition Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionPlanDefinitionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-action-plan-definitions","public"],"summary":"Update Action Plan Definition","operationId":"update_action_plan_definition_v0_enterprise_orgs__org_id__action_plan_definitions__definition_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"definition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Definition Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionPlanDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionPlanDefinitionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-action-plan-definitions","public"],"summary":"Delete Action Plan Definition","operationId":"delete_action_plan_definition_v0_enterprise_orgs__org_id__action_plan_definitions__definition_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"definition_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Definition Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Get Counterparty","operationId":"get_counterparty_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Upsert Counterparty","operationId":"upsert_counterparty_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgProfileIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}/agreements":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"List Agreements","operationId":"list_agreements_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__agreements_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgreementOut"},"title":"Response List Agreements V0 Enterprise Orgs  Org Id  Relationships Counterparties  Counterparty Org Id  Agreements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Create Agreement","operationId":"create_agreement_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__agreements_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgreementIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgreementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/sites/{site_id}":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Get Site Profile","operationId":"get_site_profile_v0_enterprise_orgs__org_id__relationships_sites__site_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Upsert Site Profile","operationId":"upsert_site_profile_v0_enterprise_orgs__org_id__relationships_sites__site_id__put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteProfileIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}/contacts":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"List Contacts","operationId":"list_contacts_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__contacts_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactOut"},"title":"Response List Contacts V0 Enterprise Orgs  Org Id  Relationships Counterparties  Counterparty Org Id  Contacts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Create Contact","operationId":"create_contact_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__contacts_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}/directory":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Get Directory","operationId":"get_directory_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__directory_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}},{"name":"purpose","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DirectoryRow"},"title":"Response Get Directory V0 Enterprise Orgs  Org Id  Relationships Counterparties  Counterparty Org Id  Directory Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}/addresses":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"List Counterparty Addresses","operationId":"list_counterparty_addresses_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__addresses_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"agreement_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddressOut"},"title":"Response List Counterparty Addresses V0 Enterprise Orgs  Org Id  Relationships Counterparties  Counterparty Org Id  Addresses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Create Counterparty Address","operationId":"create_counterparty_address_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__addresses_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/addresses":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"List Own Addresses","operationId":"list_own_addresses_v0_enterprise_orgs__org_id__relationships_addresses_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddressOut"},"title":"Response List Own Addresses V0 Enterprise Orgs  Org Id  Relationships Addresses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Create Own Address","operationId":"create_own_address_v0_enterprise_orgs__org_id__relationships_addresses_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}/notes":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"List Notes","operationId":"list_notes_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__notes_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteOut"},"title":"Response List Notes V0 Enterprise Orgs  Org Id  Relationships Counterparties  Counterparty Org Id  Notes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Create Note","operationId":"create_note_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__notes_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/relationships/counterparties/{counterparty_org_id}/activities":{"get":{"tags":["enterprise","enterprise-relationships","public"],"summary":"List Activities","operationId":"list_activities_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__activities_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/enterprise__app__api__v1__relationships__ActivityOut"},"title":"Response List Activities V0 Enterprise Orgs  Org Id  Relationships Counterparties  Counterparty Org Id  Activities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-relationships","public"],"summary":"Create Activity","operationId":"create_activity_v0_enterprise_orgs__org_id__relationships_counterparties__counterparty_org_id__activities_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"counterparty_org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Counterparty Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/enterprise__app__api__v1__relationships__ActivityOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/plans":{"post":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Create Plan","operationId":"create_plan_v0_enterprise_orgs__org_id__plans_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/plans/{plan_id}":{"get":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Get Plan","operationId":"get_plan_v0_enterprise_orgs__org_id__plans__plan_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/plans/{plan_id}/publish":{"post":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Publish","operationId":"publish_v0_enterprise_orgs__org_id__plans__plan_id__publish_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/logistics/settings":{"get":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"Get Org Settings","operationId":"get_org_settings_v0_enterprise_orgs__org_id__logistics_settings_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OrgSettingsOut"},{"type":"null"}],"title":"Response Get Org Settings V0 Enterprise Orgs  Org Id  Logistics Settings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/logistics/pickup-flows":{"get":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"Get Org Pickup Flows","operationId":"get_org_pickup_flows_v0_enterprise_orgs__org_id__logistics_pickup_flows_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Org Pickup Flows V0 Enterprise Orgs  Org Id  Logistics Pickup Flows Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"Put Org Pickup Flows","operationId":"put_org_pickup_flows_v0_enterprise_orgs__org_id__logistics_pickup_flows_put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Put Org Pickup Flows V0 Enterprise Orgs  Org Id  Logistics Pickup Flows Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/logistics/vehicles":{"get":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"List Vehicles","operationId":"list_vehicles_v0_enterprise_orgs__org_id__logistics_vehicles_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VehicleOut"},"title":"Response List Vehicles V0 Enterprise Orgs  Org Id  Logistics Vehicles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/logistics/plants":{"get":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"List Plants","operationId":"list_plants_v0_enterprise_orgs__org_id__logistics_plants_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlantOut"},"title":"Response List Plants V0 Enterprise Orgs  Org Id  Logistics Plants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/logistics/routes":{"get":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"List Routes","operationId":"list_routes_v0_enterprise_orgs__org_id__logistics_routes_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RouteListItem"},"title":"Response List Routes V0 Enterprise Orgs  Org Id  Logistics Routes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/logistics/routes/{route_id}":{"get":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"Get Route","operationId":"get_route_v0_enterprise_orgs__org_id__logistics_routes__route_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Route V0 Enterprise Orgs  Org Id  Logistics Routes  Route Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-logistics-read","public"],"summary":"Update Route","operationId":"update_route_v0_enterprise_orgs__org_id__logistics_routes__route_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Route V0 Enterprise Orgs  Org Id  Logistics Routes  Route Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/company-summary/{company_id}":{"get":{"tags":["enterprise","enterprise-stubs","public"],"summary":"Get Company Summary","operationId":"get_company_summary_v0_enterprise_orgs__org_id__company_summary__company_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySummaryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/producers/by-relationship/{relationship_id}/production":{"get":{"tags":["enterprise","enterprise-stubs","public"],"summary":"Get Producer Production","operationId":"get_producer_production_v0_enterprise_orgs__org_id__producers_by_relationship__relationship_id__production_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Producer Production V0 Enterprise Orgs  Org Id  Producers By Relationship  Relationship Id  Production Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/producers/by-relationship/{relationship_id}/alerts":{"get":{"tags":["enterprise","enterprise-stubs","public"],"summary":"Get Producer Alerts","operationId":"get_producer_alerts_v0_enterprise_orgs__org_id__producers_by_relationship__relationship_id__alerts_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Producer Alerts V0 Enterprise Orgs  Org Id  Producers By Relationship  Relationship Id  Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/producers/by-relationship/{relationship_id}/custom-field-values":{"get":{"tags":["enterprise","enterprise-stubs","public"],"summary":"Get Producer Custom Field Values","operationId":"get_producer_custom_field_values_v0_enterprise_orgs__org_id__producers_by_relationship__relationship_id__custom_field_values_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"relationship_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Relationship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Producer Custom Field Values V0 Enterprise Orgs  Org Id  Producers By Relationship  Relationship Id  Custom Field Values Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks":{"get":{"tags":["enterprise","enterprise-tasks","public"],"summary":"List Tasks","operationId":"list_tasks_v0_enterprise_orgs__org_id__tasks_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaskOut"},"title":"Response List Tasks V0 Enterprise Orgs  Org Id  Tasks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Create Task","operationId":"create_task_v0_enterprise_orgs__org_id__tasks_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}":{"patch":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Update Task","operationId":"update_task_v0_enterprise_orgs__org_id__tasks__task_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Delete Task","operationId":"delete_task_v0_enterprise_orgs__org_id__tasks__task_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/comments":{"get":{"tags":["enterprise","enterprise-tasks","public"],"summary":"List Comments","operationId":"list_comments_v0_enterprise_orgs__org_id__tasks__task_id__comments_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentOut"},"title":"Response List Comments V0 Enterprise Orgs  Org Id  Tasks  Task Id  Comments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Add Comment","operationId":"add_comment_v0_enterprise_orgs__org_id__tasks__task_id__comments_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/comments/{comment_id}":{"patch":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Update Comment","operationId":"update_comment_v0_enterprise_orgs__org_id__tasks__task_id__comments__comment_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Delete Comment","operationId":"delete_comment_v0_enterprise_orgs__org_id__tasks__task_id__comments__comment_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/watchers":{"get":{"tags":["enterprise","enterprise-tasks","public"],"summary":"List Watchers","operationId":"list_watchers_v0_enterprise_orgs__org_id__tasks__task_id__watchers_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WatcherOut"},"title":"Response List Watchers V0 Enterprise Orgs  Org Id  Tasks  Task Id  Watchers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/watchers/{user_id}":{"post":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Add Watcher","operationId":"add_watcher_v0_enterprise_orgs__org_id__tasks__task_id__watchers__user_id__post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Delete Watcher","operationId":"delete_watcher_v0_enterprise_orgs__org_id__tasks__task_id__watchers__user_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/activity":{"get":{"tags":["enterprise","enterprise-tasks","public"],"summary":"List Activity","operationId":"list_activity_v0_enterprise_orgs__org_id__tasks__task_id__activity_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/enterprise__app__api__v1__tasks__ActivityOut"},"title":"Response List Activity V0 Enterprise Orgs  Org Id  Tasks  Task Id  Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Create Activity","operationId":"create_activity_v0_enterprise_orgs__org_id__tasks__task_id__activity_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/enterprise__app__api__v1__tasks__ActivityOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/attachments":{"get":{"tags":["enterprise","enterprise-tasks","public"],"summary":"List Attachments","operationId":"list_attachments_v0_enterprise_orgs__org_id__tasks__task_id__attachments_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentOut"},"title":"Response List Attachments V0 Enterprise Orgs  Org Id  Tasks  Task Id  Attachments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Create Attachment","operationId":"create_attachment_v0_enterprise_orgs__org_id__tasks__task_id__attachments_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/tasks/{task_id}/attachments/{attachment_id}":{"delete":{"tags":["enterprise","enterprise-tasks","public"],"summary":"Delete Attachment","operationId":"delete_attachment_v0_enterprise_orgs__org_id__tasks__task_id__attachments__attachment_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/dashboards":{"get":{"tags":["enterprise","enterprise-dashboards","public"],"summary":"List Dashboards","operationId":"list_dashboards_v0_enterprise_orgs__org_id__dashboards_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardOut"},"title":"Response List Dashboards V0 Enterprise Orgs  Org Id  Dashboards Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"post":{"tags":["enterprise","enterprise-dashboards","public"],"summary":"Create Dashboard","operationId":"create_dashboard_v0_enterprise_orgs__org_id__dashboards_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/enterprise__app__api__v1__dashboards__DashboardCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/dashboards/{dashboard_id}":{"get":{"tags":["enterprise","enterprise-dashboards","public"],"summary":"Get Dashboard","operationId":"get_dashboard_v0_enterprise_orgs__org_id__dashboards__dashboard_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"patch":{"tags":["enterprise","enterprise-dashboards","public"],"summary":"Update Dashboard","operationId":"update_dashboard_v0_enterprise_orgs__org_id__dashboards__dashboard_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/enterprise__app__api__v1__dashboards__DashboardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"delete":{"tags":["enterprise","enterprise-dashboards","public"],"summary":"Delete Dashboard","operationId":"delete_dashboard_v0_enterprise_orgs__org_id__dashboards__dashboard_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/orgs/{org_id}/layouts/farm-page":{"get":{"tags":["enterprise","enterprise-layouts","public"],"summary":"Get Farm Page Layout","operationId":"get_farm_page_layout_v0_enterprise_orgs__org_id__layouts_farm_page_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:read"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]},"put":{"tags":["enterprise","enterprise-layouts","public"],"summary":"Upsert Farm Page Layout","operationId":"upsert_farm_page_layout_v0_enterprise_orgs__org_id__layouts_farm_page_put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-scopes":["enterprise:write"],"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/hauler/routes/today":{"get":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Hauler Routes Today","operationId":"hauler_routes_today_v0_enterprise_hauler_routes_today_get","parameters":[{"name":"install_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Install Id"}},{"name":"vehicle_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Vehicle Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/routes/today":{"get":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Routes Today","operationId":"routes_today_v0_enterprise_routes_today_get","parameters":[{"name":"vehicle_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Vehicle Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/hauler/routes":{"get":{"tags":["enterprise","enterprise-logistics","public"],"summary":"List Hauler Routes","operationId":"list_hauler_routes_v0_enterprise_hauler_routes_get","parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Hauler Routes V0 Enterprise Hauler Routes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/hauler/routes/{route_id}":{"get":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Get Hauler Route","operationId":"get_hauler_route_v0_enterprise_hauler_routes__route_id__get","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Hauler Route V0 Enterprise Hauler Routes  Route Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/hauler/routes/{route_id}/select":{"post":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Select Hauler Route","operationId":"select_hauler_route_v0_enterprise_hauler_routes__route_id__select_post","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Select Hauler Route V0 Enterprise Hauler Routes  Route Id  Select Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/hauler/routes/{route_id}/vehicles":{"get":{"tags":["enterprise","enterprise-logistics","public"],"summary":"List Hauler Route Vehicles","operationId":"list_hauler_route_vehicles_v0_enterprise_hauler_routes__route_id__vehicles_get","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Hauler Route Vehicles V0 Enterprise Hauler Routes  Route Id  Vehicles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/enterprise/hauler/routes/{route_id}/vehicle":{"post":{"tags":["enterprise","enterprise-logistics","public"],"summary":"Select Hauler Route Vehicle","operationId":"select_hauler_route_vehicle_v0_enterprise_hauler_routes__route_id__vehicle_post","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectVehicleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Select Hauler Route Vehicle V0 Enterprise Hauler Routes  Route Id  Vehicle Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/sync/installs/hello":{"post":{"tags":["sync","sync","public"],"summary":"Installs Hello","operationId":"installs_hello_v0_sync_installs_hello_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelloIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelloOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/sync/push":{"post":{"tags":["sync","sync","public"],"summary":"Sync Push","operationId":"sync_push_v0_sync_push_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sync Push V0 Sync Push Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/sync/blobs/upload-url":{"post":{"tags":["sync","sync","public"],"summary":"Blob Upload Url","operationId":"blob_upload_url_v0_sync_blobs_upload_url_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlobMintIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Blob Upload Url V0 Sync Blobs Upload Url Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}},"/v0/sync/blobs/complete":{"post":{"tags":["sync","sync","public"],"summary":"Blob Complete","operationId":"blob_complete_v0_sync_blobs_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlobCompleteIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Blob Complete V0 Sync Blobs Complete Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-spade-public":true,"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}}},"components":{"schemas":{"ActionPlanDefinitionCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"priority":{"type":"string","title":"Priority","default":"medium"},"program_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Id"},"form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Form Id"},"trigger_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Trigger Config"},"notes_field_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Field Id"},"resolution_days":{"type":"integer","title":"Resolution Days","default":30},"suggested_steps":{"items":{},"type":"array","title":"Suggested Steps"},"external_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Key"}},"type":"object","required":["name"],"title":"ActionPlanDefinitionCreate"},"ActionPlanDefinitionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"priority":{"type":"string","title":"Priority"},"source":{"type":"string","title":"Source"},"program_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Id"},"form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Form Id"},"trigger_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Trigger Config"},"notes_field_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Field Id"},"resolution_days":{"type":"integer","title":"Resolution Days"},"suggested_steps":{"items":{},"type":"array","title":"Suggested Steps"},"external_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Key"},"is_system":{"type":"boolean","title":"Is System","default":false},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"},"updated_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By User 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","organization_id","name","priority","source","resolution_days"],"title":"ActionPlanDefinitionOut"},"ActionPlanDefinitionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"program_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Id"},"form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Form Id"},"trigger_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Trigger Config"},"notes_field_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Field Id"},"resolution_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resolution Days"},"suggested_steps":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Suggested Steps"},"external_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Key"}},"type":"object","title":"ActionPlanDefinitionUpdate"},"ActivityCreate":{"properties":{"action":{"type":"string","title":"Action"},"detail":{"additionalProperties":true,"type":"object","title":"Detail"}},"type":"object","required":["action"],"title":"ActivityCreate"},"ActivityIn":{"properties":{"action":{"type":"string","title":"Action"},"detail":{"additionalProperties":true,"type":"object","title":"Detail"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["action"],"title":"ActivityIn"},"AddressIn":{"properties":{"kind_code":{"type":"string","title":"Kind Code"},"rank":{"type":"integer","title":"Rank","default":0},"attention":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attention"},"line1":{"type":"string","title":"Line1"},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2"},"locality":{"type":"string","title":"Locality"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country_code":{"type":"string","title":"Country Code"},"agreement_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agreement Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["kind_code","line1","locality","country_code"],"title":"AddressIn"},"AddressOut":{"properties":{"kind_code":{"type":"string","title":"Kind Code"},"rank":{"type":"integer","title":"Rank","default":0},"attention":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attention"},"line1":{"type":"string","title":"Line1"},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2"},"locality":{"type":"string","title":"Locality"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country_code":{"type":"string","title":"Country Code"},"agreement_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agreement Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"counterparty_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Counterparty Org Id"}},"type":"object","required":["kind_code","line1","locality","country_code","id","organization_id"],"title":"AddressOut"},"AgreementIn":{"properties":{"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status","default":"prospect"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"starts_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Starts On"},"ends_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Ends On"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["kind"],"title":"AgreementIn"},"AgreementOut":{"properties":{"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status","default":"prospect"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"starts_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Starts On"},"ends_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Ends On"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"counterparty_org_id":{"type":"string","format":"uuid","title":"Counterparty Org Id"}},"type":"object","required":["kind","id","organization_id","counterparty_org_id"],"title":"AgreementOut"},"AllowedSiteOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"organization_id":{"type":"string","title":"Organization Id"}},"type":"object","required":["id","name","organization_id"],"title":"AllowedSiteOut"},"AppInvitationRequest":{"properties":{"application":{"$ref":"#/components/schemas/Application","default":"developer"},"email":{"type":"string","format":"email","title":"Email"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","description":"Role slug. Defaults to the application's default role (see gateway.app.services.applications)."}},"type":"object","required":["email"],"title":"AppInvitationRequest"},"Application":{"type":"string","enum":["developer","farm","enterprise","consultant"],"title":"Application","description":"The Spade application surface a request originates from.\n\nUsed by application-aware user-management to pick the right\nredirect URL, role catalog, default role, and authorization policy\nwhen handling cross-application calls (e.g. inviting a user into\na customer farm org).\n\nMirrors the values of ``Organization.type`` for orgs that are tied\nto a single product surface, but Application is the ``CALL CONTEXT``\nwhile ``Organization.type`` is the ``PERSISTENT SHAPE`` of a tenant."},"AssignmentIn":{"properties":{"purpose_code":{"type":"string","title":"Purpose Code"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"rank":{"type":"integer","title":"Rank","default":0}},"type":"object","required":["purpose_code"],"title":"AssignmentIn"},"AssignmentOut":{"properties":{"purpose_code":{"type":"string","title":"Purpose Code"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"rank":{"type":"integer","title":"Rank","default":0},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["purpose_code","id"],"title":"AssignmentOut"},"AttachmentCreate":{"properties":{"filename":{"type":"string","title":"Filename"},"s3_key":{"type":"string","title":"S3 Key"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"}},"type":"object","required":["filename","s3_key"],"title":"AttachmentCreate","description":"Metadata after client uploads to S3 (shared upload flow)."},"AttachmentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"task_id":{"type":"string","format":"uuid","title":"Task Id"},"uploaded_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Uploaded By User Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"s3_key":{"type":"string","title":"S3 Key"},"download_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Path"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","task_id","filename","s3_key"],"title":"AttachmentOut"},"BlobCompleteIn":{"properties":{"upload_id":{"type":"string","format":"uuid","title":"Upload Id"},"parts":{"items":{"$ref":"#/components/schemas/BlobPartIn"},"type":"array","maxItems":10000,"title":"Parts"}},"type":"object","required":["upload_id"],"title":"BlobCompleteIn"},"BlobMintIn":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"install_id":{"type":"string","format":"uuid","title":"Install Id"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","title":"Sha256"},"bytes":{"type":"integer","minimum":1.0,"title":"Bytes"},"mime":{"type":"string","title":"Mime","default":"application/octet-stream"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"}},"type":"object","required":["organization_id","install_id","sha256","bytes"],"title":"BlobMintIn"},"BlobPartIn":{"properties":{"part_number":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Part Number"},"etag":{"type":"string","maxLength":1024,"minLength":1,"title":"Etag"}},"type":"object","required":["part_number","etag"],"title":"BlobPartIn"},"BootstrapOrgRequest":{"properties":{"application":{"$ref":"#/components/schemas/Application"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"owner_workos_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner user id","description":"Optional user id of the org owner. Omit for staff-provisioned tenants — no owner membership is created."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"owner_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Role","description":"Optional role slug for the owner membership. Defaults to the application's default role (see gateway.app.services.applications)."}},"type":"object","required":["application","name"],"title":"BootstrapOrgRequest"},"BootstrapOrgResponse":{"properties":{"workos_organization_id":{"type":"string","title":"Organization identity id"},"name":{"type":"string","title":"Name"},"application":{"type":"string","title":"Application"},"default_role_slug":{"type":"string","title":"Default Role Slug"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["workos_organization_id","name","application","default_role_slug"],"title":"BootstrapOrgResponse"},"BucketExceptionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bucket_id":{"type":"string","format":"uuid","title":"Bucket Id"},"status":{"type":"string","title":"Status"},"embedded_in_bucket_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Embedded In Bucket Id"},"reason":{"type":"string","title":"Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","bucket_id","status","reason","created_at","updated_at"],"title":"BucketExceptionOut"},"BucketExceptionUpsert":{"properties":{"status":{"type":"string","title":"Status"},"embedded_in_bucket_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Embedded In Bucket Id"},"reason":{"type":"string","minLength":1,"title":"Reason"}},"type":"object","required":["status","reason"],"title":"BucketExceptionUpsert"},"ChangeHistoryEntry":{"properties":{"id":{"type":"string","title":"Id"},"at":{"type":"string","title":"At"},"summary":{"type":"string","title":"Summary"},"field_changes":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Field Changes"}},"type":"object","required":["id","at","summary"],"title":"ChangeHistoryEntry"},"ChangeRequestCreate":{"properties":{"roles":{"items":{"type":"string"},"type":"array","title":"Roles"}},"type":"object","title":"ChangeRequestCreate"},"ChangeRequestOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","title":"Status"},"invitee_email":{"type":"string","title":"Invitee Email"}},"type":"object","required":["id","status","invitee_email"],"title":"ChangeRequestOut"},"ChannelTransport":{"type":"string","enum":["api","streamer","email","scraper","bovisync","manual","ddw","s3_pull"],"title":"ChannelTransport","description":"The transport a channel uses to move data for an integration.\n\n- api:      Spade talks to the provider's HTTP API.\n- streamer: An on-premise Spade Streamer agent on a farm PC moves the data.\n- email:    Farm forwards vendor reports to a unique inbound address;\n            the email worker parses the message, lands the raw .eml\n            envelope plus each attachment, and converts CSV-like\n            attachments to parquet inline. See\n            ``integrations/app/integrations/email/inbound.py``.\n- scraper:  Spade-orchestrated browser scraper (Playwright on a\n            Fargate task). First-class transport; extractor dispatch\n            enforces read policy via ``channel_policy`` (is_active +\n            can_read + read_permission_granted). Backfilled for\n            existing scraper-provider integrations by the\n            channeltransport migration.\n- bovisync: Bovisync aggregator transport. Source-app data re-delivered\n            via Bovisync's Snowflake share (BOVISYNC_PERFORMANCE_DATA_LINK),\n            attributed back to this org via a public ``bovisync_farm_id``\n            (org-level / global tier). Spade owns the Snowflake credentials\n            (``platform_managed_auth=True``); extraction is handled by the\n            data-eng Snowflake pipeline, not in dev-platform. Declared by\n            ``dc305``, ``pcdart``, and ``dhi_plus``.\n- ddw:      DDW aggregator transport — one enrollment per source app.\n            Internally routes ``api/`` paths to the ICDM host and\n            ``proxy/`` paths to the KPI Library host (separate JWTs).\n            See ``TODO(ddw-deprecation)``."},"ChannelUpdate":{"properties":{"can_read":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Read","description":"Update read (ingest) capability"},"can_write":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Write","description":"Update write (push out) capability"},"read_permission_granted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read Permission Granted","description":"Grant/revoke inbound ingest authorization (load-bearing gate for uploads)"},"write_permission_granted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Write Permission Granted","description":"Grant/revoke outbound push authorization"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Update device attribution (streamer only)"},"is_connected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Connected"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"error_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Error Count"},"last_connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected At"},"inbound_allowed_senders":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Inbound Allowed Senders","description":"Replace the sender allowlist (email channels only)."}},"type":"object","title":"ChannelUpdate","description":"Partial-update payload for a channel.  All fields optional."},"ChartTemplateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"category":{"type":"string","title":"Category"},"unit":{"type":"string","title":"Unit"},"default_visualization":{"type":"string","title":"Default Visualization"},"mock_value":{"type":"number","title":"Mock Value"},"mock_previous_value":{"type":"number","title":"Mock Previous Value"},"mock_target":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mock Target"},"data_source":{"type":"string","title":"Data Source"},"data_sources":{"items":{"type":"string"},"type":"array","title":"Data Sources"},"drill_levels":{"items":{"type":"string"},"type":"array","title":"Drill Levels"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","key","name","description","category","unit","default_visualization","mock_value","mock_previous_value","data_source","sort_order"],"title":"ChartTemplateResponse"},"CommentCreate":{"properties":{"body":{"type":"string","title":"Body"}},"type":"object","required":["body"],"title":"CommentCreate"},"CommentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"task_id":{"type":"string","format":"uuid","title":"Task Id"},"author_user_id":{"type":"string","format":"uuid","title":"Author User Id"},"body":{"type":"string","title":"Body"},"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","task_id","author_user_id","body"],"title":"CommentOut"},"CommentUpdate":{"properties":{"body":{"type":"string","title":"Body"}},"type":"object","required":["body"],"title":"CommentUpdate"},"CompanySummaryOut":{"properties":{"child_farms":{"items":{},"type":"array","title":"Child Farms"},"contacts":{"items":{},"type":"array","title":"Contacts"},"total_herd_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Herd Size"},"avg_quality_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Quality Score"},"avg_sustainability_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Sustainability Score"},"milk_types":{"items":{"type":"string"},"type":"array","title":"Milk Types"},"organic_certified_status":{"type":"string","title":"Organic Certified Status","default":"none"}},"type":"object","title":"CompanySummaryOut"},"ContactIn":{"properties":{"display_name":{"type":"string","title":"Display Name"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"language_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language Code"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"address_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Address Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"channels":{"items":{"$ref":"#/components/schemas/enterprise__app__api__v1__relationships__ChannelIn"},"type":"array","title":"Channels"},"assignments":{"items":{"$ref":"#/components/schemas/AssignmentIn"},"type":"array","title":"Assignments"}},"type":"object","required":["display_name"],"title":"ContactIn"},"ContactOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"counterparty_org_id":{"type":"string","format":"uuid","title":"Counterparty Org Id"},"display_name":{"type":"string","title":"Display Name"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"language_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language Code"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"address_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Address Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"channels":{"items":{"$ref":"#/components/schemas/enterprise__app__api__v1__relationships__ChannelOut"},"type":"array","title":"Channels"},"assignments":{"items":{"$ref":"#/components/schemas/AssignmentOut"},"type":"array","title":"Assignments"}},"type":"object","required":["id","organization_id","counterparty_org_id","display_name"],"title":"ContactOut"},"CustomRoleCreate":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities"}},"type":"object","required":["name"],"title":"CustomRoleCreate"},"CustomRolePatch":{"properties":{"name":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"}},"type":"object","title":"CustomRolePatch"},"CustomRoleResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities"}},"type":"object","required":["id","name","capabilities"],"title":"CustomRoleResponse"},"DashboardOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"owner_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner User Id"},"name":{"type":"string","title":"Name"},"is_default":{"type":"string","title":"Is Default"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["id","organization_id","name","is_default"],"title":"DashboardOut"},"DashboardQueryRequest":{"properties":{"sql":{"type":"string","title":"Sql"},"params":{"additionalProperties":true,"type":"object","title":"Params","default":{}}},"type":"object","required":["sql"],"title":"DashboardQueryRequest","description":"Free-form query payload — schema matches the data router's\n``/data/v1/...`` SQL endpoint."},"DashboardResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"name":{"type":"string","title":"Name"},"state":{"title":"State"},"is_default":{"type":"boolean","title":"Is Default"},"created_from_template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created From Template Id"},"created_by_spade_user_id":{"type":"string","format":"uuid","title":"Created By Spade User Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","spade_organization_id","name","state","is_default","created_by_spade_user_id","created_at","updated_at"],"title":"DashboardResponse"},"DashboardTemplateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"state":{"title":"State"},"sort_order":{"type":"integer","title":"Sort Order"},"status":{"type":"string","title":"Status"},"visibility":{"$ref":"#/components/schemas/TemplateVisibility"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"assignments":{"items":{},"type":"array","title":"Assignments"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"version":{"type":"integer","title":"Version"}},"type":"object","required":["id","name","description","state","sort_order","status","visibility","created_at","updated_at","version"],"title":"DashboardTemplateResponse"},"DataGrantCreate":{"properties":{"grantee_org_id":{"type":"string","format":"uuid","title":"Grantee Org Id"},"resource_id":{"type":"string","format":"uuid","title":"Resource Id"},"domain":{"type":"string","title":"Domain"},"access_tier":{"type":"string","enum":["read","aggregate"],"title":"Access Tier","default":"read"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"relationship_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"}},"type":"object","required":["grantee_org_id","resource_id","domain"],"title":"DataGrantCreate"},"DataGrantOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"type":"string","title":"Kind"},"grantee_org_id":{"type":"string","format":"uuid","title":"Grantee Org Id"},"grantee_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grantee User Id"},"resource_type":{"type":"string","title":"Resource Type"},"resource_id":{"type":"string","format":"uuid","title":"Resource Id"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Site Ids"},"host_roles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Host Roles"},"offer_extras":{"anyOf":[{"items":{"$ref":"#/components/schemas/OfferExtraOut"},"type":"array"},{"type":"null"}],"title":"Offer Extras"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Id"},"access_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Tier"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"relationship_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"terminated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Terminated At"}},"type":"object","required":["id","kind","grantee_org_id","resource_type","resource_id","status"],"title":"DataGrantOut"},"DataGrantPatch":{"properties":{"access_tier":{"anyOf":[{"type":"string","enum":["read","aggregate"]},{"type":"null"}],"title":"Access Tier"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},"type":"object","title":"DataGrantPatch"},"DataGrantReplaceBody":{"properties":{"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"access_tier":{"type":"string","enum":["read","aggregate"],"title":"Access Tier","default":"read"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Site Ids"},"host_roles":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Host Roles"},"role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Id"}},"type":"object","title":"DataGrantReplaceBody"},"DataQueryRequest":{"properties":{"query":{"type":"string","title":"Query"},"catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"max_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Rows","default":1000},"environment":{"type":"string","title":"Environment","default":"production"}},"type":"object","required":["query"],"title":"DataQueryRequest","description":"Request model for SQL query execution"},"DataSourceInfo":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"catalog":{"type":"string","title":"Catalog"},"schema":{"type":"string","title":"Schema"},"full_name":{"type":"string","title":"Full Name"},"fields":{"items":{"$ref":"#/components/schemas/FieldInfo"},"type":"array","title":"Fields"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["name","type","catalog","schema","full_name","fields"],"title":"DataSourceInfo","description":"Information about a data source (table/view)"},"DataSourcesResponse":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/DataSourceInfo"},"type":"array","title":"Sources"},"catalog":{"type":"string","title":"Catalog"},"schema":{"type":"string","title":"Schema"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["sources","catalog","schema","total_count"],"title":"DataSourcesResponse","description":"Response containing available data sources"},"DimGroupResponse":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"}},"type":"object","required":["id","label"],"title":"DimGroupResponse"},"DirectoryRow":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"counterparty_org_id":{"type":"string","format":"uuid","title":"Counterparty Org Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"purpose_code":{"type":"string","title":"Purpose Code"},"rank":{"type":"integer","title":"Rank"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"display_name":{"type":"string","title":"Display Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["organization_id","counterparty_org_id","purpose_code","rank","contact_id","display_name"],"title":"DirectoryRow"},"EntityMapBulkIn":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EntityMapIn"},"type":"array","title":"Items"}},"type":"object","title":"EntityMapBulkIn","description":"Bulk upsert of entity maps (import wizard)."},"EntityMapIn":{"properties":{"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"entity_type":{"type":"string","maxLength":64,"title":"Entity Type"},"external_id":{"type":"string","maxLength":255,"title":"External Id"},"source_namespace":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Source Namespace"},"external_id_kind":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"External Id Kind"},"external_payload":{"additionalProperties":true,"type":"object","title":"External Payload"},"internal_entity_type":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Internal Entity Type"},"internal_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Internal Id"},"internal_natural_key":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Internal Natural Key"},"concept_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Concept Id"},"match_method":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Match Method","default":"manual"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"is_ignored":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Ignored"}},"type":"object","required":["integration_id","entity_type","external_id"],"title":"EntityMapIn","description":"Create (or upsert) one entity map.\n\n``organization_id`` is taken from the request context, not the body. Upsert\nkey is ``(integration_id, source_namespace, entity_type, external_id)`` on\nactive rows."},"EntityMapMergeIn":{"properties":{"map_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":2,"title":"Map Ids"},"concept_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Concept Id"}},"type":"object","required":["map_ids"],"title":"EntityMapMergeIn","description":"Assign a shared concept_id to N existing maps (cross-system reconcile).\n\nIf ``concept_id`` is omitted a fresh one is generated and returned on every\naffected row."},"EntityMapOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"source_namespace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Namespace"},"entity_type":{"type":"string","title":"Entity Type"},"external_id":{"type":"string","title":"External Id"},"external_id_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id Kind"},"external_payload":{"additionalProperties":true,"type":"object","title":"External Payload"},"internal_entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Entity Type"},"internal_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Internal Id"},"internal_natural_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Natural Key"},"concept_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Concept Id"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"mapped_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapped By"},"mapped_at":{"type":"string","format":"date-time","title":"Mapped At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"is_ignored":{"type":"boolean","title":"Is Ignored","default":false},"effective_from":{"type":"string","format":"date-time","title":"Effective From"},"effective_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective To"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","organization_id","integration_id","entity_type","external_id","mapped_at","effective_from","created_at","updated_at"],"title":"EntityMapOut"},"EntityMapUpdate":{"properties":{"internal_entity_type":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Internal Entity Type"},"internal_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Internal Id"},"internal_natural_key":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Internal Natural Key"},"concept_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Concept Id"},"external_payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"External Payload"},"match_method":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Match Method"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"is_ignored":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Ignored"}},"type":"object","title":"EntityMapUpdate","description":"Partial update of a map's internal/target side or metadata."},"EntityRollupIn":{"properties":{"target_entity_type":{"type":"string","maxLength":64,"title":"Target Entity Type"},"target_internal_id":{"type":"string","format":"uuid","title":"Target Internal Id"},"metric":{"type":"string","maxLength":64,"title":"Metric"},"operator":{"type":"string","maxLength":16,"title":"Operator"},"expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expression"},"weight_field":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Weight Field"},"unit":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Unit"},"time_grain":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Time Grain"},"priority":{"type":"integer","title":"Priority","default":0},"source_selector":{"additionalProperties":true,"type":"object","title":"Source Selector"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["target_entity_type","target_internal_id","metric","operator"],"title":"EntityRollupIn"},"EntityRollupOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"target_entity_type":{"type":"string","title":"Target Entity Type"},"target_internal_id":{"type":"string","format":"uuid","title":"Target Internal Id"},"metric":{"type":"string","title":"Metric"},"operator":{"type":"string","title":"Operator"},"expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expression"},"weight_field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weight Field"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"time_grain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Grain"},"priority":{"type":"integer","title":"Priority","default":0},"source_selector":{"additionalProperties":true,"type":"object","title":"Source Selector"},"is_active":{"type":"boolean","title":"Is Active","default":true},"effective_from":{"type":"string","format":"date-time","title":"Effective From"},"effective_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective To"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","organization_id","target_entity_type","target_internal_id","metric","operator","effective_from","created_at","updated_at"],"title":"EntityRollupOut"},"EntityRollupUpdate":{"properties":{"target_entity_type":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Target Entity Type"},"target_internal_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Internal Id"},"metric":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Metric"},"operator":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Operator"},"expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expression"},"weight_field":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Weight Field"},"unit":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Unit"},"time_grain":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Time Grain"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"source_selector":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Source Selector"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"EntityRollupUpdate"},"EventCategory":{"type":"string","enum":["equipment","herd_management","nutrition_feed","labor_staffing","weather_environmental","other"],"title":"EventCategory"},"EventScopeKind":{"type":"string","enum":["herd","pen","pen_type"],"title":"EventScopeKind"},"EventSource":{"type":"string","enum":["user","agent","integration"],"title":"EventSource"},"FarmEventCreate":{"properties":{"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"category":{"$ref":"#/components/schemas/EventCategory"},"starts_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Starts On"},"ends_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Ends On"},"event_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Event Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"scope_kind":{"$ref":"#/components/schemas/EventScopeKind","default":"herd"},"scope_pen_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Scope Pen Ids"},"scope_pen_type_ids":{"items":{"type":"string"},"type":"array","title":"Scope Pen Type Ids"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"source":{"$ref":"#/components/schemas/EventSource","default":"user"},"source_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Schema"},"source_table":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Table"},"source_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Column"},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"}},"type":"object","required":["name","category"],"title":"FarmEventCreate"},"FarmEventMetricCardPrefsResponse":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"spade_user_id":{"type":"string","format":"uuid","title":"Spade User Id"},"added_kpi_keys":{"items":{"type":"string"},"type":"array","title":"Added Kpi Keys"},"hidden_kpi_keys":{"items":{"type":"string"},"type":"array","title":"Hidden Kpi Keys"},"frozen_default_kpi_keys":{"items":{"type":"string"},"type":"array","title":"Frozen Default Kpi Keys"}},"type":"object","required":["event_id","spade_user_id","added_kpi_keys","hidden_kpi_keys","frozen_default_kpi_keys"],"title":"FarmEventMetricCardPrefsResponse"},"FarmEventMetricCardPrefsUpdate":{"properties":{"added_kpi_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Added Kpi Keys"},"hidden_kpi_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Hidden Kpi Keys"},"frozen_default_kpi_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Frozen Default Kpi Keys"}},"type":"object","title":"FarmEventMetricCardPrefsUpdate"},"FarmEventResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Name"},"name":{"type":"string","title":"Name"},"category":{"$ref":"#/components/schemas/EventCategory"},"starts_on":{"type":"string","format":"date","title":"Starts On"},"ends_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Ends On"},"event_date":{"type":"string","format":"date","title":"Event Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"scope_kind":{"$ref":"#/components/schemas/EventScopeKind"},"scope_pen_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Scope Pen Ids"},"scope_pen_type_ids":{"items":{"type":"string"},"type":"array","title":"Scope Pen Type Ids"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"source":{"$ref":"#/components/schemas/EventSource"},"source_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Schema"},"source_table":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Table"},"source_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Column"},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"created_by_spade_user_id":{"type":"string","format":"uuid","title":"Created By Spade User Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","spade_organization_id","site_id","site_name","name","category","starts_on","ends_on","event_date","description","scope_kind","scope_pen_ids","scope_pen_type_ids","payload","source","source_schema","source_table","source_column","source_id","created_by_spade_user_id","created_at","updated_at"],"title":"FarmEventResponse"},"FarmEventUpdate":{"properties":{"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"category":{"anyOf":[{"$ref":"#/components/schemas/EventCategory"},{"type":"null"}]},"starts_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Starts On"},"ends_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Ends On"},"event_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Event Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"scope_kind":{"anyOf":[{"$ref":"#/components/schemas/EventScopeKind"},{"type":"null"}]},"scope_pen_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Scope Pen Ids"},"scope_pen_type_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scope Pen Type Ids"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"}},"type":"object","title":"FarmEventUpdate"},"FarmOrgBootstrapResponse":{"properties":{"workos_organization_id":{"type":"string","title":"Organization identity id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","enum":["pending_sync","ready"],"title":"Status"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"}},"type":"object","required":["workos_organization_id","name","status"],"title":"FarmOrgBootstrapResponse"},"FarmOrgCreate":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"FarmOrgCreate"},"FarmOrgUpdate":{"properties":{"name":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"FarmOrgUpdate"},"FarmStatsConfig":{"properties":{"hidden_categories":{"items":{"type":"string"},"type":"array","title":"Hidden Categories"},"hidden_metrics":{"items":{"type":"string"},"type":"array","title":"Hidden Metrics"},"category_order":{"items":{"type":"string"},"type":"array","title":"Category Order"},"metric_order":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Metric Order"}},"type":"object","title":"FarmStatsConfig"},"FieldInfo":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"nullable":{"type":"boolean","title":"Nullable","default":true},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["name","type"],"title":"FieldInfo","description":"Information about a field/column in a table"},"FinancialAccountIgnore":{"properties":{"registry_account_id":{"type":"string","maxLength":255,"title":"Registry Account Id"},"registry_provider":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_account_code":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Registry Account Code"},"registry_account_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Account Name"},"registry_report_source":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Registry Report Source"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["registry_account_id"],"title":"FinancialAccountIgnore"},"FinancialAccountMapCreate":{"properties":{"registry_account_id":{"type":"string","maxLength":255,"title":"Registry Account Id"},"registry_provider":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_account_code":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Registry Account Code"},"registry_account_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Account Name"},"registry_report_source":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Registry Report Source"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method","default":"manual"},"confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["registry_account_id"],"title":"FinancialAccountMapCreate"},"FinancialAccountMapOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"bucket_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Bucket Id"},"registry_account_id":{"type":"string","title":"Registry Account Id"},"registry_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_account_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Account Code"},"registry_account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Account Name"},"registry_report_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Report Source"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method"},"confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence"},"is_ignored":{"type":"boolean","title":"Is Ignored"},"mapped_at":{"type":"string","format":"date-time","title":"Mapped At"},"mapped_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapped By"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","spade_organization_id","registry_account_id","is_ignored","mapped_at","created_at","updated_at"],"title":"FinancialAccountMapOut"},"FinancialAccountRegistryListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FinancialAccountRegistryRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"FinancialAccountRegistryListResponse"},"FinancialAccountRegistryRow":{"properties":{"account_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Uuid"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Org Id"},"account_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Code"},"account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Name"},"report_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Source"},"first_seen_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen Date"},"last_seen_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Seen Date"},"monthly_amounts":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Monthly Amounts"}},"additionalProperties":true,"type":"object","title":"FinancialAccountRegistryRow"},"FinancialAccountRegistrySource":{"properties":{"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Org Id"},"report_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Source"},"account_count":{"type":"integer","title":"Account Count"}},"type":"object","required":["account_count"],"title":"FinancialAccountRegistrySource"},"FinancialBucketCreate":{"properties":{"display_name":{"type":"string","maxLength":255,"minLength":1,"title":"Display Name"},"statement_section":{"type":"string","title":"Statement Section"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["display_name","statement_section"],"title":"FinancialBucketCreate"},"FinancialBucketOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"bucket_key":{"type":"string","title":"Bucket Key"},"display_name":{"type":"string","title":"Display Name"},"statement_section":{"type":"string","title":"Statement Section"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_system":{"type":"boolean","title":"Is System"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"exception":{"anyOf":[{"$ref":"#/components/schemas/BucketExceptionOut"},{"type":"null"}]}},"type":"object","required":["id","spade_organization_id","bucket_key","display_name","statement_section","is_system","created_at","updated_at"],"title":"FinancialBucketOut"},"FormAssignBatch":{"properties":{"farm_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Farm Ids"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},"type":"object","title":"FormAssignBatch","description":"Batch assign a form to many farms / relationships."},"FormAssignmentCreate":{"properties":{"form_id":{"type":"string","format":"uuid","title":"Form Id"},"farm_org_id":{"type":"string","format":"uuid","title":"Farm Org Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"form_version_snapshot":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Form Version Snapshot"}},"type":"object","required":["form_id","farm_org_id"],"title":"FormAssignmentCreate"},"FormAssignmentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"form_id":{"type":"string","format":"uuid","title":"Form Id"},"farm_org_id":{"type":"string","format":"uuid","title":"Farm Org Id"},"farm_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Farm Id"},"relationship_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"form_version_snapshot":{"type":"integer","title":"Form Version Snapshot"},"status":{"type":"string","title":"Status"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"assigned_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned By User Id"},"follow_up_task_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Follow Up Task Id"},"submission_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Submission Id"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"},"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","organization_id","form_id","farm_org_id","form_version_snapshot","status"],"title":"FormAssignmentOut"},"FormAssignmentUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"follow_up_task_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Follow Up Task Id"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"}},"type":"object","title":"FormAssignmentUpdate"},"FormCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"framework_keys":{"items":{},"type":"array","title":"Framework Keys"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"},"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema"}},"type":"object","required":["name"],"title":"FormCreate"},"FormOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"version":{"type":"integer","title":"Version"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"schema":{"additionalProperties":true,"type":"object","title":"Schema"},"framework_keys":{"items":{},"type":"array","title":"Framework Keys"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"},"parent_form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Form Id"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"},"updated_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By User Id"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"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","organization_id","name","status","version"],"title":"FormOut"},"FormSubmissionCreate":{"properties":{"assignment_id":{"type":"string","format":"uuid","title":"Assignment Id"},"submission_data":{"additionalProperties":true,"type":"object","title":"Submission Data"},"schema_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema Snapshot"},"conditional_logic_snapshot":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Conditional Logic Snapshot"}},"type":"object","required":["assignment_id"],"title":"FormSubmissionCreate"},"FormSubmissionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"assignment_id":{"type":"string","format":"uuid","title":"Assignment Id"},"form_id":{"type":"string","format":"uuid","title":"Form Id"},"farm_org_id":{"type":"string","format":"uuid","title":"Farm Org Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"submitted_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Submitted By User Id"},"submitted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Submitted At"},"form_version":{"type":"integer","title":"Form Version"},"schema_snapshot":{"additionalProperties":true,"type":"object","title":"Schema Snapshot"},"submission_data":{"additionalProperties":true,"type":"object","title":"Submission Data"},"conditional_logic_snapshot":{"items":{},"type":"array","title":"Conditional Logic Snapshot"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","organization_id","assignment_id","form_id","farm_org_id","form_version"],"title":"FormSubmissionOut"},"FormTemplateCreate":{"properties":{"name":{"type":"string","title":"Name","default":"Untitled Template"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema"},"framework_keys":{"items":{},"type":"array","title":"Framework Keys"},"source_form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Form Id"}},"type":"object","title":"FormTemplateCreate"},"FormTemplateOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"schema":{"additionalProperties":true,"type":"object","title":"Schema"},"framework_keys":{"items":{},"type":"array","title":"Framework Keys"},"source_form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Form Id"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"},"updated_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By User 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","organization_id","name"],"title":"FormTemplateOut"},"FormTemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema"},"framework_keys":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Framework Keys"},"source_form_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Form Id"}},"type":"object","title":"FormTemplateUpdate"},"FormUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"},"schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema"},"framework_keys":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Framework Keys"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"}},"type":"object","title":"FormUpdate"},"ForwardGeocodeOut":{"properties":{"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"provider":{"type":"string","title":"Provider"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"}},"type":"object","required":["latitude","longitude","provider"],"title":"ForwardGeocodeOut"},"GenieAskRequest":{"properties":{"space_id":{"type":"string","title":"Space Id"},"question":{"type":"string","title":"Question"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["space_id","question"],"title":"GenieAskRequest","description":"Request to ask Genie a natural-language question"},"GenieAskResponse":{"properties":{"space_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Space Id"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"status":{"type":"string","title":"Status"},"sql":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sql"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["status"],"title":"GenieAskResponse","description":"Response from Genie containing the generated SQL"},"GlobalCredentials":{"properties":{"authorized":{"type":"boolean","title":"Authorized","description":"True if the integration-global tier has a usable token (OAuth) or all required global credentials present.","default":false},"secret_keys":{"items":{"type":"string"},"type":"array","title":"Secret Keys","description":"Schema-declared global secret field keys with a stored value. Values are intentionally not exposed."}},"type":"object","title":"GlobalCredentials","description":"Integration-global credential surface (secrets never echoed back).\n\nFor OAuth providers ``authorized`` reflects whether a refreshable token\nis on file at the integration-global tier. ``secret_keys`` enumerates\nschema-declared global-tier secret fields that currently have a stored\nvalue, so the UI can render \"Credentials configured / Edit credentials\"\nwithout exposing the values themselves."},"GlobalMetaDataInput":{"properties":{"public":{"additionalProperties":true,"type":"object","title":"Public","description":"Integration-global public config (stored in Integration.meta_data)."},"secret":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secret","description":"Integration-global secret config (stored in Integration.secret_blob.global). Write-only."}},"type":"object","title":"GlobalMetaDataInput","description":"Integration-global config payload — shared across every linked site.\n\n``public`` lands on ``Integration.meta_data`` (JSON). ``secret`` is fanned\nout to ``Integration.secret_blob.global`` in Secrets Manager. Used today\nfor OAuth-class providers whose auth credentials and tenant identifier\nare inherently integration-scoped (eg. QuickBooks ``client_id``,\n``client_secret``, ``company_id``)."},"GlobalMetaDataOut":{"properties":{"public":{"additionalProperties":true,"type":"object","title":"Public"}},"type":"object","title":"GlobalMetaDataOut","description":"Integration-global read-side meta_data block (secrets surfaced separately)."},"GrantCreate":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"capability":{"type":"string","title":"Capability"},"action":{"type":"string","enum":["add","remove"],"title":"Action","default":"add"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"user_role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Role Id"}},"type":"object","required":["capability"],"title":"GrantCreate"},"GrantResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"capability":{"type":"string","title":"Capability"},"action":{"type":"string","title":"Action","default":"add"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"granted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"user_role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Role Id"}},"type":"object","required":["id","capability"],"title":"GrantResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HelloIn":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"install_id":{"type":"string","format":"uuid","title":"Install Id"},"app":{"type":"string","title":"App","default":"hauler"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"wire_version":{"type":"integer","title":"Wire Version","default":1}},"type":"object","required":["organization_id","install_id"],"title":"HelloIn"},"HelloOut":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true},"install_id":{"type":"string","format":"uuid","title":"Install Id"},"wire_version":{"type":"integer","title":"Wire Version","default":1}},"type":"object","required":["install_id"],"title":"HelloOut"},"ImpersonationResponse":{"properties":{"staff_user_id":{"type":"string","format":"uuid","title":"Staff User Id"},"staff_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Staff Email"},"staff_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Staff Name"},"target_user_id":{"type":"string","format":"uuid","title":"Target User Id"},"target_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Email"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Name"},"target_org_id":{"type":"string","format":"uuid","title":"Target Org Id"},"target_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Role"}},"type":"object","required":["staff_user_id","target_user_id","target_org_id"],"title":"ImpersonationResponse"},"ImportCommitItem":{"properties":{"registry_pen_id":{"type":"string","title":"Registry Pen Id"},"action":{"type":"string","enum":["create_and_map","map_to_existing","skip"],"title":"Action","default":"create_and_map"},"pen_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pen Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"}},"type":"object","required":["registry_pen_id"],"title":"ImportCommitItem","description":"One accepted (or skipped) row from the preview UI."},"ImportFromRegistryRequest":{"properties":{"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Org Id"},"provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Site Id"},"registry_pen_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Registry Pen Ids"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/ImportCommitItem"},"type":"array"},{"type":"null"}],"title":"Items"}},"type":"object","title":"ImportFromRegistryRequest"},"ImportFromRegistryResponse":{"properties":{"created_pens":{"type":"integer","title":"Created Pens"},"updated_pens":{"type":"integer","title":"Updated Pens","default":0},"created_maps":{"type":"integer","title":"Created Maps"},"skipped":{"type":"integer","title":"Skipped"},"pens":{"items":{"$ref":"#/components/schemas/PenResponse"},"type":"array","title":"Pens"}},"type":"object","required":["created_pens","created_maps","skipped","pens"],"title":"ImportFromRegistryResponse"},"ImportPreviewItem":{"properties":{"registry_pen_id":{"type":"string","title":"Registry Pen Id"},"registry_pen_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Number"},"registry_pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Name"},"registry_pen_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Type"},"registry_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Site Id"},"default_action":{"type":"string","enum":["create_and_map","skip_already_mapped"],"title":"Default Action"},"existing_pen_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Existing Pen Id"},"same_number_pens":{"items":{"$ref":"#/components/schemas/ImportPreviewSameNumberPen"},"type":"array","title":"Same Number Pens"},"suggested_site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Suggested Site Id"},"suggested_pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Pen Type Id"}},"type":"object","required":["registry_pen_id","default_action"],"title":"ImportPreviewItem"},"ImportPreviewRequest":{"properties":{"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Org Id"},"provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Site Id"},"registry_pen_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Registry Pen Ids"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"}},"type":"object","title":"ImportPreviewRequest"},"ImportPreviewResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ImportPreviewItem"},"type":"array","title":"Items"},"creatable_count":{"type":"integer","title":"Creatable Count"},"already_mapped_count":{"type":"integer","title":"Already Mapped Count"},"same_number_conflict_count":{"type":"integer","title":"Same Number Conflict Count"}},"type":"object","required":["items","creatable_count","already_mapped_count","same_number_conflict_count"],"title":"ImportPreviewResponse"},"ImportPreviewSameNumberPen":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Name"},"pen_number":{"type":"string","title":"Pen Number"}},"type":"object","required":["id","pen_number"],"title":"ImportPreviewSameNumberPen"},"IntegrationCredentials":{"properties":{"global":{"$ref":"#/components/schemas/GlobalCredentials","description":"Integration-global credential surface (OAuth tokens / shared keys)."},"sites":{"items":{"$ref":"#/components/schemas/SiteCredentials"},"type":"array","title":"Sites","description":"One entry per linked site."}},"type":"object","title":"IntegrationCredentials","description":"Tiered credential surface — global block + per-site entries."},"IntegrationETLOut":{"properties":{"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"org_id":{"type":"string","title":"Org Id"},"provider":{"type":"string","title":"Provider"},"channel_transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Transport"},"channel_direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Direction","description":"Live channel direction: declared ∧ can_* ∧ grant for each side. 'r' / 'w' / 'rw'. Channels with no live direction are omitted from the manifest (not emitted as null). Grants are folded into membership/shape and never appear as separate fields. Consumers MUST test against a set of allowed values, never equality: a read job accepts direction in ('r', 'rw'); a write job accepts direction in ('w', 'rw'). Equality (== 'r') silently drops 'rw'."},"source_engine":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Engine"},"site_meta_data":{"additionalProperties":true,"type":"object","title":"Site Meta Data","default":{}},"global_meta_data":{"additionalProperties":true,"type":"object","title":"Global Meta Data","description":"Integration-global public config (the meta_data.global.public slot, i.e. Integration.meta_data). Same value on every record emitted for a given integration — it's integration-wide, not per-site. Carries tier:global public fields such as dc305 bovisync's bovisync_farm_id."},"provider_rate_limit_seconds":{"type":"integer","title":"Provider Rate Limit Seconds"},"provider_endpoints":{"items":{},"type":"array","title":"Provider Endpoints","description":"Resolved endpoint list for this channel. The transport / integration determines the shape of the list (and of each element); consumers must not assume a flat ``list[str]``."},"kpi_codes":{"items":{"type":"string"},"type":"array","title":"Kpi Codes","description":"KPI Library code allowlist for channel_transport=ddw (expanded from TransportConfig.kpi_code_set). Empty for non-ddw providers/transports."},"provider_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Domain","description":"Product family from TransportConfig.readiness.domain (herd | feed | milk | …). Null only when the channel has no transport config."},"latest_manifest_s3_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Manifest S3 Uri"},"request_granularity":{"type":"string","title":"Request Granularity","description":"Extraction dispatch granularity declared in the provider YAML. 'per_org' — one extract call per integration (no site_id). 'per_site' — one extract call per linked site.","default":"per_org"},"upload_selection":{"type":"string","title":"Upload Selection","description":"Streamer-upload topology declared in the provider YAML. Drives the data-eng streamer-extractor orchestrator's dedup/selection strategy. 'per_upload' — each upload independent. 'physical_db_stream' — device emits full-snapshot DB streams keyed by source_path (incl. frozen backups); collapse to newest per stream / rank live-vs-frozen.","default":"per_upload"},"skip_files":{"items":{"type":"string"},"type":"array","title":"Skip Files","description":"Filename glob patterns (fnmatch) from the provider YAML extraction config that must not be dispatched for extraction. Empty when the transport has no extraction section or declares no skip_files. Used by the streamer-extractor trigger to silent-skip matching uploads (e.g. PCDART learning-fixture CSVs) instead of POSTing them and recording ledger failures."},"accepts_date_window":{"type":"boolean","title":"Accepts Date Window","description":"True when this channel's scraper extraction honors inclusive start_date/end_date on POST /v0/extractor/scraper. Derived from ExtractionConfig.accepts_date_window on that channel's transport. False when there is no extraction section or the flag is unset. Not used for TAP API endpoint windowing.","default":false},"site_location":{"anyOf":[{"$ref":"#/components/schemas/SiteLocationOut"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"}},"type":"object","required":["integration_id","site_id","org_id","provider","provider_rate_limit_seconds","provider_endpoints"],"title":"IntegrationETLOut"},"IntegrationIn":{"properties":{"provider":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/IntegrationName"}],"title":"Provider","description":"Integration provider name (e.g., 'onefeed', 'quickbooks')"},"integration_type":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/IntegrationType"}],"title":"Integration Type","description":"Type of integration (e.g., 'feeding', 'accounting')"},"organization_id":{"type":"string","title":"Organization Id","description":"ID of the organization this integration belongs to"},"site_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Site Ids","description":"IDs of the sites this integration is associated with (at least one required)"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the integration is active","default":true},"is_connected":{"type":"boolean","title":"Is Connected","description":"Whether the integration has been successfully connected","default":false},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error","description":"Last error message if connection failed"},"error_count":{"type":"integer","title":"Error Count","description":"Number of consecutive errors","default":0},"last_connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected At","description":"Timestamp of last successful connection"},"meta_data":{"anyOf":[{"$ref":"#/components/schemas/MetaDataInput"},{"type":"null"}],"description":"Provider-specific configuration. MetaDataInput schema for structure details."},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"Integration ID (optional, for updates)"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Connector device ID (streamer integrations only)"},"transport":{"anyOf":[{"$ref":"#/components/schemas/ChannelTransport"},{"type":"null"}],"description":"Explicit channel transport for the initial Channel row. REQUIRED when the provider declares multiple supported_transports; OPTIONAL when the provider declares exactly one (defaults to it)."},"read_permission_granted":{"type":"boolean","title":"Read Permission Granted","description":"Authorize inbound ingest on the initial channel at create time. Defaults to False (script/backfill safety). UI-driven creates set this to True so newly-created integrations go live immediately — the worker still hard-checks the flag at runtime.","default":false}},"type":"object","required":["provider","integration_type","organization_id","site_ids"],"title":"IntegrationIn","description":"Input schema for creating/updating integrations.\n\n## meta_data Structure\n\nPer-site config payload — see ``MetaDataInput``::\n\n    {\n        \"sites\": [\n            {\n                \"site_id\": \"<id>\",          # must be in site_ids\n                \"public\": {\"installed\": true, ...},  # streamer installed in public (real boolean)\n                \"secret\": {...}              # optional, fanned out to SM\n            },\n            ...\n        ]\n    }\n\nPublic fields land in the integration's ``meta_data`` JSON; secret fields\nare fanned out to AWS Secrets Manager keyed by ``site_id``.\n\n### OneFeed example\n```json\n{\n    \"sites\": [\n        {\n            \"site_id\": \"site-A\",\n            \"public\": {\"facility_id\": \"<facility_id_from_onefeed>\"},\n            \"secret\": {\"api_key\": \"<key>\"}\n        }\n    ]\n}\n```\n\n### QuickBooks\nOAuth tokens are managed per-site via the ``/authorization`` flow.\nNo manual ``secret`` is required.","example":{"integration_type":"feeding","is_active":true,"meta_data":{"sites":[{"public":{"facility_id":"12345"},"secret":{"api_key":"abc"},"site_id":"site-456"}]},"organization_id":"org-123","provider":"onefeed","site_ids":["site-456"]}},"IntegrationMetaData":{"properties":{"global":{"$ref":"#/components/schemas/GlobalMetaDataOut","description":"Integration-global public config (from Integration.meta_data)."},"sites":{"items":{"$ref":"#/components/schemas/SiteMetaDataOut"},"type":"array","title":"Sites"}},"type":"object","title":"IntegrationMetaData","description":"Read-side shape of an integration's tiered meta_data."},"IntegrationName":{"type":"string","enum":["onefeed","quickbooks","farmes","vasapi","ddw","tap_feed","dc305","feedwatch","tmr_tracker","feed_supervisor","pcdart","afimilk","delpro","lely_t4c","microsip","dhi_plus","rumina","lely_horizon","dairyplan","uniform","ezfeed","ezweights","parlor_edge","centerpoint","my_dairy_dashboard","tillamook","labresults","foremost","landolakes","cayuga","agsource","alberta_milk","cdl","walmart","mmpa","grande","danone","cidec","dfa","nestle","manual"],"title":"IntegrationName","description":"Supported integration names\n\nAdd new integrations here as they are implemented"},"IntegrationOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"auth_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Type"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_connected":{"type":"boolean","title":"Is Connected"},"last_connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected At"},"organization_id":{"type":"string","title":"Organization Id"},"site_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Site Ids"},"secret_arn":{"type":"string","minLength":3,"title":"Secret Arn"},"meta_data":{"anyOf":[{"$ref":"#/components/schemas/IntegrationMetaData"},{"type":"null"}]},"credentials":{"anyOf":[{"$ref":"#/components/schemas/IntegrationCredentials"},{"type":"null"}]},"source":{"type":"string","title":"Source","default":"api"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id"},"channels":{"items":{"$ref":"#/components/schemas/integrations__app__core__models__schema__ChannelOut"},"type":"array","title":"Channels","description":"Channels configured for this integration."}},"type":"object","required":["id","provider","is_connected","last_connected_at","organization_id","secret_arn"],"title":"IntegrationOut"},"IntegrationType":{"type":"string","enum":["accounting","herd","feeding","sensors","environmental","veterinary","other"],"title":"IntegrationType","description":"Supported integration types"},"IntegrationUpdate":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Integration ID (required for updates)"},"provider":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/IntegrationName"},{"type":"null"}],"title":"Provider","description":"Integration provider name (e.g., 'onefeed', 'quickbooks')"},"integration_type":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/IntegrationType"},{"type":"null"}],"title":"Integration Type","description":"Type of integration (e.g., 'feeding', 'accounting')"},"site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Site Ids","description":"IDs of the sites this integration is associated with"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Whether the integration is active"},"is_connected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Connected","description":"Whether the integration has been successfully connected"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error","description":"Last error message if connection failed"},"error_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Error Count","description":"Number of consecutive errors"},"last_connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected At","description":"Timestamp of last successful connection"},"meta_data":{"anyOf":[{"$ref":"#/components/schemas/MetaDataInput"},{"type":"null"}],"description":"Provider-specific configuration"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Data source type: 'api' or 'streamer'"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"Connector device ID (streamer integrations only)"}},"type":"object","required":["id"],"title":"IntegrationUpdate","description":"Input schema for updating integrations. Only `id` is required.\nAll other fields are optional - only include fields you want to update.\n\nNote: `organization_id` cannot be changed after creation.\n`site_ids` can be changed to re-link the integration to a different set of sites.","example":{"id":"47446280-b6c9-4488-85f5-0b1b0daee648","is_active":false}},"KeyMintResponse":{"properties":{"id":{"type":"string","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"client_type":{"type":"string","title":"Client Type"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","organization_id","user_id","client_type","name","key_prefix","permissions","is_active","created_at","expires_at","revoked_at","last_used_at","key"],"title":"KeyMintResponse"},"KeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"client_type":{"type":"string","title":"Client Type"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","organization_id","user_id","client_type","name","key_prefix","permissions","is_active","created_at","expires_at","revoked_at","last_used_at"],"title":"KeyResponse"},"KeyUpdate":{"properties":{"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"KeyUpdate"},"KpiToleranceBand":{"properties":{"low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Low"},"high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"High"}},"type":"object","title":"KpiToleranceBand"},"LactationGroupResponse":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"}},"type":"object","required":["id","label"],"title":"LactationGroupResponse"},"LayoutOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"layout":{"additionalProperties":true,"type":"object","title":"Layout"}},"type":"object","required":["id","organization_id"],"title":"LayoutOut"},"LayoutUpsert":{"properties":{"layout":{"additionalProperties":true,"type":"object","title":"Layout"}},"type":"object","title":"LayoutUpsert"},"LoadIn":{"properties":{"compartment_id":{"type":"string","format":"uuid","title":"Compartment Id"},"milk_type_code":{"type":"string","title":"Milk Type Code"},"planned_volume_m3":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Planned Volume M3"}},"type":"object","required":["compartment_id","milk_type_code","planned_volume_m3"],"title":"LoadIn"},"LoadPatch":{"properties":{"compartment_id":{"type":"string","format":"uuid","title":"Compartment Id"},"milk_type_code":{"type":"string","title":"Milk Type Code","default":"conventional"},"planned_volume_m3":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Planned Volume M3"}},"type":"object","required":["compartment_id","planned_volume_m3"],"title":"LoadPatch"},"LocationCreate":{"properties":{"site_id":{"type":"string","format":"uuid","title":"Site Id"},"location_type":{"type":"string","title":"Location Type","description":"One of: pen, building, point, line"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry","description":"GeoJSON Geometry object (Polygon, Point, LineString, ...). Optional — locations can be created without a footprint and gain one later via PATCH."},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["site_id","location_type","name"],"title":"LocationCreate"},"LocationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"location_type":{"type":"string","title":"Location Type"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"archived":{"type":"boolean","title":"Archived"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"}},"type":"object","required":["id","organization_id","site_id","location_type","name","properties","archived","created_at","updated_at"],"title":"LocationResponse"},"LocationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"properties":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Properties"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"}},"type":"object","title":"LocationUpdate"},"ManagedFarmCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"contact_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Contact Email"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"status":{"type":"string","title":"Status","default":"onboarding"}},"type":"object","required":["name"],"title":"ManagedFarmCreate"},"ManagedFarmListItem":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"relationship_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"claimed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Claimed At"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"status":{"type":"string","enum":["unclaimed","invited","claimed"],"title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["organization_id","name","status"],"title":"ManagedFarmListItem"},"ManagedFarmOut":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"relationship_id":{"type":"string","format":"uuid","title":"Relationship Id"},"grant_id":{"type":"string","format":"uuid","title":"Grant Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"claimed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claimed At"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"}},"type":"object","required":["organization_id","name","relationship_id","grant_id"],"title":"ManagedFarmOut"},"MemberDataGrantReplaceBody":{"properties":{"resource_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resource Org Id"},"relationship_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Relationship Id"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"access_tier":{"type":"string","enum":["read","aggregate"],"title":"Access Tier","default":"read"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Site Ids"},"role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Id"}},"type":"object","title":"MemberDataGrantReplaceBody"},"MembershipAuditLogResponse":{"properties":{"id":{"type":"string","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"target_user_id":{"type":"string","title":"Target User Id"},"membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Membership Id"},"performed_by_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Performed By User Id"},"action":{"type":"string","title":"Action"},"detail":{"additionalProperties":true,"type":"object","title":"Detail"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","organization_id","target_user_id","action"],"title":"MembershipAuditLogResponse"},"MembershipCreate":{"properties":{"workos_user_id":{"type":"string","minLength":1,"title":"User identity id"},"role":{"type":"string","minLength":1,"title":"Role"}},"type":"object","required":["workos_user_id","role"],"title":"MembershipCreate"},"MembershipPatch":{"properties":{"role":{"type":"string","minLength":1,"title":"Role"}},"type":"object","required":["role"],"title":"MembershipPatch"},"MembershipResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"workos_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User identity id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"type":"string","title":"Role"},"status":{"type":"string","title":"Status","default":"active"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"site_assignments":{"items":{"$ref":"#/components/schemas/SiteAssignmentResponse"},"type":"array","title":"Site Assignments"}},"type":"object","required":["id","user_id","role"],"title":"MembershipResponse"},"MetaDataInput":{"properties":{"global":{"anyOf":[{"$ref":"#/components/schemas/GlobalMetaDataInput"},{"type":"null"}],"description":"Integration-global config block (lands on Integration row + SM global tier)."},"sites":{"items":{"$ref":"#/components/schemas/SiteMetaDataInput"},"type":"array","title":"Sites","description":"Per-site config entries. Each site_id must match an IntegrationSite link."}},"type":"object","title":"MetaDataInput","description":"Tiered integration config payload.\n\nThe ``global`` block carries integration-wide config; the ``sites`` block\ncarries per-site overrides / additions. Field placement is driven by the\nprovider's field schema (see ``settings.provider_field_schemas``) where\neach entry declares ``tier: \"global\" | \"site\"`` (default ``site``).\n\nPublic fields land on ``Integration.meta_data`` (global) or\n``IntegrationSite.meta_data`` (per-site). Secret fields land in the\ncanonical SM body shape ``{\"global\": {...}, \"sites\": {<id>: {...}}}``.","example":{"global":{"secret":{"client_id":"abc","client_secret":"xyz"}},"sites":[{"public":{"facility_id":"12345"},"secret":{"api_key":"abc"},"site_id":"site-A"},{"public":{"facility_id":"67890"},"secret":{"api_key":"xyz"},"site_id":"site-B"}]}},"MutationBody":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"device_seq":{"type":"integer","minimum":1.0,"title":"Device Seq"},"op":{"type":"string","title":"Op"},"op_version":{"type":"integer","minimum":1.0,"title":"Op Version","default":1},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"payload_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload Hash"},"author_user_id":{"type":"string","format":"uuid","title":"Author User Id"},"lane":{"type":"string","title":"Lane","default":"observation"},"valid_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid Until"},"depends_on":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Depends On"}},"type":"object","required":["id","device_seq","op","author_user_id"],"title":"MutationBody"},"NoteIn":{"properties":{"body":{"type":"string","title":"Body"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"}},"type":"object","required":["body"],"title":"NoteIn"},"NoteOut":{"properties":{"body":{"type":"string","title":"Body"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"id":{"type":"string","format":"uuid","title":"Id"},"author_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Author User Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["body","id"],"title":"NoteOut"},"OfferExtraOut":{"properties":{"role":{"type":"string","title":"Role"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"role_row_id":{"type":"string","format":"uuid","title":"Role Row Id"},"add":{"items":{"type":"string"},"type":"array","title":"Add"},"remove":{"items":{"type":"string"},"type":"array","title":"Remove"}},"type":"object","required":["role","role_row_id"],"title":"OfferExtraOut"},"OnboardingBootstrapRequest":{"properties":{"org_settings":{"additionalProperties":true,"type":"object","title":"Org Settings"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"unit_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit System"}},"type":"object","title":"OnboardingBootstrapRequest"},"OnboardingBootstrapResponse":{"properties":{"org_settings_created":{"type":"boolean","title":"Org Settings Created"},"user_preferences_created":{"type":"boolean","title":"User Preferences Created"}},"type":"object","required":["org_settings_created","user_preferences_created"],"title":"OnboardingBootstrapResponse"},"OrgAssetPresignRequest":{"properties":{"kind":{"type":"string","const":"logo","title":"Kind","default":"logo"},"content_type":{"type":"string","minLength":1,"title":"Content Type"},"size_bytes":{"type":"integer","minimum":1.0,"title":"Size Bytes"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"}},"type":"object","required":["content_type","size_bytes"],"title":"OrgAssetPresignRequest"},"OrgAssetPresignResponse":{"properties":{"bucket":{"type":"string","title":"Bucket"},"key":{"type":"string","title":"Key"},"upload_url":{"type":"string","title":"Upload Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["bucket","key","upload_url","expires_at"],"title":"OrgAssetPresignResponse"},"OrgInvitationAccept":{"properties":{"invitee_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Invitee Org Id"},"propose_post_claim_data_grant":{"type":"boolean","title":"Propose Post Claim Data Grant","default":true}},"type":"object","title":"OrgInvitationAccept","description":"Accept body after login — invitee binds their admin org (connect)\nor claims the ghost org (claim)."},"OrgInvitationAcceptWithConsent":{"properties":{"invitee_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Invitee Org Id"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"access_tier":{"type":"string","enum":["read","aggregate"],"title":"Access Tier","default":"read"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Site Ids"},"host_roles":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Host Roles"}},"type":"object","title":"OrgInvitationAcceptWithConsent","description":"Finish claim/connect and write ``grants.kind=data`` in one transaction."},"OrgInvitationCreate":{"properties":{"invitee_email":{"type":"string","format":"email","title":"Invitee Email"},"proposed_relationship_type":{"type":"string","enum":["enterprise","dev","consultant"],"title":"Proposed Relationship Type","default":"consultant"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"purpose":{"type":"string","enum":["connect","claim"],"title":"Purpose","default":"connect"},"claim_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Claim Org Id"},"share_intent":{"anyOf":[{"type":"string","enum":["offer","request"]},{"type":"null"}],"title":"Share Intent"},"proposed_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Proposed Site Ids"},"proposed_host_roles":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Proposed Host Roles"},"permission_emails":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Permission Emails"}},"type":"object","required":["invitee_email"],"title":"OrgInvitationCreate"},"OrgInvitationOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"inviter_org_id":{"type":"string","format":"uuid","title":"Inviter Org Id"},"inviter_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Inviter User Id"},"inviter_user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter User Email"},"inviter_user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter User Name"},"invitee_email":{"type":"string","title":"Invitee Email"},"invitee_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Invitee Org Id"},"proposed_relationship_type":{"type":"string","title":"Proposed Relationship Type"},"purpose":{"type":"string","title":"Purpose"},"claim_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Claim Org Id"},"share_intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Intent"},"proposed_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Proposed Site Ids"},"proposed_sites":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProposedSiteOut"},"type":"array"},{"type":"null"}],"title":"Proposed Sites"},"proposed_host_roles":{"items":{},"type":"array","title":"Proposed Host Roles"},"status":{"type":"string","title":"Status"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"responded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Responded At"},"inviter_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter Org Name"},"claim_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim Org Name"}},"type":"object","required":["id","inviter_org_id","invitee_email","proposed_relationship_type","purpose","status","expires_at"],"title":"OrgInvitationOut"},"OrgInvitationPreview":{"properties":{"inviter_org_name":{"type":"string","title":"Inviter Org Name"},"proposed_relationship_type":{"type":"string","title":"Proposed Relationship Type"},"purpose":{"type":"string","title":"Purpose"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"claim_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim Org Name"},"share_intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Intent"},"proposed_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Proposed Site Ids"},"proposed_sites":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProposedSiteOut"},"type":"array"},{"type":"null"}],"title":"Proposed Sites"},"proposed_host_roles":{"items":{},"type":"array","title":"Proposed Host Roles"},"suggested_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Purpose"},"invitee_user_known":{"type":"boolean","title":"Invitee User Known"}},"type":"object","required":["inviter_org_name","proposed_relationship_type","purpose","status","expires_at","invitee_user_known"],"title":"OrgInvitationPreview"},"OrgKeyCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Human-friendly label."},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"ISO8601 expiry timestamp. None = no expiry."}},"type":"object","title":"OrgKeyCreate"},"OrgProfileIn":{"properties":{"field_rep_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Field Rep User Id"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","title":"OrgProfileIn"},"OrgProfileOut":{"properties":{"field_rep_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Field Rep User Id"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"counterparty_org_id":{"type":"string","format":"uuid","title":"Counterparty Org 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":["organization_id","counterparty_org_id"],"title":"OrgProfileOut"},"OrgProfileUpdate":{"properties":{"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"}},"type":"object","title":"OrgProfileUpdate","description":"Branding / profile fields any org admin can set (not farm-ownership scoped)."},"OrgSettingsOut":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"currency_code":{"type":"string","title":"Currency Code"},"timezone":{"type":"string","title":"Timezone"},"volume_display":{"type":"string","title":"Volume Display"},"distance_display":{"type":"string","title":"Distance Display"},"temperature_display":{"type":"string","title":"Temperature Display"},"mass_display":{"type":"string","title":"Mass Display"}},"type":"object","required":["organization_id","currency_code","timezone","volume_display","distance_display","temperature_display","mass_display"],"title":"OrgSettingsOut"},"OrgSettingsResponse":{"properties":{"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"legal_entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Entity Type"},"primary_contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"farm_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Farm Id"},"sap_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sap Id"},"is_multi_site":{"type":"boolean","title":"Is Multi Site","default":false},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},"type":"object","required":["spade_organization_id"],"title":"OrgSettingsResponse"},"OrgSettingsUpdate":{"properties":{"legal_entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Entity Type"},"primary_contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"farm_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Farm Id"},"sap_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sap Id"},"is_multi_site":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Multi Site"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},"type":"object","title":"OrgSettingsUpdate"},"OrgSummary":{"properties":{"id":{"type":"string","title":"Id"},"workos_organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization identity id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type","default":"developer"},"is_super_admin":{"type":"boolean","title":"Is Super Admin","default":false},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"has_logo":{"type":"boolean","title":"Has Logo","default":false},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","name"],"title":"OrgSummary"},"ParticipantRoleActionBody":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"relationship_id":{"type":"string","format":"uuid","title":"Relationship Id"},"role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Id","description":"Omit to revoke or restore every seat on the relationship (host bulk-remove). Set to filter to that role plus site_id."},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id","description":"With role_id, JSON null = the org-ceiling seat. Ignored when role_id is omitted."}},"type":"object","required":["user_id","relationship_id"],"title":"ParticipantRoleActionBody"},"ParticipantRoleOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"type":"string","title":"User Email","default":""},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"grantee_org_id":{"type":"string","format":"uuid","title":"Grantee Org Id"},"grantee_org_name":{"type":"string","title":"Grantee Org Name"},"host_org_id":{"type":"string","format":"uuid","title":"Host Org Id"},"host_org_name":{"type":"string","title":"Host Org Name"},"relationship_id":{"type":"string","format":"uuid","title":"Relationship Id"},"user_role_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Role Id"},"role_id":{"type":"string","title":"Role Id"},"host_roles":{"items":{"type":"string"},"type":"array","title":"Host Roles"},"assignment_domains":{"items":{"type":"string"},"type":"array","title":"Assignment Domains"},"assignment_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Assignment Site Ids"},"ceiling_domains":{"items":{"type":"string"},"type":"array","title":"Ceiling Domains"},"ceiling_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Ceiling Site Ids"},"effective_domains":{"items":{"type":"string"},"type":"array","title":"Effective Domains"},"effective_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Effective Site Ids"},"viewer_side":{"type":"string","enum":["grantor","grantee"],"title":"Viewer Side"},"status":{"type":"string","enum":["active","terminated"],"title":"Status","default":"active"},"extras":{"items":{"$ref":"#/components/schemas/SeatExtraOut"},"type":"array","title":"Extras"}},"type":"object","required":["user_id","grantee_org_id","grantee_org_name","host_org_id","host_org_name","relationship_id","role_id","viewer_side"],"title":"ParticipantRoleOut"},"PenBulkUpdate":{"properties":{"pen_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Pen Ids"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"is_ignored":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Ignored"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"add_tag_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Add Tag Id"}},"type":"object","required":["pen_ids"],"title":"PenBulkUpdate","description":"Body for ``PATCH /pens/bulk`` — apply a single partial update to many pens.\n\nEvery optional field that is *set* on the request is applied to every pen\nin ``pen_ids``. Fields left unset are not touched. ``add_tag_id`` is a\nconvenience that appends one tag to every pen's existing tag set (no-op\nwhen the pen already has it)."},"PenBulkUpsert":{"properties":{"pens":{"items":{"$ref":"#/components/schemas/PenCreate"},"type":"array","title":"Pens"}},"type":"object","required":["pens"],"title":"PenBulkUpsert"},"PenCreate":{"properties":{"pen_number":{"type":"string","title":"Pen Number"},"pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Name"},"animal_count":{"type":"integer","title":"Animal Count","default":0},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"is_ignored":{"type":"boolean","title":"Is Ignored","default":false},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"stall_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Count"},"stall_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Rows"},"stall_layout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stall Layout"},"headlock_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Headlock Count"},"feed_barrier_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Barrier Type"},"feeding_lanes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feeding Lanes"},"bedding_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedding Type"}},"type":"object","required":["pen_number"],"title":"PenCreate"},"PenHistoryCreate":{"properties":{"effective_from":{"type":"string","format":"date-time","title":"Effective From"},"change_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Reason"}},"type":"object","required":["effective_from"],"title":"PenHistoryCreate"},"PenHistoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"pen_id":{"type":"string","format":"uuid","title":"Pen Id"},"pen_number":{"type":"string","title":"Pen Number"},"pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Name"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"is_ignored":{"type":"boolean","title":"Is Ignored"},"stall_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Count"},"stall_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Rows"},"stall_layout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stall Layout"},"headlock_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Headlock Count"},"feed_barrier_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Barrier Type"},"feeding_lanes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feeding Lanes"},"bedding_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedding Type"},"effective_from":{"type":"string","format":"date-time","title":"Effective From"},"effective_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective To"},"changed_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Changed By"},"change_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","pen_id","pen_number","is_ignored","effective_from","created_at"],"title":"PenHistoryResponse"},"PenMapBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"pen_id":{"type":"string","format":"uuid","title":"Pen Id"},"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"},"registry_pen_id":{"type":"string","title":"Registry Pen Id"},"registry_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Site Id"},"registry_pen_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Number"},"registry_pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Name"},"registry_pen_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Type"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"mapped_at":{"type":"string","format":"date-time","title":"Mapped At"},"mapped_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapped By"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","pen_id","registry_pen_id","mapped_at","created_at","updated_at"],"title":"PenMapBase","description":"Pen map fields shared by every response shape (no embedded pen)."},"PenMapCreate":{"properties":{"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"},"registry_pen_id":{"type":"string","maxLength":255,"title":"Registry Pen Id"},"registry_provider":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_provider_site_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Provider Site Id"},"registry_pen_number":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Registry Pen Number"},"registry_pen_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Registry Pen Name"},"registry_pen_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Registry Pen Type"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method","default":"manual"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["registry_pen_id"],"title":"PenMapCreate"},"PenMapResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"pen_id":{"type":"string","format":"uuid","title":"Pen Id"},"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration Id"},"registry_pen_id":{"type":"string","title":"Registry Pen Id"},"registry_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider"},"registry_provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Org Id"},"registry_provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Provider Site Id"},"registry_pen_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Number"},"registry_pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Name"},"registry_pen_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Pen Type"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"mapped_at":{"type":"string","format":"date-time","title":"Mapped At"},"mapped_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapped By"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"pen":{"$ref":"#/components/schemas/PenResponse"}},"type":"object","required":["id","pen_id","registry_pen_id","mapped_at","created_at","updated_at","pen"],"title":"PenMapResponse"},"PenRegistryListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PenRegistryRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"PenRegistryListResponse","description":"Paginated envelope. ``total`` is the count of all rows matching the\nfilters (ignoring limit/offset) so the UI can size pages."},"PenRegistryRow":{"properties":{"pen_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Uuid"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Org Id"},"provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Site Id"},"pen_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Number"},"pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Name"},"provider_pen_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Pen Type"},"first_seen_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen Date"},"last_seen_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Seen Date"},"registered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registered At"},"last_synced_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Synced At"}},"additionalProperties":true,"type":"object","title":"PenRegistryRow"},"PenRegistrySource":{"properties":{"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Org Id"},"provider_site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Site Id"},"pen_count":{"type":"integer","title":"Pen Count"}},"type":"object","required":["pen_count"],"title":"PenRegistrySource","description":"One source system present in the registry for this org.\n\nThe registry is provider-native, so a source is identified by the provider\nplus that provider's own org/site identifiers — not a Spade integration_id."},"PenResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"pen_number":{"type":"string","title":"Pen Number"},"pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Name"},"animal_count":{"type":"integer","title":"Animal Count"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"is_ignored":{"type":"boolean","title":"Is Ignored"},"color":{"type":"string","title":"Color"},"stall_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Count"},"stall_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Rows"},"stall_layout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stall Layout"},"headlock_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Headlock Count"},"feed_barrier_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Barrier Type"},"feeding_lanes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feeding Lanes"},"bedding_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedding Type"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By"},"tag_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Tag Ids"}},"type":"object","required":["id","spade_organization_id","pen_number","animal_count","is_ignored","color","created_at","updated_at"],"title":"PenResponse"},"PenStructureOptionsResponse":{"properties":{"stall_layouts":{"items":{"type":"string"},"type":"array","title":"Stall Layouts"},"feed_barrier_types":{"items":{"type":"string"},"type":"array","title":"Feed Barrier Types"},"bedding_types":{"items":{"type":"string"},"type":"array","title":"Bedding Types"}},"type":"object","required":["stall_layouts","feed_barrier_types","bedding_types"],"title":"PenStructureOptionsResponse"},"PenTagAssignmentBody":{"properties":{"tag_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Tag Ids"}},"type":"object","required":["tag_ids"],"title":"PenTagAssignmentBody"},"PenTagCreate":{"properties":{"name":{"type":"string","title":"Name"},"color":{"type":"string","title":"Color"}},"type":"object","required":["name","color"],"title":"PenTagCreate"},"PenTagResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"name":{"type":"string","title":"Name"},"color":{"type":"string","title":"Color"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","spade_organization_id","name","color","created_at"],"title":"PenTagResponse"},"PenTagUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},"type":"object","title":"PenTagUpdate"},"PenTypeResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"PenTypeResponse"},"PenUpdate":{"properties":{"pen_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Name"},"animal_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Animal Count"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"pen_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Type Id"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"is_ignored":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Ignored"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"stall_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Count"},"stall_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stall Rows"},"stall_layout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stall Layout"},"headlock_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Headlock Count"},"feed_barrier_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Barrier Type"},"feeding_lanes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feeding Lanes"},"bedding_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedding Type"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry"}},"type":"object","title":"PenUpdate"},"PenWithMapsResponse":{"properties":{"pen":{"$ref":"#/components/schemas/PenResponse"},"maps":{"items":{"$ref":"#/components/schemas/PenMapBase"},"type":"array","title":"Maps"}},"type":"object","required":["pen","maps"],"title":"PenWithMapsResponse","description":"Pen + every active mapping pointing at it.\n\nReturned by the registry-id lookup so a caller can resolve a single\nregistry pen UUID into the canonical internal pen *and* see every other\nregistry row already mapped to that same pen (e.g. the DC305 row plus\nthe OneFeed row that both resolve to pen \"B1\"). The maps here omit the\nembedded ``pen`` field — it would just be a clone of the top-level\n``pen`` on every entry."},"PermissionEmailsOptIn":{"properties":{"permission_emails":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Permission Emails"}},"type":"object","title":"PermissionEmailsOptIn"},"PingResponse":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"service":{"type":"string","title":"Service","default":"enterprise"}},"type":"object","required":["org_id"],"title":"PingResponse"},"PlanIn":{"properties":{"horizon_start":{"type":"string","format":"date","title":"Horizon Start"},"horizon_days":{"type":"integer","title":"Horizon Days","default":1},"source":{"type":"string","title":"Source","default":"manual"},"solver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Solver"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"supersedes_plan_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Supersedes Plan Id"},"routes":{"items":{"$ref":"#/components/schemas/RouteIn"},"type":"array","title":"Routes"}},"type":"object","required":["horizon_start"],"title":"PlanIn"},"PlanOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"horizon_start":{"type":"string","format":"date","title":"Horizon Start"},"horizon_days":{"type":"integer","title":"Horizon Days"},"status":{"type":"string","title":"Status"},"source":{"type":"string","title":"Source"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"plan_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Version"}},"type":"object","required":["id","organization_id","horizon_start","horizon_days","status","source"],"title":"PlanOut"},"PlantOut":{"properties":{"site_id":{"type":"string","format":"uuid","title":"Site Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"},"producer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Producer Ref"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"silos":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Silos","default":[]}},"type":"object","required":["site_id","name","role"],"title":"PlantOut"},"PreferencesOut":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"spade_user_id":{"type":"string","format":"uuid","title":"Spade User Id"},"preferences":{"additionalProperties":true,"type":"object","title":"Preferences"},"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":["organization_id","spade_user_id"],"title":"PreferencesOut"},"PreferencesPut":{"properties":{"preferences":{"additionalProperties":true,"type":"object","title":"Preferences"}},"type":"object","title":"PreferencesPut"},"PreferencesResponse":{"properties":{"spade_user_id":{"type":"string","format":"uuid","title":"Spade User Id"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"date_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Format"},"unit_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit System"},"last_site_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Last Site Ids"},"farm_stats_config":{"$ref":"#/components/schemas/FarmStatsConfig"},"kpi_tolerances":{"additionalProperties":{"$ref":"#/components/schemas/KpiToleranceBand"},"type":"object","title":"Kpi Tolerances"},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed"}},"type":"object","required":["spade_user_id","farm_stats_config","onboarding_completed"],"title":"PreferencesResponse"},"PreferencesUpdate":{"properties":{"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"date_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Format"},"unit_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit System"},"last_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Last Site Ids"},"farm_stats_config":{"anyOf":[{"$ref":"#/components/schemas/FarmStatsConfig"},{"type":"null"}]},"kpi_tolerances":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/KpiToleranceBand"},"type":"object"},{"type":"null"}],"title":"Kpi Tolerances"},"onboarding_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Onboarding Completed"}},"type":"object","title":"PreferencesUpdate"},"PriceCreate":{"properties":{"integration_id":{"type":"string","title":"Integration Id","description":"The manual integration this price belongs to."},"price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Price","description":"Numeric price value (currency/unit come from the integration)."},"effective_start_date":{"type":"string","format":"date","title":"Effective Start Date","description":"Date this price takes effect."}},"type":"object","required":["integration_id","price","effective_start_date"],"title":"PriceCreate"},"PriceListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PriceRow"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PriceListResponse"},"PriceRow":{"properties":{"id":{"type":"string","title":"Id"},"integration_id":{"type":"string","title":"Integration Id"},"price_type":{"type":"string","title":"Price Type"},"price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Price"},"currency_code":{"type":"string","title":"Currency Code"},"unit_code":{"type":"string","title":"Unit Code"},"effective_start_date":{"type":"string","format":"date","title":"Effective Start Date"},"effective_through":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Effective Through"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","integration_id","price_type","price","currency_code","unit_code","effective_start_date"],"title":"PriceRow"},"PriceUpdate":{"properties":{"price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Price"},"effective_start_date":{"type":"string","format":"date","title":"Effective Start Date"}},"type":"object","required":["price","effective_start_date"],"title":"PriceUpdate"},"PrincipalResponse":{"properties":{"spade_user_id":{"type":"string","format":"uuid","title":"Spade User Id"},"spade_organization_id":{"type":"string","format":"uuid","title":"Spade Organization Id"},"org_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Slug"},"is_super_admin":{"type":"boolean","title":"Is Super Admin"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"deny_scopes":{"items":{"type":"string"},"type":"array","title":"Deny Scopes"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles"},"preferences":{"$ref":"#/components/schemas/PreferencesResponse"},"impersonation":{"anyOf":[{"$ref":"#/components/schemas/ImpersonationResponse"},{"type":"null"}]}},"type":"object","required":["spade_user_id","spade_organization_id","is_super_admin","scopes","preferences"],"title":"PrincipalResponse"},"ProposedSiteOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ProposedSiteOut","description":"Named site on invitation read payloads (proposed subset only)."},"ProviderFieldSchema":{"properties":{"key":{"type":"string","title":"Key","description":"Field identifier used as the key in credentials/meta_data"},"label":{"type":"string","title":"Label","description":"Human-friendly label for the field"},"type":{"type":"string","title":"Type","description":"Input type: text, password, url, number, select, oauth_button"},"required":{"type":"boolean","title":"Required","default":true},"placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Placeholder"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Help text shown below the field"},"bucket":{"type":"string","title":"Bucket","description":"Where this field is stored: 'secret' (Secrets Manager) or 'public' (database meta_data)","default":"secret"},"tier":{"type":"string","title":"Tier","description":"Tier this field belongs to: 'site' (per-IntegrationSite) or 'global' (integration-wide; shared across linked sites)","default":"site"},"options":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Options","description":"For type=select: list of {value, label} options"}},"type":"object","required":["key","label","type"],"title":"ProviderFieldSchema","description":"Describes a single input field needed to connect a provider."},"ProviderInfo":{"properties":{"id":{"type":"string","title":"Id","description":"Internal provider identifier (e.g. 'onefeed')"},"name":{"type":"string","title":"Name","description":"Human-friendly display name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"URL to provider logo"},"auth_type":{"type":"string","title":"Auth Type","description":"Authentication type of the default transport (back-compat; prefer ``transports``): oauth2, client_credentials, api_key, basic_auth, bearer_token, none"},"integration_type":{"type":"string","title":"Integration Type","description":"Category of the integration: feeding, accounting, environmental, veterinary, etc."},"field_schema":{"items":{"$ref":"#/components/schemas/ProviderFieldSchema"},"type":"array","title":"Field Schema","description":"Fields of the default transport (back-compat; prefer ``transports``)"},"supported_transports":{"items":{"type":"string"},"type":"array","title":"Supported Transports","description":"Channel transports this provider supports. Values are drawn from ChannelTransport (api | streamer | email | scraper | bovisync | ddw). Drives the integration creation selector UI."},"transports":{"items":{"$ref":"#/components/schemas/ProviderTransportInfo"},"type":"array","title":"Transports","description":"Per-transport connection details (auth type + field schema). The UI picks a transport, then renders that entry's field_schema. The top-level auth_type/field_schema mirror the default transport for backward compatibility."},"visible_in_farm":{"type":"boolean","title":"Visible In Farm","description":"Whether this provider should be exposed in the spade-farm (customer-facing) UI's Add Integration flow. Defaults to True. Set False for providers that only power other Spade products (e.g. enterprise/internal flows) and shouldn't be picked by farm users.","default":true}},"type":"object","required":["id","name","auth_type","integration_type"],"title":"ProviderInfo","description":"Metadata about a supported integration provider."},"ProviderTransportInfo":{"properties":{"transport":{"type":"string","title":"Transport","description":"Transport name (api | streamer | scraper | email | ...)"},"auth_type":{"type":"string","title":"Auth Type","description":"Authentication type for this transport"},"platform_managed_auth":{"type":"boolean","title":"Platform Managed Auth","description":"True when Spade owns all credentials for this transport (no customer auth step).","default":false},"data_directions":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Data Directions","description":"Direction switches for this transport. Key present = switch exists (ceiling); value = create-time default for can_read / can_write."},"field_schema":{"items":{"$ref":"#/components/schemas/ProviderFieldSchema"},"type":"array","title":"Field Schema","description":"Fields the operator supplies to connect this transport."},"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri","description":"Authoritative OAuth callback URI for this transport. Populated only when ``auth_type`` is ``oauth2``; operators must register this exact URL in the upstream developer app (e.g. Intuit Redirect URIs) before connecting."},"readiness":{"anyOf":[{"$ref":"#/components/schemas/TransportReadinessOut"},{"type":"null"}],"description":"Catalog Integration Progress for this transport (from provider YAML)."}},"type":"object","required":["transport","auth_type"],"title":"ProviderTransportInfo","description":"Per-transport connection metadata for an umbrella provider.\n\nA provider can support several transports (e.g. QuickBooks via ``api``\nOAuth and ``streamer`` file upload). Each carries its own auth type and\noperator field schema, so the Add Integration wizard renders the right\nform once the user picks a transport."},"PushIn":{"properties":{"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"install_id":{"type":"string","format":"uuid","title":"Install Id"},"wire_version":{"type":"integer","title":"Wire Version","default":1},"high_water_seq":{"type":"integer","minimum":0.0,"title":"High Water Seq","default":0},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"mutations":{"items":{"$ref":"#/components/schemas/MutationBody"},"type":"array","title":"Mutations"},"health":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Health"}},"type":"object","required":["organization_id","install_id"],"title":"PushIn"},"RelationshipCreate":{"properties":{"grantor_org_id":{"type":"string","format":"uuid","title":"Grantor Org Id"},"to_site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"To Site Id"},"relationship_type":{"type":"string","enum":["enterprise","dev","consultant"],"title":"Relationship Type","default":"enterprise"},"status":{"type":"string","enum":["prospect","onboarding","active","suspended","ended"],"title":"Status","default":"onboarding"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","default":"api"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"roles":{"items":{},"type":"array","title":"Roles"},"sites":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Sites"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},"type":"object","required":["grantor_org_id"],"title":"RelationshipCreate"},"RelationshipOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"grantee_org_id":{"type":"string","format":"uuid","title":"Grantee Org Id"},"grantor_org_id":{"type":"string","format":"uuid","title":"Grantor Org Id"},"to_site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"To Site Id"},"relationship_type":{"type":"string","title":"Relationship Type"},"status":{"type":"string","title":"Status"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"roles":{"items":{},"type":"array","title":"Roles"},"sites":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Sites"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"ended_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ended By User Id"},"from_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Org Name"},"to_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Org Name"},"to_site_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Site Name"},"to_site_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Site City"},"to_site_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Site State"},"to_site_latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"To Site Latitude"},"to_site_longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"To Site Longitude"},"from_org_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Org Type"},"to_org_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Org Type"}},"type":"object","required":["id","grantee_org_id","grantor_org_id","relationship_type","status"],"title":"RelationshipOut"},"RelationshipUpdate":{"properties":{"status":{"anyOf":[{"type":"string","enum":["prospect","onboarding","active","suspended","ended"]},{"type":"null"}],"title":"Status"},"to_site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"To Site Id"},"roles":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Roles"},"sites":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Sites"}},"type":"object","title":"RelationshipUpdate"},"ReverseGeocodeOut":{"properties":{"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"provider":{"type":"string","title":"Provider"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"}},"type":"object","required":["latitude","longitude","provider"],"title":"ReverseGeocodeOut"},"RouteIn":{"properties":{"route_date":{"type":"string","format":"date","title":"Route Date"},"hauler_org_id":{"type":"string","format":"uuid","title":"Hauler Org Id"},"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"driver_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Driver User Id"},"trip_index":{"type":"integer","title":"Trip Index","default":0},"stops":{"items":{"$ref":"#/components/schemas/StopIn"},"type":"array","title":"Stops"}},"type":"object","required":["route_date","hauler_org_id","vehicle_id"],"title":"RouteIn"},"RouteListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"route_date":{"type":"string","format":"date","title":"Route Date"},"hauler_org_id":{"type":"string","format":"uuid","title":"Hauler Org Id"},"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"driver_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Driver User Id"},"trip_index":{"type":"integer","title":"Trip Index"},"plan_version":{"type":"integer","title":"Plan Version"},"properties":{"additionalProperties":true,"type":"object","title":"Properties","default":{}},"stop_count":{"type":"integer","title":"Stop Count","default":0},"planned_volume_m3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Planned Volume M3"},"remitted_volume_m3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Remitted Volume M3"},"admitted_volume_m3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Admitted Volume M3"}},"type":"object","required":["id","route_date","hauler_org_id","vehicle_id","trip_index","plan_version"],"title":"RouteListItem"},"RoutePatch":{"properties":{"vehicle_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Vehicle Id"},"route_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Number"},"hauler_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hauler Name"},"change_history":{"anyOf":[{"items":{"$ref":"#/components/schemas/ChangeHistoryEntry"},"type":"array"},{"type":"null"}],"title":"Change History"},"stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/StopPatch"},"type":"array"},{"type":"null"}],"title":"Stops"}},"type":"object","title":"RoutePatch"},"SeatExtraOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"capability":{"type":"string","title":"Capability"},"action":{"type":"string","title":"Action","default":"add"},"user_role_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Role Id"}},"type":"object","required":["id","capability"],"title":"SeatExtraOut"},"SelectVehicleIn":{"properties":{"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"route_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Route Id"}},"type":"object","required":["vehicle_id"],"title":"SelectVehicleIn"},"SharedRoleOut":{"properties":{"id":{"type":"string","title":"Id"},"relationship_id":{"type":"string","title":"Relationship Id"},"role":{"type":"string","title":"Role"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Name"},"side":{"type":"string","enum":["grantor","grantee"],"title":"Side","default":"grantor"},"grantee_org_name":{"type":"string","title":"Grantee Org Name"},"grantor_org_name":{"type":"string","title":"Grantor Org Name","default":""},"extras":{"items":{"$ref":"#/components/schemas/GrantResponse"},"type":"array","title":"Extras"},"offered_slugs":{"items":{"type":"string"},"type":"array","title":"Offered Slugs"},"offer_bag":{"items":{"type":"string"},"type":"array","title":"Offer Bag"}},"type":"object","required":["id","relationship_id","role","grantee_org_name"],"title":"SharedRoleOut"},"SiteAssignmentGroup":{"properties":{"role":{"type":"string","minLength":1,"title":"Role"},"site_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Site Ids"}},"type":"object","required":["role"],"title":"SiteAssignmentGroup"},"SiteAssignmentResponse":{"properties":{"id":{"type":"string","title":"Id"},"site_id":{"type":"string","title":"Site Id"},"role":{"type":"string","title":"Role"},"status":{"type":"string","title":"Status","default":"active"}},"type":"object","required":["id","site_id","role"],"title":"SiteAssignmentResponse"},"SiteAssignmentsReplace":{"properties":{"assignments":{"items":{"$ref":"#/components/schemas/SiteAssignmentGroup"},"type":"array","title":"Assignments"}},"type":"object","title":"SiteAssignmentsReplace"},"SiteCredentials":{"properties":{"site_id":{"type":"string","format":"uuid","title":"Site Id"},"secret":{"additionalProperties":true,"type":"object","title":"Secret","description":"Non-secret-bucket fields from the site's secret blob (schema-declared secrets are stripped before serialization; values for those are never echoed back)."},"public":{"additionalProperties":true,"type":"object","title":"Public","description":"Public config data for this site."},"authorized":{"type":"boolean","title":"Authorized","description":"True if this site has a stored OAuth access_token.","default":false},"secret_keys":{"items":{"type":"string"},"type":"array","title":"Secret Keys","description":"Schema-declared secret field keys with a stored value. Values are intentionally not exposed."}},"type":"object","required":["site_id"],"title":"SiteCredentials","description":"Per-site credential bundle (secret from SM + public from meta_data).\n\nNotes on what's safe to expose:\n- ``secret`` only carries fields that the provider's field schema\n  declares with ``bucket != \"secret\"`` (effectively a defensive empty\n  dict for typical schemas) plus any non-schema keys present in the\n  stored blob. We never echo back values for schema-declared secret\n  fields — the frontend has no need for them and exposing them in the\n  response (or in DevTools' Network tab) needlessly broadens the\n  blast radius if a session is compromised.\n- ``secret_keys`` lists which schema-declared secret field keys\n  currently have a stored value, so the UI can render a \"configured\"\n  affordance per field without inspecting the values themselves."},"SiteIn":{"properties":{"name":{"type":"string","title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"type":"string"},{"type":"null"}],"title":"Location"}},"type":"object","required":["name"],"title":"SiteIn"},"SiteLocationOut":{"properties":{"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"}},"type":"object","required":["latitude","longitude"],"title":"SiteLocationOut","description":"Resolved site coordinates carried on ETL source records."},"SiteMetaDataInput":{"properties":{"site_id":{"type":"string","format":"uuid","title":"Site Id","description":"ID of the site this entry applies to. Must be in the integration's IntegrationSite set."},"public":{"additionalProperties":true,"type":"object","title":"Public","description":"Per-site public config (stored in DB meta_data)."},"secret":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secret","description":"Per-site secret config (fanned out to Secrets Manager). Write-only."},"installed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Installed","description":"Legacy top-level write path for streamer installed flag. Prefer public['installed'] (real boolean) via the field_schema path."}},"type":"object","required":["site_id"],"title":"SiteMetaDataInput","description":"Per-site config payload — used both as input and output.\n\nOn input ``secret`` is fanned out to AWS Secrets Manager under the integration's\nsecret ARN (keyed by site_id). ``public`` is persisted in the integration's\n``meta_data`` JSON. On output ``secret`` is omitted (credentials are surfaced\nseparately via ``IntegrationOut.credentials``).\n\nThe ``installed`` flag for streamer integrations is now a normal ``tier: site``\ncheckbox field declared in each provider's streamer transport ``field_schema``\nand arrives inside ``public[\"installed\"]`` as a real boolean. The top-level\n``installed`` field below is kept for wire back-compat but is no longer the\nprimary write path."},"SiteMetaDataOut":{"properties":{"site_id":{"type":"string","format":"uuid","title":"Site Id"},"public":{"additionalProperties":true,"type":"object","title":"Public"},"installed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Installed"}},"type":"object","required":["site_id"],"title":"SiteMetaDataOut","description":"Per-site read-side meta_data entry (secrets surfaced separately)."},"SiteOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"organization_id":{"type":"string","title":"Organization Id"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"environment":{"type":"string","title":"Environment","default":"production"},"location":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Location"}},"type":"object","required":["id","name","organization_id"],"title":"SiteOut"},"SiteProfileIn":{"properties":{"role":{"type":"string","title":"Role"},"producer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Producer Ref"},"access_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Code"},"road_access_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Road Access Notes"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["role"],"title":"SiteProfileIn"},"SiteProfileOut":{"properties":{"role":{"type":"string","title":"Role"},"producer_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Producer Ref"},"access_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Code"},"road_access_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Road Access Notes"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"site_id":{"type":"string","format":"uuid","title":"Site Id"}},"type":"object","required":["role","organization_id","site_id"],"title":"SiteProfileOut"},"SiteUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"location":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"type":"string"},{"type":"null"}],"title":"Location"}},"type":"object","title":"SiteUpdate"},"SlugResponse":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"name":{"type":"string","title":"Name"},"has_logo":{"type":"boolean","title":"Has Logo","default":false}},"type":"object","required":["id","slug","name"],"title":"SlugResponse"},"SlugUpdateRequest":{"properties":{"slug":{"type":"string","maxLength":60,"minLength":3,"title":"Slug","description":"URL-friendly org identifier (lowercase alphanumeric + hyphens, 3-60 chars)."}},"type":"object","required":["slug"],"title":"SlugUpdateRequest"},"StageReadinessOut":{"properties":{"status":{"type":"string","title":"Status","description":"done | not_done | na"},"run":{"type":"string","title":"Run","description":"manual | automated | na","default":"na"}},"type":"object","required":["status"],"title":"StageReadinessOut","description":"One pipeline stage cell for Integration Progress."},"StopIn":{"properties":{"stop_order":{"type":"integer","title":"Stop Order"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"stop_type":{"type":"string","title":"Stop Type"},"tank_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tank Id"},"pickup_order_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pickup Order Id"},"planned_arrival":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planned Arrival"},"planned_departure":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planned Departure"},"loads":{"items":{"$ref":"#/components/schemas/LoadIn"},"type":"array","title":"Loads"}},"type":"object","required":["stop_order","site_id","stop_type"],"title":"StopIn"},"StopPatch":{"properties":{"stop_order":{"type":"integer","title":"Stop Order"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"stop_type":{"type":"string","title":"Stop Type"},"planned_arrival":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planned Arrival"},"planned_departure":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planned Departure"},"distance_m":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Distance M"},"loads":{"items":{"$ref":"#/components/schemas/LoadPatch"},"type":"array","title":"Loads"}},"type":"object","required":["stop_order","site_id","stop_type"],"title":"StopPatch"},"TankCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"capacity_m3":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Capacity M3"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["name"],"title":"TankCreate"},"TankOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"site_id":{"type":"string","format":"uuid","title":"Site Id"},"name":{"type":"string","title":"Name"},"capacity_m3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Capacity M3"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"},"created_by_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Org Id"},"updated_by_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By Org Id"}},"type":"object","required":["id","organization_id","site_id","name","created_at","updated_at"],"title":"TankOut"},"TankUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"capacity_m3":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Capacity M3"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"properties":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","title":"TankUpdate"},"TaskCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status","default":"open"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"farm_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Farm Org Id"},"assignee_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assignee User Id"},"due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due At"},"extra":{"additionalProperties":true,"type":"object","title":"Extra"}},"type":"object","required":["title"],"title":"TaskCreate"},"TaskOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"farm_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Farm Org Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"assignee_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assignee User Id"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User Id"},"due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due At"},"extra":{"additionalProperties":true,"type":"object","title":"Extra"},"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","organization_id","title","status"],"title":"TaskOut"},"TaskUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"farm_org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Farm Org Id"},"assignee_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assignee User Id"},"due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due At"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"}},"type":"object","title":"TaskUpdate"},"TemplateVisibility":{"type":"string","enum":["private","public","public_default"],"title":"TemplateVisibility"},"TransportReadinessOut":{"properties":{"domain":{"type":"string","title":"Domain","description":"feed | herd | milk | finance | other"},"pen_bearing":{"type":"boolean","title":"Pen Bearing","default":false},"stages":{"additionalProperties":{"$ref":"#/components/schemas/StageReadinessOut"},"type":"object","title":"Stages"}},"type":"object","required":["domain"],"title":"TransportReadinessOut","description":"Catalog readiness for one provider×transport row."},"UsageDataPoint":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"count":{"type":"integer","title":"Count"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"}},"type":"object","required":["timestamp","count"],"title":"UsageDataPoint"},"UsageResponse":{"properties":{"granularity":{"type":"string","title":"Granularity"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"data":{"items":{"$ref":"#/components/schemas/UsageDataPoint"},"type":"array","title":"Data"}},"type":"object","required":["granularity","start_date","end_date","data"],"title":"UsageResponse"},"UserKeyCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Human-friendly label."},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"ISO8601 expiry timestamp. None = no expiry."}},"type":"object","title":"UserKeyCreate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationRuleTemplateCreate":{"properties":{"name":{"type":"string","title":"Name"},"rule_type":{"type":"string","title":"Rule Type"},"outcome":{"type":"string","title":"Outcome","default":"hard_stop"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"}},"type":"object","required":["name","rule_type"],"title":"ValidationRuleTemplateCreate"},"ValidationRuleTemplateOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"rule_type":{"type":"string","title":"Rule Type"},"outcome":{"type":"string","title":"Outcome"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"},"created_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By User 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","organization_id","name","rule_type","outcome"],"title":"ValidationRuleTemplateOut"},"ValidationRuleTemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"rule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"}},"type":"object","title":"ValidationRuleTemplateUpdate"},"VehicleOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"registration":{"type":"string","title":"Registration"},"kind":{"type":"string","title":"Kind"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"home_site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Home Site Id"},"max_gross_kg":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Gross Kg"},"capacity_m3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Capacity M3"},"compartments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Compartments","default":[]}},"type":"object","required":["id","organization_id","registration","kind"],"title":"VehicleOut"},"ViewerAccessOut":{"properties":{"origin":{"type":"string","enum":["data","membership","super_admin"],"title":"Origin"},"site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Site Ids"},"write_site_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Write Site Ids"},"org_site_count":{"type":"integer","title":"Org Site Count"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains","default":[]}},"type":"object","required":["origin","org_site_count"],"title":"ViewerAccessOut","description":"Caller's access origin + optional site ceiling for a farm org.\n\n``site_ids`` is visibility: ``None`` when the caller may see the\nwhole org (membership, super-admin, org-wide data grant). A list\n(possibly one id) is a ceiling — Farm must not treat that as a\ntruly single-site farm. Do not clip this list just because a site\nseat exists on one farm.\n\n``write_site_ids`` is write capability, not visibility:\n\n* ``None`` — org-ceiling has ``farm:write`` or ``integrations:write``\n  (or super-admin): every visible farm + org-level farm writes\n* ``[]`` — view-only\n* ``[…]`` — those farms only (``capabilities_at_site`` has\n  ``farm:write`` or ``integrations:write``)\n\n``org_site_count`` is the farm's unfiltered production roster size\nso Farm can tell a 1-id ceiling on a multi-site org from a truly\nsingle-site dairy.\n\n``domains`` is the DataScope ``TenantSlice.domains`` bag\n(``_domains_from_scopes``: parent-cover over the closed list,\ndenies win). Origin ``data`` + empty means connected, not shared\nlake domains — Farm must not treat that as all domains. Membership\n/ super-admin + empty stays the unrestricted RLS path (no\n``data:read``). Parent ``data:read`` enumerates all seven domains.\nDo not invent a second vocabulary."},"WatcherOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"task_id":{"type":"string","format":"uuid","title":"Task Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","task_id","user_id"],"title":"WatcherOut"},"enterprise__app__api__v1__dashboards__DashboardCreate":{"properties":{"name":{"type":"string","title":"Name"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["name"],"title":"DashboardCreate"},"enterprise__app__api__v1__dashboards__DashboardUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"DashboardUpdate"},"enterprise__app__api__v1__relationships__ActivityOut":{"properties":{"action":{"type":"string","title":"Action"},"detail":{"additionalProperties":true,"type":"object","title":"Detail"},"site_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Site Id"},"id":{"type":"string","format":"uuid","title":"Id"},"actor_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor User Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["action","id"],"title":"ActivityOut"},"enterprise__app__api__v1__relationships__ChannelIn":{"properties":{"kind":{"type":"string","title":"Kind"},"value":{"type":"string","title":"Value"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"rank":{"type":"integer","title":"Rank","default":0}},"type":"object","required":["kind","value"],"title":"ChannelIn"},"enterprise__app__api__v1__relationships__ChannelOut":{"properties":{"kind":{"type":"string","title":"Kind"},"value":{"type":"string","title":"Value"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"rank":{"type":"integer","title":"Rank","default":0},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["kind","value","id"],"title":"ChannelOut"},"enterprise__app__api__v1__tasks__ActivityOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"task_id":{"type":"string","format":"uuid","title":"Task Id"},"actor_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Actor User Id"},"action":{"type":"string","title":"Action"},"detail":{"additionalProperties":true,"type":"object","title":"Detail"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","task_id","action"],"title":"ActivityOut"},"farm__app__api__v1__dashboards__DashboardCreate":{"properties":{"name":{"type":"string","title":"Name"},"state":{"title":"State"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["name"],"title":"DashboardCreate"},"farm__app__api__v1__dashboards__DashboardUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"state":{"anyOf":[{},{"type":"null"}],"title":"State"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"DashboardUpdate"},"farm__app__api__v1__users__UserResponse":{"properties":{"spade_user_id":{"type":"string","format":"uuid","title":"Spade User Id"},"workos_user_id":{"type":"string","title":"User identity id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},"type":"object","required":["spade_user_id","workos_user_id","email","name","role"],"title":"UserResponse"},"gateway__app__api__v1__orgs__InvitationResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"state":{"type":"string","title":"State"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"role_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Slug"},"accepted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","email","state"],"title":"InvitationResponse"},"gateway__app__api__v1__orgs__SendInvitationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","minLength":1,"title":"Role","description":"Role slug"},"application":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application"}},"type":"object","required":["email","role"],"title":"SendInvitationRequest"},"gateway__app__api__v1__user_management__InvitationResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"state":{"type":"string","title":"State"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"role_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Slug"},"accepted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","email","state"],"title":"InvitationResponse"},"integrations__app__core__models__schema__ChannelIn":{"properties":{"transport":{"$ref":"#/components/schemas/ChannelTransport"},"can_read":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Read","description":"Channel ingests data from the provider/agent into Spade. Omit to use the transport YAML data_directions default."},"can_write":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Write","description":"Channel pushes data out from Spade to the provider/agent. Omit to use the transport YAML data_directions default."},"read_permission_granted":{"type":"boolean","title":"Read Permission Granted","description":"Authorize inbound ingest on this channel (load-bearing gate for uploads)","default":false},"write_permission_granted":{"type":"boolean","title":"Write Permission Granted","description":"Authorize outbound push on this channel","default":false},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id","description":"connector_devices.device_id (required for streamer channels)"},"inbound_allowed_senders":{"items":{"type":"string"},"type":"array","title":"Inbound Allowed Senders","description":"Optional sender allowlist (email channels only). Empty = accept any sender."}},"type":"object","required":["transport"],"title":"ChannelIn","description":"Input for adding a new channel to an existing integration.\n\nChannels are integration-scoped, not site-scoped, so no sites are linked\nhere. ``device_id`` is required (and validated against the org) when\ntransport=streamer. For ``transport=email`` the server generates a\nunique ``inbound_address`` and ignores any client-supplied value."},"integrations__app__core__models__schema__ChannelOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"transport":{"type":"string","title":"Transport"},"can_read":{"type":"boolean","title":"Can Read"},"can_write":{"type":"boolean","title":"Can Write"},"read_permission_granted":{"type":"boolean","title":"Read Permission Granted"},"write_permission_granted":{"type":"boolean","title":"Write Permission Granted"},"device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Id"},"is_connected":{"type":"boolean","title":"Is Connected"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"error_count":{"type":"integer","title":"Error Count","default":0},"last_connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected At"},"inbound_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inbound Address"},"inbound_allowed_senders":{"items":{"type":"string"},"type":"array","title":"Inbound Allowed Senders"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","integration_id","transport","can_read","can_write","read_permission_granted","write_permission_granted","is_connected","created_at","updated_at"],"title":"ChannelOut","description":"Read-side representation of one channel for an integration."}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT or sk_*_*","description":"User session JWT, or an sk_org_* / sk_user_* / sk_service_* API key."},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Spade API key (sk_org_*, sk_user_*, sk_service_*). Create one in the Developer Portal."}}}}