curl --request POST \
--url https://api.finsync.ar/api/whatsapp/tools \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"fixed_config": {
"operationTypeId": 123
}
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', fixed_config: {operationTypeId: 123}})
};
fetch('https://api.finsync.ar/api/whatsapp/tools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', fixed_config: {operationTypeId: 123}})
};
fetch('https://api.finsync.ar/api/whatsapp/tools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.finsync.ar/api/whatsapp/tools"
payload = {
"name": "<string>",
"fixed_config": { "operationTypeId": 123 }
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": 123,
"company_id": 123,
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"enabled": true,
"company_operation_type_id": 123,
"mode": "standard",
"fixed_config": {
"toolKind": "up_down",
"operationTypeId": 123
},
"parameter_schema": {
"parameters": [
{}
]
},
"created_by": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z"
}Create a WhatsApp tool
Creates a company WhatsApp bot tool using the same name / slug / enabled / fixed_config / parameter_schema body as the dashboard form (POST /api/kapso/tools). fixed_config.operationTypeId must belong to this company and match toolKind. Slug defaults from name via normalizeToolSlug. created_by is null for API-key creates.
curl --request POST \
--url https://api.finsync.ar/api/whatsapp/tools \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"fixed_config": {
"operationTypeId": 123
}
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', fixed_config: {operationTypeId: 123}})
};
fetch('https://api.finsync.ar/api/whatsapp/tools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', fixed_config: {operationTypeId: 123}})
};
fetch('https://api.finsync.ar/api/whatsapp/tools', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.finsync.ar/api/whatsapp/tools"
payload = {
"name": "<string>",
"fixed_config": { "operationTypeId": 123 }
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": 123,
"company_id": 123,
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"enabled": true,
"company_operation_type_id": 123,
"mode": "standard",
"fixed_config": {
"toolKind": "up_down",
"operationTypeId": 123
},
"parameter_schema": {
"parameters": [
{}
]
},
"created_by": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z"
}Authorizations
API Key for authentication
Body
100Same discriminated fixed_config stored on WhatsAppOperationTool and sent by Configuración > WhatsApp > Tools. Validated with whatsAppToolFixedConfigSchema. operationTypeId must be a CompanyOperationTypes id of this company and must match toolKind (up/down → up_down, other → other, exchange → exchange, budget → budget). Budget config uses costCenter/paymentSourceMode/internalAccount/payerClient/amount/description; it does not require up_down mode/source/destination. Direction defaults to expense. paymentSourceMode defaults to internal (caja). Expense+external credits a type=1 CC (payerClientId) and does not debit caja. If internalAccountId is omitted on internal, confirm uses the cost center default caja.
Show child attributes
Show child attributes
Optional. Normalized from name when omitted.
Dynamic fields the bot asks for (parameter_schema). Same shape as the dashboard form: { parameters: [...] }. Omit or send { parameters: [] } when every field is fixed.
Show child attributes
Show child attributes
Response
Tool created
WhatsAppOperationTool row (deleted_at IS NULL). List includes disabled tools.
100Copied from fixed_config.operationTypeId
Legacy UP/DOWN column. OTHER, EXCHANGE, and BUDGET store standard here; real settings live in fixed_config.
standard, internal_transfer, third_party Same discriminated fixed_config stored on WhatsAppOperationTool and sent by Configuración > WhatsApp > Tools. Validated with whatsAppToolFixedConfigSchema. operationTypeId must be a CompanyOperationTypes id of this company and must match toolKind (up/down → up_down, other → other, exchange → exchange, budget → budget). Budget config uses costCenter/paymentSourceMode/internalAccount/payerClient/amount/description; it does not require up_down mode/source/destination. Direction defaults to expense. paymentSourceMode defaults to internal (caja). Expense+external credits a type=1 CC (payerClientId) and does not debit caja. If internalAccountId is omitted on internal, confirm uses the cost center default caja.
Show child attributes
Show child attributes
Dynamic fields the bot asks for (parameter_schema). Same shape as the dashboard form: { parameters: [...] }. Omit or send { parameters: [] } when every field is fixed.
Show child attributes
Show child attributes