Quick Start Guide
Building an ISV integration for UAE? Use the ISV UAE quickstart. It covers workspace defaults, company onboarding, automatic Source mapping, the complete payload, invoice submission, and terminal status.
Goal: Integrate the Complyance SDK and submit your first compliant e-invoice in under 10 minutes.
This guide provides a single, high-speed path to success for our production-ready SDKs: Java, PHP, and .NET.
1. Prerequisites
Before you write any code, ensure you have:
- Complyance API Key: Log in to the Developer Portal to generate your key.
- Target Environment:
- Sandbox: For testing (Recommended for now).
- Production: For live regulatory submissions.
- Language Runtime: Java 11+, PHP 8.1+, or .NET 6+.
2. Installation
Install the library using your standard package manager.
Java (Maven)
Add to your pom.xml:
<dependency>
<groupId>io.complyance</groupId>
<artifactId>unify-sdk</artifactId>
<version>3.0.9-beta</version>
</dependency>PHP (Composer)
composer require io.complyance/unify-sdk.NET (NuGet)
dotnet add package Complyance.SDK.dotNet --version 3.0.16-beta3. Your First API Call
Use the following "Happy Path" examples to push a sample invoice to the Sandbox environment.
Important: The
sourceName(e.g., "web-app") andsourceVersion(e.g., "1.0") serve as your unique application identity on our platform.
Java Implementation
import io.complyance.sdk.*;
import java.util.*;
public class ComplyanceQuickstart {
public static void main(String[] args) {
// 1. Setup Identity & Configuration
Source source = new Source("web-app", "1.0", SourceType.FIRST_PARTY);
SDKConfig config = new SDKConfig("YOUR_API_KEY", Environment.SANDBOX, Arrays.asList(source));
GETSUnifySDK.configure(config);
// 2. Prepare Sample Invoice Data
Map<String, Object> payload = Map.of(
"invoice_data", Map.of("document_number", "INV-001", "currency_code", "SAR"),
"seller_info", Map.of("seller_name", "Test Vendor"),
"buyer_info", Map.of("buyer_name", "Test Customer")
);
// 3. Submit for Processing
UnifyResponse response = GETSUnifySDK.pushToUnify(
"web-app", "1.0", LogicalDocType.TAX_INVOICE, Country.SA,
Operation.SINGLE, Mode.DOCUMENTS, Purpose.INVOICING, payload
);
System.out.println("Success! Submission ID: " + response.getData().getSubmission().getSubmissionId());
}
}PHP Implementation
<?php
require 'vendor/autoload.php';
use ComplyanceSDK\GETSUnifySDK;
use ComplyanceSDK\Models\{SDKConfig, Source};
use ComplyanceSDK\Enums\{SourceType, Environment, Purpose, LogicalDocType, Country};
// 1. Configure SDK Identity
$source = new Source("web-app", "1.0", SourceType::fromString(SourceType::FIRST_PARTY));
$config = new SDKConfig("YOUR_API_KEY", Environment::from(Environment::SANDBOX), [$source]);
GETSUnifySDK::configure($config);
// 2. Build Minimal Invoice
$payload = [
'invoice_data' => ['document_number' => 'INV-' . time(), 'currency_code' => 'SAR'],
'seller_info' => ['seller_name' => 'Test Vendor'],
'buyer_info' => ['buyer_name' => 'Test Customer']
];
// 3. Official Submission
$response = GETSUnifySDK::pushToUnify(
"web-app", "1.0",
LogicalDocType::from(LogicalDocType::TAX_INVOICE),
Country::from(Country::SA),
Purpose::from(Purpose::INVOICING),
$payload
);
echo "Success! Submission ID: " . $response->getData()->getSubmission()->getSubmissionId();.NET Implementation (C#)
using Complyance.SDK.dotNet;
// 1. Initialize Client
var client = new ComplyanceClient(new ComplyanceClientOptions {
ApiKey = "YOUR_API_KEY",
BaseUrl = "https://api.complyance.io"
});
// 2. Build Invoice Model
var invoice = new Invoice {
DocumentNumber = "INV-001",
Currency = "SAR",
Seller = new Party { Name = "Test Vendor" },
Buyer = new Party { Name = "Test Customer" }
};
// 3. Submit
var result = await client.SubmitInvoiceAsync(invoice, "SA");
Console.WriteLine($"Success! Submission ID: {result.InvoiceId}");4. Verify Success
A successful submission will return a status: SUCCESS. You can view the full details of the transformation and legal submission in two places:
- API Response: You will receive a unique
submissionId(e.g.,gets_sub_12345). - Portal Activity: Log in to the Complyance Dashboard to see your document's status, QR code (for KSA), and transformation logs.
5. Troubleshooting Common Issues
| Status Code | Error Message | Solution |
|---|---|---|
| 401 | Unauthorized | Your API key is invalid or for the wrong environment. Ensure you use Sandbox keys only for Environment.SANDBOX. |
| 422 | Source Not Bound | Your sourceName (e.g., "web-app") is not yet mapped inside the portal. See the Template Mapping guide. |
| 400 | Required Field Missing | Check the message field for validation errors. This usually means a mandatory field (e.g., vat_number) is missing from your payload. |
| ENV_MISMATCH | Key Environment Error | Self-Correction: Check that your code Environment enum matches your API Key's origin. A Sandbox key will fail if the SDK is set to PRODUCTION. |
| 429 | Too Many Requests | You have exceeded the rate limit for your tier. Implement exponential backoff and check your plan limits in the developer portal. |
Next Steps
- Detailed Java SDK - Full configuration and test runner details.
- Detailed PHP SDK - Advanced PSR-7 and Laravel integrations.
- Detailed .NET SDK - Strong typing and async workflow details.
- GETS Schema Reference - Deep dive into our universal e-invoice format.