Limits
WhatsApp enforces strict limits on texts and components. SendSeven checks all of them when you validate or save a version, so you find out before WhatsApp rejects the flow.
A limit that is exceeded is reported as an issue:
{
"code": "component.label_too_long",
"path": "screens[0].components[1].label",
"message": "Label is 25 characters; Meta allows 20.",
"severity": "error"
}
Errors block pushing. Warnings are advice; the flow can still be pushed. Limits count characters, including spaces and umlauts (ü is one character).
Text lengths
German texts are often longer than English ones, so the short labels are where most flows fail.
| Text | Max | Too long | Fits |
|---|---|---|---|
Label of TextInput, TextArea, Dropdown | 20 | "Bevorzugter Rückruftermin" (25) | "Rückruftermin" (13) |
Label of RadioButtonsGroup, CheckboxGroup | 30 | "Welche Leistungen interessieren Sie?" (36) | "Gewünschte Leistungen" (21) |
Label of DatePicker, CalendarPicker | 40 | "Wunschtermin" | |
| Option title | 30 | "Ich möchte den Newsletter erhalten" (34) | "Newsletter erhalten" (19) |
| Option description | 300 | "Monatlich, jederzeit abbestellbar" | |
| Option metadata | 20 | "ab 49 €" | |
OptIn label | 120 | "Ich möchte den Newsletter erhalten und akzeptiere die Datenschutzerklärung." | |
| Helper text (inputs and pickers) | 80 | "z. B. 0171 2345678" | |
TextInput error message | 30 | "Bitte Nummer prüfen" | |
| Date picker error message | 80 | ||
TextHeading, TextSubheading | 80 | "Rückruf vereinbaren" | |
TextBody | 4096 | ||
TextCaption | 409 | ||
EmbeddedLink text | 25 | "Unsere Datenschutzerklärung" (27) | "Datenschutz" (11) |
Footer label | 35 | "Absenden" | |
Footer captions (left/center/right) | 15 | "Schritt 2 von 3" | |
PhotoPicker, DocumentPicker label | 80 | "Foto der Rechnung" | |
CalendarPicker title | 80 | ||
| Group or picker description | 300 | ||
Button text (meta.cta, cta on send) | 30 (warning above 20) | "Jetzt Rückruf vereinbaren und Termin wählen" (43) | "Formular öffnen" (15) |
| Screen title | 30 (warning) | "Ihre Kontaktdaten" | |
ChipsSelector label | 80 (warning) |
Codes: component.label_too_long, component.option_too_long, component.helper_too_long, component.text_too_long, meta.cta_too_long (error) and meta.cta_long, screen.title_long (warnings).
A TextArea without max-length accepts 600 characters.
Counts
| Limit | Max | Code |
|---|---|---|
| Screens per flow | 100 | flow.too_many_screens |
Components per screen (including those inside If/Switch) | 50 | screen.too_many_components |
Image per screen | 3 | screen.too_many_images |
ImageCarousel per screen / per flow | 2 / 3 | screen.too_many_image_carousels, flow.too_many_image_carousels |
Images per ImageCarousel | 3 | component.option_count |
OptIn per screen | 5 | screen.too_many_optins |
EmbeddedLink per screen | 2 | screen.too_many_links |
Footer per screen | 1 | screen.too_many_footers |
PhotoPicker or DocumentPicker per screen | 1 (in total) | screen.too_many_media_pickers |
If/Switch nesting | 3 levels | component.if_too_deep |
| Routes from one screen | 10 | routing.too_many_routes |
Upload size per file (max_file_size_kb) | 25,600 KB | |
| Files per media picker | 30 |
The screen id SUCCESS is reserved by WhatsApp.
Options
| Component | Options |
|---|---|
RadioButtonsGroup | 1–20 |
CheckboxGroup | 1–20 |
Dropdown | 1–200 (1–100 if any option has an image) |
ChipsSelector | 2–20 |
NavigationList | 1–20 items |
Too few or too many options give component.option_count.
Options that come from screen data ("options": "${data.services}") are not known when you save the flow. Make sure your data source returns option lists and titles within these limits; for example cut a list of 35 appointment slots down to 20 for a RadioButtonsGroup, or use a Dropdown.
Tips for German flows
- Put the explanation in a
TextBodyor the helper text and keep the label short: label "Rückruftermin", helper text "Wann dürfen wir Sie anrufen?". - Use the option
description(300 characters) for detail and keep thetitleto a few words. - Prefer "Sie" forms that are short: "Absenden" instead of "Formular jetzt absenden".
- Use AI generation: it writes texts within these limits and repairs its own overruns.