The companies you buy from, with their approval status.
idintegeractivebooleanaddressobjectaddresscitystringnullableline1stringnullableline2stringnullablepostal_codestringnullablestatestringnullableapproval_expirystringnullableapproval_statusstringnullableComputed when read: an approval whose expiry has passed reads as PENDING.
PENDINGAPPROVEDREJECTEDSUSPENDEDcertification_expires_onstringnullablecertification_schemestringnullableNONE means the supplier holds none; null means not recorded.
SQFBRCGSFSSC22000IFSGLOBALGAPPRIMUSGFSCANADAGAPOTHERNONEcompanystringnullablecontact_namestringnullablecreated_atstringnullableemailstringnullablephonestringnullablesupplier_codestringnullableupdated_atstringnullablewebsitestringnullable/supplierspurchasing:readapproval_status is computed when read, so an expired approval never reads as APPROVED. Use search or the named filters, not both.
supplier_codestringnullablePartial match.
companystringnullablePartial match.
emailstringnullablePartial match.
activebooleannullablesearchstringnullableFree-text match.
sortstringnullableComma-separated field:direction pairs, e.g. id:desc. Sortable: company, created_at, id, supplier_code, updated_at. id is always added last, so paging is stable.
limitintegerRows to return. Maximum 200.
offsetintegerRows to skip. Maximum 10000: to read further, narrow the filters or page with updated_since.
updated_sincestringnullableOnly rows changed after this instant, as an ISO 8601 timestamp; without an offset it is read as UTC. Tracks the record itself, not its child rows, and deletions are not reported, so reconcile by re-listing from time to time.
data, with pagination.curl "https://public-api.nutrasoft.ca/v1/suppliers?limit=50" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY"{
"data": [
{
"id": 123,
"active": true,
"address": {
"city": "Montreal",
"line1": "123 Example Street",
"line2": "Suite 200",
"postal_code": "H4S 2C1",
"state": "QC"
},
"approval_expiry": "2026-09-10T14:30:00Z",
"approval_status": "PENDING",
"certification_expires_on": "2026-09-10",
"certification_scheme": "SQF",
"company": "Example Foods Inc.",
"contact_name": "Alex Martin",
"created_at": "2026-09-10T14:30:00Z",
"email": "orders@example.com",
"phone": "+1-514-555-0100",
"supplier_code": "SAMPLE-01",
"updated_at": "2026-09-10T14:30:00Z",
"website": "https://example.com"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"has_more": false
},
"order": "id:asc"
}/suppliers/{supplier_id}purchasing:readsupplier_idintegerrequiredThe supplier's id.
data.curl "https://public-api.nutrasoft.ca/v1/suppliers/123" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY"{
"data": {
"id": 123,
"active": true,
"address": {
"city": "Montreal",
"line1": "123 Example Street",
"line2": "Suite 200",
"postal_code": "H4S 2C1",
"state": "QC"
},
"approval_expiry": "2026-09-10T14:30:00Z",
"approval_status": "PENDING",
"certification_expires_on": "2026-09-10",
"certification_scheme": "SQF",
"company": "Example Foods Inc.",
"contact_name": "Alex Martin",
"created_at": "2026-09-10T14:30:00Z",
"email": "orders@example.com",
"phone": "+1-514-555-0100",
"supplier_code": "SAMPLE-01",
"updated_at": "2026-09-10T14:30:00Z",
"website": "https://example.com"
}
}/supplierspurchasing:writesupplier_code is unique within your account; a duplicate is a 409. A new supplier starts PENDING approval, which is decided in NutraSoft. Not idempotent.
companystringrequiredTrading name.
supplier_codestringrequiredYour code for this supplier, unique within your account.
activebooleanAn inactive supplier is kept but not offered on new documents.
addressobjectnullableaddresscitystringnullableline1stringnullableline2stringnullablepostal_codestringnullablePostal or ZIP code.
statestringnullableProvince or state. Free text.
contact_namestringnullableemailstringnullablephonestringnullablewebsitestringnullabledata.curl -X POST "https://public-api.nutrasoft.ca/v1/suppliers" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"company": "Example Foods Inc.",
"supplier_code": "SAMPLE-01"
}'{
"data": {
"id": 123,
"active": true,
"address": {
"city": "Montreal",
"line1": "123 Example Street",
"line2": "Suite 200",
"postal_code": "H4S 2C1",
"state": "QC"
},
"approval_expiry": "2026-09-10T14:30:00Z",
"approval_status": "PENDING",
"certification_expires_on": "2026-09-10",
"certification_scheme": "SQF",
"company": "Example Foods Inc.",
"contact_name": "Alex Martin",
"created_at": "2026-09-10T14:30:00Z",
"email": "orders@example.com",
"phone": "+1-514-555-0100",
"supplier_code": "SAMPLE-01",
"updated_at": "2026-09-10T14:30:00Z",
"website": "https://example.com"
}
}/suppliers/{supplier_id}purchasing:writeOmitted fields are left unchanged. address is replaced as a whole. Approval and certification are not writable.
supplier_idintegerrequiredThe supplier's id.
activebooleannullableaddressobjectnullableaddresscitystringnullableline1stringnullableline2stringnullablepostal_codestringnullablePostal or ZIP code.
statestringnullableProvince or state. Free text.
companystringnullablecontact_namestringnullableemailstringnullablephonestringnullablesupplier_codestringnullablewebsitestringnullabledata.curl -X PATCH "https://public-api.nutrasoft.ca/v1/suppliers/123" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"active": true
}'{
"data": {
"id": 123,
"active": true,
"address": {
"city": "Montreal",
"line1": "123 Example Street",
"line2": "Suite 200",
"postal_code": "H4S 2C1",
"state": "QC"
},
"approval_expiry": "2026-09-10T14:30:00Z",
"approval_status": "PENDING",
"certification_expires_on": "2026-09-10",
"certification_scheme": "SQF",
"company": "Example Foods Inc.",
"contact_name": "Alex Martin",
"created_at": "2026-09-10T14:30:00Z",
"email": "orders@example.com",
"phone": "+1-514-555-0100",
"supplier_code": "SAMPLE-01",
"updated_at": "2026-09-10T14:30:00Z",
"website": "https://example.com"
}
}/suppliers/{supplier_id}purchasing:writeA supplier that was ever ordered from or billed is deactivated, not deleted: active becomes false and its documents and stock are kept. Only a supplier with no purchasing history is removed. Check active on the response to see which happened.
supplier_idintegerrequiredThe supplier's id.
data.curl -X DELETE "https://public-api.nutrasoft.ca/v1/suppliers/123" \
-H "Authorization: Bearer $NUTRASOFT_API_KEY"{
"data": {
"id": 123,
"active": true,
"address": {
"city": "Montreal",
"line1": "123 Example Street",
"line2": "Suite 200",
"postal_code": "H4S 2C1",
"state": "QC"
},
"approval_expiry": "2026-09-10T14:30:00Z",
"approval_status": "PENDING",
"certification_expires_on": "2026-09-10",
"certification_scheme": "SQF",
"company": "Example Foods Inc.",
"contact_name": "Alex Martin",
"created_at": "2026-09-10T14:30:00Z",
"email": "orders@example.com",
"phone": "+1-514-555-0100",
"supplier_code": "SAMPLE-01",
"updated_at": "2026-09-10T14:30:00Z",
"website": "https://example.com"
}
}