diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index f220ac1..7b403c3 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -31,8 +31,9 @@ jobs:
if: ${{ github.ref == 'refs/heads/main' }}
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- run: >-
- mvn --batch-mode verify sonar:sonar
- -Dsonar.java.jdkHome=$JAVA_HOME_11_X64
- -Dsonar.projectKey=pgmarc_space-java-client
+ run: mvn --projects space-client --batch-mode verify sonar:sonar \
+ -Dsonar.host.url=https://sonarcloud.io \
+ -Dsonar.organization=pgmarc \
+ -Dsonar.projectKey=pgmarc_space-java-client \
+ -Dsonar.java.jdkHome=$JAVA_HOME_11_X64 \
-Pcoverage
diff --git a/.gitignore b/.gitignore
index a335cd4..bac9cea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,4 +18,12 @@ buildNumber.properties
# VSCode
-.vscode
\ No newline at end of file
+.vscode
+
+# Intellij
+.idea/
+*.iml
+*.iws
+
+# Mac
+.DS_Store
diff --git a/examples/pom.xml b/examples/pom.xml
new file mode 100644
index 0000000..a5caaab
--- /dev/null
+++ b/examples/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+
+ io.github.pgmarc.space
+ space-client-parent
+ 0.0.1-SNAPSHOT
+
+
+ space-client-examples
+ 1.0.0-SNAPSHOT
+ space-client-examples
+
+
+
+ io.github.pgmarc.space
+ space-client
+ 0.0.1-SNAPSHOT
+
+
+
diff --git a/examples/src/main/java/io/github/pgmarc/space/examples/SingleService.java b/examples/src/main/java/io/github/pgmarc/space/examples/SingleService.java
new file mode 100644
index 0000000..c9ff45b
--- /dev/null
+++ b/examples/src/main/java/io/github/pgmarc/space/examples/SingleService.java
@@ -0,0 +1,80 @@
+package io.github.pgmarc.space.examples;
+
+import java.io.IOException;
+import java.util.Objects;
+
+import io.github.pgmarc.space.SpaceClient;
+import io.github.pgmarc.space.contracts.Subscription;
+import io.github.pgmarc.space.contracts.SubscriptionRequest;
+import io.github.pgmarc.space.contracts.SubscriptionUpdateRequest;
+import io.github.pgmarc.space.contracts.UserContact;
+import okhttp3.*;
+
+/**
+ * In this example you will be subscribing to a service with only a single
+ * plan available. After that you will update your subscription to the
+ * lastest available version of the service pricing.
+ *
+ *
+ * You have the corresponding Pricing2Yaml files in
+ * src/main/resources/single folder.
+ *
+ */
+public class SingleService {
+
+ /**
+ * Before executing the code snippets you have to do the following:
+ *
+ * - Start a SPACE instance
+ * - Get a
MANAGER or ADMIN api key
+ *
+ *
+ * You are free to experiment with the API and adjust the code to your needs.
+ * Happy Hacking :)
+ *
+ * @see
+ *
+ */
+ public static void main(String[] args) throws IOException {
+
+ String apiKey = Objects.requireNonNull(System.getenv("SPACE_API_KEY"),
+ "You need to set SPACE_API_KEY env variable") ;
+
+ SpaceClient client = SpaceClient.builder("localhost", apiKey).build();
+
+ // A subscription at least requires a user id and a username
+ String userId = "4427d118-073d-4da2-a145-f77a75b52595";
+ String username = "alex";
+ UserContact contact = UserContact.builder(userId, username).build();
+
+ // But, you can provide more user contact information if you want
+ UserContact contact2 = UserContact
+ .builder("3f5f934c-951b-4a2d-ad10-b1679ac9b7ba", "janedoe")
+ .firstName("Jane")
+ .lastName("Doe")
+ .email("janedoe@example.com")
+ .phone("280-689-4646").build();
+
+ SubscriptionRequest subReq = SubscriptionRequest.builder(contact)
+ .startService("WireMock", "2024")
+ .plan("Enterprise")
+ .endService()
+ .build();
+
+ Subscription newSubscription = client.contracts().addContract(subReq);
+ System.out.println(newSubscription);
+
+ Subscription subscription = client.contracts().getContractByUserId(userId);
+ System.out.println(subscription);
+
+ // Updating (novating) the contract to version of 2025
+ SubscriptionUpdateRequest upReq = SubscriptionUpdateRequest.builder()
+ .service("WireMock", "2025")
+ .plan("Enterprise")
+ .add();
+
+ Subscription updatedSubscription = client.contracts().updateContractByUserId(userId, upReq);
+ System.out.println(updatedSubscription);
+ }
+
+}
diff --git a/examples/src/main/resources/single/2024-03-02-wiremock.yaml b/examples/src/main/resources/single/2024-03-02-wiremock.yaml
new file mode 100644
index 0000000..c049879
--- /dev/null
+++ b/examples/src/main/resources/single/2024-03-02-wiremock.yaml
@@ -0,0 +1,60 @@
+saasName: WireMock
+syntaxVersion: "3.0"
+createdAt: 2025-08-23
+version: "2024"
+currency: USD
+url: https://web.archive.org/web/20240302003353/https://www.wiremock.io/get-pricing
+features:
+ mockAPI:
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: true
+ expression:
+ pricingContext['features']['mockAPI'] &&
+ (subscriptionContext['mockAPICallsLimit'] < pricingContext['usageLimits']['mockAPICallsLimit'])
+ RBAC:
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: false
+ expression: pricingContext['features']['RBAC']
+ gitSync:
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: false
+ expression: pricingContext['features']['gitSync']
+usageLimits:
+ mockAPICallsLimit:
+ type: RENEWABLE
+ valueType: NUMERIC
+ defaultValue: 1000
+ period:
+ value: 1
+ unit: MONTH
+ unit: call/month
+ linkedFeatures:
+ - mockAPI
+ maxUsers:
+ type: NON_RENEWABLE
+ valueType: NUMERIC
+ trackable: true
+ defaultValue: 1
+ unit: user
+plans:
+ Free:
+ description: $0 free forever. No credit card required.
+ price: 0
+ features: null
+ usageLimits: null
+ Enterprise:
+ description: For larger teams or API Volume
+ price: Get in touch
+ features:
+ RBAC:
+ value: true
+ gitSync:
+ value: true
+ usageLimits:
+ mockAPICallsLimit:
+ value: .inf
+ maxUsers:
+ value: .inf
diff --git a/examples/src/main/resources/single/2025-08-23-wiremock.yaml b/examples/src/main/resources/single/2025-08-23-wiremock.yaml
new file mode 100644
index 0000000..c2767a0
--- /dev/null
+++ b/examples/src/main/resources/single/2025-08-23-wiremock.yaml
@@ -0,0 +1,79 @@
+saasName: WireMock
+syntaxVersion: "3.0"
+createdAt: 2025-08-23
+version: "2025"
+currency: USD
+url: https://web.archive.org/web/20250823073700/https://www.wiremock.io/get-pricing
+features:
+ mockAPI:
+ description: Get rid of testing environment infrastructure bills.
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: true
+ expression:
+ pricingContext['features']['mockAPI'] &&
+ (subscriptionContext['mockAPICallsLimit'] < pricingContext['usageLimits']['mockAPICallsLimit'])
+ RBAC:
+ description: Connect your SSO provider for easy access
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: false
+ expression: pricingContext['features']['RBAC']
+ gitSync:
+ description: Use an OpenAPI spec in Git as the source of truth for your mock APis
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: false
+ expression: pricingContext['features']['gitSync']
+ testDataImport:
+ description: Connect external data sources to instantly bring your test data into your mock APIs
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: false
+ expression: pricingContext['features']['testDataImport']
+ fakeDataGeneration:
+ description: Choose from hundreds of patterns tor randomly generating critical test data
+ type: DOMAIN
+ valueType: BOOLEAN
+ defaultValue: false
+ expression: pricingContext['features']['fakeDataGeneration']
+usageLimits:
+ mockAPICallsLimit:
+ type: RENEWABLE
+ valueType: NUMERIC
+ defaultValue: 1000
+ period:
+ value: 1
+ unit: MONTH
+ unit: call/month
+ linkedFeatures:
+ - mockAPI
+ maxUsers:
+ type: NON_RENEWABLE
+ valueType: NUMERIC
+ trackable: true
+ defaultValue: 1
+ unit: user
+plans:
+ Free:
+ description: $0 free forever. No credit card required.
+ price: 0
+ features: null
+ usageLimits: null
+ Enterprise:
+ description: For larger teams or API Volume
+ price: Get in touch
+ features:
+ RBAC:
+ value: true
+ gitSync:
+ value: true
+ testDataImport:
+ value: true
+ fakeDataGeneration:
+ value: true
+ usageLimits:
+ mockAPICallsLimit:
+ value: .inf
+ maxUsers:
+ value: .inf
diff --git a/pom.xml b/pom.xml
index 0095308..628cf8d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,288 +1,128 @@
- 4.0.0
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
- io.github.pgmarc.space
- space-client
- 0.0.1-SNAPSHOT
- space-client
-
+ io.github.pgmarc.space
+ space-client-parent
+ pom
+ 0.0.1-SNAPSHOT
+ space-client
+
A REST client for interacting with the Subscription and Pricing Access Control Engine (SPACE) API
https://github.com/pgmarc/space-java-client
-
-
- MIT
- https://opensource.org/license/mit/
- repo
-
-
+
+ examples
+ space-client
+
-
- ISA Group
- https://github.com/isa-group
-
+
+
+ MIT
+ https://opensource.org/license/mit/
+ repo
+
+
-
+
+ ISA Group
+ https://github.com/isa-group
+
+
+
Pedro González Marcos
pgonzalez11@us.es
ISA Group
- https://github.com/isa-group
-
-
-
-
- scm:git:git://github.com/pgmarc/space-java-client.git
- scm:git:ssh://github.com/pgmarc/space-java-client.git
- https://github.com/pgmarc/space-java-client/tree/main
- HEAD
-
+ https://github.com/isa-group
+
+
-
- pgmarc
- https://sonarcloud.io
- UTF-8
- 11
- 5.1.0
- 2.1.2
- 20250517
-
+
+ scm:git:git://github.com/pgmarc/space-java-client.git
+ scm:git:ssh://github.com/pgmarc/space-java-client.git
+ https://github.com/pgmarc/space-java-client/tree/main
+ HEAD
+
-
-
-
- org.json
- json
- ${org.json.version}
-
+
+ UTF-8
+ 11
+
+ ${maven.multiModuleProjectDirectory}/space-client/target/site/
+ jacoco/jacoco.xml
+
+
-
-
- io.socket
- engine.io-client
- 2.1.0
-
-
- com.squareup.okhttp3
- okhttp
-
-
-
+
+
- com.squareup.okhttp3
- okhttp-bom
- ${okhttp.version}
+ org.junit
+ junit-bom
+ 5.13.4
pom
import
-
- com.squareup.okio
- okio-jvm
- 3.16.0
+ org.assertj
+ assertj-core
+ 3.26.3
+ test
-
- org.junit
- junit-bom
- 5.13.4
- pom
- import
-
-
-
-
-
-
- org.json
- json
-
-
- io.socket
- socket.io-client
- ${socket.io-client.version}
-
-
-
- com.squareup.okhttp3
- okhttp-jvm
- ${okhttp.version}
-
-
- org.junit.jupiter
- junit-jupiter
- test
-
-
- org.wiremock
- wiremock
- 3.13.1
- test
-
-
- org.assertj
- assertj-core
- 3.26.3
- test
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.14.0
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.5.3
-
-
- org.apache.maven.plugins
- maven-surefire-report-plugin
- 3.5.3
-
-
- org.apache.maven.plugins
- maven-enforcer-plugin
- 3.6.1
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.11.2
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.3.1
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.4.2
-
-
- org.sonarsource.scanner.maven
- sonar-maven-plugin
- 5.1.0.4751
-
-
- org.jacoco
- jacoco-maven-plugin
- 0.8.13
-
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
- org.apache.maven.plugins
- maven-enforcer-plugin
-
-
- enforce-versions
-
- enforce
-
-
-
-
-
-
- [3.6,4.0)
-
-
- [11,)
-
-
-
-
-
-
-
-
+
+
-
-
- coverage
-
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
- prepare-agent
-
- prepare-agent
-
-
-
- report
-
- report
-
-
-
- XML
-
-
-
-
-
-
-
-
-
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.14.0
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.3
+
+
+ org.apache.maven.plugins
+ maven-surefire-report-plugin
+ 3.5.3
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 3.6.1
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.11.2
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.3.1
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.4.2
+
+
+ org.sonarsource.scanner.maven
+ sonar-maven-plugin
+ 5.1.0.4751
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.13
+
+
+
+
diff --git a/space-client/pom.xml b/space-client/pom.xml
new file mode 100644
index 0000000..d007be1
--- /dev/null
+++ b/space-client/pom.xml
@@ -0,0 +1,190 @@
+
+
+ 4.0.0
+
+
+ io.github.pgmarc.space
+ space-client-parent
+ 0.0.1-SNAPSHOT
+
+
+ space-client
+ 0.0.1-SNAPSHOT
+ space-client
+
+
+ 20250517
+ 5.1.0
+ 2.1.2
+
+
+
+
+
+ com.squareup.okhttp3
+ okhttp-bom
+ ${okhttp.version}
+ pom
+ import
+
+
+
+ io.socket
+ engine.io-client
+ 2.1.0
+
+
+ com.squareup.okhttp3
+ okhttp
+
+
+
+
+
+ com.squareup.okio
+ okio-jvm
+ 3.16.0
+
+
+
+
+
+
+ org.json
+ json
+ ${org.json.version}
+
+
+
+
+ com.squareup.okhttp3
+ okhttp-jvm
+ ${okhttp.version}
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.wiremock
+ wiremock
+ 3.13.1
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+
+
+ enforce-versions
+
+ enforce
+
+
+
+
+
+
+ [3.6,4.0)
+
+
+ [11,)
+
+
+
+
+
+
+
+
+
+
+
+ coverage
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ prepare-agent
+
+ prepare-agent
+
+
+
+ report
+
+ report
+
+
+
+ XML
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/io/github/pgmarc/space/ContractsEndpoint.java b/space-client/src/main/java/io/github/pgmarc/space/ContractsEndpoint.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/ContractsEndpoint.java
rename to space-client/src/main/java/io/github/pgmarc/space/ContractsEndpoint.java
diff --git a/src/main/java/io/github/pgmarc/space/SpaceClient.java b/space-client/src/main/java/io/github/pgmarc/space/SpaceClient.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/SpaceClient.java
rename to space-client/src/main/java/io/github/pgmarc/space/SpaceClient.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/AddOn.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/AddOn.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/AddOn.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/AddOn.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/BillingPeriod.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/BillingPeriod.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/BillingPeriod.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/BillingPeriod.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/Service.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/Service.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/Service.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/Service.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/Subscription.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/Subscription.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/Subscription.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/Subscription.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/SubscriptionRequest.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/SubscriptionRequest.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/SubscriptionRequest.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/SubscriptionRequest.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/SubscriptionUpdateRequest.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/SubscriptionUpdateRequest.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/SubscriptionUpdateRequest.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/SubscriptionUpdateRequest.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/UsageLevel.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/UsageLevel.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/UsageLevel.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/UsageLevel.java
diff --git a/src/main/java/io/github/pgmarc/space/contracts/UserContact.java b/space-client/src/main/java/io/github/pgmarc/space/contracts/UserContact.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/contracts/UserContact.java
rename to space-client/src/main/java/io/github/pgmarc/space/contracts/UserContact.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/BillingPeriodDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/BillingPeriodDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/BillingPeriodDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/BillingPeriodDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/ErrorDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/ErrorDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/ErrorDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/ErrorDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/JsonDeserializable.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/JsonDeserializable.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/JsonDeserializable.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/JsonDeserializable.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/ServicesDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/ServicesDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/ServicesDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/ServicesDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/SnapshotsDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/SnapshotsDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/SnapshotsDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/SnapshotsDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/SubscriptionDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/SubscriptionDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/SubscriptionDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/SubscriptionDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/UsageLevelDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/UsageLevelDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/UsageLevelDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/UsageLevelDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/deserializers/UserContactDeserializer.java b/space-client/src/main/java/io/github/pgmarc/space/deserializers/UserContactDeserializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/deserializers/UserContactDeserializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/deserializers/UserContactDeserializer.java
diff --git a/src/main/java/io/github/pgmarc/space/exceptions/SpaceApiError.java b/space-client/src/main/java/io/github/pgmarc/space/exceptions/SpaceApiError.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/exceptions/SpaceApiError.java
rename to space-client/src/main/java/io/github/pgmarc/space/exceptions/SpaceApiError.java
diff --git a/src/main/java/io/github/pgmarc/space/exceptions/SpaceApiException.java b/space-client/src/main/java/io/github/pgmarc/space/exceptions/SpaceApiException.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/exceptions/SpaceApiException.java
rename to space-client/src/main/java/io/github/pgmarc/space/exceptions/SpaceApiException.java
diff --git a/src/main/java/io/github/pgmarc/space/serializers/JsonSerializable.java b/space-client/src/main/java/io/github/pgmarc/space/serializers/JsonSerializable.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/serializers/JsonSerializable.java
rename to space-client/src/main/java/io/github/pgmarc/space/serializers/JsonSerializable.java
diff --git a/src/main/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializer.java b/space-client/src/main/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializer.java
diff --git a/src/main/java/io/github/pgmarc/space/serializers/SubscriptionUpdateRequestSerializer.java b/space-client/src/main/java/io/github/pgmarc/space/serializers/SubscriptionUpdateRequestSerializer.java
similarity index 100%
rename from src/main/java/io/github/pgmarc/space/serializers/SubscriptionUpdateRequestSerializer.java
rename to space-client/src/main/java/io/github/pgmarc/space/serializers/SubscriptionUpdateRequestSerializer.java
diff --git a/src/test/java/io/github/pgmarc/space/ContractsEndpointTest.java b/space-client/src/test/java/io/github/pgmarc/space/ContractsEndpointTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/ContractsEndpointTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/ContractsEndpointTest.java
diff --git a/src/test/java/io/github/pgmarc/space/SpaceClientTest.java b/space-client/src/test/java/io/github/pgmarc/space/SpaceClientTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/SpaceClientTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/SpaceClientTest.java
diff --git a/src/test/java/io/github/pgmarc/space/contracts/BillingPeriodTest.java b/space-client/src/test/java/io/github/pgmarc/space/contracts/BillingPeriodTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/contracts/BillingPeriodTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/contracts/BillingPeriodTest.java
diff --git a/src/test/java/io/github/pgmarc/space/contracts/ServiceTest.java b/space-client/src/test/java/io/github/pgmarc/space/contracts/ServiceTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/contracts/ServiceTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/contracts/ServiceTest.java
diff --git a/src/test/java/io/github/pgmarc/space/contracts/SubscriptionRequestTest.java b/space-client/src/test/java/io/github/pgmarc/space/contracts/SubscriptionRequestTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/contracts/SubscriptionRequestTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/contracts/SubscriptionRequestTest.java
diff --git a/src/test/java/io/github/pgmarc/space/contracts/UsageLevelTest.java b/space-client/src/test/java/io/github/pgmarc/space/contracts/UsageLevelTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/contracts/UsageLevelTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/contracts/UsageLevelTest.java
diff --git a/src/test/java/io/github/pgmarc/space/contracts/UserContactTest.java b/space-client/src/test/java/io/github/pgmarc/space/contracts/UserContactTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/contracts/UserContactTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/contracts/UserContactTest.java
diff --git a/src/test/java/io/github/pgmarc/space/deserializers/BillingPeriodSerializerTest.java b/space-client/src/test/java/io/github/pgmarc/space/deserializers/BillingPeriodSerializerTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/deserializers/BillingPeriodSerializerTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/deserializers/BillingPeriodSerializerTest.java
diff --git a/src/test/java/io/github/pgmarc/space/deserializers/SubscriptionSerializerTest.java b/space-client/src/test/java/io/github/pgmarc/space/deserializers/SubscriptionSerializerTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/deserializers/SubscriptionSerializerTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/deserializers/SubscriptionSerializerTest.java
diff --git a/src/test/java/io/github/pgmarc/space/deserializers/UserContactSerializerTest.java b/space-client/src/test/java/io/github/pgmarc/space/deserializers/UserContactSerializerTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/deserializers/UserContactSerializerTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/deserializers/UserContactSerializerTest.java
diff --git a/src/test/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializerTest.java b/space-client/src/test/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializerTest.java
similarity index 100%
rename from src/test/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializerTest.java
rename to space-client/src/test/java/io/github/pgmarc/space/serializers/SubscriptionRequestSerializerTest.java
diff --git a/src/test/resources/__files/addContracts-response.hbs b/space-client/src/test/resources/__files/addContracts-response.hbs
similarity index 100%
rename from src/test/resources/__files/addContracts-response.hbs
rename to space-client/src/test/resources/__files/addContracts-response.hbs
diff --git a/src/test/resources/__files/getContractById-response.json b/space-client/src/test/resources/__files/getContractById-response.json
similarity index 100%
rename from src/test/resources/__files/getContractById-response.json
rename to space-client/src/test/resources/__files/getContractById-response.json
diff --git a/src/test/resources/__files/subscription-request.json b/space-client/src/test/resources/__files/subscription-request.json
similarity index 100%
rename from src/test/resources/__files/subscription-request.json
rename to space-client/src/test/resources/__files/subscription-request.json