Skip to content

Sandbox Mode BETA ​

Sandbox mode allows you to test the API without affecting production data. Perfect for development and integration testing.

Overview ​

In sandbox mode:

  • ✅ Access real product data
  • ✅ Orders are simulated (no real orders created)
  • ✅ Dummy license keys are generated
  • ✅ All business rules are preserved
  • ✅ No charges or credit limit impact

Enabling Sandbox Mode ​

Add the X-Sandbox-Mode header to your requests:

bash
X-Sandbox-Mode: true

Example Request ​

bash
curl -X POST https://api.attivita.de/api/orders \
  -H "Authorization: Bearer YOUR_API_ACCESS_TOKEN" \
  -H "X-Sandbox-Mode: true" \
  -H "Content-Type: application/json" \
  -d '{
    "products": [
      {
        "productId": "507f1f77bcf86cd799439011",
        "amount": 2
      }
    ]
  }'
javascript
const response = await fetch('https://api.attivita.de/api/orders', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_ACCESS_TOKEN',
    'X-Sandbox-Mode': 'true',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    products: [
      { productId: "507f1f77bcf86cd799439011", amount: 2 }
    ]
  })
});

Sandbox Response ​

Sandbox responses include special indicators:

Response Headers ​

http
X-Sandbox-Mode: true
X-Sandbox-Notice: This request was processed in sandbox mode. No real orders were affected.

Response Body ​

json
{
  "sandboxNotice": "This is a sandbox order. No actual products were purchased, and the licenses are dummy values.",
  "customer": 7,
  "orderNumber": 1234567,
  "orderDate": "2023-07-01T12:00:00Z",
  "status": "sandbox-completed",
  "items": [
    {
      "product": "Microsoft Office 2021",
      "quantity": 2,
      "price": 89.99,
      "isReplacement": false,
      "licenses": [
        {
          "licenseKey": "SAND-BOX1-TEST-KEY1"
        },
        {
          "licenseKey": "SAND-BOX2-TEST-KEY2"
        }
      ],
      "productId": "507f1f77bcf86cd799439011"
    }
  ],
  "subTotal": 179.98,
  "discountTotal": 20.00,
  "grandTotal": 179.98,
  "paymentMethod": "N/A",
  "orderFrom": 2
}

Key Differences in Sandbox Mode ​

FeatureProductionSandbox
Order CreationReal ordersSimulated
License KeysReal licensesDummy values
Stock DeductionYesNo
Credit LimitEnforcedNot affected
Order HistoryPersistedNot saved
WebhooksTriggeredNot triggered

Testing Scenarios ​

1. Test Product Availability ​

bash
# This will validate stock without consuming it
curl -X POST https://api.attivita.de/api/orders \
  -H "X-Sandbox-Mode: true" \
  -d '{"products": [{"productId": "...", "amount": 999}]}'

2. Test Discount Calculations ​

bash
# Verify your customer discounts are applied correctly
curl -X POST https://api.attivita.de/api/orders \
  -H "X-Sandbox-Mode: true" \
  -d '{"products": [{"productId": "...", "amount": 1}]}'

3. Test Error Handling ​

bash
# Test with invalid product ID
curl -X POST https://api.attivita.de/api/orders \
  -H "X-Sandbox-Mode: true" \
  -d '{"products": [{"productId": "invalid-id", "amount": 1}]}'

Best Practices ​

Development Workflow

  1. Always use sandbox mode during development
  2. Test all edge cases (out of stock, invalid products, etc.)
  3. Verify discount calculations match expectations
  4. Switch to production only after thorough testing

Limitations

  • Sandbox orders are not persisted
  • Cannot test webhook deliveries
  • Random order numbers are generated
  • GET /orders endpoints don't return sandbox orders

Identifying Sandbox Responses ​

Always check for sandbox indicators:

javascript
// Check response headers
const isSandbox = response.headers.get('X-Sandbox-Mode') === 'true';

// Check response body
if (data.sandboxNotice) {
  console.log('This is a sandbox response');
}

// Check order status
if (data.status === 'sandbox-completed') {
  console.log('Sandbox order successful');
}

Next Steps ​

The usage of this API is at your own risk. Attivita GmbH is not responsible for any damages or losses.