Run a valid odoo.create_bill call through the same SDK surface used by every toolkit.

Minimal tool call

ts
import { Eyeball } from "@eyeball/sdk";

const eyeball = new Eyeball({
  apiKey: process.env.EYEBALL_API_KEY!,
  baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});

const output = await eyeball.tools.run(
  "odoo.create_bill",
  {
  "vendorId": "example_vendorId",
  "lineItems": [
    {
      "description": "example_description",
      "unitAmount": 1,
      "quantity": 1
    }
  ],
  "currency": "USD"
},
  { userId: "demo_user",
  idempotencyKey: "docs:odoo.create_bill:demo-1" },
);
console.log(output);

The model receives canonical output. Your application retains the execution envelope through tools.execute or the execution APIs when it needs IDs, status, versions, and latency.

Supported canonical tools

ToolPurposeExecutionEffectVersion
odoo.create_billCreate a draft vendor bill with portable line items, currency, dates, and memo fields.sync or asyncmutation1.0.0
odoo.create_customerCreate an ERP customer or business partner. Check for duplicates first when the provider does not enforce unique identities.sync or asyncmutation1.0.0
odoo.create_invoiceCreate a draft sales invoice with portable line items, currency, dates, and memo fields. This does not send the invoice.sync or asyncmutation1.0.0
odoo.get_invoiceRetrieve one sales invoice with normalized line items, totals, and status.sync or asyncread1.0.0
odoo.list_billsList vendor bills or accounts-payable documents by vendor, state, date, and pagination.sync or asyncread1.0.0
odoo.list_customersList ERP customers or business partners using portable text filters and pagination.sync or asyncread1.0.0
odoo.list_invoicesList sales invoices by customer, state, date, and pagination.sync or asyncread1.0.0
odoo.search_erp_recordsSearch a provider-supported ERP model with a structured domain and selected fields. Model availability is restricted by each provider adapter.sync or asyncread1.0.0
odoo.send_invoiceIssue or email an existing invoice through the provider workflow. This may notify the customer or post the accounting document.sync or asyncmutation1.0.0

Only the rows above are implemented. A capability tool omitted by this manifest returns not_supported; eyeball never synthesizes provider parity.

Supported canonical triggers

This manifest does not implement a canonical trigger.

Input and output schemas

odoo.create_bill

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:create_bill:1.0.0:odoo",
  "type": "object",
  "description": "Vendor, line items, and terms for a new bill.",
  "additionalProperties": false,
  "required": [
    "vendorId",
    "lineItems"
  ],
  "properties": {
    "vendorId": {
      "type": "string",
      "description": "Provider identifier of the vendor.",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "description": "ISO 4217 currency code.",
      "pattern": "^[A-Z]{3}$",
      "default": "USD"
    },
    "issueDate": {
      "type": "string",
      "format": "date",
      "description": "Bill issue date."
    },
    "dueDate": {
      "type": "string",
      "format": "date",
      "description": "Bill due date."
    },
    "reference": {
      "type": "string",
      "description": "Vendor reference or memo."
    },
    "lineItems": {
      "type": "array",
      "description": "One or more vendor-bill lines.",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "description",
          "unitAmount"
        ],
        "properties": {
          "accountId": {
            "type": "string",
            "description": "Provider expense or ledger-account identifier.",
            "minLength": 1
          },
          "itemId": {
            "type": "string",
            "description": "Provider product or service identifier.",
            "minLength": 1
          },
          "description": {
            "type": "string",
            "description": "Line description.",
            "minLength": 1
          },
          "quantity": {
            "type": "number",
            "description": "Billed quantity.",
            "minimum": 0,
            "default": 1
          },
          "unitAmount": {
            "type": "number",
            "description": "Price per unit in major currency units."
          },
          "taxAmount": {
            "type": "number",
            "description": "Tax amount in major currency units.",
            "minimum": 0
          }
        }
      }
    },
    "properties": {
      "type": "object",
      "description": "Additional canonical bill fields.",
      "additionalProperties": true
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:create_bill:output:1.0.0:odoo",
  "type": "object",
  "description": "The newly created draft vendor bill.",
  "additionalProperties": false,
  "required": [
    "bill"
  ],
  "properties": {
    "bill": {
      "type": "object",
      "description": "A normalized vendor bill or accounts-payable document.",
      "additionalProperties": false,
      "required": [
        "billId",
        "vendorId",
        "status",
        "currency",
        "total",
        "balance",
        "lineItems"
      ],
      "properties": {
        "billId": {
          "type": "string",
          "description": "Provider identifier of the bill.",
          "minLength": 1
        },
        "number": {
          "type": "string",
          "description": "Human-readable vendor bill number."
        },
        "vendorId": {
          "type": "string",
          "description": "Provider identifier of the vendor.",
          "minLength": 1
        },
        "status": {
          "type": "string",
          "description": "Normalized or provider bill state."
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency code.",
          "pattern": "^[A-Z]{3}$"
        },
        "total": {
          "type": "number",
          "description": "Bill total in major currency units."
        },
        "balance": {
          "type": "number",
          "description": "Outstanding balance in major currency units."
        },
        "issueDate": {
          "type": "string",
          "format": "date",
          "description": "Bill issue date."
        },
        "dueDate": {
          "type": "string",
          "format": "date",
          "description": "Bill due date."
        },
        "lineItems": {
          "type": "array",
          "description": "Normalized vendor-bill lines.",
          "items": {
            "type": "object",
            "description": "One normalized sales-invoice line.",
            "additionalProperties": false,
            "required": [
              "description",
              "quantity",
              "unitAmount",
              "amount"
            ],
            "properties": {
              "lineId": {
                "type": "string",
                "description": "Provider identifier of the invoice line.",
                "minLength": 1
              },
              "itemId": {
                "type": "string",
                "description": "Provider product, service, or ledger-item identifier.",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "description": "Line description."
              },
              "quantity": {
                "type": "number",
                "description": "Billed quantity.",
                "minimum": 0
              },
              "unitAmount": {
                "type": "number",
                "description": "Price per unit in major currency units."
              },
              "amount": {
                "type": "number",
                "description": "Extended line amount in major currency units."
              },
              "taxAmount": {
                "type": "number",
                "description": "Tax amount for the line in major currency units.",
                "minimum": 0
              }
            }
          }
        },
        "properties": {
          "type": "object",
          "description": "Additional provider-neutral bill fields.",
          "additionalProperties": true
        }
      }
    }
  }
}
odoo.create_customer

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:create_customer:1.0.0:odoo",
  "type": "object",
  "description": "Identity, billing, and address fields for a new customer.",
  "additionalProperties": false,
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Customer display name.",
      "minLength": 1
    },
    "companyName": {
      "type": "string",
      "description": "Legal or trading company name."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Customer billing email."
    },
    "phone": {
      "type": "string",
      "description": "Customer phone number."
    },
    "currency": {
      "type": "string",
      "description": "ISO 4217 currency code.",
      "pattern": "^[A-Z]{3}$"
    },
    "billingAddress": {
      "type": "object",
      "description": "Portable postal address fields.",
      "additionalProperties": false,
      "properties": {
        "line1": {
          "type": "string",
          "description": "First address line."
        },
        "line2": {
          "type": "string",
          "description": "Second address line."
        },
        "city": {
          "type": "string",
          "description": "City or locality."
        },
        "region": {
          "type": "string",
          "description": "State, province, or region."
        },
        "postalCode": {
          "type": "string",
          "description": "Postal code."
        },
        "country": {
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code.",
          "pattern": "^[A-Z]{2}$"
        }
      }
    },
    "properties": {
      "type": "object",
      "description": "Additional canonical ERP customer fields.",
      "additionalProperties": true
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:create_customer:output:1.0.0:odoo",
  "type": "object",
  "description": "The newly created ERP customer.",
  "additionalProperties": false,
  "required": [
    "customer"
  ],
  "properties": {
    "customer": {
      "type": "object",
      "description": "A normalized ERP customer or business partner.",
      "additionalProperties": false,
      "required": [
        "customerId",
        "name"
      ],
      "properties": {
        "customerId": {
          "type": "string",
          "description": "Provider identifier of the customer.",
          "minLength": 1
        },
        "name": {
          "type": "string",
          "description": "Customer display name."
        },
        "companyName": {
          "type": "string",
          "description": "Legal or trading company name."
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "Customer billing email."
        },
        "phone": {
          "type": "string",
          "description": "Customer phone number."
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency code.",
          "pattern": "^[A-Z]{3}$"
        },
        "active": {
          "type": "boolean",
          "description": "Whether the customer is active."
        },
        "billingAddress": {
          "type": "object",
          "description": "Portable postal address fields.",
          "additionalProperties": false,
          "properties": {
            "line1": {
              "type": "string",
              "description": "First address line."
            },
            "line2": {
              "type": "string",
              "description": "Second address line."
            },
            "city": {
              "type": "string",
              "description": "City or locality."
            },
            "region": {
              "type": "string",
              "description": "State, province, or region."
            },
            "postalCode": {
              "type": "string",
              "description": "Postal code."
            },
            "country": {
              "type": "string",
              "description": "ISO 3166-1 alpha-2 country code.",
              "pattern": "^[A-Z]{2}$"
            }
          }
        },
        "properties": {
          "type": "object",
          "description": "Additional provider-neutral customer fields.",
          "additionalProperties": true
        }
      }
    }
  }
}
odoo.create_invoice

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:create_invoice:1.0.0:odoo",
  "type": "object",
  "description": "Customer, line items, and terms for a new sales invoice.",
  "additionalProperties": false,
  "required": [
    "customerId",
    "lineItems"
  ],
  "properties": {
    "customerId": {
      "type": "string",
      "description": "Provider identifier of the billed customer.",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "description": "ISO 4217 currency code.",
      "pattern": "^[A-Z]{3}$",
      "default": "USD"
    },
    "issueDate": {
      "type": "string",
      "format": "date",
      "description": "Invoice issue date."
    },
    "dueDate": {
      "type": "string",
      "format": "date",
      "description": "Invoice due date."
    },
    "memo": {
      "type": "string",
      "description": "Customer-facing or internal invoice memo."
    },
    "lineItems": {
      "type": "array",
      "description": "One or more sales-invoice lines.",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "description",
          "unitAmount"
        ],
        "properties": {
          "itemId": {
            "type": "string",
            "description": "Provider product, service, or ledger-item identifier.",
            "minLength": 1
          },
          "description": {
            "type": "string",
            "description": "Line description.",
            "minLength": 1
          },
          "quantity": {
            "type": "number",
            "description": "Billed quantity.",
            "minimum": 0,
            "default": 1
          },
          "unitAmount": {
            "type": "number",
            "description": "Price per unit in major currency units."
          },
          "taxAmount": {
            "type": "number",
            "description": "Tax amount for the line in major currency units.",
            "minimum": 0
          }
        }
      }
    },
    "properties": {
      "type": "object",
      "description": "Additional canonical invoice fields.",
      "additionalProperties": true
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:create_invoice:output:1.0.0:odoo",
  "type": "object",
  "description": "The newly created draft sales invoice.",
  "additionalProperties": false,
  "required": [
    "invoice"
  ],
  "properties": {
    "invoice": {
      "type": "object",
      "description": "A normalized sales invoice.",
      "additionalProperties": false,
      "required": [
        "invoiceId",
        "customerId",
        "status",
        "currency",
        "total",
        "balance",
        "lineItems"
      ],
      "properties": {
        "invoiceId": {
          "type": "string",
          "description": "Provider identifier of the invoice.",
          "minLength": 1
        },
        "number": {
          "type": "string",
          "description": "Human-readable invoice number."
        },
        "customerId": {
          "type": "string",
          "description": "Provider identifier of the billed customer.",
          "minLength": 1
        },
        "status": {
          "type": "string",
          "description": "Normalized or provider invoice state."
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency code.",
          "pattern": "^[A-Z]{3}$"
        },
        "total": {
          "type": "number",
          "description": "Invoice total in major currency units."
        },
        "balance": {
          "type": "number",
          "description": "Outstanding balance in major currency units."
        },
        "issueDate": {
          "type": "string",
          "format": "date",
          "description": "Invoice issue date."
        },
        "dueDate": {
          "type": "string",
          "format": "date",
          "description": "Invoice due date."
        },
        "sentAt": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp when the invoice was sent or issued."
        },
        "lineItems": {
          "type": "array",
          "description": "Normalized sales-invoice lines.",
          "items": {
            "type": "object",
            "description": "One normalized sales-invoice line.",
            "additionalProperties": false,
            "required": [
              "description",
              "quantity",
              "unitAmount",
              "amount"
            ],
            "properties": {
              "lineId": {
                "type": "string",
                "description": "Provider identifier of the invoice line.",
                "minLength": 1
              },
              "itemId": {
                "type": "string",
                "description": "Provider product, service, or ledger-item identifier.",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "description": "Line description."
              },
              "quantity": {
                "type": "number",
                "description": "Billed quantity.",
                "minimum": 0
              },
              "unitAmount": {
                "type": "number",
                "description": "Price per unit in major currency units."
              },
              "amount": {
                "type": "number",
                "description": "Extended line amount in major currency units."
              },
              "taxAmount": {
                "type": "number",
                "description": "Tax amount for the line in major currency units.",
                "minimum": 0
              }
            }
          }
        },
        "properties": {
          "type": "object",
          "description": "Additional provider-neutral invoice fields.",
          "additionalProperties": true
        }
      }
    }
  }
}
odoo.get_invoice

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:get_invoice:1.0.0:odoo",
  "type": "object",
  "description": "Identifier of the invoice to retrieve.",
  "additionalProperties": false,
  "required": [
    "invoiceId"
  ],
  "properties": {
    "invoiceId": {
      "type": "string",
      "description": "Provider identifier of the invoice.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:get_invoice:output:1.0.0:odoo",
  "type": "object",
  "description": "The requested sales invoice.",
  "additionalProperties": false,
  "required": [
    "invoice"
  ],
  "properties": {
    "invoice": {
      "type": "object",
      "description": "A normalized sales invoice.",
      "additionalProperties": false,
      "required": [
        "invoiceId",
        "customerId",
        "status",
        "currency",
        "total",
        "balance",
        "lineItems"
      ],
      "properties": {
        "invoiceId": {
          "type": "string",
          "description": "Provider identifier of the invoice.",
          "minLength": 1
        },
        "number": {
          "type": "string",
          "description": "Human-readable invoice number."
        },
        "customerId": {
          "type": "string",
          "description": "Provider identifier of the billed customer.",
          "minLength": 1
        },
        "status": {
          "type": "string",
          "description": "Normalized or provider invoice state."
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency code.",
          "pattern": "^[A-Z]{3}$"
        },
        "total": {
          "type": "number",
          "description": "Invoice total in major currency units."
        },
        "balance": {
          "type": "number",
          "description": "Outstanding balance in major currency units."
        },
        "issueDate": {
          "type": "string",
          "format": "date",
          "description": "Invoice issue date."
        },
        "dueDate": {
          "type": "string",
          "format": "date",
          "description": "Invoice due date."
        },
        "sentAt": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp when the invoice was sent or issued."
        },
        "lineItems": {
          "type": "array",
          "description": "Normalized sales-invoice lines.",
          "items": {
            "type": "object",
            "description": "One normalized sales-invoice line.",
            "additionalProperties": false,
            "required": [
              "description",
              "quantity",
              "unitAmount",
              "amount"
            ],
            "properties": {
              "lineId": {
                "type": "string",
                "description": "Provider identifier of the invoice line.",
                "minLength": 1
              },
              "itemId": {
                "type": "string",
                "description": "Provider product, service, or ledger-item identifier.",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "description": "Line description."
              },
              "quantity": {
                "type": "number",
                "description": "Billed quantity.",
                "minimum": 0
              },
              "unitAmount": {
                "type": "number",
                "description": "Price per unit in major currency units."
              },
              "amount": {
                "type": "number",
                "description": "Extended line amount in major currency units."
              },
              "taxAmount": {
                "type": "number",
                "description": "Tax amount for the line in major currency units.",
                "minimum": 0
              }
            }
          }
        },
        "properties": {
          "type": "object",
          "description": "Additional provider-neutral invoice fields.",
          "additionalProperties": true
        }
      }
    }
  }
}
odoo.list_bills

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:list_bills:1.0.0:odoo",
  "type": "object",
  "description": "Vendor-bill filters and pagination.",
  "additionalProperties": false,
  "properties": {
    "vendorId": {
      "type": "string",
      "description": "Provider identifier of the vendor.",
      "minLength": 1
    },
    "status": {
      "type": "string",
      "description": "Bill state to match.",
      "minLength": 1
    },
    "issuedAfter": {
      "type": "string",
      "format": "date",
      "description": "Return bills issued on or after this date."
    },
    "issuedBefore": {
      "type": "string",
      "format": "date",
      "description": "Return bills issued before this date."
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of bills to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous bill page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:list_bills:output:1.0.0:odoo",
  "type": "object",
  "description": "One page of normalized vendor bills.",
  "additionalProperties": false,
  "required": [
    "bills"
  ],
  "properties": {
    "bills": {
      "type": "array",
      "description": "Vendor bills in provider order.",
      "items": {
        "type": "object",
        "description": "A normalized vendor bill or accounts-payable document.",
        "additionalProperties": false,
        "required": [
          "billId",
          "vendorId",
          "status",
          "currency",
          "total",
          "balance",
          "lineItems"
        ],
        "properties": {
          "billId": {
            "type": "string",
            "description": "Provider identifier of the bill.",
            "minLength": 1
          },
          "number": {
            "type": "string",
            "description": "Human-readable vendor bill number."
          },
          "vendorId": {
            "type": "string",
            "description": "Provider identifier of the vendor.",
            "minLength": 1
          },
          "status": {
            "type": "string",
            "description": "Normalized or provider bill state."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 currency code.",
            "pattern": "^[A-Z]{3}$"
          },
          "total": {
            "type": "number",
            "description": "Bill total in major currency units."
          },
          "balance": {
            "type": "number",
            "description": "Outstanding balance in major currency units."
          },
          "issueDate": {
            "type": "string",
            "format": "date",
            "description": "Bill issue date."
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "description": "Bill due date."
          },
          "lineItems": {
            "type": "array",
            "description": "Normalized vendor-bill lines.",
            "items": {
              "type": "object",
              "description": "One normalized sales-invoice line.",
              "additionalProperties": false,
              "required": [
                "description",
                "quantity",
                "unitAmount",
                "amount"
              ],
              "properties": {
                "lineId": {
                  "type": "string",
                  "description": "Provider identifier of the invoice line.",
                  "minLength": 1
                },
                "itemId": {
                  "type": "string",
                  "description": "Provider product, service, or ledger-item identifier.",
                  "minLength": 1
                },
                "description": {
                  "type": "string",
                  "description": "Line description."
                },
                "quantity": {
                  "type": "number",
                  "description": "Billed quantity.",
                  "minimum": 0
                },
                "unitAmount": {
                  "type": "number",
                  "description": "Price per unit in major currency units."
                },
                "amount": {
                  "type": "number",
                  "description": "Extended line amount in major currency units."
                },
                "taxAmount": {
                  "type": "number",
                  "description": "Tax amount for the line in major currency units.",
                  "minimum": 0
                }
              }
            }
          },
          "properties": {
            "type": "object",
            "description": "Additional provider-neutral bill fields.",
            "additionalProperties": true
          }
        }
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of bills; absent when the result is complete.",
      "minLength": 1
    }
  }
}
odoo.list_customers

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:list_customers:1.0.0:odoo",
  "type": "object",
  "description": "Customer filters and pagination.",
  "additionalProperties": false,
  "properties": {
    "query": {
      "type": "string",
      "description": "Case-insensitive customer name or email query.",
      "minLength": 1
    },
    "active": {
      "type": "boolean",
      "description": "Filter by active state."
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of customers to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous customer page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:list_customers:output:1.0.0:odoo",
  "type": "object",
  "description": "One page of ERP customers.",
  "additionalProperties": false,
  "required": [
    "customers"
  ],
  "properties": {
    "customers": {
      "type": "array",
      "description": "Customer records in provider order.",
      "items": {
        "type": "object",
        "description": "A normalized ERP customer or business partner.",
        "additionalProperties": false,
        "required": [
          "customerId",
          "name"
        ],
        "properties": {
          "customerId": {
            "type": "string",
            "description": "Provider identifier of the customer.",
            "minLength": 1
          },
          "name": {
            "type": "string",
            "description": "Customer display name."
          },
          "companyName": {
            "type": "string",
            "description": "Legal or trading company name."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Customer billing email."
          },
          "phone": {
            "type": "string",
            "description": "Customer phone number."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 currency code.",
            "pattern": "^[A-Z]{3}$"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the customer is active."
          },
          "billingAddress": {
            "type": "object",
            "description": "Portable postal address fields.",
            "additionalProperties": false,
            "properties": {
              "line1": {
                "type": "string",
                "description": "First address line."
              },
              "line2": {
                "type": "string",
                "description": "Second address line."
              },
              "city": {
                "type": "string",
                "description": "City or locality."
              },
              "region": {
                "type": "string",
                "description": "State, province, or region."
              },
              "postalCode": {
                "type": "string",
                "description": "Postal code."
              },
              "country": {
                "type": "string",
                "description": "ISO 3166-1 alpha-2 country code.",
                "pattern": "^[A-Z]{2}$"
              }
            }
          },
          "properties": {
            "type": "object",
            "description": "Additional provider-neutral customer fields.",
            "additionalProperties": true
          }
        }
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of customers; absent when the result is complete.",
      "minLength": 1
    }
  }
}
odoo.list_invoices

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:list_invoices:1.0.0:odoo",
  "type": "object",
  "description": "Invoice filters and pagination.",
  "additionalProperties": false,
  "properties": {
    "customerId": {
      "type": "string",
      "description": "Provider identifier of the billed customer.",
      "minLength": 1
    },
    "status": {
      "type": "string",
      "description": "Invoice state to match.",
      "minLength": 1
    },
    "issuedAfter": {
      "type": "string",
      "format": "date",
      "description": "Return invoices issued on or after this date."
    },
    "issuedBefore": {
      "type": "string",
      "format": "date",
      "description": "Return invoices issued before this date."
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of invoices to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous invoice page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:list_invoices:output:1.0.0:odoo",
  "type": "object",
  "description": "One page of normalized sales invoices.",
  "additionalProperties": false,
  "required": [
    "invoices"
  ],
  "properties": {
    "invoices": {
      "type": "array",
      "description": "Invoices in provider order.",
      "items": {
        "type": "object",
        "description": "A normalized sales invoice.",
        "additionalProperties": false,
        "required": [
          "invoiceId",
          "customerId",
          "status",
          "currency",
          "total",
          "balance",
          "lineItems"
        ],
        "properties": {
          "invoiceId": {
            "type": "string",
            "description": "Provider identifier of the invoice.",
            "minLength": 1
          },
          "number": {
            "type": "string",
            "description": "Human-readable invoice number."
          },
          "customerId": {
            "type": "string",
            "description": "Provider identifier of the billed customer.",
            "minLength": 1
          },
          "status": {
            "type": "string",
            "description": "Normalized or provider invoice state."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 currency code.",
            "pattern": "^[A-Z]{3}$"
          },
          "total": {
            "type": "number",
            "description": "Invoice total in major currency units."
          },
          "balance": {
            "type": "number",
            "description": "Outstanding balance in major currency units."
          },
          "issueDate": {
            "type": "string",
            "format": "date",
            "description": "Invoice issue date."
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "description": "Invoice due date."
          },
          "sentAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the invoice was sent or issued."
          },
          "lineItems": {
            "type": "array",
            "description": "Normalized sales-invoice lines.",
            "items": {
              "type": "object",
              "description": "One normalized sales-invoice line.",
              "additionalProperties": false,
              "required": [
                "description",
                "quantity",
                "unitAmount",
                "amount"
              ],
              "properties": {
                "lineId": {
                  "type": "string",
                  "description": "Provider identifier of the invoice line.",
                  "minLength": 1
                },
                "itemId": {
                  "type": "string",
                  "description": "Provider product, service, or ledger-item identifier.",
                  "minLength": 1
                },
                "description": {
                  "type": "string",
                  "description": "Line description."
                },
                "quantity": {
                  "type": "number",
                  "description": "Billed quantity.",
                  "minimum": 0
                },
                "unitAmount": {
                  "type": "number",
                  "description": "Price per unit in major currency units."
                },
                "amount": {
                  "type": "number",
                  "description": "Extended line amount in major currency units."
                },
                "taxAmount": {
                  "type": "number",
                  "description": "Tax amount for the line in major currency units.",
                  "minimum": 0
                }
              }
            }
          },
          "properties": {
            "type": "object",
            "description": "Additional provider-neutral invoice fields.",
            "additionalProperties": true
          }
        }
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of invoices; absent when the result is complete.",
      "minLength": 1
    }
  }
}
odoo.search_erp_records

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:search_erp_records:1.0.0:odoo",
  "type": "object",
  "description": "ERP model, provider domain expression, fields, and pagination.",
  "additionalProperties": false,
  "required": [
    "model",
    "domain"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "Provider model or accounting object name.",
      "minLength": 1
    },
    "domain": {
      "type": "array",
      "description": "Provider domain expression passed through after model allowlist validation.",
      "items": true
    },
    "fields": {
      "type": "array",
      "description": "Fields to return when the provider supports projection.",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of ERP records to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous ERP record page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:search_erp_records:output:1.0.0:odoo",
  "type": "object",
  "description": "One page of provider records from the selected ERP model.",
  "additionalProperties": false,
  "required": [
    "model",
    "records"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "Provider model searched."
    },
    "records": {
      "type": "array",
      "description": "Matching ERP records.",
      "items": {
        "type": "object",
        "description": "One provider ERP record.",
        "additionalProperties": true
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of ERP records; absent when the result is complete.",
      "minLength": 1
    }
  }
}
odoo.send_invoice

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:send_invoice:1.0.0:odoo",
  "type": "object",
  "description": "Invoice identifier and optional delivery address.",
  "additionalProperties": false,
  "required": [
    "invoiceId"
  ],
  "properties": {
    "invoiceId": {
      "type": "string",
      "description": "Provider identifier of the invoice.",
      "minLength": 1
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Explicit delivery address when the provider supports it."
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:erp_accounting:send_invoice:output:1.0.0:odoo",
  "type": "object",
  "description": "Result of issuing or sending the invoice.",
  "additionalProperties": false,
  "required": [
    "invoiceId",
    "status",
    "sentAt"
  ],
  "properties": {
    "invoiceId": {
      "type": "string",
      "description": "Provider identifier of the invoice.",
      "minLength": 1
    },
    "status": {
      "type": "string",
      "description": "Invoice state after the send workflow."
    },
    "sentAt": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp when the provider completed the workflow."
    }
  }
}

Authentication

PropertyValue
Auth classbasic
Required scopesNone
Optional scopesNone
Credential fieldsdatabase, username, apiKey

Credentials are resolved inside the executor by CredentialProvider. They never belong in tool input, x_provider, model context, logs, or execution output.

Provider-specific extensions

This manifest declares no provider-specific schema extensions. Use only canonical fields.

Provider differences may appear only under x_provider.odoo and only when the schema above declares them.

Sync and async behavior

All tools are synchronous by nature, but callers may choose mode: "async" to queue them.

Mutations require a stable Idempotency-Key. The TypeScript SDK accepts it as idempotencyKey; it is never part of the JSON request body.

REST example

Bash
curl "$EYEBALL_EXECUTOR_URL/v1/execute" \
  -H "Authorization: Bearer $EYEBALL_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: docs:odoo.create_bill:demo-1' \
  --data '{"tool":"odoo.create_bill","userId":"demo_user","input":{"vendorId":"example_vendorId","lineItems":[{"description":"example_description","unitAmount":1,"quantity":1}],"currency":"USD"},"mode":"sync"}'

Mock support

Point EYEBALL_EXECUTOR_URL at a mock-configured executor to run through the real catalog, validation, credential seam, adapter, normalized errors, and execution records with no Odoo account. Mock selection changes the executor endpoint and trusted provider base-URL configuration, never the execute request.

Limitations

  • This page describes the manifest's explicit P0 subset, not every operation offered by the provider.
  • Provider account policy, consent UI, quota details, and current wire compatibility still require a real-provider certification pass.
  • Fields outside the canonical schemas and declared x_provider extensions are rejected.

Versions

ContractVersion
Runtime catalog1.1
Manifest catalog1.0
Manifest schema1.0
Sourceactivepieces-bridge
TierP0
Capabilitieserp_accounting

Next

Use Testing with mocks to exercise this toolkit before connecting a live provider account.