Sandbox Environment
The sandbox environment provides an isolated testing platform for API integration development. This non-production environment allows you to validate your implementation, test edge cases, and verify functionality without impacting production data or workflows. Sandbox data is automatically purged after 30 days.
Environment URLs
| Environment | Base URL | Purpose |
|---|---|---|
| Production | https://api.covosign.com | Live signatures |
| Sandbox | https://api-sandbox.covosign.com | Testing & Dev |
Usage Limits & Retention
Sandbox Constraints
- 30-day Data Retention (auto-cleanup)
- 500 test signature requests per sandbox workspace
- 5MB File Size Limit
- Rate Limit: 1,000 req/min
- Exact feature parity with production
Production Specs
- Permanent Retention
- Unlimited requests (plan based)
- Rate Limit: 100 req/min (Standard)
Testing Strategy
- Node.js
- Python
- Java
- Bash
const axios = require('axios');
// Initialize Sandbox Client
const sandboxClient = axios.create({
baseURL: 'https://api-sandbox.covosign.com/api/v1/enterprise',
headers: { 'X-API-Key': 'csk_sandbox_...' }
});
// Create Test Request
async function createTestRequest() {
const response = await sandboxClient.post('/signature-requests', {
title: 'Test Agreement',
recipients: [{ email: 'test@example.com', name: 'Test User', role: 'SIGNER', order: 1 }],
delivery_mode: 'email'
});
return response.data;
}
import requests
# Initialize Sandbox Client
class SandboxClient:
def __init__(self, api_key):
self.base_url = 'https://api-sandbox.covosign.com/api/v1/enterprise'
self.headers = {'X-API-Key': api_key}
def create_signature_request(self, title, recipients):
url = f"{self.base_url}/signature-requests"
payload = {
"title": title,
"recipients": recipients,
"delivery_mode": "email"
}
response = requests.post(url, headers=self.headers, json=payload)
return response.json()
# Usage
client = SandboxClient('csk_sandbox_...')
result = client.create_signature_request(
'Test Agreement',
[{'email': 'test@example.com', 'name': 'Test User', 'role': 'SIGNER', 'order': 1}]
)
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import com.fasterxml.jackson.databind.ObjectMapper;
// Initialize Sandbox Client
public class SandboxClient {
private final String baseUrl = "https://api-sandbox.covosign.com/api/v1/enterprise";
private final RestTemplate restTemplate = new RestTemplate();
private final ObjectMapper objectMapper = new ObjectMapper();
public SandboxClient(String apiKey) {
this.apiKey = apiKey;
}
public String createSignatureRequest(String title, List<Map<String, Object>> recipients) throws Exception {
String url = baseUrl + "/signature-requests";
HttpHeaders headers = new HttpHeaders();
headers.set("X-API-Key", apiKey);
headers.set("Content-Type", "application/json");
Map<String, Object> payload = new HashMap<>();
payload.put("title", title);
payload.put("recipients", recipients);
payload.put("delivery_mode", "email");
HttpEntity<String> entity = new HttpEntity<>(objectMapper.writeValueAsString(payload), headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
return response.getBody();
}
}
// Usage
SandboxClient client = new SandboxClient("csk_sandbox_...");
List<Map<String, Object>> recipients = Arrays.asList(
Map.of("email", "test@example.com", "name", "Test User", "role", "SIGNER", "order", 1)
);
String result = client.createSignatureRequest("Test Agreement", recipients);
# Create test signature request
curl -X POST "https://api-sandbox.covosign.com/api/v1/enterprise/signature-requests" \
-H "X-API-Key: csk_sandbox_..." \
-H "Content-Type: application/json" \
-d '{
"title": "Test Agreement",
"recipients": [
{
"email": "test@example.com",
"name": "Test User",
"role": "SIGNER",
"order": 1
}
],
"delivery_mode": "email"
}'
Migrating to Production
Swap the base URL to https://api.covosign.com and use production API keys. Keep the same payloads and workflows.