dp
dev.pipe Legal

Legal // TERMS

Terms and Conditions

The contractual rules of a paid service are a legal document and are not drafted here. What this page does contain is the technical side of the service, read out of the code, so that the lawyer drafting the terms knows what is actually being sold.

Service covered by this page: https://www.devpipe.eu

⚠ THIS PAGE IS INCOMPLETE AND MUST NOT GO LIVE

8 open gaps on this page

The blocks marked below are empty on purpose. They carry legal or commercial statements that only the operator and their lawyer can make. Every one of them is listed in docs/legal-content-checklist.md.

01Parties, scope and how a contract comes about

⚠ MISSING — OPERATOR INPUT REQUIRED

Framework of the contract

Required entries:

  • The contracting entity, identical to the imprint
  • Whether the offer is addressed to businesses only or to consumers as well
  • At which step of the checkout the contract is concluded
  • How these terms are included in the contract, and where the customer confirms them
  • Contract language and where the text is stored

Today nothing in the frontend asks the customer to accept any terms; the checkout hands over to Stripe directly.

02What is technically provided

The service answers OpenAI-compatible requests under an API key. A trial key is issued after an email address is confirmed, and it expires by itself. A paid key is created or upgraded when Stripe reports a completed checkout; an upgraded trial key keeps its value, so nothing has to be reconfigured in the development tool. When a subscription ends, the keys of that customer are deactivated in the database and deleted at the gateway.

Values this deployment actually runs with

SettingValue
Model served on paid plansdevpipe-code-1
Model served on trial keysdevpipe-code-1-trial
Lifetime of a trial key (hours)48
Trial requests per minute20
Trial tokens per minute40000
Total token budget of a trial key150000
Waiting period per email address (days)30
Lifetime of the login cookie (days)7

Verified in: backend/app/services/onboarding_service.py · backend/app/services/stripe_service.py · backend/app/core/config.py

03Prices, VAT and invoices

The price is not defined in this code base. The checkout refers to price objects held at Stripe, so the amount charged is whatever those objects say. Stripe's automatic tax calculation is not switched on in the checkout session that the code creates.

⚠ MISSING — OPERATOR INPUT REQUIRED

Commercial terms

Required entries:

  • The price list itself and whether the amounts are net or gross
  • How VAT is determined and shown, including sales to other EU countries
  • Billing period, due date and accepted means of payment
  • What happens on a failed payment
  • How a price change is announced

The pricing page states amounts as gross prices including VAT, because the offer is open to consumers. The Stripe price objects must be configured as tax-inclusive so the charge matches the page.

Verified in: backend/app/services/stripe_service.py

04Term, renewal and cancellation

Technically, a customer cancels through the Stripe customer portal, which the cockpit opens. When Stripe then reports the end of the subscription, the webhook deactivates the customer's keys and removes them from the gateway, and the subscription row is marked as cancelled.

⚠ MISSING — OPERATOR INPUT REQUIRED

Contractual terms of cancellation

Required entries:

  • Minimum term, renewal and notice period
  • The point in time at which access ends after a cancellation
  • Grounds for termination for cause on either side
  • Whether section 312k BGB applies, which would require a cancellation button on the site

There is no cancellation button in the frontend today; cancellation happens inside the Stripe portal.

Verified in: backend/app/api/v1/dashboard.py · backend/app/services/stripe_service.py

05Limits, fair use and suspension

Requests are limited by requests per minute and tokens per minute. For Solo and trial keys the limit applies to each key; the keys of a Team plan draw on one pooled budget shared across the team. For the per-minute token limit, a token is an uncached prompt token or a completion token: prompt tokens served from the prefix cache do not count toward the limit. Trial keys carry a total token budget on top of that. Requests above the limit are rejected and counted. These are throughput limits, not volume caps: paid keys carry no daily, monthly or total token budget at the gateway, and the per-minute rates can be adjusted while the service operates to keep the cluster stable under load.

⚠ MISSING — OPERATOR INPUT REQUIRED

Rules the code cannot state

Required entries:

  • What counts as improper use and what follows from it
  • Whether and how access may be suspended
  • Whether limits may be changed during a running subscription

Verified in: backend/app/services/rate_limiter.py · backend/app/services/litellm_client.py · config/litellm-config.yaml

06Availability and support

Two promises made on the marketing pages have no counterpart in this code base, and the terms should either back them or drop them. The pricing page advertises a dedicated SLA for the team plan, while nothing here measures or reports availability. The same page promises a digitally countersigned data processing agreement, while the cockpit hands out an unsigned Markdown file.

⚠ MISSING — OPERATOR INPUT REQUIRED

Availability commitment

Required entries:

  • Whether an availability figure is promised, and how it is measured
  • Maintenance windows and how they are announced
  • Support channel and response times
  • Consequences of falling short

Verified in: backend/app/api/v1/dashboard.py · backend/app/core/i18n.py

07Liability, warranty and generated output

Answers are produced by a language model. The gateway configuration contains no content filter and no moderation step, so output is passed through as the model produced it.

⚠ MISSING — OPERATOR INPUT REQUIRED

Liability provisions

Required entries:

  • Limitation of liability and its boundaries
  • Warranty for a service that is provided as a subscription
  • Statement on rights in the generated output and who bears the risk of using it
  • Duties of the customer, for example not to send data of third parties without a basis

Verified in: config/litellm-config.yaml

08Data processing agreement under Art. 28 GDPR

The cockpit generates a data processing agreement as a Markdown download. In its current form it names no legal entity as the processor, gives a contact address that no imprint backs, and states that no data leaves for third countries although payment runs through Stripe.

⚠ MISSING — OPERATOR INPUT REQUIRED

A usable processing agreement

Required entries:

  • A reviewed agreement naming the processor and the technical and organisational measures
  • A statement on sub-processors, including the payment and email providers
  • How the customer countersigns it

The generated file is a draft. It should not be handed to a customer's data protection officer as it stands.

Verified in: backend/app/api/v1/dashboard.py

09Changes, governing law and jurisdiction

⚠ MISSING — OPERATOR INPUT REQUIRED

Final provisions

Required entries:

  • How these terms may be changed and how a change is communicated
  • Governing law
  • Place of jurisdiction, and the restriction that applies to consumers
  • Severability clause