Declarations & certificates
Called with brand account keys. A key only sees its own account's data. Every example uses the same sample brand, order and item, so you can follow one item from call to call.
http://62.169.23.239:8001/api/v1Auth Bearer token4 endpointsEndpoints
- GET/brands/production-orders/{order_id}/declarationsRetrieve factory declarations
- GET/brands/production-orders/{order_id}/certificatesList certificates
- POST/brands/production-orders/{order_id}/certificatesAttach a certificate
- DELETE/brands/production-orders/{order_id}/certificates/{certificate_id}Remove a certificate
Retrieve factory declarations#
Requires scope orders:read
Material composition and per-size weights, sustainability, repairability, origin & compliance, and every certificate — declared by the factory for this order before production started. missing lists what is still to be declared; locked is true once production started.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- order_display_idstring | null
Order number formatted for display (#PO-YYYY-XXXX).
- product_idstring | null
Skannit's id for the product.
- factory_idstring | null
The factory making the order. You get it from your factory partnerships in the portal.
- lockedboolean
Locked once production starts; certificates may still be added as amendments.
Defaults to
false - locked_attimestamp | null
- missingarray of strings
Still to declare before production can start, e.g. ["material_weights"].
- material_compositionarray of objects
+Show 3 child attributesHide child attributes
- material_namestringRequired
- percentagenumberRequired
- garment_partstring | null
- element_weightsarray of objects
+Show 3 child attributesHide child attributes
- garment_partstring | null
- sizestringRequired
Size name, exactly as on the product's variants.
- gramsnumberRequired
- material_declared_attimestamp | null
- carbon_co2string | null
- water_used_lstring | null
- circular_scoreinteger | null
- end_of_life_instructionsstring | null
- sustainability_declared_attimestamp | null
- repair_difficultystring | null
- spare_parts_includedarray of strings
- repair_instructions_urlstring | null
- repairability_declared_attimestamp | null
- country_of_originstring | null
- main_supplierstring | null
- compliance_standardsobject
+Show 3 child attributesHide child attributes
- eu_dpp_readyboolean
Defaults to
false - esg_certifiedboolean
Defaults to
false - reach_compliantboolean
Defaults to
false
- origin_declared_attimestamp | null
- certificatesarray of objects
+Show 14 child attributesHide child attributes
- certificate_idstringRequired
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- cert_typestringRequiredOne of
originfabricdyefactory_auditother - file_urlstringRequired
- file_namestring | null
- content_typestring | null
- certificate_numberstring | null
- issuerstring | null
- valid_untildate | null
- expiredboolean
Defaults to
false - is_amendmentboolean
Added after production started — always carries a note saying why.
Defaults to
false - notestring | null
- uploaded_by_rolestringRequiredOne of
factorybrand - created_attimestampRequired
When the object was created (ISO 8601, UTC).
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/declarations \
-H "Authorization: Bearer $SKANNIT_TOKEN"{
"order_id": "ord_8c2f4e1a9b7d3c60",
"order_display_id": "#PO-2026-7F3A",
"product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
"factory_id": "0a2a5d14-a4a4-5b01-be71-b6999803bd70",
"locked": false,
"locked_at": null,
"missing": [
"care_label"
],
"material_composition": [
{
"material_name": "Organic cotton",
"percentage": 72.5,
"garment_part": "body"
}
],
"element_weights": [
{
"garment_part": "body",
"size": "M",
"grams": 1
}
],
"material_declared_at": null,
"carbon_co2": 3.2,
"water_used_l": 2700,
"circular_score": 72,
"end_of_life_instructions": "Return to any Northwind store for recycling",
"sustainability_declared_at": null,
"repair_difficulty": "easy",
"spare_parts_included": [
"buttons"
],
"repair_instructions_url": "https://files.skannit.example/repair_instructions.png",
"repairability_declared_at": null,
"country_of_origin": "PT",
"main_supplier": "Tecidos do Norte",
"compliance_standards": {
"eu_dpp_ready": true,
"esg_certified": true,
"reach_compliant": true
},
"origin_declared_at": null,
"certificates": [
{
"certificate_id": "8adb1935-cf92-52d2-ba1a-5e36cfce41e0",
"order_id": "ord_8c2f4e1a9b7d3c60",
"cert_type": "origin",
"file_url": "https://files.skannit.example/file.png",
"file_name": "certificate.pdf",
"content_type": "application/pdf",
"certificate_number": "GOTS-2026-11842",
"issuer": "Control Union",
"valid_until": "2026-11-20",
"expired": false,
"is_amendment": false,
"note": "Corner of box dented",
"uploaded_by_role": "factory",
"created_at": "2026-10-09T09:30:00Z"
}
]
}List certificates#
Requires scope orders:read
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Returns
HTTP 200- certificate_idstringRequired
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- cert_typestringRequiredOne of
originfabricdyefactory_auditother - file_urlstringRequired
- file_namestring | null
- content_typestring | null
- certificate_numberstring | null
- issuerstring | null
- valid_untildate | null
- expiredboolean
Defaults to
false - is_amendmentboolean
Added after production started — always carries a note saying why.
Defaults to
false - notestring | null
- uploaded_by_rolestringRequiredOne of
factorybrand - created_attimestampRequired
When the object was created (ISO 8601, UTC).
curl http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/certificates \
-H "Authorization: Bearer $SKANNIT_TOKEN"[
{
"certificate_id": "8adb1935-cf92-52d2-ba1a-5e36cfce41e0",
"order_id": "ord_8c2f4e1a9b7d3c60",
"cert_type": "origin",
"file_url": "https://files.skannit.example/file.png",
"file_name": "certificate.pdf",
"content_type": "application/pdf",
"certificate_number": "GOTS-2026-11842",
"issuer": "Control Union",
"valid_until": "2026-11-20",
"expired": false,
"is_amendment": false,
"note": "Corner of box dented",
"uploaded_by_role": "factory",
"created_at": "2026-10-09T09:30:00Z"
}
]Attach a certificate#
Requires scope orders:write
multipart/form-data. Marked as brand-supplied. After production has started it is recorded as an amendment, and note is required.
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
Request body
multipart/form-data- cert_typestring | null
origin | fabric | dye | factory_audit | other
- certificate_numberstring | null
- issuerstring | null
- valid_untilstring | null
YYYY-MM-DD
- notestring | null
- source_certificate_idstring | null
Reuse a certificate from one of your earlier orders instead of uploading
- filestring | null
PDF, Word document or image
Returns
HTTP 201- certificate_idstringRequired
- order_idstringRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- cert_typestringRequiredOne of
originfabricdyefactory_auditother - file_urlstringRequired
- file_namestring | null
- content_typestring | null
- certificate_numberstring | null
- issuerstring | null
- valid_untildate | null
- expiredboolean
Defaults to
false - is_amendmentboolean
Added after production started — always carries a note saying why.
Defaults to
false - notestring | null
- uploaded_by_rolestringRequiredOne of
factorybrand - created_attimestampRequired
When the object was created (ISO 8601, UTC).
curl -X POST http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/certificates \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-F cert_type=origin \
-F certificate_number=GOTS-2026-11842 \
-F file=@certificate.pdf{
"certificate_id": "8adb1935-cf92-52d2-ba1a-5e36cfce41e0",
"order_id": "ord_8c2f4e1a9b7d3c60",
"cert_type": "origin",
"file_url": "https://files.skannit.example/file.png",
"file_name": "certificate.pdf",
"content_type": "application/pdf",
"certificate_number": "GOTS-2026-11842",
"issuer": "Control Union",
"valid_until": "2026-11-20",
"expired": false,
"is_amendment": false,
"note": "Corner of box dented",
"uploaded_by_role": "factory",
"created_at": "2026-10-09T09:30:00Z"
}Remove a certificate#
Requires scope orders:write
Parameters
- order_idstringpathRequired
Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.
- certificate_idstringpathRequired
Returns
HTTP 204No body.
curl -X DELETE http://62.169.23.239:8001/api/v1/brands/production-orders/ord_8c2f4e1a9b7d3c60/certificates/8adb1935-cf92-52d2-ba1a-5e36cfce41e0 \
-H "Authorization: Bearer $SKANNIT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"// 204 — no body