Skip to content

Certificates API

The Certificates API handles pharmaceutical compliance certificates including Certificates of Analysis (CoA), Certificates of Conformity (CoC), GMP certificates, and supplier qualification documents.

{
"id": "cert_abc123def456",
"type": "coa",
"name": "CoA - Magnesium Stearate - Batch 2024-001",
"status": "valid",
"supplier_id": "ent_supplier_789",
"component_id": "ent_component_456",
"batch_number": "2024-001",
"issue_date": "2024-01-15",
"expiry_date": "2026-01-15",
"document": {
"file_id": "file_xyz789",
"filename": "coa_mag_stearate_2024001.pdf",
"mime_type": "application/pdf",
"size_bytes": 245678,
"checksum": "sha256:abc123..."
},
"extracted_data": {
"test_results": [
{
"parameter": "Assay",
"specification": "98.0 - 102.0%",
"result": "99.5%",
"status": "pass"
},
{
"parameter": "Heavy Metals",
"specification": "< 10 ppm",
"result": "< 5 ppm",
"status": "pass"
}
],
"manufacturing_date": "2024-01-10",
"manufacturer": "Acme Chemicals GmbH"
},
"validation": {
"validated_at": "2024-01-16T10:30:00Z",
"validated_by": "user_quality_123",
"validation_notes": "All specifications met"
},
"created_at": "2024-01-15T14:00:00Z",
"updated_at": "2024-01-16T10:30:00Z"
}
TypeDescription
coaCertificate of Analysis
cocCertificate of Conformity
gmpGMP Certificate
isoISO Certification
qualificationSupplier Qualification Document
auditAudit Report
StatusDescription
pendingAwaiting validation
validValidated and current
expiring_soonValid but expiring within 90 days
expiredPast expiry date
rejectedFailed validation
supersededReplaced by newer certificate

Upload a new certificate document.

POST /v1/certificates
Terminal window
curl -X POST "https://api.cohera.io/v1/certificates" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/coa_document.pdf" \
-F 'metadata={
"type": "coa",
"name": "CoA - Magnesium Stearate - Batch 2024-001",
"supplier_id": "ent_supplier_789",
"component_id": "ent_component_456",
"batch_number": "2024-001",
"issue_date": "2024-01-15",
"expiry_date": "2026-01-15"
}'
{
"data": {
"id": "cert_abc123def456",
"type": "coa",
"name": "CoA - Magnesium Stearate - Batch 2024-001",
"status": "pending",
"supplier_id": "ent_supplier_789",
"component_id": "ent_component_456",
"batch_number": "2024-001",
"issue_date": "2024-01-15",
"expiry_date": "2026-01-15",
"document": {
"file_id": "file_xyz789",
"filename": "coa_document.pdf",
"mime_type": "application/pdf",
"size_bytes": 245678
},
"created_at": "2024-01-15T14:00:00Z"
}
}

After upload, Cohera’s AI agent automatically extracts data from the certificate. You can also trigger extraction manually.

POST /v1/certificates/{certificate_id}/extract
Terminal window
curl -X POST "https://api.cohera.io/v1/certificates/cert_abc123/extract" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"data": {
"certificate_id": "cert_abc123",
"extraction_status": "complete",
"confidence_score": 0.95,
"extracted_data": {
"test_results": [
{
"parameter": "Assay",
"specification": "98.0 - 102.0%",
"result": "99.5%",
"status": "pass",
"confidence": 0.98
},
{
"parameter": "Heavy Metals",
"specification": "< 10 ppm",
"result": "< 5 ppm",
"status": "pass",
"confidence": 0.96
},
{
"parameter": "Loss on Drying",
"specification": "< 2.0%",
"result": "0.8%",
"status": "pass",
"confidence": 0.94
}
],
"batch_number": "2024-001",
"manufacturing_date": "2024-01-10",
"manufacturer": "Acme Chemicals GmbH",
"manufacturing_site": "Hamburg, Germany"
},
"extracted_at": "2024-01-15T14:05:00Z"
}
}

Validate a certificate and update its status.

POST /v1/certificates/{certificate_id}/validate
FieldTypeRequiredDescription
statusstringYesNew status (valid or rejected)
notesstringNoValidation notes
overridesobjectNoManual corrections to extracted data
Terminal window
curl -X POST "https://api.cohera.io/v1/certificates/cert_abc123/validate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "valid",
"notes": "All specifications met. Verified against component specification CS-2024-001.",
"overrides": {
"test_results": [
{
"parameter": "Assay",
"result": "99.6%"
}
]
}
}'

Retrieve certificates with filtering and pagination.

GET /v1/certificates
ParameterTypeDescription
typestringFilter by certificate type
statusstringFilter by status
supplier_idstringFilter by supplier
component_idstringFilter by component
batch_numberstringFilter by batch
expiring_beforedateCertificates expiring before date
expiring_within_daysintegerCertificates expiring within N days
Terminal window
curl -X GET "https://api.cohera.io/v1/certificates?expiring_within_days=90&status=valid" \
-H "Authorization: Bearer YOUR_API_KEY"

Retrieve a single certificate by ID.

GET /v1/certificates/{certificate_id}

Download the original certificate document.

GET /v1/certificates/{certificate_id}/document

Returns the binary file content with appropriate Content-Type and Content-Disposition headers.

Terminal window
curl -X GET "https://api.cohera.io/v1/certificates/cert_abc123/document" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o certificate.pdf
GET /v1/certificates/expiry-summary

Returns a summary of certificate expiry status across your organization.

{
"data": {
"total": 1250,
"by_status": {
"valid": 1100,
"expiring_soon": 85,
"expired": 45,
"pending": 20
},
"expiring_by_period": {
"30_days": 25,
"60_days": 45,
"90_days": 85
},
"by_type": {
"coa": {"total": 800, "expiring_soon": 50},
"coc": {"total": 300, "expiring_soon": 25},
"gmp": {"total": 100, "expiring_soon": 8},
"iso": {"total": 50, "expiring_soon": 2}
}
}
}

Configure automated notifications for expiring certificates.

POST /v1/certificates/expiry-alerts
{
"rules": [
{
"days_before_expiry": 90,
"notify": ["quality-team@company.com"],
"certificate_types": ["gmp", "iso"]
},
{
"days_before_expiry": 30,
"notify": ["quality-team@company.com", "procurement@company.com"],
"certificate_types": ["coa", "coc"]
}
]
}

View the complete history of a certificate including uploads, validations, and status changes.

GET /v1/certificates/{certificate_id}/history
{
"data": [
{
"action": "validated",
"timestamp": "2024-01-16T10:30:00Z",
"user": "user_quality_123",
"details": {
"status_from": "pending",
"status_to": "valid",
"notes": "All specifications met"
}
},
{
"action": "extracted",
"timestamp": "2024-01-15T14:05:00Z",
"user": "system",
"details": {
"extraction_confidence": 0.95,
"test_results_count": 8
}
},
{
"action": "uploaded",
"timestamp": "2024-01-15T14:00:00Z",
"user": "user_intake_456",
"details": {
"filename": "coa_document.pdf",
"file_size": 245678
}
}
]
}