Upload to Test API
Upload files to test records in the Ciphrix platform.
Endpoint
POST /api/v3/upload/test
Full URL
Beta Environment:
https://global.api.beta.ciphrix.app/api/v3/upload/test
Production Environment:
{provided-url}/api/v3/upload/test
Authentication
Requires Bearer token authentication:
Authorization: Bearer <YOUR_API_KEY>
Request
Headers
- Content-Type:
multipart/form-data - Authorization:
Bearer <YOUR_API_KEY>
Request Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
test_code | string | Yes | Test code identifier. This value is available in the platform on the evidence page. |
files | array | Yes | Files to attach. Multiple files can be uploaded in a single request. |
Test Code Format
Test codes follow the format: CPX-EVC-{number}
Example: CPX-EVC-0133
You can find the test code in the Ciphrix platform on the evidence details page.
Files Format
Files should be provided as multipart form data with the following format:
files=@/path/to/file.pdf;type=application/pdf
Multiple files can be uploaded by repeating the files parameter.
Response
Success Response (200 OK)
{
"status": 200,
"message": "Files attached successfully",
"data": {
"no_of_files_uploaded": 2
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
status | integer | HTTP status code |
message | string | Success or error message |
data | object | Optional - contains upload data |
data.no_of_files_uploaded | integer | Count of successfully uploaded files |
Error Response (400 Bad Request)
{
"status": 400,
"message": "Failed to upload files to test"
}
Common HTTP Status Codes
200- OK - Files uploaded successfully400- Bad Request - Invalid request parameters (missing test_code, invalid files)401- Unauthorized - Missing or invalid API key404- Not Found - Test code not found
Request Examples
cURL Example
curl -k -v -X POST \
'https://global.api.beta.ciphrix.app/api/v3/upload/test' \
-H 'Authorization: Bearer cpx_beta_ABCDEFGHJKILKEY' \
-F 'test_code=CPX-EVC-0147' \
-F 'files=@/Users/my-laptop-user/my-folder/my-document-1.pdf;type=application/pdf' \
-F 'files=@/Users/my-laptop-user/my-folder/my-document-2.pdf;type=application/pdf'
JavaScript (Node.js) Example
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
const form = new FormData();
form.append('test_code', 'CPX-EVC-0147');
form.append('files', fs.createReadStream('/path/to/document-1.pdf'));
form.append('files', fs.createReadStream('/path/to/document-2.pdf'));
axios.post('https://global.api.beta.ciphrix.app/api/v3/upload/test', form, {
headers: {
...form.getHeaders(),
'Authorization': 'Bearer cpx_beta_ABCDEFGHJKILKEY'
}
})
.then(response => {
console.log('Success:', response.data);
console.log('Files uploaded:', response.data.data.no_of_files_uploaded);
})
.catch(error => {
console.error('Error:', error.response?.data || error.message);
});
Python Example
import requests
url = "https://global.api.beta.ciphrix.app/api/v3/upload/test"
headers = {
"Authorization": "Bearer cpx_beta_ABCDEFGHJKILKEY"
}
data = {
"test_code": "CPX-EVC-0147"
}
files = [
("files", open("/path/to/document-1.pdf", "rb")),
("files", open("/path/to/document-2.pdf", "rb"))
]
response = requests.post(url, headers=headers, data=data, files=files)
print("Status:", response.status_code)
print("Response:", response.json())
if response.status_code == 200:
print("Files uploaded:", response.json()["data"]["no_of_files_uploaded"])
Use Cases
Automated Test Evidence Upload
Automatically upload test results and documentation:
async function uploadTestResults(testCode, filePaths) {
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
const form = new FormData();
form.append('test_code', testCode);
filePaths.forEach(filePath => {
form.append('files', fs.createReadStream(filePath));
});
try {
const response = await axios.post(
'https://global.api.beta.ciphrix.app/api/v3/upload/test',
form,
{
headers: {
...form.getHeaders(),
'Authorization': `Bearer ${process.env.CIPHRIX_API_KEY}`
}
}
);
console.log(`Successfully uploaded ${response.data.data.no_of_files_uploaded} files`);
return response.data;
} catch (error) {
console.error('Upload failed:', error.response?.data || error.message);
throw error;
}
}
// Usage
uploadTestResults('CPX-EVC-0147', [
'./test-results/penetration-test.pdf',
'./test-results/vulnerability-scan.pdf'
]);
CI/CD Integration
Upload test results automatically from your CI/CD pipeline:
import os
import requests
import glob
def upload_test_artifacts(test_code, artifacts_dir):
"""
Upload all test artifacts from CI/CD to Ciphrix
"""
url = "https://global.api.beta.ciphrix.app/api/v3/upload/test"
headers = {"Authorization": f"Bearer {os.getenv('CIPHRIX_API_KEY')}"}
# Find all PDF files in artifacts directory
pdf_files = glob.glob(f"{artifacts_dir}/*.pdf")
if not pdf_files:
print("No test artifacts found")
return None
data = {"test_code": test_code}
files = [("files", open(path, "rb")) for path in pdf_files]
try:
response = requests.post(url, headers=headers, data=data, files=files)
response.raise_for_status()
result = response.json()
print(f"Uploaded {result['data']['no_of_files_uploaded']} test artifacts")
return result
except requests.exceptions.RequestException as e:
print(f"Upload failed: {e}")
raise
finally:
# Close file handles
for _, file_handle in files:
file_handle.close()
# Usage in CI/CD (e.g., GitHub Actions, Jenkins)
if __name__ == "__main__":
test_code = os.getenv("TEST_CODE", "CPX-EVC-0147")
artifacts_dir = os.getenv("ARTIFACTS_DIR", "./test-artifacts")
upload_test_artifacts(test_code, artifacts_dir)
Batch Upload Multiple Tests
import os
import requests
def batch_upload_tests(test_files_map):
"""
Upload files to multiple test codes
test_files_map: dict with test_code as key and list of file paths as value
"""
url = "https://global.api.beta.ciphrix.app/api/v3/upload/test"
headers = {"Authorization": f"Bearer {os.getenv('CIPHRIX_API_KEY')}"}
results = []
for test_code, file_paths in test_files_map.items():
data = {"test_code": test_code}
files = [("files", open(path, "rb")) for path in file_paths]
response = requests.post(url, headers=headers, data=data, files=files)
results.append({
"test_code": test_code,
"status": response.status_code,
"files_uploaded": response.json().get("data", {}).get("no_of_files_uploaded", 0)
})
# Close file handles
for _, file_handle in files:
file_handle.close()
return results
# Usage
test_map = {
"CPX-EVC-0133": ["./tests/security-test.pdf", "./tests/audit-report.pdf"],
"CPX-EVC-0147": ["./tests/penetration-test.pdf"]
}
results = batch_upload_tests(test_map)
for result in results:
print(f"{result['test_code']}: {result['files_uploaded']} files uploaded")
Troubleshooting
Test Code Not Found
Issue: Receiving 404 error for test code
- Verify the test code exists in your Ciphrix account
- Check that the format is correct (CPX-EVC-XXXX)
- Ensure you're using the correct environment (Beta vs Production)
File Upload Failed
Issue: Files not uploading or upload fails
- Verify file paths are correct and files exist
- Check file permissions (files must be readable)
- Ensure files are not empty or corrupted
- Verify the content-type is set correctly
Authentication Failed
Issue: 401 Unauthorized error
- Verify your API key is correct
- Ensure the Authorization header format is correct
- Check that the API key hasn't been revoked
Support
Need help with the Upload to Test API?
- Email: support@ciphrix.com
- Check the API Setup Guide for authentication help
- Review the API Reference for general API information