6 versões 26 entradas Actualizado em 30/07/2026

Nenhuma novidade encontrada para esta pesquisa.

Artigo extra passa a ser adicionado também nos documentos criados via API

Quando o Artigo Extra do SmartRecycle está ativo e configurado para um artigo — em SmartRecycle Artigo Extra Definições, com as opções "Aplicar por defeito em vendas" e "Aplicar por defeito em compras" — essa associação passa agora a aplicar-se também aos documentos criados através da API, e não apenas às vendas feitas diretamente no ponto de venda. Por exemplo, se um artigo tiver a taxa de reciclagem associada, ao inserir um documento com esse artigo através da API o sistema acrescenta automaticamente a linha da taxa com a quantidade correspondente, ou atualiza essa quantidade caso a linha já esteja presente no documento.

Alterar artigo

SmartAPI

Alterar artigo

Altera dados de um artigo.

Endpoint: PATCH Item

{     "ItemID":"151201",     "Description":"Caviar, Sturgeon, Black, Jar, Lemberg (box*6) 50g",     "ShortDescription":"Caviar, Sturgeon, Black",     "BarCode":"4260051071985",     "SupplierID":"1",     "SalePrice":[         {             "PriceLineID":0,             "UnitPrice":0,             "CreateDate":"2023-12-08T16:45:20Z",             "TaxIncludedPrice":0,             "FixedProfitRate":0         },         {             "PriceLineID":1,             "UnitPrice":0,             "CreateDate":"2023-12-08T16:45:20Z",             "TaxIncludedPrice":0,             "FixedProfitRate":0         }     ] }

Alterar cliente

SmartAPI

Alterar cliente

Altera dados de um cliente. (O título original dizia «Alterar artigo».)

Endpoint: PATCH Customer

{    "OrganizationName":"Mundo infinito, Lda.",    "AddressLine1":"Rua da Estrela, 23",    "AddressLine2":"",    "PostalCode":"1200-123 Lisboa",    "CountryID":"PRT",    "ProvinceID":"11",    "LocalityID":7,    "FederalTaxId":"",    "BirthDate":"1989-08-03T00:00:00",    "WebAddress":"",    "Telephone1":"215556644",    "Telephone2":"",    "Telephone3":"",    "Telephone4":"",    "MobileTelephone1":"967548015",    "MobileTelephone2":"967548015",    "Fax":"",    "Email":"etorre@smartdigit.pt",    "CustomerPicturePath":"",    "SalesmanId":1,    "ZoneID":1,    "ZoneName":"Viana do Castelo ",    "CurrencyID":"EUR",    "PaymentID":2,    "PaymentName":"30 Dias",    "CarrierID":1,    "CarrierName":"CTT - IVA Isento",    "CashDiscountTermID":"1",    "CashDiscountTermName":null,    "TenderID":1,    "PriceLineID":0,    "CustomerLevel":1,    "CustomerGroupDescription":"",    "EntityFiscalStatusID":1, }

Criar artigo

SmartAPI

Criar artigo

Cria um artigo.

Endpoint: POST Item

{     "ItemID":"151201",     "ItemType":0,     "Description":"Caviar, Sturgeon, Black, Jar, Lemberg (box*6) 50g",     "ShortDescription":"Caviar, Sturgeon, Black",     "BarCode":"4260051071985",     "BarCodeType":0,     "WeightUnitOfMeasure":"GM",     "WeightMeasure":50,     "TaxableGroupID":4,     "ItemTax":1,     "ItemTax2":0,     "ItemTax3":0,     "AverageCostPrice":0,     "SupplierID":"1",     "Family":{ "FamilyID":"1"   },     "UnitOfSaleID":"UNI",     "AlternativeUnitOfStock":"UNI",     "UnitConversion":1,     "DefaultSellingUnit":"UNI",     "DefaultBuyUnit":"UNI",     "DefaultStockUnit":"UNI",     "Locked":0,     "ExtraFieldList":[              ],     "SalePrice":[         {             "PriceLineID":0,             "UnitPrice":0,             "CreateDate":"2023-12-08T16:45:20Z",             "TaxIncludedPrice":0,             "FixedProfitRate":0         },         {             "PriceLineID":1,             "UnitPrice":0,             "CreateDate":"2023-12-08T16:45:20Z",             "TaxIncludedPrice":0,             "FixedProfitRate":0         }     ],     "Comments":"",     "StockManagement":true,     "Discontinued":false }

Criar artigo + campos extra

SmartAPI

Criar artigo com campos extra

Cria um artigo com campos extra.

Endpoint: POST Item

{   "ItemID":"0001",   "ItemType":0,   "Description":"Product Name ",   "ShortDescription":"Product Name",   "BarCode":"4260051071985",   "TaxableGroupID":4,   "SupplierID":"1",   "Family":{     "FamilyID":"1"   },   "UnitOfSaleID":"UNI",   "Locked":0,   "ExtraFieldList":[     {       "ExtraFieldID":"1",       "TextAnswer":"Auto Tires"     },     {       "ExtraFieldID":"2",       "TextAnswer":"4x4 road tires"     },     {       "ExtraFieldID":"3",       "TextAnswer":"Bridgestone"     },     {       "ExtraFieldID":"4",       "TextAnswer":"Alenza 001"     },     {       "ExtraFieldID":"5",       "TextAnswer":"245"     },     {       "ExtraFieldID":"6",       "TextAnswer":"55"     },     {       "ExtraFieldID":"7",       "TextAnswer":"16"     },     {       "ExtraFieldID":"8",       "TextAnswer":"R"     },     {       "ExtraFieldID":"9",       "TextAnswer":"W"     },     {       "ExtraFieldID":"10",       "TextAnswer":"105"     },     {       "ExtraFieldID":"11",       "TextAnswer":"XL"     },     {       "ExtraFieldID":"12",       "TextAnswer":"A"     },     {       "ExtraFieldID":"13",       "TextAnswer":"B"     },     {       "ExtraFieldID":"14",       "TextAnswer":"B (71db)"     }   ],   "SalePrice":[     {       "PriceLineID":0,       "UnitPrice":0,       "CreateDate":"2023-12-08T16:45:20Z",       "TaxIncludedPrice":0,       "FixedProfitRate":0     },     {       "PriceLineID":1,       "UnitPrice":10,       "CreateDate":"2023-12-08T16:45:20Z",       "TaxIncludedPrice":0,       "FixedProfitRate":0     }   ],   "Comments":"" }

Criar cliente

SmartAPI

Criar cliente

Cria um cliente.

Endpoint: POST Customer

{     "OrganizationName":"Hrach Barseghyan",     "SalesmanId":1,     "ZoneID":"1",     "CarrierID":1,     "PaymentID":1,     "TenderID":"1",     "AddressLine1":"90 Aram srt.",     "AddressLine2":"",     "PostalCode":"1234-123",     "CountryID":"ARM",     "MobileTelephone1":"00 374 99 747747",     "Telephone1":"",     "EntityFiscalStatusID":"6",     "CustomerLevel":1,     "Email":"hrachb2002@gmail.com",     "IssuingOutput":0,     "LimitType":1,     "CurrencyID":"EUR",     "ActiveParty":true,     "PriceLineID":"1",     "IntranetEMailDaily":true,     "IntranetEMailWeekly":true,     "TaxablePersonType":1,     "GDPRConsent":true,     "FrequentShopperPoints":0,     "FederalTaxID":"123456789",     "KeyFederalTaxID":"0" }

Criar documento

SmartAPI

Criar documento

Cria um documento de venda ou compra.

Endpoint: POST ItemTransaction

{ "TransSerial":"1",    "TransDocument":"FR",    "PartyID":"2",    "Comments":"Document Comments",    "TransactionTaxIncluded":"True",    "Details":[       {          "ItemID":"arroz001",          "Quantity":10,          "UnitPrice":1.22,          "WarehouseID":1,          "Color":{             "ColorID":0          },          "Size":{             "SizeID":0          },          "DiscountPercent":0       },       {          "ItemID":"arroz002",          "Quantity":6,          "UnitPrice":1.15,          "WarehouseID":1,          "Color":{             "ColorID":0          },          "Size":{             "SizeID":0          },          "DiscountPercent":0       }    ],    "Salesman":{       "SalesmanID":1    },    "Payment":{       "PaymentID":1    },    "ContractReferenceNumber":"Document Reference",    "UnloadPlace":{       "LoadUnloadPlaceID":2    },    "UnloadPlaceAddress":{       "AddressLine1":"Vale da Grama - Alto do Assilho Intermarche Albergaria-a-Velha",       "AddressLine2":"",       "PostalCode":"3850-226 Albergaria-a-Vel"    } }

API – Help document

API – Help document

How to see swagger to check json Struture – Access http://locahost:PORT/swagger

Go to endpoint v1/itemTransaction for example, and you can see example value to structure (this endpoint is used for Sales and Purchase documents):

Using QUERY Endpoint to get data:

Sage 50c Database Tables Structure: https://smartdigit.pt/SageDataDicionary.html

QUERY Endpoint: http://locahost:PORT/swagger/ui/index#!/Query/Query_V2Post

How to retrieve exception logs:

SELECT TOP(10) * FROM UX_SD_LOGS

How to filter by date

SELECT i.itemID, ItemNames.Description, i.ItemPictureName, i.FamilyID, f.Description
FROM Item I
INNER JOIN ItemNames ON i.itemID = ItemNames.ItemID
INNER JOIN Family f ON f.FamilyID = i.FamilyID
WHERE ItemNames.LanguageID = 'PTG' AND
CONCAT(CONVERT(VARCHAR(10), i.DtAlt, 120),' ', CAST(CONVERT(VARCHAR,DATEADD(SECOND, i.HrAlt*86400, 0),108) AS TIME)) > '2021-02-20 10:00:00'

SELECT ItemID, BarCode, BarCodeType, ColorID, SizeID, PropertyID1, Description, UnitPrice, UnitOfSaleID, MaximumDecimals, Quantity, FindON, ItemType
FROM (SELECT i.ItemID, i.BarCode, i.BarCodeType, ISNULL(c.ColorID, 0) AS ColorID, ISNULL(s.SizeID, 0) AS SizeID, ISNULL(i.PropertyID1, NULL) AS PropertyID1, [in].Description,
CASE WHEN ispS.UnitPrice > 0 THEN ispS.UnitPrice ELSE isp.UnitPrice END AS UnitPrice, i.UnitOfSaleID, um.MaximumDecimals, NULL AS Quantity, 1 AS FindON, i.ItemType
FROM dbo.Item AS i INNER JOIN
dbo.ItemNames AS [in] ON i.ItemID = [in].ItemID AND [in].LanguageID =
(SELECT DefaultLanguageID
FROM dbo.ConfSystem) INNER JOIN
dbo.UnitOfMeasure AS um ON um.UnitOfMeasureID = i.UnitOfSaleID INNER JOIN
dbo.ItemSellingPrices AS isp ON i.ItemID = isp.ItemID AND isp.PriceLineID = 1 AND isp.SizeID = 0 LEFT OUTER JOIN
dbo.ItemColor AS c ON i.ItemID = c.ItemID LEFT OUTER JOIN
dbo.ItemSize AS s ON i.ItemID = s.ItemID LEFT OUTER JOIN
dbo.ItemSellingPrices AS ispS ON i.ItemID = ispS.ItemID AND ispS.PriceLineID = 1 AND ispS.SizeID = s.SizeID
WHERE (i.Discontinued = 0)
UNION
SELECT POSi.ItemID, POSi.POSItemID, POSi.BarCodeType, ISNULL(POSi.ColorID, 0) AS ColorID, ISNULL(POSi.SizeID, 0) AS SizeID, ISNULL(i.PropertyID1, NULL) AS PropertyID1,
CASE WHEN POSi.Description <> '' THEN POSi.Description ELSE [in].Description END AS Description,
(CASE WHEN POSi.SalePrice > 0 THEN POSi.SalePrice ELSE (CASE WHEN ispS.UnitPrice > 0 THEN ispS.UnitPrice ELSE isp.UnitPrice END) END) AS UnitPrice, POSi.UnitOfMeasure, um.MaximumDecimals,
POSi.Quantity, 3 AS FindON, i.ItemType
FROM dbo.POSIdentity AS POSi INNER JOIN
dbo.Item AS i ON POSi.ItemID = i.ItemID INNER JOIN
dbo.ItemNames AS [in] ON POSi.ItemID = [in].ItemID AND [in].LanguageID =
(SELECT DefaultLanguageID
FROM dbo.ConfSystem) INNER JOIN
dbo.UnitOfMeasure AS um ON um.UnitOfMeasureID = POSi.UnitOfMeasure INNER JOIN
dbo.ItemSellingPrices AS isp ON POSi.ItemID = isp.ItemID AND isp.PriceLineID = 1 AND isp.SizeID = POSi.SizeID LEFT OUTER JOIN
dbo.ItemSellingPrices AS ispS ON POSi.ItemID = ispS.ItemID AND ispS.PriceLineID = 1 AND ispS.SizeID = POSi.SizeID
WHERE (POSi.POSItemID <> '') AND (i.Discontinued = 0)) AS T

CONCAT(CONVERT(VARCHAR(10), i.DtAlt, 120),' ', CAST(CONVERT(VARCHAR,DATEADD(SECOND, i.HrAlt*86400, 0),108) AS TIME)) > '2021-02-20 10:00:00'

Item list filtered by the language PTG and the date of the last change

dfsdf

SELECT i.itemID, ItemNames.Description, i.ItemPictureName, i.FamilyID, f.Description
FROM Item I
INNER JOIN ItemNames ON i.itemID = ItemNames.ItemID
INNER JOIN Family f ON f.FamilyID = i.FamilyID
WHERE ItemNames.LanguageID = 'PTG' AND
CONCAT(CONVERT(VARCHAR(10), i.DtAlt, 120),' ', CAST(CONVERT(VARCHAR,DATEADD(SECOND, i.HrAlt*86400, 0),108) AS TIME)) > '2021-02-20 10:00:00'

SELECT ItemID, BarCode, BarCodeType, ColorID, SizeID, PropertyID1, Description, UnitPrice, UnitOfSaleID, MaximumDecimals, Quantity, FindON, ItemType
FROM (SELECT i.ItemID, i.BarCode, i.BarCodeType, ISNULL(c.ColorID, 0) AS ColorID, ISNULL(s.SizeID, 0) AS SizeID, ISNULL(i.PropertyID1, NULL) AS PropertyID1, [in].Description,
CASE WHEN ispS.UnitPrice > 0 THEN ispS.UnitPrice ELSE isp.UnitPrice END AS UnitPrice, i.UnitOfSaleID, um.MaximumDecimals, NULL AS Quantity, 1 AS FindON, i.ItemType
FROM dbo.Item AS i INNER JOIN
dbo.ItemNames AS [in] ON i.ItemID = [in].ItemID AND [in].LanguageID =
(SELECT DefaultLanguageID
FROM dbo.ConfSystem) INNER JOIN
dbo.UnitOfMeasure AS um ON um.UnitOfMeasureID = i.UnitOfSaleID INNER JOIN
dbo.ItemSellingPrices AS isp ON i.ItemID = isp.ItemID AND isp.PriceLineID = 1 AND isp.SizeID = 0 LEFT OUTER JOIN
dbo.ItemColor AS c ON i.ItemID = c.ItemID LEFT OUTER JOIN
dbo.ItemSize AS s ON i.ItemID = s.ItemID LEFT OUTER JOIN
dbo.ItemSellingPrices AS ispS ON i.ItemID = ispS.ItemID AND ispS.PriceLineID = 1 AND ispS.SizeID = s.SizeID
WHERE (i.Discontinued = 0)
UNION
SELECT POSi.ItemID, POSi.POSItemID, POSi.BarCodeType, ISNULL(POSi.ColorID, 0) AS ColorID, ISNULL(POSi.SizeID, 0) AS SizeID, ISNULL(i.PropertyID1, NULL) AS PropertyID1,
CASE WHEN POSi.Description <> '' THEN POSi.Description ELSE [in].Description END AS Description,
(CASE WHEN POSi.SalePrice > 0 THEN POSi.SalePrice ELSE (CASE WHEN ispS.UnitPrice > 0 THEN ispS.UnitPrice ELSE isp.UnitPrice END) END) AS UnitPrice, POSi.UnitOfMeasure, um.MaximumDecimals,
POSi.Quantity, 3 AS FindON, i.ItemType
FROM dbo.POSIdentity AS POSi INNER JOIN
dbo.Item AS i ON POSi.ItemID = i.ItemID INNER JOIN
dbo.ItemNames AS [in] ON POSi.ItemID = [in].ItemID AND [in].LanguageID =
(SELECT DefaultLanguageID
FROM dbo.ConfSystem) INNER JOIN
dbo.UnitOfMeasure AS um ON um.UnitOfMeasureID = POSi.UnitOfMeasure INNER JOIN
dbo.ItemSellingPrices AS isp ON POSi.ItemID = isp.ItemID AND isp.PriceLineID = 1 AND isp.SizeID = POSi.SizeID LEFT OUTER JOIN
dbo.ItemSellingPrices AS ispS ON POSi.ItemID = ispS.ItemID AND ispS.PriceLineID = 1 AND ispS.SizeID = POSi.SizeID
WHERE (POSi.POSItemID <> '') AND (i.Discontinued = 0)) AS T

Get document identifiers and filter them by date

SELECT TransDocument, TransSerial, TransDocNumber, CONCAT(CONVERT(VARCHAR(10), DtAlt, 120),' ', CAST(CONVERT(VARCHAR,DATEADD(SECOND, HrAlt*86400, 0),108) AS TIME)) AS DtAlt FROM SaleTransaction
WHERE CONCAT(CONVERT(VARCHAR(10), DtAlt, 120),' ', CAST(CONVERT(VARCHAR,DATEADD(SECOND, HrAlt*86400, 0),108) AS TIME)) > '2021-03-20 23:59:00'

Get list Open unpaid document of specific customer ordered by deferred payment date

SELECT CreateDate, DeferredPaymentDate, ContractReferenceNumber, TransSerial, TransDocument, TransDocNumber, TransInstallmentID, TotalAmount, TotalPendingAmount, DebitTotalAmount, CreditTotalAmount, PartyAccountTypeID, PartyAddressID
FROM CustomerLedgerAccount
where TotalPendingAmount <> '0' and PartyID = '1'
Order By DeferredPaymentDate

Manual (SmartAPI)

Visão geral

Introdução

A SmartAPI expõe a camada do Sage 50 como Web API. Tudo o que faz no Sage pode ser feito via API: criar, alterar e apagar documentos, artigos e outras tabelas; comunicar guias à AT; imprimir documentos; gerar SAF-T; e muito mais.

.NET FrameworkVersão 4.7.2
Base de dadosSQL Server 2016 ou superior
Sage 50Versão 2021 ou superior
Preparação

Instalação

Execute o instalador como administrador.

Instalação da SmartAPI
Instalação da SmartAPI.

O quadro de configuração faz a ligação ao Sage:

Quadro de configuração da SmartAPI
Ligação ao Sage na instalação.
CampoDescrição
Versão Sage50c Faturação ou 50c Loja.
EmpresaID/nome da empresa (o mesmo da área de sistema do Sage).
Chave de licençaChave de licenciamento da SmartAPI.
ID da máquinaOpcional. Machine ID definido na configuração de postos, se o serviço não usar o do servidor.
Nome do serviçoOpcional. Nome a dar ao serviço Windows.

Após a instalação é criado o serviço Windows SmartAPI.Sage50cLoja.

Serviço Windows SmartAPI
Serviço Windows da SmartAPI.

Com o serviço a correr, abra no browser da máquina onde foi instalada:

http://localhost:5581/swagger/ui/index
Swagger da SmartAPI
Swagger com os endpoints incluídos no licenciamento.

Chave e porta

Para alterar a API key ou a porta predefinida (5581), edite C:\SmartApps\API\Service\SmartAPI.ini.

Ficheiro SmartAPI.ini
Ficheiro SmartAPI.ini.
X-API-KEYSPalavra-passe de acesso. Várias chaves separam-se por ponto e vírgula, por exemplo DEMO1;DEMO2;DEMO3.
APIPortPorta da SmartAPI.
Reiniciar o serviço Qualquer alteração ao INI só entra em vigor depois de reiniciar o serviço SmartAPI.

Instalar SSL Protegido

Este manual está protegido. Introduza a senha para visualizar o conteúdo.

Criar túnel Cloudflare Protegido

Este manual está protegido. Introduza a senha para visualizar o conteúdo.

Downloads

Ficheiro Tamanho Data
API202302001.v21.05.06.exe 154 MB 06/08/2026 Descarregar
APIUNIVERSAL202302001.v21.05.06.exe 73 MB 04/08/2026 Descarregar
API202302001.v21.05.05.exe 154 MB 10/07/2026 Descarregar

FAQs

POST Item

{
    "ItemID":"151201",
    "ItemType":0,
    "Description":"Caviar, Sturgeon, Black, Jar, Lemberg (box*6) 50g",
    "ShortDescription":"Caviar, Sturgeon, Black",
    "BarCode":"4260051071985",
    "BarCodeType":0,
    "WeightUnitOfMeasure":"GM",
    "WeightMeasure":50,
    "TaxableGroupID":4,
    "ItemTax":1,
    "ItemTax2":0,
    "ItemTax3":0,
    "AverageCostPrice":0,
    "SupplierID":"1",
    "Family":{
 "FamilyID":"1"
   },
    "UnitOfSaleID":"UNI",
    "AlternativeUnitOfStock":"UNI",
    "UnitConversion":1,
    "DefaultSellingUnit":"UNI",
    "DefaultBuyUnit":"UNI",
    "DefaultStockUnit":"UNI",
    "Locked":0,
    "ExtraFieldList":[
        
    ],
    "SalePrice":[
        {
            "PriceLineID":0,
            "UnitPrice":0,
            "CreateDate":"2023-12-08T16:45:20Z",
            "TaxIncludedPrice":0,
            "FixedProfitRate":0
        },
        {
            "PriceLineID":1,
            "UnitPrice":0,
            "CreateDate":"2023-12-08T16:45:20Z",
            "TaxIncludedPrice":0,
            "FixedProfitRate":0
        }
    ],
    "Comments":"",
    "StockManagement":true,
    "Discontinued":false
}

POST Item

{
  "ItemID":"0001",
  "ItemType":0,
  "Description":"Product Name ",
  "ShortDescription":"Product Name",
  "BarCode":"4260051071985",
  "TaxableGroupID":4,
  "SupplierID":"1",
  "Family":{
    "FamilyID":"1"
  },
  "UnitOfSaleID":"UNI",
  "Locked":0,
  "ExtraFieldList":[
    {
      "ExtraFieldID":"1",
      "TextAnswer":"Auto Tires"
    },
    {
      "ExtraFieldID":"2",
      "TextAnswer":"4x4 road tires"
    },
    {
      "ExtraFieldID":"3",
      "TextAnswer":"Bridgestone"
    },
    {
      "ExtraFieldID":"4",
      "TextAnswer":"Alenza 001"
    },
    {
      "ExtraFieldID":"5",
      "TextAnswer":"245"
    },
    {
      "ExtraFieldID":"6",
      "TextAnswer":"55"
    },
    {
      "ExtraFieldID":"7",
      "TextAnswer":"16"
    },
    {
      "ExtraFieldID":"8",
      "TextAnswer":"R"
    },
    {
      "ExtraFieldID":"9",
      "TextAnswer":"W"
    },
    {
      "ExtraFieldID":"10",
      "TextAnswer":"105"
    },
    {
      "ExtraFieldID":"11",
      "TextAnswer":"XL"
    },
    {
      "ExtraFieldID":"12",
      "TextAnswer":"A"
    },
    {
      "ExtraFieldID":"13",
      "TextAnswer":"B"
    },
    {
      "ExtraFieldID":"14",
      "TextAnswer":"B (71db)"
    }
  ],
  "SalePrice":[
    {
      "PriceLineID":0,
      "UnitPrice":0,
      "CreateDate":"2023-12-08T16:45:20Z",
      "TaxIncludedPrice":0,
      "FixedProfitRate":0
    },
    {
      "PriceLineID":1,
      "UnitPrice":10,
      "CreateDate":"2023-12-08T16:45:20Z",
      "TaxIncludedPrice":0,
      "FixedProfitRate":0
    }
  ],
  "Comments":""
}