floci-io/floci · error · AwsException
ValidationException
ValidationException
Error message
Reserved tag keys with prefix floci: can only be supplied during resource creation.
What it means
Thrown by PutWebhook when the webhook object in the request has no name or a blank name. The webhook name is the primary identifier: it becomes the storage key, the URL path segment, and the ARN suffix, so the emulator rejects the request before creating any of those. It maps to AWS's WebhookName validation.
Source
Thrown at src/main/java/io/github/hectorvent/floci/core/common/ReservedTags.java:113
}
for (String key : tags.keySet()) {
if (isReserved(key) || DEPRECATED_API_GATEWAY_CUSTOM_ID_KEY.equals(key)) {
throw new AwsException(
BAD_REQUEST_EXCEPTION,
"Reserved tag key " + key + " can only be supplied during resource creation.",
400
);
}
}
}
public static void rejectReservedTagsOnUpdate(Map<String, String> tags) {
if (tags == null) {
return;
}
for (String key : tags.keySet()) {
if (isReserved(key)) {
throw new AwsException(
VALIDATION_EXCEPTION,
"Reserved tag keys with prefix " + RESERVED_PREFIX + " can only be supplied during resource creation.",
400
);
}
}
}
public static void rejectUnknownReservedTags(Map<String, String> tags, String errorCode) {
if (tags == null) {
return;
}
for (String key : tags.keySet()) {
if (isReserved(key) && !key.equals(OVERRIDE_ID_KEY) && !key.equals(OVERRIDE_COGNITO_CLIENT_ID_KEY) && !key.equals(OVERRIDE_COGNITO_CLIENT_SECRET_KEY)) {
throw new AwsException(
errorCode,
"%s is an unknown Reserved Tag.".formatted(key),
400View on GitHub (pinned to 62ff490619)
Solutions
- Set webhook.name to a non-blank value matching AWS constraints (letters, numbers, and hyphens, max 100 chars typical)
- Validate the name is non-empty in your IaC/template before issuing PutWebhook
- Check the value was interpolated correctly when templating the request payload
Example fix
// before
client.putWebhook(r -> r.webhook(w -> w.definition(d -> d.name(webhookName)))); // webhookName empty
// after
if (webhookName == null || webhookName.isBlank()) throw new IllegalArgumentException("webhookName required");
client.putWebhook(r -> r.webhook(w -> w.definition(d -> d.name(webhookName)))); Defensive patterns
Strategy: validation
Validate before calling
String name = webhookName;
if (name == null || name.isBlank() || !name.matches("[A-Za-z0-9.-]+")) {
throw new IllegalArgumentException("webhook name invalid: " + name);
}
client.putWebhook(r -> r.webhook(w -> w.definition(d -> d.name(name)))); Prevention
- Validate required webhook fields in your provisioning script before calling the API
- Fail template rendering early when the webhook name variable is empty
When it happens
Trigger: Calling PutWebhook with an empty webhook object; webhook.name set to "" or whitespace; building the request from a template where the name placeholder was never filled.
Common situations: Infrastructure code that generates webhook names from an unset variable; CI pipelines passing an empty environment variable into the webhook definition; SDK builders that permit null names client-side.
Related errors
- ValidationException
- TLS enabled but no certificate provided and self-signed gene
- S3BucketDoesNotExistException
- InvalidTrailNameException
- PipelineNameInUseException
AI-assisted analysis of floci-io/floci@62ff490619 (2026-08-14).
Data as JSON: /api/errors/17aba2c749a944f9.
Report an issue: GitHub.