# Twinn Engineering > Twinn Engineering solves the cloud-to-on-premise problem for Sage 100 Contractor. Sage 100 Contractor is an on-premise product with no cloud API, so any application that needs its data has to reach a database sitting on a customer's own server. Our core product, OPDC (On-Premise Database Connector), is the connector that runs on that server plus the secure connectivity to it, exposed as one authenticated REST API for both read and write. No inbound firewall ports, no VPN, no exposed database, and no on-premise agent for your team to build and maintain. ## Which Sage Product This Is - Twinn Engineering connects to **Sage 100 Contractor**, the construction product formerly sold as Sage Master Builder. - It is **not** Sage 100 ERP (formerly MAS 90 and MAS 200). Those are separate products on separate databases with different data models, and an integration built for one does not reach the other. - This is the core differentiator: many integration vendors connect to Sage 100 ERP, while comparatively few connect to Sage 100 Contractor. Twinn Engineering is built specifically for Sage 100 Contractor. - Sage 100 Contractor stores each company in a Microsoft SQL Server database on the customer's own server (since version 19; earlier versions used Pervasive). ## Company - Name: Twinn Engineering - Sage partnership: member of the Sage Development Partner Program - Location: Atlanta, Georgia - Website: https://twinn.engineering - Contact: https://twinn.engineering/contact - API Docs: https://twinn.engineering/developers - OpenAPI v3 documentation: https://twinn.engineering/developers - OpenAPI v3 contract: https://twinn.engineering/openapi.v3.json ## Products ### OPDC, the On-Premise Database Connector - URL: https://twinn.engineering/opdc - What it does: Sits on-premise next to a Sage 100 Contractor database and exposes secure read and write API access. No VPN required. No ports opened. No cloud databases. - How it works: Installs from one EV code-signed Windows executable as a Windows service alongside Sage 100 Contractor. Connects to the local Sage 100 Contractor SQL Server database. Provides a REST API that authorized clients can query over HTTPS. Write operations go through a validated transaction pipeline that enforces Sage's own business rules. See https://twinn.engineering/security for the IT deployment detail. - Target users: IT administrators, accounting teams, and Sage consultants managing Sage 100 Contractor environments. ### Ask Twinn (early access) - URL: https://twinn.engineering/ask-twinn - What it does: An assistant inside the Twinn web app that answers questions about a Sage 100 Contractor company in plain English, such as "which jobs are over budget right now?". It answers by running Twinn reports against live Sage 100 Contractor data and names the report, criteria and time it ran, with a link to the full report. - Safety: read-only (it cannot post, edit or delete anything in Sage, or create keys); runs reports as the person asking, within their own permissions; payroll and personal data are a separate permission; every question and report run is logged; conversations are deleted 30 days after the last message. - Model: Claude, made by Anthropic, through the Anthropic API. Questions and the report results needed for an answer are sent to Anthropic. - Status: early access as of October 2026. An add-on to any plan, $1,500/year. ### MCP server for Claude and ChatGPT - URL: https://twinn.engineering/sage-100-contractor-mcp - What it does: A read-only MCP server in front of a Sage 100 Contractor company. Claude, ChatGPT and other MCP clients can look up jobs, vendors, cost codes and payable and receivable invoices, add records up, and run Twinn's 45 reports. It refuses any key that can write. - Tools: company_context, list_entities, describe_entity, decode, find_entity, summarize_entity, list_reports, describe_report, run_report. - Public demo: https://demo-mcp.twinn.engineering/mcp (Streamable HTTP, OAuth sign-in with Google or email). One made-up mechanical and plumbing contractor, Ridgeline Mechanical & Plumbing, rebuilt every night with dates up to today, read-only, with the same tools and reports. Add it to Claude or ChatGPT as a custom connector. - Included in every plan, from $3,000/year. ### Twinn Reports - URL: https://twinn.engineering/reports - What it does: 45 Sage 100 Contractor reports included, run in the browser against live data, with export to Excel, PDF and CSV. Every report shows how it is calculated. Ask Twinn runs the same reports. - Access: per-person permissions on each report; payroll and personal data reports are a separate permission; every run is logged. - Report library (each has its own page): - Job Cost: Budget vs Actual by Cost Code (https://twinn.engineering/reports/sage-100-contractor-budget-vs-actual-by-cost-code); Committed Costs (https://twinn.engineering/reports/sage-100-contractor-committed-costs); Job Cost Journal (https://twinn.engineering/reports/sage-100-contractor-job-cost-journal); Job Cost Totals (https://twinn.engineering/reports/sage-100-contractor-job-cost-totals); Job Performance (WIP) (https://twinn.engineering/reports/sage-100-contractor-wip-report); Job Profitability (https://twinn.engineering/reports/sage-100-contractor-job-profitability); Job Status Report (https://twinn.engineering/reports/sage-100-contractor-job-status-report); Over/Under Billings (https://twinn.engineering/reports/sage-100-contractor-over-under-billings); Pending Change Orders (https://twinn.engineering/reports/sage-100-contractor-pending-change-orders) - Accounts Receivable: AR Aging by Job (https://twinn.engineering/reports/sage-100-contractor-ar-aging-by-job); AR Collection Call Sheet (https://twinn.engineering/reports/sage-100-contractor-ar-collection-call-sheet); AR Invoice Aging (https://twinn.engineering/reports/sage-100-contractor-ar-aging-report); AR Invoice List (https://twinn.engineering/reports/sage-100-contractor-ar-invoice-list); Client Statement (https://twinn.engineering/reports/sage-100-contractor-client-statement); Retention Receivable and Payable by Job (https://twinn.engineering/reports/sage-100-contractor-retention-by-job); Taxable and Non-taxable Billings by Tax District (https://twinn.engineering/reports/sage-100-contractor-sales-tax-billings) - Accounts Payable: 1099 Vendor Payments (https://twinn.engineering/reports/sage-100-contractor-1099-vendor-payments); AP Invoice Aging (https://twinn.engineering/reports/sage-100-contractor-ap-aging-report); AP Invoice List (https://twinn.engineering/reports/sage-100-contractor-ap-invoice-list); Lien Waiver Tracking (https://twinn.engineering/reports/sage-100-contractor-lien-waiver-tracking); Payment Invoice Details (https://twinn.engineering/reports/sage-100-contractor-payment-invoice-details); Set to Pay (https://twinn.engineering/reports/sage-100-contractor-set-to-pay); Subcontractor Compliance (https://twinn.engineering/reports/sage-100-contractor-subcontractor-compliance); Subcontractor Pay by Job (https://twinn.engineering/reports/sage-100-contractor-subcontractor-pay-by-job); Use Tax Accrual (https://twinn.engineering/reports/sage-100-contractor-use-tax-accrual); Vendor List (https://twinn.engineering/reports/sage-100-contractor-vendor-list) - Cash & General Ledger: Balance Sheet (https://twinn.engineering/reports/sage-100-contractor-balance-sheet); Cash Receipts (https://twinn.engineering/reports/sage-100-contractor-cash-receipts); Check Register (https://twinn.engineering/reports/sage-100-contractor-check-register); General Journal (https://twinn.engineering/reports/sage-100-contractor-general-journal); General Ledger (https://twinn.engineering/reports/sage-100-contractor-general-ledger); GL Transaction Detail (https://twinn.engineering/reports/sage-100-contractor-gl-transaction-detail); Income Statement (https://twinn.engineering/reports/sage-100-contractor-income-statement); Income Statement by Department (https://twinn.engineering/reports/sage-100-contractor-income-statement-by-department); Statement of Cash Flows (https://twinn.engineering/reports/sage-100-contractor-cash-flow-statement); Trial Balance (https://twinn.engineering/reports/sage-100-contractor-trial-balance) - Payroll: Certified Payroll (https://twinn.engineering/reports/sage-100-contractor-certified-payroll); Employee List (https://twinn.engineering/reports/sage-100-contractor-employee-list); Federal Tax Report (https://twinn.engineering/reports/sage-100-contractor-federal-tax-report); Payroll by Check Date (https://twinn.engineering/reports/sage-100-contractor-payroll-by-check-date); Payroll Check Register (https://twinn.engineering/reports/sage-100-contractor-payroll-check-register); State Tax Report (https://twinn.engineering/reports/sage-100-contractor-state-tax-report); Workers' Comp Report (https://twinn.engineering/reports/sage-100-contractor-workers-comp-report) - Purchasing: Open PO Lines (https://twinn.engineering/reports/sage-100-contractor-open-po-lines); Purchase Order List (https://twinn.engineering/reports/sage-100-contractor-purchase-order-list) ### Twinn Inventory - URL: https://twinn.engineering/inventory - What it does: Inventory management and barcode scanning for Sage 100 Contractor. A web app for managing inventory from the office, and iOS and Android apps for scanning on the warehouse floor (Zebra handhelds included). Receive purchase orders, allocate materials to jobs, and keep Sage in sync. - Platforms: web browser, iOS (iPhone and iPad), Android (phones, tablets and Zebra handhelds). The web app does everything the mobile apps do. - Barcodes: bring your own. Existing barcodes are linked to their parts in Sage 100 Contractor. The links live in Twinn, so Sage part records are not changed. - Key features: Zebra barcode scanner integration, your own barcodes linked to Sage parts, PO receiving, job-based allocation, mobile-first design. ### Custom Integrations - URL: https://twinn.engineering/integrations - What it does: Connects OPDC to external tools. Payroll import (Excel, CSV, ADP, Gusto), AP invoice processing, service inventory management, credit card import via Plaid. - Sub-pages: - Payroll Import: https://twinn.engineering/integrations/payroll-import - AP Invoice: https://twinn.engineering/integrations/ap-invoice - Service Inventory: https://twinn.engineering/integrations/service-inventory - Webhooks and Zapier: https://twinn.engineering/integrations/webhooks ## Pricing - URL: https://twinn.engineering/pricing - Reports plan: $3,000/year, read-only reporting with Twinn Reports, read-only API access, and read-only connections for Claude and ChatGPT (MCP) - Standard plan: $6,500/year, full read and write API access - Ask Twinn add-on: $1,500/year on either plan, included in the trial - Integrator / Enterprise plan (described on https://twinn.engineering/faq): $11,000/year, for software vendors connecting to Sage through OPDC. Includes OpenTelemetry traces, metrics, and logs, contracted SLAs, and multi-tenant / multi-company support for embedding OPDC in your own application - Per-customer API keys, available after the Integrator license: $1,500/year for a read key, $2,500/year for a read and write key - Every plan starts with a free 30-day trial - Custom integration consulting available (time & materials, starting at 15 hours) - No per-user fees, no per-call metering ## Platform: Cloud to On-Premise Connectivity - URL: https://twinn.engineering/platform - The problem: Sage 100 Contractor is installed on-premise and exposes no cloud API. A cloud application that needs Sage data must both read and write the native database correctly and reach it from outside the customer's building. - What Twinn provides: the on-premise connector, the secure connectivity between a cloud application and each customer's Sage server, and one REST API that addresses every customer install the same way. - Request path: your cloud application calls the OPDC host issued for that customer over HTTPS with mutual TLS and a scoped API key. The request is passed down a connection the customer's own server established outbound, to the OPDC connector on the Sage server, which reaches the Sage database over the local network. - Because the customer's server establishes the connection outbound, no inbound firewall port, port forward, VPN, or database exposure is required at any point in that path. - Each customer install is addressed on its own issued hostname rather than a shared public endpoint. - Multi-company: one install handles every Sage company on the instance natively. Each company has its own API key and database credentials, and the API key used on a request is what selects the company. A key for one company cannot reach another, and one company's access can be revoked without affecting the rest. - What an integrator would otherwise build themselves: a signed Windows agent, native Sage database read and write, Sage business-rule validation, a secure outbound transport, certificate issuance and rotation, authentication and per-customer isolation, silent updates and Sage version compatibility, retries and idempotency, monitoring and tracing, and front-line support for customer IT teams. ## Integrator Onboarding Lifecycle 1. Create a Twinn account, which provides the integrator dashboard: connector download, API key provisioning, and logs and metrics for every call. 2. Download the connector, one EV code-signed Windows executable, from the download portal. The same build serves every customer. 3. Provision an API key for the customer in the dashboard, scoped to that customer and revocable on its own. 4. The customer's IT company installs the connector on the Sage server and supplies the API key plus the database credentials for their Sage company. A customer running several Sage companies gets a key and credentials for each; one install handles them all natively. 5. On connecting to Sage the connector checks the Sage version and field compatibility. An unsupported version is refused rather than partially supported. 6. The application calls the REST API on that customer's issued host with that customer's key. - Connector updates are installed deliberately rather than pushed silently. The version check prevents an install drifting out of step unnoticed. ## API Capabilities (v3 contract) - 213 operations in 17 API areas: 14 over Sage 100 Contractor records, plus Reports, Requests and Utility. - 87 readable entities, each with its own query contract, across 12 areas: Ledger (9), Accounts Payable (2), Accounts Receivable (2), Purchasing (1), Inventory (13), Jobs and Costing (15), Project Documents (5), Payroll (12), Service Management (7), Equipment (4), Vendors and Clients (11), Banking and Tax (6). 40 of them also have a match endpoint for finding the closest records by field values. - 38 POST endpoints write to Sage. 10 post a transaction: insert an AP invoice, record a vendor payment, record a cash receipt, record a credit card receipt, record an inventory allocation, post a ledger transaction, post a payroll batch, receive against a purchase order, create a purchase order and create a service inventory. 23 create master records such as vendors, clients, parts, cost codes, job types, equipment and tax entities. 5 more answer with their own result: attach a file to a record (POST /attachments), create a change order (POST /change-orders), add daily payroll lines (POST /daily-payrolls), create timecards from daily payroll (POST /daily-payrolls/create-timecards) and write a record's notes (POST /notes). 3 more POST endpoints act on an existing record: change an AP invoice's status, void a cash receipt and invoice a work order. - 26 PATCH endpoints change a record with a JSON merge patch (RFC 7396): the master records above, and change orders, daily payroll lines and purchase orders. Only fields that are sent are written. - 2 DELETE endpoints: delete a daily payroll line and cancel a report job. There is no raw SQL path. - The notes on AP invoices, ledger transactions, vendors, jobs, change orders, purchase orders, AR invoices, clients, employees and service invoices can be read and added to; the important note is append-only. - Files can be attached to AP invoices, ledger transactions, vendors, jobs, change orders and purchase orders, and listed and downloaded. - Every transaction write runs the full cascade Sage would run itself. An AP invoice posts its journal, propagates account balances, and writes job costs. - Full capability matrix: https://twinn.engineering/platform ## API Reference - [Ledger](https://twinn.engineering/developers/ledger): Query the chart of accounts, balances and fiscal setup, post journal entries, and create or change sub-accounts in Sage 100 Contractor through the OPDC API. - [Accounts Payable](https://twinn.engineering/developers/accounts-payable): Query AP invoices and vendor payments, insert AP invoices that post to the ledger and job cost, and record vendor payments in Sage 100 Contractor via OPDC. - [Accounts Receivable](https://twinn.engineering/developers/accounts-receivable): Query AR invoices and customer receipts, including progress billing, and record or void cash receipts in Sage 100 Contractor through the OPDC API. - [Purchasing](https://twinn.engineering/developers/purchasing): Query purchase orders, create and change them, and post receipts against them in Sage 100 Contractor through the OPDC API. - [Inventory](https://twinn.engineering/developers/inventory): Query parts, stock, movements and allocations, and create or change parts, part classes, assembly classes and locations in Sage 100 Contractor via OPDC. - [Jobs and Costing](https://twinn.engineering/developers/jobs-and-costing): Query jobs, costs, phases and commitments, and create or change cost codes, cost divisions, job types and job statuses in Sage 100 Contractor. - [Project Documents](https://twinn.engineering/developers/project-documents): Query cost-to-complete, hours-to-complete, units-complete, progress billing and proposal records in Sage 100 Contractor through the OPDC API. - [Payroll](https://twinn.engineering/developers/payroll): Query payroll records, post payroll batches, and create or change paygroups, positions and workers’ comp codes in Sage 100 Contractor via OPDC. - [Service Management](https://twinn.engineering/developers/service-management): Query service contracts, locations, schedules and equipment, create service inventory records and invoice work orders in Sage 100 Contractor. - [Equipment](https://twinn.engineering/developers/equipment): Query equipment, costs and revenues, and create or change equipment and equipment types in Sage 100 Contractor through the OPDC API. - [Vendors and Clients](https://twinn.engineering/developers/vendors-and-clients): Query vendors, clients, contacts and balances, and create or change vendors, clients and their types in Sage 100 Contractor through the OPDC API. - [Banking and Tax](https://twinn.engineering/developers/banking-and-tax): Query banking, reconciliation and tax records, create or change tax entities, and quote sales tax in Sage 100 Contractor through the OPDC API. - [Notes](https://twinn.engineering/developers/notes): Read the notes on a Sage 100 Contractor record, add to them, or replace the note, on invoices, jobs, vendors, clients, employees and more, via OPDC. - [Attachments](https://twinn.engineering/developers/attachments): Attach a file, such as a scanned invoice or a signed change order, to a Sage 100 Contractor record, and list and download its files through the OPDC API. - [Requests](https://twinn.engineering/developers/requests): Follow and cancel a slow OPDC request that answered 202 Accepted, and read its outcome, through the OPDC API for Sage 100 Contractor. - [Utility](https://twinn.engineering/developers/utility): Ping the OPDC service, read its version, and lock or unlock a Sage 100 Contractor company for maintenance through the OPDC API. - [Reports](https://twinn.engineering/developers/reports): List, describe and run Twinn reports over Sage 100 Contractor data through the OPDC API, and follow or cancel a running report job. ## Reliability Contract - A `504` means the request was accepted but the on-premise service did not answer in time, so the outcome is unknown. Retry with the same idempotency key. - Idempotency keys are Stripe-style and scoped to the API key. The response is stored for 24 hours and replayed on a repeat, so retrying after a timeout returns the original outcome instead of posting twice. - `dryRun` executes the whole write cascade against live Sage data inside one transaction and rolls it back, so a write can be tested without committing it. - A `423` means the Sage installation is locked for maintenance and names the lock holder, with a `Retry-After`. - A `502` means Sage itself refused the operation, such as a constraint, deadlock, permission, or dropped connection. It is marked retryable and deliberately carries no `Retry-After`. - W3C `traceparent` is propagated to the on-premise service and into the request logs, so one trace covers both sides of the hop. - The connector runs as a Windows service and restarts itself after a stop or reboot. Sage is unaffected either way. - Rejected writes name the failing field and the rule it broke. Unknown fields are rejected rather than ignored. ## Security and IT Deployment - URL: https://twinn.engineering/security - Written for IT teams and managed service providers reviewing an OPDC install. - No inbound firewall ports need to be opened. OPDC establishes its connection outbound over HTTPS from the customer's server, so there is no inbound rule, no port forward, and no published listener on the perimeter. - No VPN is required and none is requested. Applications authenticate to an API instead of being given network-level access. - The entire install is one Windows executable signed with an EV (Extended Validation) code signing certificate, the highest assurance tier for Windows code signing. The signing key is held in certified hardware and the publisher is verified as a legal entity, so SmartScreen and publisher-based application control policies accept it without an exception. - Local administrator rights are needed for the install, which registers a Windows service and sets up local certificates. - All traffic uses mutual TLS (mTLS): client and server authenticate each other before any data moves. - Users authenticate through Auth0, with LDAP and enterprise identity providers supported. Every request also carries an API key scoped to one organization and one permission set, revocable on its own from the Twinn dashboard. - Authorization is relationship-based access control (ReBAC), implemented on OpenFGA, so what a caller can reach is an explicit relationship rather than a coarse role. - The Sage database credentials the connector uses are encrypted at rest with Windows DPAPI and salted, scoped to the account the service runs under. - The connector checks the Sage version and field compatibility on connect, and refuses reads and writes on an unsupported version. - There is no raw SQL path through the API. Writes pass a validation layer that enforces Sage business rules or are rejected with a reason. - Every call, read or write, is logged with authenticated user, timestamp, endpoint, and payload, reviewable in the dashboard. - The Sage database is not copied to a cloud Twinn runs. It stays on the customer's hardware, and Sage files, settings, and database structures are not modified. - Not SOC 2 certified as of August 2026. Security questionnaires and vendor review forms are answered directly. ## Technical Details - OPDC runs on-premise (Windows) alongside Sage 100 Contractor - Runs on Windows Server 2016 or later, or Windows 10/11, with local network access to the Sage database - Connects to Microsoft SQL Server, the database Sage 100 Contractor runs on - Provides REST API access over HTTPS - Supports both read and write operations with validated transaction pipeline - Authentication via Auth0 with LDAP support, mTLS encryption - Observability for integrator plans is exported via OpenTelemetry (traces, metrics, and logs) ## Announcements - URL: https://twinn.engineering/announcements - API v3 launched August 5, 2026 and is the current OPDC API contract. Meaningful HTTP status codes, RFC 9457 problem+json errors, a single read envelope and a single write envelope, idempotency keys on writes, dry runs, and rejection of unknown fields. - API v2 remains available as a frozen compatibility surface and is scheduled for removal in December 2026. ## Additional Pages - Platform (cloud to on-premise connectivity, capability matrix, reliability): https://twinn.engineering/platform - Security for IT: https://twinn.engineering/security - FAQ: https://twinn.engineering/faq - Careers: https://twinn.engineering/careers - Privacy Policy: https://twinn.engineering/privacy-policy ## Who This Is For - General contractors and subcontractors using Sage 100 Contractor - Accounting teams who need reporting without VPN access - IT administrators, managed service providers, and security reviewers approving a Sage 100 Contractor integration - Sage consultants building integrations for their clients - Software vendors and integrators whose cloud product needs to read or write a customer's on-premise Sage 100 Contractor data