Print STANATIVE
DevelopersPartner API v1
PRINT STA NATIVE DEVELOPERS

Do seu ERP à impressora do cliente, sem construir uma infraestrutura de impressão.

O Print STA Native conecta seu ERP, PDV ou SaaS aos computadores e impressoras locais dos seus clientes. Seu sistema controla a experiência; o Native cuida do vínculo, descoberta de impressoras e entrega segura dos jobs.

CONTRATOPartner API v1
MODELOS2S
AGENTWindows
OPERAÇÃOLIVE
Objetivo de sucessoTenant do ERP → Account → enrollment → Agent vinculado → impressora descoberta → job criado → status acompanhado, sem login técnico extra para o cliente.
01Seu ERPIdentifica o cliente/tenant.
02AccountO Native cria a identidade isolada.
03EnrollmentVincula o computador sem login.
04PrintersDescobre destinos locais autorizados.
05JobSeu sistema envia e acompanha a impressão.
01

QUICKSTART E2E

Primeira integração, passo a passo.

Se você está conhecendo o Native agora, siga esta ordem. Ela representa o Golden Path de uma integração comercial.

1Valide health e capabilities.
2Provisione a Account do tenant.
3Gere enrollment e instale o Agent.
4Liste printers e envie o primeiro job.
Antes de começarUse uma credencial pst_live_... S2S com os scopes necessários. Nunca coloque essa credencial no navegador, Agent ou aplicativo do cliente.
  1. Confirme a API. Chame GET /managed/health e GET /managed/capabilities.
  2. Crie ou reconcilie o cliente. Use POST /accounts com um external_id estável do seu ERP.
  3. Gere o vínculo. Crie um enrollment temporário e entregue somente ao Agent daquele cliente.
  4. Aguarde a sincronização. Depois do Agent online, liste devices e printers.
  5. Envie o job. Use Idempotency-Key única para evitar duplicidade.
  6. Acompanhe o resultado. Consulte o job até printed ou failed.
Golden Path — cURL
export PRINT_STA_TOKEN="pst_live_SUA_CREDENCIAL"
BASE="https://api.print-sta.com.br/v1"
AUTH="Authorization: Bearer $PRINT_STA_TOKEN"

# 1) validar contrato
curl -sS "$BASE/managed/health" -H "$AUTH"
curl -sS "$BASE/managed/capabilities" -H "$AUTH"

# 2) criar/reconciliar cliente
ACCOUNT=$(curl -sS -X POST "$BASE/accounts" \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"external_id":"tenant-123","display_name":"Loja Exemplo"}')

# 3) use data.account_id para gerar enrollment
# 4) após Agent online, liste printers
# 5) envie POST /accounts/{account_id}/jobs com Idempotency-Key
Cliente mínimo — Node.js 18+
const BASE = "https://api.print-sta.com.br/v1";
const TOKEN = process.env.PRINT_STA_TOKEN;
async function native(path, init = {}) {
  const response = await fetch(BASE + path, {
    ...init,
    headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", ...init.headers }
  });
  const body = await response.json();
  if (!response.ok) throw new Error(`${response.status} ${body.code}: ${body.message}`);
  return body;
}
const account = await native("/accounts", {
  method: "POST",
  body: JSON.stringify({ external_id: "tenant-123", display_name: "Loja Exemplo" })
});
console.log(account.data.account_id);
Cliente mínimo — Python
import os, requests
BASE = "https://api.print-sta.com.br/v1"
H = {"Authorization": f"Bearer {os.environ['PRINT_STA_TOKEN']}"}
r = requests.post(BASE + "/accounts", headers=H,
  json={"external_id":"tenant-123", "display_name":"Loja Exemplo"})
r.raise_for_status()
print(r.json()["data"]["account_id"])
02

ARQUITETURA MENTAL

Quem faz o quê.

Seu ERP / PDV

É a experiência que o usuário final conhece.

  • identifica o tenant
  • cria/reconcilia a Account
  • solicita enrollment
  • exibe devices e printers
  • escolhe a impressora
  • envia e acompanha jobs

Print STA Native

É a infraestrutura de impressão local por trás da integração.

  • isola Accounts por Partner
  • valida credenciais e scopes
  • vincula Agent por enrollment
  • sincroniza devices e printers
  • entrega jobs com idempotência
  • mantém rastreabilidade e lifecycle
03

SOURCE OF TRUTH

Status do contrato.

ESTÁVEL / IMPLEMENTADO

Você pode integrar hoje

Health, capabilities, Accounts, desativação de Account, enrollment sem login, devices, printers, jobs, paginação e idempotência.

DEV PREVIEW

Não tratar como contrato final

A infraestrutura Partner-scoped de webhooks está em evolução, porém features.webhooks=false ainda fecha essa capability no contrato operacional.

Não invente rotas/pairing/redeem, GET /accounts/{id}, POST /accounts/{id}/reactivate e printer test não fazem parte da superfície pública estável da Partner API v1.
04

AUTHORITY MODEL

Autenticação e ambientes.

A credencial define no servidor o Partner, a Application, o ambiente e os scopes. O payload nunca deve tentar substituir essa autoridade.

HEADERAuthorization: Bearer pst_live_...
LIVE

Operacional

Use para provisionamento, enrollment, printers e jobs reais.

TEST

Diagnóstico no modelo atual

Não planeje impressão operacional em TEST enquanto a capability production-only estiver ativa.

Segredo de servidorNunca exponha a credencial Partner no frontend, Agent Windows ou app desktop do cliente. O Agent recebe sua própria device credential depois do enrollment.
05

LEAST PRIVILEGE

Scopes efetivos.

ScopeUso
diagnostics:readhealth e capabilities
accounts:writeprovisionar/desativar Accounts
devices:readlistar devices
devices:writeenrollment e desativação de device
printers:readlistar printers
printers:writehabilitar e renomear printer
jobs:readlistar e consultar jobs
jobs:writecriar jobs
webhooks:writereservado à superfície em preview
06

ACCOUNT

Um cliente do ERP = uma Account opaca.

POST /accounts reconcilia o tenant do seu sistema com uma Account Native. Use um external_id estável do seu ERP e guarde o account_id retornado.

1

Você envia

external_id e display_name.

2

O Native resolve

Cria ou reconcilia a identidade isolada do tenant.

3

Você persiste

Guarde o account_id opaco para as próximas chamadas.

Provisionar Account
POST /v1/accounts
{
  "external_id": "tenant-123",
  "display_name": "Loja Exemplo"
}

200 ACCOUNT_PROVISIONED
{
  "data": {
    "account_id": "<uuid-opaco>",
    "external_id": "tenant-123",
    "status": "active"
  }
}
07

ENROLLMENT

Vincule o computador sem criar outro login para o cliente.

Seu ERP solicita um token temporário e o entrega ao Agent. O token é de uso único, expira rapidamente e não substitui a credencial Partner.

60sTTL mínimo
600sTTL padrão
1800sTTL máximo
1 usosingle-use
Criar enrollment
POST /v1/accounts/{account_id}/enrollments
{"ttl_seconds":600}

201 ENROLLMENT_CREATED
{
  "data": {
    "enrollment_token": "pstenr_..."
  }
}
Não logue o tokenEnrollment consumido, expirado ou revogado não deve ser reutilizado. Trate-o como segredo temporário.
08

DEVICE

Computadores vinculados à Account.

ONLINE

Disponível

Agent com presença recente e autorizado para operar.

OFFLINE

Sem presença recente

O vínculo existe, mas o Agent não está disponível agora.

REVOKED

Revogado

O device perdeu autoridade operacional e precisa de novo vínculo para voltar.

GET /accounts/{account_id}/devices lista os computadores. POST /accounts/{account_id}/devices/{device_id}/deactivate revoga um vínculo específico.

09

PRINTER

Descubra e controle impressoras locais.

Printers pertencem a um device da Account. Use o estado retornado pela API em vez de recriar lógica de disponibilidade no ERP.

LISTAR

GET /printers

Retorna nome detectado, alias, device, estado, driver, porta e capabilities.

ATUALIZAR

PATCH /printers/{printer_id}

Permite alterar enabled e/ou display_name sem mudar a identidade física da impressora.

Boa práticaMostre display_name ao usuário. Guarde printer_id como identidade técnica e não dependa do nome detectado como chave.
10

JOB

Envie a impressão e acompanhe até o estado terminal.

queuedAceito e aguardando processamento.
processingEm andamento no fluxo operacional.
printedConcluído com sucesso.
failedFalhou e requer tratamento.
Idempotency-Key é obrigatóriaUse 8–128 caracteres seguros e associe a chave a uma operação lógica do seu ERP, como pedido:12345678.
Criar job de texto
POST /v1/accounts/{account_id}/jobs
Idempotency-Key: pedido:12345678
{
  "printer_id": "<uuid>",
  "external_id": "pedido-12345678",
  "title": "Pedido 12345678",
  "copies": 1,
  "content": {
    "type": "text",
    "encoding": "utf8",
    "data": "PEDIDO 12345678\n"
  }
}
text + utf8raw + base64pdf + base64até 10 MiB1–20 cópias
11

HTTP CONTRACT

Convenções que deixam a integração previsível.

SUCESSO

Envelope consistente

code, data, request_id e correlation_id.

ERRO

Decisão programável

code, message, retryable, request_id e correlation_id.

POST/PATCH usam application/json. X-Correlation-Id é opcional; quando enviado, deve ter 8–128 caracteres seguros. Registre sempre request/correlation IDs no seu observability stack.

12

PAGINATION

Paginação por cursor, sem fabricar offsets.

Listagens retornam items, has_more e next_cursor. Reenvie o cursor exatamente como recebido.

EXEMPLOGET /accounts/{account_id}/jobs?limit=50&cursor=...
Não decodifique o cursorEle é opaco para o consumidor e pode mudar internamente sem alterar o contrato público.
13

FAILURE MODEL

Erros, retry e decisões automáticas.

HTTPInterpretaçãoAção recomendada
400payload/parâmetro inválidocorrigir requisição; não repetir igual
401credencial ou enrollment inválido/expiradorenovar fluxo de autenticação/vínculo
403scope/autoridade insuficientecorrigir permissão
404recurso não encontradoreconciliar IDs
409conflito de estado/idempotência/offlineinspecionar code antes de decidir
429rate limitretry com backoff + jitter
5xxfalha transitória de serviçoretry se retryable=true
Regra simplesPara automação, use retryable + HTTP status + code. Não faça retry cego de erro 4xx.
14

RATE LIMIT

Limites relevantes para integração.

900/minlimite Partner geral
300/minlistagens e criação de jobs por Account/operação
600/mindetalhe de job
16 MiBcorpo HTTP máximo
15

OBSERVABILITY

Faça a integração ser fácil de diagnosticar.

1

Envie correlação

Use X-Correlation-Id baseado no evento do ERP.

2

Registre retorno

Salve request_id, correlation_id, code e HTTP status.

3

Relacione o job

Persista external_id e job_id para investigação ponta a ponta.

16

DEV PREVIEW

Webhooks.

A infraestrutura Partner-scoped de webhook provisioning/delivery está evoluindo no dev, mas a Partner API estável ainda publica features.webhooks=false.

HojePara fluxo estável, acompanhe jobs por polling de GET /accounts/{account_id}/jobs/{job_id}. Só mude para webhook quando capabilities anunciar suporte estável.
17

STABLE V1

Mapa de endpoints implementados.

GET/managed/healthdiagnostics:readSaúde e identidade da Partner API
GET/managed/capabilitiesdiagnostics:readCapabilities em runtime
POST/managed/enrollenrollment tokenAgent troca token single-use por device credential
POST/accountsaccounts:writeProvisiona/reconcilia tenant
POST/accounts/{account_id}/deactivateaccounts:writeDesativa integração preservando histórico
POST/accounts/{account_id}/enrollmentsdevices:writeCria token temporário de instalação
GET/accounts/{account_id}/devicesdevices:readLista computadores vinculados
POST/accounts/{account_id}/devices/{device_id}/deactivatedevices:writeRevoga um device
GET/accounts/{account_id}/printersprinters:readLista impressoras descobertas
PATCH/accounts/{account_id}/printers/{printer_id}printers:writeAtualiza enable/alias
POST/accounts/{account_id}/jobsjobs:writeCria impressão idempotente
GET/accounts/{account_id}/jobsjobs:readLista jobs
GET/accounts/{account_id}/jobs/{job_id}jobs:readConsulta detalhe e estado
18

AI READY

Contrato operacional para agentes de IA.

Uma IA que integrar o Native deve seguir esta ordem

  1. Consultar este documento para contexto humano.
  2. Usar openapi-v1.yaml como contrato machine-readable.
  3. Ler llms.txt para regras MUST / MUST NOT.
  4. Consultar /managed/capabilities antes de depender de capability opcional.
  5. Nunca inventar rota, campo, estado ou política de retry não documentada.
19

VERSIONING

Compatibilidade previsível.

Partner API v1 é o contrato externo. Mudanças compatíveis podem adicionar campos; o consumidor deve ignorar campos desconhecidos. Breaking changes exigem nova versão de contrato. O OpenAPI e o llms.txt devem acompanhar a superfície implementada.

Para homologarValide health → capabilities → Account → enrollment → Agent → printer → job → estado terminal → tratamento de erro → idempotência.
PRONTO PARA INTEGRAR

Comece pelo Golden Path.

Se o fluxo já está claro, use o OpenAPI como referência exata e o llms.txt para automação por IA.