Data processing agreement
Last updated October 29, 2026
This data processing agreement ("DPA") is between the customer that accepts it ("you", the controller: the app we serve) and Programmable, LLC, 3607 10th St NW, Washington, DC 20010, USA ("we", the processor). It forms part of the Terms of Service and applies whenever we process personal data on your behalf while providing Programmable Dev. To accept it, email [email protected] from your account's address with your company name; we'll countersign and return a copy. It applies from that date, and to processing that has already taken place under your app.
1. What we process for you
- Subject matter and purpose: holding your tenants' credentials and making the tool calls your agents ask for with them; holding calls for approval; logging calls; sending you events.
- Personal data: the identifiers and labels you give tenants and actors; the account identifiers providers return for a connection; the email addresses of the workspace members and app approvers you invite; and whatever the inputs and results of your agents' calls contain, which is decided by you, your tenants and your agents. It must not include special categories of data or data about children unless the law allows it and you have the safeguards it requires.
- Data subjects: your tenants and their users and staff; your workspace's members and approvers; the people who appear in the data your agents' calls carry.
- Duration: the moment of each call for its request and result; 90 days for the input summary and result preview, and 400 days for the rest of the call and approval log; the life of a connection for its credential; the life of your app for its records, deleted within 30 days of closure.
2. Our obligations as processor
- We process personal data only on your documented instructions, which are the Terms, this DPA, your app's configuration (grants, caps, approval rules) and the calls your agents make. We'll tell you if we think an instruction breaks the law.
- We keep the personal data we process for you confidential, and everyone who works on the service is bound by confidentiality.
- We keep the security measures in section 5, and won't reduce them during the term.
- We help you respond to data-subject requests and to your own security and impact-assessment obligations, as far as the service allows: the API lets you delete a tenant, an actor or a connection, which strips their payloads at once.
- We notify you without undue delay, and in any case within 72 hours, of a personal data breach affecting your data, with what we know and what we're doing.
- On termination, we delete the personal data we hold for you within 30 days, revoking credentials at providers where they support it, unless the law requires us to keep it.
- We make available the information needed to show compliance, and allow audits by you or an auditor you appoint, on reasonable notice, no more than once a year unless a breach or a regulator requires otherwise.
3. Your obligations as controller
You are responsible for having a lawful basis for the personal data your agents' calls carry, for the notices and consents your tenants and their users need, for the grants, caps and approval rules you set, for the approvers you name, for honouring the rights of the people concerned, and for your tenants' agreements with the providers they connect. You warrant that your instructions to us are lawful.
4. Subprocessors
You authorise the subprocessors below. We'll email workspace owners and the people we set up Platform apps for at least 30 days before adding one; you may object on reasonable data-protection grounds and, if we can't resolve it, end the affected service.
| Subprocessor | Purpose | Location |
|---|---|---|
| OVHcloud | Server, database and encrypted backups (self-hosted) | US |
| Cloudflare | Network, TLS, bot protection | Global edge; EU/US |
| Sentry | Server error reports with credentials and personal data removed | US / EU |
| Resend | Transactional email (invites, app-move notices): the recipient's address and the email's text | US |
| Stripe | Payments for the plan (checkout, billing portal, invoices, taxes): the billing details given at checkout and, per period, the number of billable calls and the paid-route cost; never a call's input or result | US |
| Composio | Paid fallback route for a provider without a record or MCP server; only when an app switches it on | US |
The providers your tenants connect (Slack, GitHub, Notion and others), vendor MCP servers, and the built-in services you or your tenants supply keys for (Brave Search, Tavily, Exa, Jina Reader, Firecrawl, Apify) are engaged by you or your tenants directly and are not our subprocessors.
5. Security measures
- Credentials and client secrets encrypted at rest with AES-256-GCM under a key that can be rotated; app keys and actor tokens stored as hashes and shown once; actor tokens live 15 minutes.
- Encryption in transit everywhere (TLS 1.2+). Every outbound request is checked against the record's allowed hosts before it is made; redirects are not followed blindly.
- Every call is checked against the actor's grants and cap before it runs; approvals are bound to a digest of what the approver saw and are spent after one use; results are scrubbed of credentials and marked untrusted.
- Request and result bodies are handled in memory; only an input summary and result preview are logged, and they are removed after 90 days.
- Server reachable only through Cloudflare; firewalling on ingress and egress; SSH by key only; no shared accounts; nightly encrypted backups.
- Access to production is limited to the people who operate the service, with an audit log of changes made through the dashboard and API.
- Error reports have credentials and personal data stripped before they leave the server.
6. Where data is processed
Our server, database and backups are in the United States, and our subprocessors are listed in section 4. Where you are established in the EU, the EEA or the UK, transfers to us are made under the standard contractual clauses (module two, controller to processor, with the UK addendum where it applies), which we will sign on request and which then form part of this DPA.
7. General
If this DPA conflicts with the Terms, this DPA wins for personal-data matters. Our liability under this DPA is subject to the limits in the Terms. This DPA lasts as long as we process personal data for you. It is governed by the same law as the Terms, except where section 6 says otherwise. Questions: [email protected].