Sincronização de objetos
Devolve os clientes, produtos ou pedidos que mudaram desde um horário, para o ERP manter uma cópia local atualizada.
Um ERP que mantém uma cópia dos dados da loja não deve baixar tudo a cada ciclo. Esta rota entrega só o que mudou desde a última leitura: o ERP guarda o horário em que leu pela última vez e o envia na próxima chamada. A rota existe com três nomes (ec_sync_objects, ecsyncobjects e sync_objects), todos iguais, nas formas /api/v1.0/... e /api/....
Há três tipos de objeto, escolhidos em object_type: clientes (U), produtos (P) e pedidos (O). Exige credencial de administrador.
/api/v1.0/ec_sync_objectsAdminObjetos alterados desde um horário (API 1.0)
Responde sempre com HTTP 200 e o envelope {"status":200,"data":{...}}. Quando algo está errado, data.success é false e data.message diz o motivo.
Parâmetros de consulta
object_typestringobrigatórioUPOU clientes (usuários do tipo cliente), P produtos, O pedidos.last_sync_timestampintegerobrigatório0 e traz tudo.pageintegerpadrão: 1items_per_pageintegerpadrão: 10/api/ec_sync_objectsAdminMesma rota, sem o prefixo /v1.0
Idêntica à anterior em parâmetros e resposta. Os ids saem como decimais.
/api/v1.0/ecsyncobjectsAdminMesma rota, nome ecsyncobjects
Nome usado pelo app móvel de vendedor da 1.0. Idêntica à primeira em parâmetros e resposta.
/api/ecsyncobjectsAdminNome ecsyncobjects, sem o prefixo /v1.0
Idêntica à anterior, com ids decimais.
/api/v1.0/sync_objectsAdminMesma rota, nome curto sync_objects
Nome curto usado por scripts de operação. Idêntica à primeira em parâmetros e resposta.
/api/sync_objectsAdminNome curto, sem o prefixo /v1.0
Idêntica à anterior, com ids decimais.
Exemplo de requisição
curl "$BASE_URL/api/v1.0/ec_sync_objects?object_type=P&last_sync_timestamp=1791600000&items_per_page=50" \
-u "$EMAIL:$API_KEY"Resposta
{
"status": 200,
"data": {
"success": true,
"message": "",
"updated_objects": [
{
"product_id": "302a9a40-f4ca-4d84-bcf3-b9c0c4b0272f",
"product": "Caneca Esmaltada 350ml",
"price": "52.90",
"product_code": "CAN-350",
"pos_barcode": "CAN-350",
"image_path": "https://minhaloja.io.venddor.com.br/uploads/p/caneca.png",
"amount": "5",
"options": []
}
],
"search": { "page": 1, "items_per_page": 50, "total_items": 11 }
}
}{
"status": 200,
"data": {
"success": true,
"message": "",
"updated_objects": [
{
"user_id": "ed7a3fbc-86f7-4b56-84de-67c583efbc3f",
"email": "carlos.lima@example.com",
"firstname": "Carlos",
"lastname": "Lima",
"phone": "11999990000"
}
],
"search": { "page": 1, "items_per_page": 50, "total_items": 8 }
}
}{
"status": 200,
"data": {
"success": false,
"message": "Required params: object_type, last_sync_timestamp"
}
}Campos da resposta
statusinteger200.data.successbooleanfalse quando faltam parâmetros, o tipo é desconhecido ou a leitura falhou.data.messagestringRequired params: object_type, last_sync_timestamp ou Unsupported object_type. Use U (users), P (products), or O (orders)., ou o texto do erro.data.updated_objectsarrayU: user_id, email, firstname, lastname, phone. Em P: product_id, product, price (decimal em texto), product_code e pos_barcode (o SKU), image_path (primeira imagem; vazio se não há), amount (estoque como texto) e options (sempre []). Em O: o resumo de pedido da API 1.0, o mesmo de Listar pedidos.data.searchobjectpage, items_per_page e total_items (todos os objetos que atendem ao filtro).Erros
| Status | Quando | Corpo |
|---|---|---|
| 200 | object_type ou last_sync_timestamp ausentes | {"status":200,"data":{"success":false,"message":"Required params: object_type, last_sync_timestamp"}} |
| 200 | object_type desconhecido | {"status":200,"data":{"success":false,"message":"Unsupported object_type. Use U (users), P (products), or O (orders)."}} |
| 401 | Sem credencial ou inválida | {"message":"Authentication required. Use HTTP Basic with email:api_key or Bearer <jwt>.","status":401} |
| 403 | Credencial que não é de administrador | {"message":"Forbidden: admin scope required","status":403} |