Il catalogo dei preset, cosa restituisce GET /v1/presets, come portare il proprio schema e come si versionano gli agenti.
A preset is a built-in template (instructions, tools, default models, budget, output schema) the platform ships — GET /v1/presets lists the catalogue, every preset a new agent can be created from, each with its sector (impianti, legale, finanza, preventivi, formazione, manifattura, telefono; condominio, immobiliare, ospitalita and sanita are the sectors' names for the cards still to come) and, for a catalogue card, its code. A preset retired from the catalogue still runs for every agent already made from it; GET /v1/presets?include=retired adds those, flagged "retired": true, and POST /v1/agents refuses a new agent from one (preset_retired):
curl "https://api.agentflowbind.com/v1/presets" -H "Authorization: Bearer afb_live_xxxxxxxxxxxx"One entry of the answer, shortened (outputSchema, validationRules and profileDefaults are the full objects in the real response, written in the caller's content language):
{
"presets": [
{
"id": "document/supplier-invoice",
"family": "document",
"name": "Supplier invoice check",
"title": "Supplier invoice check",
"description": "Checks a supplier invoice before it is registered or paid — the SdI FatturaPA XML (also .p7m), a foreign supplier's PDF or a paper invoice — and returns a verdict with what to do, plus the checked record.",
"sector": "finanza",
"code": "F1",
"icon": "document",
"highlights": ["SdI XML (signed too), foreign PDFs, paper invoices", "What to do: F24 withholding, VAT to integrate, stamp duty", "Flags a second IBAN, a Skonto, a foreign VAT"],
"inputSpec": {
"files": {
"accept": ["application/xml", "text/xml", "application/pkcs7-mime", "application/pdf", "image/png", "image/jpeg"],
"max": 20
},
"fields": { "type": "object", "required": [], "properties": { "receivedOn": { "type": "string" }, "note": { "type": "string" } } }
},
"outputSchema": { "type": "object", "properties": { "verdict": { "...": "..." }, "supplier": { "...": "..." }, "lines": { "...": "..." }, "total": { "type": "number" } } },
"budget": { "maxCredits": 300, "maxIterations": 3, "maxDurationMs": 600000 },
"models": { "control": "google/gemini-2.5-flash", "act": "google/gemini-2.5-flash", "judge": "google/gemini-2.5-pro", "fallbacks": ["claude-haiku-4-5"] },
"tools": ["read_document", "extract_fields", "validate_output", "save_output", "search_knowledge", "send_email", "parse_fatturapa"],
"requiresSchema": false,
"retired": false,
"prebuilt": true
}
]
}A phone preset also carries a phone block (language, direction, greeting, allowTransfer, maxDurationMin, serverTools).
A run is refused before it starts — 400, error.details.code: "input_mime_rejected", naming the file and the accept list — when a file in input.fileIds is not a type the agent's inputSpec.files.accept lists (an agent can narrow its preset's list in its own settings).
An agent is your workspace's own named instance of a preset (POST /v1/agents { presetId, name, config? }); each edit to config creates a new immutable version (POST /v1/agents/:id/versions) and becomes the agent's current one. Runs always execute a specific version, never a live-editable "current" pointer that could change mid-run.
The catalogue is organised in nine sectors; each card has a code, the letter its sector's (E for formazione, F being finanza's). The public site lists these 30 cards.
| Sector | Code | Preset id | What it does |
|---|---|---|---|
| Impianti | I1 | document/bom-builder |
Bill of materials for the wholesaler, from a drawing or a list |
| I2 | document/delivery-note |
Delivery notes against the order: the slip's outcome, the differences row by row, what to chase | |
| I3 | document/custom-form |
Job sheets: hours, km and material to invoice — or any signed form, with a schema of your own | |
| I4 | document/electrical-doc-register |
End-of-works file and subcontractor file: what is missing, what lapses | |
| I5 | document/installation-checks |
Installation checks schedule: overdue DPR 462 verifications, recalls | |
| I6 | document/safety-training-register |
Safety training register: certificates, gaps, the plan | |
| I7 | document/conformity-declaration |
Declaration of conformity (D.M. 37/08): the DiCo from the job's documents, ready to sign or what is missing | |
| Legale | L1 | finance/court-deadlines |
Court deadlines from acts and PEC |
| L2 | finance/contract-review |
Contract review against your playbook | |
| L3 | finance/deadline-reminder |
Contract and deadline register | |
| L4 | finance/debt-recovery |
Debt recovery dossier | |
| Finanza | F1 | document/supplier-invoice |
Supplier invoice check |
| F2 | finance/reconciliation |
Bank reconciliation and open items | |
| F3 | finance/overdue-reminders |
Overdue receivables and reminders | |
| F4 | report/generate-monthly-summary |
Monthly report and cash forecast | |
| F5 | finance/eligible-expenses |
Grant reporting (bandi and PNRR) | |
| F6 | document/receipt-ocr |
Receipts to the verified expense claim | |
| F7 | finance/pec-triage |
PEC triage: the mailbox sorted by sender, every deadline computed from the certified date and its rule, who acts, the calendar | |
| F8 | document/aml-due-diligence |
Anti-money-laundering due diligence (D.Lgs. 231/2007): every codice fiscale checked, the beneficial owners from the chain, the risk the CNDCEC's Regole Tecniche suggest and its measures, what is missing; a suggestion, the professional decides — no PEP or sanctions list consulted | |
| Preventivi | P1 | document/quote-from-drawing |
Quote from a drawing and your price list |
| P2 | document/quote-from-request |
Quote from a written request | |
| P3 | document/supplier-offer-comparison |
Supplier offer comparison | |
| P4 | document/supplier-price-list |
Supplier's new price list | |
| P5 | document/progress-billing |
Job sheets to the progress bill (SAL) or the invoice: hours, rates, price list, retention, reverse charge | |
| Formazione | E1 | learning/onboarding-tutor |
Onboarding tutor: answers a new hire from your procedures, with the quote and its page, or names the person to ask |
| Manifattura | M1 | document/order-confirmation |
Order confirmation against the purchase order: the verdict, each difference with its money, the reply to the supplier drafted (never sent) |
| Condominio | C1 | document/condominium-split |
Condominium expense split: every bill on its table of millesimi, every unit's share to the cent, the tenant's part and a sale split by days; the riparto in Excel, CSV and PDF |
| Immobiliare | R1 | document/property-sale-file |
Property sale file: every cadastral datum compared with the visura, owners and shares against the sellers, the APE at the deed, the condominium's arrears and what passes to the buyer; the file in Word, PDF and CSV |
| Telefono | T1 | phone/reception |
Secretary with calendar |
| T2 | phone/outbound-confirmation |
Outbound confirmations and recalls |
GET /v1/presets also lists four presets with no card code, which agents can still be created from: document/e-invoice-fatturaPA (the SdI XML alone) and document/e-invoice-xrechnung (German EN 16931 XML), finance/categorisation (a bank statement into your categories) — all three under finanza — and document/electrical-drawing (components and circuits from a drawing, under preventivi).
document/custom-form — your own schemaThe preset reads job sheets into its own register. Give the agent a config.outputSchema and it reads any other form into exactly the fields you define instead:
curl -X POST "https://api.agentflowbind.com/v1/agents" \
-H "Authorization: Bearer afb_live_xxxxxxxxxxxx" -H "Content-Type: application/json" \
-d '{
"presetId": "document/custom-form",
"name": "Purchase order intake",
"config": {
"outputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"poNumber": { "type": "string" },
"vendor": { "type": "string" },
"items": { "type": "array", "items": { "type": "object", "properties": { "sku": { "type": "string" }, "qty": { "type": "number" } } } }
},
"required": ["poNumber", "vendor"]
}
}
}'No preset requires a schema today (requiresSchema is false for all of them); the field stays in the response for one that will.
# New version with a tweaked schema — becomes the agent's current version
curl -X POST "https://api.agentflowbind.com/v1/agents/{id}/versions" \
-H "Authorization: Bearer afb_live_xxxxxxxxxxxx" -H "Content-Type: application/json" \
-d '{ "config": { "outputSchema": { "...": "updated schema..." } } }'
# List every version, newest first
curl "https://api.agentflowbind.com/v1/agents/{id}/versions" -H "Authorization: Bearer afb_live_xxxxxxxxxxxx"Every run records which profileVersionId it used — changing an agent's config never retroactively changes what a past run actually did.