Declarations & certificates

Called with factory 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.

Base URL http://62.169.23.239:8001/api/v1Auth Bearer token8 endpoints

Remove a certificate you uploaded, before production starts#

DELETE/factory/production-orders/{order_id}/certificates/{certificate_id}

Requires scope declarations: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 204

No body.

DELETE /factory/production-orders/{order_id}/certificates/{certificate_id}
curl
curl -X DELETE http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/certificates/8adb1935-cf92-52d2-ba1a-5e36cfce41e0 \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
204Response
json
// 204 — no body

Certificates attached to this order#

GET/factory/production-orders/{order_id}/certificates

Requires scope factory_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_typestringRequired
    One oforiginfabricdyefactory_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_rolestringRequired
    One offactorybrand
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

GET /factory/production-orders/{order_id}/certificates
curl
curl http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/certificates \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
[
  {
    "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"
  }
]

What has been declared for this order, plus a pre-fill from your last order of the product#

GET/factory/production-orders/{order_id}/declarations

Requires scope factory_orders:read

current is this order's own declarations and certificates — the only thing start-production checks. prefill is what you declared on your most recent other order of the same product: copy what still holds and declare it again with the four POST .../{type}-declaration endpoints.

Parameters

  • order_idstringpathRequired

    Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

Returns

HTTP 200
  • currentobjectRequired

    Everything declared for one production order.

    +Show 24 child attributes
    • 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 attributes
      • material_namestringRequired
      • percentagenumberRequired
      • garment_partstring | null
    • element_weightsarray of objects
      +Show 3 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 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 attributes
      • certificate_idstringRequired
      • order_idstringRequired

        Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

      • cert_typestringRequired
        One oforiginfabricdyefactory_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_rolestringRequired
        One offactorybrand
      • created_attimestampRequired

        When the object was created (ISO 8601, UTC).

  • prefillobject | null

    Everything declared for one production order.

    +Show 24 child attributes
    • 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 attributes
      • material_namestringRequired
      • percentagenumberRequired
      • garment_partstring | null
    • element_weightsarray of objects
      +Show 3 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 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 attributes
      • certificate_idstringRequired
      • order_idstringRequired

        Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

      • cert_typestringRequired
        One oforiginfabricdyefactory_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_rolestringRequired
        One offactorybrand
      • created_attimestampRequired

        When the object was created (ISO 8601, UTC).

GET /factory/production-orders/{order_id}/declarations
curl
curl http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/declarations \
  -H "Authorization: Bearer $SKANNIT_TOKEN"
200Response
json
{
  "current": {
    "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"
      }
    ]
  },
  "prefill": {
    "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"
      }
    ]
  }
}

Attach a certificate (origin, fabric, dye, factory audit) to this order#

POST/factory/production-orders/{order_id}/certificates

Requires scope declarations:write

multipart/form-data. Send file, or source_certificate_id to reuse an unexpired certificate from an earlier order. After production has started a certificate can still be added 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_typestringRequired
    One oforiginfabricdyefactory_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_rolestringRequired
    One offactorybrand
  • created_attimestampRequired

    When the object was created (ISO 8601, UTC).

POST /factory/production-orders/{order_id}/certificates
curl
curl -X POST http://62.169.23.239:8001/api/v1/factory/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
201Response
json
{
  "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"
}

Declare the material composition the factory is sourcing for this order#

POST/factory/production-orders/{order_id}/material-declaration

Requires scope declarations:write

The factory — not the brand — knows the real fabric before a production run starts. This is required before start-production.

Parameters

  • order_idstringpathRequired

    Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

Request body

  • material_compositionarray of objectsRequired
    +Show 3 child attributes
    • material_namestringRequired
    • percentagenumberRequired
    • garment_partstring | null
  • element_weightsarray of objectsRequired
    +Show 3 child attributes
    • garment_partstring | null
    • sizestringRequired

      Size name, exactly as on the product's variants.

    • gramsnumberRequired

Returns

HTTP 200
  • product_idstringRequired

    Skannit's id for the product.

  • material_compositionarray of objects
    +Show 3 child attributes
    • material_namestringRequired
    • percentagenumberRequired
    • garment_partstring | null
  • element_weightsarray of objects
    +Show 3 child attributes
    • garment_partstring | null
    • sizestringRequired

      Size name, exactly as on the product's variants.

    • gramsnumberRequired
  • total_grams_by_sizeobject
  • declared_attimestamp | null
  • declared_by_factory_idstring | null
POST /factory/production-orders/{order_id}/material-declaration
curl
curl -X POST http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/material-declaration \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "material_composition": [
      {
        "material_name": "Organic cotton",
        "percentage": 72.5
      }
    ],
    "element_weights": [
      {
        "size": "M",
        "grams": 1.0
      }
    ]
  }'
200Response
json
{
  "product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
  "material_composition": [
    {
      "material_name": "Organic cotton",
      "percentage": 72.5,
      "garment_part": "body"
    }
  ],
  "element_weights": [
    {
      "garment_part": "body",
      "size": "M",
      "grams": 1
    }
  ],
  "total_grams_by_size": {},
  "declared_at": null,
  "declared_by_factory_id": "13923722-605b-580d-968e-61894b421a0a"
}

Declare origin & compliance data the factory is producing for this order#

POST/factory/production-orders/{order_id}/origin-compliance-declaration

Requires scope declarations:write

The factory — not the brand — knows where the run is actually being produced and by whom. Required before start-production.

Parameters

  • order_idstringpathRequired

    Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

Request body

  • country_of_originstringRequired
  • main_supplierstringRequired
  • compliance_standardsobject
    +Show 3 child attributes
    • eu_dpp_readyboolean

      Defaults to false

    • esg_certifiedboolean

      Defaults to false

    • reach_compliantboolean

      Defaults to false

Returns

HTTP 200
  • product_idstringRequired

    Skannit's id for the product.

  • country_of_originstring | null
  • main_supplierstring | null
  • compliance_standardsobject
    +Show 3 child attributes
    • eu_dpp_readyboolean

      Defaults to false

    • esg_certifiedboolean

      Defaults to false

    • reach_compliantboolean

      Defaults to false

  • declared_attimestamp | null
  • declared_by_factory_idstring | null
POST /factory/production-orders/{order_id}/origin-compliance-declaration
curl
curl -X POST http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/origin-compliance-declaration \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "country_of_origin": "PT",
    "main_supplier": "Tecidos do Norte"
  }'
200Response
json
{
  "product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
  "country_of_origin": "PT",
  "main_supplier": "Tecidos do Norte",
  "compliance_standards": {
    "eu_dpp_ready": true,
    "esg_certified": true,
    "reach_compliant": true
  },
  "declared_at": null,
  "declared_by_factory_id": "13923722-605b-580d-968e-61894b421a0a"
}

Declare repairability data the factory is producing for this order#

POST/factory/production-orders/{order_id}/repairability-declaration

Requires scope declarations:write

Required before start-production.

Parameters

  • order_idstringpathRequired

    Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

Request body

  • repair_difficultystringRequired
  • spare_parts_includedarray of strings
  • repair_instructions_urlstringRequired

Returns

HTTP 200
  • product_idstringRequired

    Skannit's id for the product.

  • repair_difficultystring | null
  • spare_parts_includedarray of strings
  • repair_instructions_urlstring | null
  • declared_attimestamp | null
  • declared_by_factory_idstring | null
POST /factory/production-orders/{order_id}/repairability-declaration
curl
curl -X POST http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/repairability-declaration \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "repair_difficulty": "easy",
    "repair_instructions_url": "https://files.skannit.example/repair_instructions.png"
  }'
200Response
json
{
  "product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
  "repair_difficulty": "easy",
  "spare_parts_included": [
    "buttons"
  ],
  "repair_instructions_url": "https://files.skannit.example/repair_instructions.png",
  "declared_at": null,
  "declared_by_factory_id": "13923722-605b-580d-968e-61894b421a0a"
}

Declare sustainability & circularity data the factory is producing for this order#

POST/factory/production-orders/{order_id}/sustainability-declaration

Requires scope declarations:write

The factory — not the brand — knows the measured/estimated CO2 and water use before a production run starts. Required before start-production.

Parameters

  • order_idstringpathRequired

    Skannit's id for the production order. Use it in every /production-orders/{order_id} and QR call.

Request body

  • carbon_co2anyRequired
  • water_used_lanyRequired
  • circular_scoreintegerRequired
  • end_of_life_instructionsstringRequired

Returns

HTTP 200
  • product_idstringRequired

    Skannit's id for the product.

  • carbon_co2string | null
  • water_used_lstring | null
  • circular_scoreinteger | null
  • end_of_life_instructionsstring | null
  • declared_attimestamp | null
  • declared_by_factory_idstring | null
POST /factory/production-orders/{order_id}/sustainability-declaration
curl
curl -X POST http://62.169.23.239:8001/api/v1/factory/production-orders/ord_8c2f4e1a9b7d3c60/sustainability-declaration \
  -H "Authorization: Bearer $SKANNIT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "carbon_co2": 3.2,
    "water_used_l": 2700.0,
    "circular_score": 72,
    "end_of_life_instructions": "Return to any Northwind store for recycling"
  }'
200Response
json
{
  "product_id": "f6abe715-90aa-5908-a0a6-12951a3a21cc",
  "carbon_co2": 3.2,
  "water_used_l": 2700,
  "circular_score": 72,
  "end_of_life_instructions": "Return to any Northwind store for recycling",
  "declared_at": null,
  "declared_by_factory_id": "13923722-605b-580d-968e-61894b421a0a"
}
NextQR codes & labels→