diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
index 33fa7d7..8a154eb 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
@@ -124,7 +124,7 @@ public class TenantResource extends JaxRsResourceBase {
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@ApiOperation(value = "Create a tenant")
- @ApiResponses(value = {@ApiResponse(code = 500, message = "Tenant already exists")})
+ @ApiResponses(value = {@ApiResponse(code = 409, message = "Tenant already exists")})
public Response createTenant(final TenantJson json,
@QueryParam(QUERY_TENANT_USE_GLOBAL_DEFAULT) @DefaultValue("false") final Boolean useGlobalDefault,
@HeaderParam(HDR_CREATED_BY) final String createdBy,
diff --git a/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java b/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java
index eb3f5ba..dcd2636 100644
--- a/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java
+++ b/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java
@@ -91,6 +91,11 @@ public class DefaultTenantUserApi implements TenantUserApi {
throw new TenantApiException(ErrorCode.EXTERNAL_KEY_LIMIT_EXCEEDED);
}
+ // Not transactional, but there is a db constraint on that column
+ if (data.getApiKey() != null && getTenantByApiKey(data.getApiKey()) != null) {
+ throw new TenantApiException(ErrorCode.TENANT_ALREADY_EXISTS, data.getExternalKey());
+ }
+
try {
tenantDao.create(new TenantModelDao(tenant), internalCallContextFactory.createInternalCallContextWithoutAccountRecordId(context));
} catch (final TenantApiException e) {