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.
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
- ActionTypeAlreadyExistsException
- InvalidTrailNameException
- PipelineExecutionNotStoppableException
- PipelineNameInUseException
AI-assisted analysis of floci-io/floci@62ff490619 (2026-08-14).
Data as JSON: /api/errors/17aba2c749a944f9.
Report an issue: GitHub.
Appendix: 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)