Signup URL Redirect
Configure custom redirect URLs for marketplace customer onboarding.
Overview
When a customer purchases your product through AWS or Azure Marketplace, they are redirected to your application for account setup and fulfillment. The Signup URL Redirect feature allows you to configure where customers land after accepting your marketplace offer.
This is critical for:
- Customer onboarding experience
- Account provisioning
- License activation
- Access setup
How It Works
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Marketplace │ │ Automatum │ │ Your │
│ Purchase │────▶│ Redirect │────▶│ Signup │
│ Complete │ │ Handler │ │ Page │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ Customer │ Add tokens │ Create
│ clicks link │ & metadata │ account
└───────────────────────┴───────────────────────┘- Customer completes marketplace purchase
- Marketplace redirects to Automatum fulfillment URL
- Automatum validates the request
- Automatum redirects to your signup URL with tokens
- Your application completes account setup
Configuration
AWS Marketplace
Step 1: Set Fulfillment URL in AWS
When configuring your SaaS product in AWS Marketplace:
- Go to AWS Marketplace Management Portal
- Select your product
- Navigate to SaaS Fulfillment settings
- Set Fulfillment URL to:
https://integrations.api.automatum.io/v1/fulfillment/aws/{your-listing}
Step 2: Configure Redirect in Automatum
- Go to Listings > Select your product
- Navigate to Fulfillment tab
- Configure:
- Signup URL: Your application's signup page
- Success URL: Where to redirect after successful signup
- Cancel URL: Where to redirect if signup is cancelled
Settings:
json
{
"signupUrl": "https://app.yourcompany.com/signup",
"successUrl": "https://app.yourcompany.com/welcome",
"cancelUrl": "https://app.yourcompany.com/signup/cancelled",
"includeToken": true,
"includeCustomerInfo": true
}Azure Marketplace
Step 1: Set Landing Page URL in Partner Center
When configuring your SaaS offer in Partner Center:
- Go to Partner Center > Commercial Marketplace
- Select your offer
- Navigate to Technical configuration
- Set Landing page URL to:
https://api.automatum.io/v1/fulfillment/azure/{your-offer-id}
Step 2: Configure Webhook URL
Set the Connection webhook URL:
https://api.automatum.io/v1/webhook/azure/{your-offer-id}Step 3: Configure Redirect in Automatum
Same as AWS - configure in Listings > Fulfillment tab.
Redirect Parameters
Tokens Passed to Your Signup URL
When redirecting to your signup URL, Automatum includes:
Query Parameters:
| Parameter | Description | Example |
|---|---|---|
token | Fulfillment token for validation | eyJhbGciOiJI... |
vendor | Marketplace vendor | aws or azure |
productId | Your Automatum listing ID | listing_123 |
customerId | Automatum customer ID | cust_456 |
entitlementId | Entitlement reference | ent_789 |
AWS-Specific:
| Parameter | Description |
|---|---|
awsAccountId | Customer's AWS Account ID |
productCode | AWS product code |
offerId | Private offer ID (if applicable) |
Azure-Specific:
| Parameter | Description |
|---|---|
subscriptionId | Azure subscription ID |
planId | Purchased plan ID |
quantity | Number of seats/units |
tenantId | Azure tenant ID |
Example URL:
https://app.yourcompany.com/signup?token=eyJhbGc...&vendor=aws&productId=listing_123&customerId=cust_456&awsAccountId=123456789012Token Validation
Verify Token on Your Server
Always validate the token before provisioning:
javascript
// Node.js example
const jwt = require('jsonwebtoken');
app.get('/signup', async (req, res) => {
const { token } = req.query;
try {
// Validate token with Automatum
const response = await fetch('https://api.automatum.io/v1/fulfillment/validate', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.AUTOMATUM_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ token })
});
const data = await response.json();
if (data.valid) {
// Token is valid, proceed with signup
const { customerId, entitlementId, vendor, productId } = data.payload;
// Create account, provision resources, etc.
await createCustomerAccount(data.payload);
// Redirect to success page
res.redirect('/welcome');
} else {
// Invalid token
res.redirect('/signup/error?reason=invalid_token');
}
} catch (error) {
console.error('Token validation failed:', error);
res.redirect('/signup/error?reason=validation_failed');
}
});Token Payload
Decoded token contains:
json
{
"iss": "automatum",
"sub": "fulfillment",
"iat": 1705408800,
"exp": 1705412400,
"data": {
"vendor": "aws",
"customerId": "cust_456",
"listingId": "listing_123",
"entitlementId": "ent_789",
"awsAccountId": "123456789012",
"productCode": "abc123xyz",
"offerId": "offer_001"
}
}Fulfillment Flow
AWS SaaS Fulfillment
1. Customer subscribes on AWS Marketplace
2. AWS redirects to Automatum fulfillment URL
3. Automatum receives AWS token
4. Automatum resolves customer & creates entitlement
5. Automatum redirects to your signup URL with token
6. Your app validates token with Automatum API
7. Your app provisions customer account
8. Your app calls Automatum to confirm fulfillment
9. Automatum notifies AWS of successful fulfillmentConfirm Fulfillment:
bash
POST /api/fulfillment/confirm
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"token": "eyJhbGciOiJI...",
"fulfilled": true,
"accountId": "your-internal-account-id"
}Azure SaaS Fulfillment
1. Customer subscribes on Azure Marketplace
2. Azure redirects to Automatum landing page URL
3. Automatum receives Azure marketplace token
4. Automatum resolves subscription details
5. Automatum redirects to your signup URL with token
6. Your app validates token with Automatum API
7. Your app provisions customer account
8. Your app calls Automatum to activate subscription
9. Automatum notifies Azure of subscription activationActivate Subscription:
bash
POST /api/fulfillment/azure/activate
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"token": "eyJhbGciOiJI...",
"subscriptionId": "azure-subscription-id",
"planId": "premium",
"quantity": 10
}Customization Options
Custom Parameters
Add custom parameters to the redirect URL:
- Go to Listings > Fulfillment
- Under Custom Parameters, add:
json
{
"customParams": {
"source": "marketplace",
"campaign": "launch2026",
"tier": "enterprise"
}
}These will be appended to your signup URL.
Conditional Redirects
Route customers based on conditions:
json
{
"redirectRules": [
{
"condition": {
"field": "planId",
"operator": "equals",
"value": "enterprise"
},
"url": "https://app.yourcompany.com/signup/enterprise"
},
{
"condition": {
"field": "vendor",
"operator": "equals",
"value": "azure"
},
"url": "https://app.yourcompany.com/signup/azure"
},
{
"default": true,
"url": "https://app.yourcompany.com/signup"
}
]
}Branding
Customize the intermediate loading page:
- Go to Settings > Branding
- Upload your logo
- Set brand colors
- Customize loading message
Testing
Test Mode
Test the fulfillment flow without live marketplace purchases:
- Go to Listings > Select product
- Click Test Fulfillment
- Choose test scenario:
- New subscription
- Private offer acceptance
- Plan change
- Generate test URL
- Walk through the flow
Test URLs
# AWS test fulfillment
https://api.automatum.io/v1/fulfillment/aws/test/{product-code}?test=true
# Azure test fulfillment
https://api.automatum.io/v1/fulfillment/azure/test/{offer-id}?test=trueSandbox Environment
Use sandbox for development:
- AWS Marketplace sandbox
- Azure Partner Center sandbox
- Test accounts with fake billing
Error Handling
Common Errors
Invalid Token
- Token expired (valid for 1 hour)
- Token already used
- Token tampered with
Fulfillment Failed
- Customer entitlement not found
- Product not active
- Marketplace sync issue
Redirect Failed
- Signup URL not configured
- URL not accessible
- SSL certificate issue
Error Redirect
Configure error handling:
json
{
"errorUrl": "https://app.yourcompany.com/signup/error",
"errorParams": {
"includeErrorCode": true,
"includeErrorMessage": true
}
}Error URL will receive:
https://app.yourcompany.com/signup/error?code=INVALID_TOKEN&message=Token%20has%20expiredWebhook Notifications
Fulfillment Events
Receive webhooks for fulfillment events:
| Event | Description |
|---|---|
fulfillment.started | Customer landed on fulfillment URL |
fulfillment.validated | Token validated successfully |
fulfillment.redirected | Customer redirected to signup URL |
fulfillment.completed | Fulfillment confirmed |
fulfillment.failed | Fulfillment failed |
Webhook Payload
json
{
"event": "fulfillment.completed",
"timestamp": "2026-01-16T10:30:00Z",
"data": {
"customerId": "cust_456",
"listingId": "listing_123",
"entitlementId": "ent_789",
"vendor": "aws",
"accountId": "your-internal-account-id",
"fulfilledAt": "2026-01-16T10:30:00Z"
}
}API Reference
Validate Fulfillment Token
bash
POST /api/fulfillment/validate
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"token": "eyJhbGciOiJI..."
}Confirm Fulfillment
bash
POST /api/fulfillment/confirm
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"token": "eyJhbGciOiJI...",
"fulfilled": true,
"accountId": "your-internal-id",
"metadata": {
"plan": "enterprise",
"seats": 50
}
}Get Fulfillment Status
bash
GET /api/fulfillment/status?entitlementId=ent_789
Authorization: Bearer YOUR_API_KEYBest Practices
- Always validate tokens - Never trust client-side data
- Handle errors gracefully - Provide clear error messages
- Set up monitoring - Alert on fulfillment failures
- Test thoroughly - Use sandbox environments
- Log everything - Maintain audit trail
- Quick response - Complete fulfillment promptly
Troubleshooting
Customer Not Redirected
- Verify fulfillment URL in marketplace
- Check signup URL configuration
- Review Automatum fulfillment logs
- Test with manual URL
Token Validation Fails
- Check token hasn't expired (1 hour)
- Verify API key is correct
- Ensure token hasn't been used
- Check for URL encoding issues
Subscription Not Activating
- Confirm fulfillment was called
- Check marketplace sync status
- Review entitlement status
- Contact support if persistent
Next Steps
Need Help?
Contact support@automatum.io for fulfillment assistance.