Skip to main content

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

ParameterTypeRequiredDescription
test_codestringYesTest code identifier. This value is available in the platform on the evidence page.
filesarrayYesFiles 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

FieldTypeDescription
statusintegerHTTP status code
messagestringSuccess or error message
dataobjectOptional - contains upload data
data.no_of_files_uploadedintegerCount 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 successfully
  • 400 - Bad Request - Invalid request parameters (missing test_code, invalid files)
  • 401 - Unauthorized - Missing or invalid API key
  • 404 - 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?