InnoVint MCP by usefulapi
Review winery lots, vessels, analyses and work history; record analyses and add vendors.
사용해야 할까요
품질 및 안전성
발견 사항 (5)
- LOWinnovint_get_lot_components_summary에서
- LOWinnovint_list_vessels_at_point_in_time에서
- LOWinnovint_list_adjustment_actions에서
- LOWinnovint_list_receive_fruit_actions에서
- LOWinnovint_create_analysis_action에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"innovint": {
"url": "https://innovint.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://innovint.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (27)
🟢innovint_list_wineries(limit, offset)
List the connected winery with id, name and the user's permissions. Hosted connections and scoped stdio return only the selected winery; unscoped stdio lists all accessible wineries. GET /api/v1/wineries or /api/v1/wineries/{wineryId}.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_winery(winery_id)
One winery by id: name, internal id and the token user's permissions there. GET /api/v1/wineries/{wineryId}.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lots(winery_id, q, code_in, id_in, bond_in, ...)
List the winery's lots (wine, juice, fruit or case-goods batches) with code, name, stage, color, type, tax class, volume, weight, bottles on hand and tags. Filter by search term, code, id, bond, archived state or last update. GET /api/v1/wineries/{wineryId}/lots.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"code_in": {
"description": "Only lots with one of these codes, e.g. [\"24CAB01\"].",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id_in": {
"description": "Only lots with one of these ids (lot_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"bond_in": {
"description": "Only lots in one of these bonds (bond_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"updated_after": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"updated_before": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_lot(winery_id, lot_id)
One lot by id with its stage, volume, weight, bottles on hand, tags and links to related data. GET /api/v1/wineries/{wineryId}/lots/{id}.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_lot_composition(winery_id, lot_id, after_action)
The lot's makeup composition (what it is made of), now or right after a given action. GET /api/v1/wineries/{wineryId}/lots/{lotId}/makeupComposition.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"after_action": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Optional action id: describe the composition right after this action (e.g. act_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_get_lot_components_summary(winery_id, lot_id)
A summary of the lot's components. GET /api/v1/wineries/{wineryId}/lots/{lotId}/componentsSummary.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lot_analyses(winery_id, lot_id, analysis_type, vessels, is_lot_composite, ...)
Lab and in-house analysis results recorded on a lot (pH, TA, free SO2, Brix, VA, ...). Filter by analysis type slug, vessel or date range. GET /api/v1/wineries/{wineryId}/lots/{lotId}/analyses.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"analysis_type": {
"description": "Analysis type slugs, e.g. [\"ph\", \"ta\"] (see innovint_list_analysis_types).",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^[-a-zA-Z0-9_]{1,100}$"
}
},
"vessels": {
"description": "Only analyses on these vessel ids (ves_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"is_lot_composite": {
"description": "true = only lot composite analyses (not tied to one vessel).",
"type": "boolean"
},
"recorded_after": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"recorded_before": {
"type": "string",
"description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
},
"sort": {
"description": "Sort by recorded time: recordedAt (oldest first) or -recordedAt (newest first).",
"type": "string",
"enum": [
"recordedAt",
"-recordedAt"
]
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lot_additives(winery_id, lot_id, limit, offset)
Additives that have been added to a lot. GET /api/v1/wineries/{wineryId}/lots/{lotId}/additives.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"lot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_lot_costs(winery_id, code_in, lot_in, effective_at, modified_after, ...)
Cost data per lot as of a date. Filter by lot code or id. GET /api/v1/wineries/{wineryId}/lotCosts.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"code_in": {
"description": "Only lots with one of these codes.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"lot_in": {
"description": "Only these lot ids (lot_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_at": {
"description": "Costs as of this date-time (ISO 8601 with timezone).",
"type": "string"
},
"modified_after": {
"description": "Only costs modified after this date-time.",
"type": "string"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vessels(winery_id, q, code_in, id_in, lot_in, ...)
List tanks, barrels and other vessels with their codes and current contents. Filter by search term, code, id, lot or archived state. GET /api/v1/wineries/{wineryId}/vessels.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"code_in": {
"description": "Only vessels with one of these codes.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id_in": {
"description": "Only these vessel ids (ves_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"lot_in": {
"description": "Only vessels holding one of these lot ids (lot_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vessels_at_point_in_time(winery_id, effective_at, vessel_type, q, limit, ...)
Preview (vendor contract may change): What every vessel held at a past date-time (history of cellar contents). GET /api/v1/wineries/{wineryId}/vesselsAtPointInTime.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"effective_at": {
"type": "string",
"description": "The moment to look at (ISO 8601 with timezone, e.g. 2026-09-30T23:59:59Z)."
},
"vessel_type": {
"description": "Only these vessel types.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"effective_at"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_actions(winery_id, state, reference_number, id, effective_after, ...)
The winery's work history across all action types (additions, analyses, transfers, racking, blending, bottling, fruit receiving, ...), filterable by type, state, reference number and dates. Each record has the action type, effective date and the lots and vessels involved; use the typed list tools for full detail of one kind. GET /api/v1/wineries/{wineryId}/actions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"action_type": {
"description": "Only these action types, e.g. [\"ADDITION\", \"RACK\"].",
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"enum": [
"ADDITION",
"ANALYSIS",
"BARREL_DOWN",
"BATCH_ADJUSTMENT",
"BLEED",
"BLEND",
"BOTTLE",
"BOTTLING_EN_TIRAGE",
"COST_ITEM",
"CREATE_LOT",
"CREATE_VESSELS",
"CUSTOM",
"DISGORGE_DOSAGE_PACKAGE",
"DISTILLATION",
"DRAIN",
"DRAIN_AND_PRESS",
"FILTER",
"FRUIT_WEIGHT_CHANGE",
"LOT_TAX_CLASS_CHANGE",
"MAKEUP_CHANGE",
"PROCESS_FRUIT_TO_VOLUME",
"PROCESS_FRUIT_TO_WEIGHT",
"PULL_SAMPLE",
"RACK",
"RACK_AND_RETURN",
"RECEIVE_DRY_GOOD",
"RECEIVE_FRUIT",
"TOPPING",
"TOP_OFF",
"TRANSFER",
"TRANSFER_INTER_FACILITY",
"TRANSFER_VOLUME_TO_WEIGHT",
"UPDATE_LOT",
"VOLUME_CHANGE",
"WATER_ADD",
"WEIGHT_CHANGE",
"WEIGHT_TRANSFER"
]
}
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_analysis_actions(winery_id, state, reference_number, id, effective_after, ...)
Analysis actions: the lab and in-house results entered in the winery, with the analyses (type, value, unit) and the lots and vessels they were taken on. GET /api/v1/wineries/{wineryId}/actions/analysisActions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_addition_actions(winery_id, state, reference_number, id, effective_after, ...)
Addition actions: what additives were added to which lots and vessels, and when. GET /api/v1/wineries/{wineryId}/additionActions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_transfer_actions(winery_id, state, reference_number, id, effective_after, ...)
Transfer actions: racking, filtering, topping off, barrel-down and other transfers between vessels. GET /api/v1/wineries/{wineryId}/transferActions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"action_type": {
"description": "Only these transfer types, e.g. [\"RACK\", \"FILTER\"].",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"BARREL_DOWN",
"FILTER",
"RACK",
"TOP_OFF",
"TRANSFER"
]
}
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_adjustment_actions(winery_id, state, reference_number, id, effective_after, ...)
Adjustment actions: volume or weight changes, water adds and makeup changes. GET /api/v1/wineries/{wineryId}/actions/adjustmentActions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"action_type": {
"description": "Only these adjustment types.",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"VOLUME_CHANGE",
"WEIGHT_CHANGE",
"WATER_ADD",
"MAKEUP_CHANGE"
]
}
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_receive_fruit_actions(winery_id, state, reference_number, id, effective_after, ...)
Fruit receiving actions (harvest intake) with the fruit received and the lots created. GET /api/v1/wineries/{wineryId}/actions/receiveFruitActions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"state": {
"description": "ACTIVE, DELETED or EDITED actions (default is up to InnoVint).",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"ACTIVE",
"DELETED",
"EDITED"
]
}
},
"reference_number": {
"description": "Only actions with one of these reference numbers.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"id": {
"description": "Only these action ids (act_…).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"effective_after": {
"description": "Actions effective on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"effective_before": {
"description": "Actions effective on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_after": {
"description": "Actions created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"created_before": {
"description": "Actions created on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_after": {
"description": "Actions updated on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_before": {
"description": "Actions updated on or before this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"sort": {
"description": "Sort fields; prefix - for descending, e.g. [\"-effectiveAt\"].",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"-id",
"effectiveAt",
"-effectiveAt",
"createdAt",
"-createdAt",
"updatedAt",
"-updatedAt",
"deletedAt",
"-deletedAt"
]
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_analysis_types(q, slug, limit, offset)
The analysis types InnoVint knows (pH, TA, free SO2, Brix, ...), with the slug that innovint_create_analysis_action and the analysis filters need. GET /api/v1/analysisTypes.
입력 스키마
{
"type": "object",
"properties": {
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"slug": {
"description": "Only these slugs.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^[-a-zA-Z0-9_]{1,100}$"
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_additives(winery_id, q, id_in, product_name_in, tags, ...)
The winery's additive products and their batches. GET /api/v1/wineries/{wineryId}/additives.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"q": {
"description": "Search term.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"id_in": {
"description": "Only these additive ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"product_name_in": {
"description": "Only additives with one of these product names.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"tags": {
"description": "Only additives with these tags.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vineyards(winery_id, id_in, limit, offset)
The winery's vineyards (grower sources). GET /api/v1/wineries/{wineryId}/vineyards.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"id_in": {
"description": "Only these vineyard ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_blocks(winery_id, id_in, vineyard_in, archived, limit, ...)
Vineyard blocks of the winery's vineyards. Filter by vineyard. GET /api/v1/wineries/{wineryId}/blocks.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"id_in": {
"description": "Only these block ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"vineyard_in": {
"description": "Only blocks of these vineyard ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"archived": {
"description": "true = only archived records, false = only active ones. Omit for the API default.",
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_growers(winery_id, id, limit, offset)
The growers the winery buys fruit from. GET /api/v1/wineries/{wineryId}/growers.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"id": {
"description": "Only these grower ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_grower_receipts(winery_id, vintage, limit, offset)
Fruit receipts from growers for one vintage (year). GET /api/v1/wineries/{wineryId}/growerReceipts/{vintage}.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"vintage": {
"type": "integer",
"minimum": 1900,
"maximum": 2200,
"description": "Vintage year, e.g. 2026."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id",
"vintage"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_vendors(winery_id, name, name_contains, id_in, sort, ...)
The winery's vendors (suppliers of additives, dry goods, services). GET /api/v1/wineries/{wineryId}/vendors.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"name": {
"description": "Exact vendor name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"name_contains": {
"description": "Vendor name contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"id_in": {
"description": "Only these vendor ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"sort": {
"type": "string",
"enum": [
"name",
"-name"
]
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢innovint_list_bonds(winery_id, limit, offset)
The winery's bonded premises (TTB bonds), whose ids lots belong to. GET /api/v1/wineries/{wineryId}/bonds.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"limit": {
"description": "Records per page, 1-200 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200
},
"offset": {
"description": "Records to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"winery_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴innovint_create_analysis_action(winery_id, effective_at, analyses, panel_name, note)
WRITE: records analysis results (e.g. pH 3.45, free SO2 28 mg/L) as a new analysis action in the winery's InnoVint records, effective at the given time. Each result needs an analysis type slug (innovint_list_analysis_types), a value and a unit, and a lot (add a vessel for a vessel-level result; without a vessel it is a lot composite result). The new action shows up in the cellar history and feeds lot data and reports; InnoVint's API has no delete here, so only call this when the numbers are confirmed. POST /api/v1/wineries/{wineryId}/actions/analysisActions.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"effective_at": {
"type": "string",
"description": "When the analysis was done (ISO 8601 with timezone, e.g. 2026-10-24T09:30:00Z)."
},
"analyses": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"analysis_type": {
"type": "string",
"pattern": "^[-a-zA-Z0-9_]{1,100}$",
"description": "Analysis type slug, e.g. \"ph\"."
},
"value": {
"type": "number",
"description": "The measured value."
},
"unit": {
"type": "string",
"minLength": 1,
"maxLength": 50,
"description": "Unit of the value, e.g. \"g/L\" or \"mg/L\" (use the unit InnoVint lists for the type)."
},
"lot_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Lot id (e.g. lot_0123456789ABCDEFGHIJKLMN)."
},
"vessel_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Vessel id for a vessel-level result; omit for a lot composite result (e.g. ves_0123456789ABCDEFGHIJKLMN)."
}
},
"required": [
"analysis_type",
"value",
"unit",
"lot_id"
]
}
},
"panel_name": {
"description": "Optional name of the panel/report these results belong to.",
"type": "string",
"maxLength": 100
},
"note": {
"description": "Optional note saved with the action.",
"type": "string",
"minLength": 1,
"maxLength": 10000
}
},
"required": [
"winery_id",
"effective_at",
"analyses"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡innovint_create_vendor(winery_id, name)
WRITE: adds a new vendor (supplier) by name to the winery's InnoVint records. Check innovint_list_vendors first to avoid a duplicate. POST /api/v1/wineries/{wineryId}/vendors.
입력 스키마
{
"type": "object",
"properties": {
"winery_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "InnoVint winery id; list yours with innovint_list_wineries (e.g. wnry_0123456789ABCDEFGHIJKLMN)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Vendor name."
}
},
"required": [
"winery_id",
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거