DESENVOLVEDORES · Referência da API de integração

Referência da API Fabrixa Integration

6 min de leitura Última atualização: 10-06-2026 15:28

A API Integration ajuda a criar e gerir encomendas Fabrixa, iniciar o Fabrixa Studio e manter o estado de produção e fulfillment sincronizado através de webhooks. A API segue convenções REST e usa JSON em todos os corpos de pedido e resposta.

URL BÁSICO

https://api.fabrixa.com/v2/integration

Envie todos os pedidos para este URL base seguido do caminho endpoint específico. O URL base é o ponto de partida para interagir com a Fabrixa API: obter, criar, atualizar ou eliminar recursos.

ANTES DO SEU PRIMEIRO PEDIDO

Autenticação

Para aceder à API Integration, autentique os pedidos usando um Application Access Token e uma Application Key:

Cabeçalho de autorização
Authorization: Bearer APPLICATION_ACCESS_TOKEN
Cabeçalho da chave do aplicativo
X-Application-Key: APPLICATION_KEY
Exemplo de comando cURL
curl -X 'GET' \
  'https://api.fabrixa.com/v2/integration/ping' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer APPLICATION_ACCESS_TOKEN' \
  -H 'X-Application-Key: APPLICATION_KEY'

Substitua APPLICATION_ACCESS_TOKEN pelo seu token de acesso real e APPLICATION_KEY pela sua chave de aplicativo real.

COMO AS RESPOSTAS SÃO ESTRUTURADAS

Terminais e solicitações

Os endpoints da API Integration são organizados por tipo de recurso e seguem o estilo REST. Cada endpoint representa um recurso, e as ações são executadas com métodos HTTP padrão.

Todos os pedidos e respostas da API Integration usam JSON, oferecendo uma interface consistente e simples.

Para obter detalhes completos sobre cada endpoint, incluindo exemplos de solicitação e resposta, consulte nosso Swagger documentation.

Formato de resposta

Todos os endpoints retornam dados em um formato padronizado com estes objetos:

{
  "links": {
    "self": "https://api.fabrixa.com/v2/integration/products",
    "first_page": "https://api.fabrixa.com/v2/integration/products?page=1",
    "last_page": "https://api.fabrixa.com/v2/integration/products?page=2",
    "next_page": "https://api.fabrixa.com/v2/integration/products?page=2",
    "prev_page": null
  },
  "meta": {
    "total": 2,
    "current_page": 1,
    "per_page": 10
  },
  "data": [
    {
      "id": 1,
      "name": "Product 1",
      "description": "Description of Product 1"
    },
    {
      "id": 2,
      "name": "Product 2",
      "description": "Description of Product 2"
    }
  ]
}

Descrição dos objetos de resposta

links

Contém links de paginação para navegar pelos resultados.

  • self — o URL da página atual.
  • first_page — o URL da primeira página de resultados.
  • last_page — o URL da última página de resultados.
  • next_page — o URL da próxima página. null se não houver próxima página.
  • prev_page — o URL da página anterior. null se não houver página anterior.

meta

Contém metadados sobre a resposta, como informações de paginação.

  • total — o número total de itens disponíveis em todas as páginas.
  • current_page — o número da página atual dos resultados.
  • per_page — o número de itens por página.

data

O conteúdo principal da resposta. data varia de acordo com o endpoint - pode ser um único objeto, por exemplo, um produto, ou uma matriz de objetos, por exemplo, uma lista de produtos.

QUANDO ALGO DÁ ERRADO

Erros e códigos de estado

Todas as solicitações de API retornam códigos de status HTTP que fornecem informações sobre a resposta.

400 Bad Request

O servidor não pode processar a solicitação devido a erros de validação - parâmetros ausentes ou inválidos.

401 Unauthorized

O cliente não forneceu credenciais de autenticação válidas. Também retornado quando o token de acesso foi revogado.

403 Forbidden

O servidor negou a solicitação devido a direitos de acesso insuficientes, normalmente causados ​​por permissões de acesso incorretas ou ausentes.

404 Not Found

O recurso solicitado não foi encontrado no servidor.

429 Too Many Requests

O cliente excedeu o número permitido de solicitações em um determinado período. Consulte Rate Limits.

5xx Errors

Ocorreu um erro interno do servidor. Entre em contato com o suporte da Fabrixa com detalhes da solicitação com falha.

Corpo de resposta de erro

Um exemplo de corpo de resposta de erro:

{
    "links": {
        "self": "https://api.fabrixa.com/v2/integration/ping"
    },
    "meta": [],
    "errors": {
        "messages": [
            "Application Key is not specified."
        ]
    }
}

errors contém detalhes sobre o que falhou. A matriz messages lista descrições de erros. Para uma solicitação incorreta, você receberá os nomes dos campos que falharam na validação.

CONHEÇA OS LIMITES DO SEU PEDIDO

Limites de pedidos

A API de integração suporta um limite de 30 solicitações por aplicativo por minuto.

Se você exceder esse limite, receberá uma resposta 429 Too Many Requests.

Todas as respostas da API de integração incluem o cabeçalho X-RateLimit-Remaining, quantas solicitações o cliente ainda pode fazer, e o cabeçalho X-RateLimit-Limit, o total permitido por minuto.

CRIAR E RASTREAR PEDIDOS

Pedidos

Crie encomendas na Fabrixa a partir da sua loja ou plataforma, anexe os ficheiros de impressão necessários e acompanhe cada item durante o fulfillment.

PREPARE OS DADOS DO SEU PEDIDO

Criar uma encomenda

Para criar uma encomenda através da Fabrixa Integration API, envie um pedido POST para https://api.fabrixa.com/v2/integration/orders. O request body deve incluir:

Solicitar estrutura corporal

  • number (opcional) - o número do pedido. Se não for fornecido, um número exclusivo será gerado.
  • comments (opcional) - quaisquer comentários ou notas adicionais relacionados ao pedido.
  • purchased_at - data e hora em que o pedido foi adquirido, formatado como YYYY-MM-DD HH:MM:SS.
  • client_ip (opcional) - o endereço IP do cliente.
  • client_user_agent (opcional) - o string user-agent do cliente.
  • rows - array de itens do pedido, cada um contendo:
    • sku - o SKU da variante do produto. Consulte Swagger para obter detalhes.
    • quantity - quantidade da variante do produto solicitada.
    • client_barcode (opcional) - identificador exclusivo do lado do cliente por linha de pedido, formatado como Code 128.
    • cart_item_key (obrigatório sem sources) - identificador exclusivo da incorporação da plataforma Fabrixa Studio, usado para associar personalizações salvas ao pedido.
    • sources (obrigatório sem cart_item_key) - matriz de arquivos de origem associados ao produto, cada um contendo:
      • type - o tipo de produto, use "file" por padrão.
      • url - URL da origem arquivo.
  • customer - detalhes do cliente:
    • first_name, last_name, email, phone.
  • shipping_address - detalhes de envio:
    • address, address2 (opcional), address3 (opcional).
    • city, country_code (ISO 3166-2), country, postal_code, state (opcional).
    • first_name, last_name, phone (opcional), company (opcional).
  • shipping_label (opcional) - detalhes da etiqueta:
    • method_name - por exemplo, "Postar NL".
    • tracking_number, tracking_url, label_pdf_url.
    • date_created - formatado como YYYY-MM-DD HH:MM:SS.

Solicitação de amostra

{
  "number": "NL2024010201",
  "comments": "Customer agrees with a low resolution file.",
  "purchased_at": "2024-06-26 21:12:22",
  "client_ip": "127.0.0.1",
  "client_user_agent": "Mozilla",
  "rows": [
    {
      "variant_id": 2705,
      "quantity": 1,
      "client_barcode": "1234567890",
      "sources": [
        {
          "type": "file",
          "url": "https://samples-files.com/samples/sample.pdf"
        }
      ]
    }
  ],
  "customer": {
    "first_name": "John",
    "last_name": "Doe",
    "email": "3VJtP@example.com",
    "phone": "0647185332"
  },
  "shipping_address": {
    "address": "Pierre cuypershof",
    "address2": "17",
    "city": "Amsterdam",
    "country_code": "NL",
    "country": "Netherlands",
    "postal_code": "1012 AB",
    "state": "North Holland",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "0647185332"
  },
  "shipping_label": {
    "method_name": "Post NL",
    "tracking_number": "3SYZXG1585577",
    "tracking_url": "https://postnl.nl/tracktrace/3SYZXG1585577",
    "label_pdf_url": "https://api.fabrixa.com/storage/8966630826422f36d822f91680012141.pdf",
    "date_created": "2024-01-01 00:00:00"
  }
}
RASTREIE SEUS ITENS DE PEDIDO

Acompanhar fulfillment

Para obter o estado de fulfillment de uma encomenda específica, envie um pedido GET para https://api.fabrixa.com/v2/integration/orders/{order_id}/fulfillments. A resposta fornece os fulfillments associados à encomenda, incluindo estado dos itens, detalhes do produto e progresso das etapas de produção.

Exemplo de resposta

{
    "data": [
        {
            "id": 1499,
            "barcode": "1200004169200",
            "status": "unfulfilled",
            "created_at": "2024-08-19T12:38:59.000000Z",
            "updated_at": "2024-08-19T12:39:00.000000Z",
            "variant": {
                "id": 32327,
                "name": "Test iAPI blanket product",
                "subtitle": "100 x 150 cm",
                "SKU": "COF099191"
            },
            "product": {
                "id": 1306,
                "name": "Test iAPI blanket product",
                "subtitle": "Test iAPI blanket product"
            },
            "production_steps": [
                {
                    "id": 5,
                    "name": "Print duvet",
                    "description": "Printing the duvet according to the specified design and dimensions.",
                    "status": {
                        "value": "pending",
                        "notes": null,
                        "updated_at": null
                    }
                },
                {
                    "id": 6,
                    "name": "Print pillow",
                    "description": "Printing the pillow cover with the assigned design.",
                    "status": {
                        "value": "pending",
                        "notes": null,
                        "updated_at": null
                    }
                }
            ]
        }
    ]
}

A resposta inclui uma lista de cumprimentos, cada um fornecendo:

  • id - identificador único para o cumprimento.
  • barcode - código de barras para rastreamento e identificação interna; também pode ser impresso no produto.
  • status - o status de cumprimento atual: não cumprido ou cumprido.
  • created_at e updated_at - carimbos de data e hora para criação de cumprimento e última atualização.
  • variant - informações detalhadas sobre a variante do produto: nome, subtítulo, SKU.
  • product - detalhes do produto: nome, subtítulo.
  • production_steps - conjunto de etapas de produção. A lista de etapas depende do tipo de produto. Para cada etapa:
    • id - identificador exclusivo para a etapa de produção.
    • name - por exemplo, "Imprimir edredom".
    • description - o que a etapa de produção envolve.
    • status - o status atual:
      • pendente - ainda não iniciado.
      • em andamento - atualmente em andamento.
      • rejeitado - a etapa encontrou um problema e não foi concluída com sucesso.
      • concluído - a etapa foi concluída.
    • notes - quaisquer notas adicionais relacionadas à etapa.
    • updated_at - a última vez que o status da etapa foi atualizado.

Cada registro de atendimento corresponde a um produto específico ou variante de produto no pedido, e cada cópia do produto no pedido tem seu próprio registro de atendimento - cada item é rastreado individualmente durante a produção.

Se nenhum atendimento for retornado para um pedido, o pedido ainda não entrou na fase de processamento.

COMO FORNECER ARQUIVOS DE IMPRESSÃO

Requisitos dos ficheiros fonte

Ao incluir source files na encomenda, confirme que cumprem os seguintes requisitos:

type

Você deve fornecer um arquivo PDF como fonte. Se o seu design contiver diversas camadas de produtos, inclua cada camada como uma página separada no mesmo PDF. Durante o processamento, cada página é tratada como uma camada individual, permitindo enviar um design multicamadas como um único arquivo de origem. See PDF requirements and page order.

O type no objeto de origem deve ser definido como "file".

"sources": [
    {
        "type": "file",
        "url": "https://samples-files.com/samples/source.pdf"
    }
]

Para obter mais detalhes, consulte Swagger documentation.

url

O campo url deve conter um link direto para o arquivo fonte. Certifique-se de que o URL esteja acessível e que o arquivo possa ser baixado sem autenticação. O link deve permanecer acessível durante todo o processo de produção.

Formato de arquivo

Forneça arquivos no formato PDF. Certifique-se de que as imagens sejam de alta qualidade e adequadas para impressão.

Dimensões da imagem

As dimensões máximas são 15,000 pixels em ambos os lados. Imagens que excedam esse limite poderão ser redimensionadas ou rejeitadas. A resolução da imagem deve corresponder às dimensões do produto; caso contrário, as imagens poderão ser redimensionadas ou cortadas para caber.

Resolução

Não há requisitos específicos de resolução – apenas garanta que a qualidade da imagem seja suficiente para impressão.

Espaço de cores

As imagens devem estar no espaço de cores RGB para uma representação precisa das cores. Outros espaços de cores serão convertidos durante o processamento, o que poderá resultar em cores incorretas.

Tamanho do arquivo

Cada arquivo de origem não deve exceder 50 MB. Arquivos maiores podem ser rejeitados ou causar atrasos no processamento.

Requisitos PDF e ordem das páginas

A ordem das páginas no PDF é importante. As páginas são combinadas com as camadas do produto por posição, e a ordem esperada das páginas depende do tipo de produto. Certifique-se de que as páginas do seu PDF sigam a sequência correta de camadas do produto que você está enviando.

ProdutoOrdem das páginas do PDF
Duvet Cover
  1. Duvet cover
  2. Pillow front
  3. Pillow back
Curtains
  1. Left curtain
  2. Right curtain
T-shirt
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Tanktop
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Collar
Sweater
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Collar
  8. Waistband
Hoodie
  1. Front
  2. Back
  3. Left sleeve
  4. Right sleeve
  5. Left cuff
  6. Right cuff
  7. Hood inside left
  8. Hood inside right
  9. Hood outside left
  10. Hood outside right
  11. Waistband
  12. Pocket lower left
  13. Pocket lower right
  14. Pocket upper right
  15. Pocket upper left
Sweatpants
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Left cuff
  6. Right cuff
  7. Waistband
  8. Right pocket
  9. Left pocket
  10. Back pocket
  11. Back pocket interfacing
Sweatshorts
  1. Front right
  2. Front left
  3. Back left
  4. Back right
  5. Waistband
  6. Right pocket
  7. Left pocket

Importante: cada página do PDF deve corresponder às dimensões exigidas para sua camada de produto e estar orientada corretamente. Posicione a arte de forma que a parte superior do design fique alinhada com a parte superior da página. O tamanho ou a orientação incorretos da página podem causar problemas de dimensionamento, rotação ou alinhamento na produção.

PERSONALIZAÇÃO DO PRODUTO

Fabrixa Studio

Fabrixa Studio é uma ferramenta que permite aos usuários customizar e personalizar produtos em tempo real com uma interface intuitiva onde os usuários podem criar ou fazer upload de seus próprios designs.

O Fabrixa Studio é ideal para empresas que oferecem produtos personalizados – permitindo que os clientes visualizem seus designs antes de finalizar os pedidos.

ADICIONE ESTÚDIO À SUA LOJA

Incorporar Estúdio Fabrixa

Pode incorporar o Fabrixa Studio no seu site usando um iframe. Isto permite que os clientes personalizem produtos diretamente no site durante o checkout.

Exemplo de iframe para incorporação do Fabrixa Studio:

<iframe id="fabrixa-studio"
    src="https://studio.fabrixa.com?application_key={application_key}&sku={product_sku}&cart_item_key={cart_item_key}"
    name="FabrixaStudio"
    scrolling="no"
    frameborder="1"
    width="100%"
    height="100%"
    allowfullscreen="">
</iframe>

Substitua os valores de product_sku, cart_item_key e application_key pelos seus valores dinâmicos.

Solicitação para criar um pedido com cart_item_key

{
  "number": "NL2024010201",
  "purchased_at": "2024-06-26 21:12:22",
  "client_ip": "127.0.0.1",
  "client_user_agent": "Mozilla",
  "rows": [
    {
      "sku": "SB796162",
      "quantity": 1,
      "cart_item_key": "0cb76770-de2d-4524-aa48-47b6e5f0d8a5"
    }
  ],
  "customer": {
    "...": "..."
  },
  "shipping_address": {
    "...": "..."
  },
  "shipping_label": {
    "...": "..."
  }
}
OUVIR AS AÇÕES DO CLIENTE

Lidar com eventos de estúdio

Quando o botão Adicionar ao carrinho é clicado dentro do iframe, o seguinte comando é executado:

window.parent.postMessage('customizationFinished', '*');

Da mesma forma, quando o botão Voltar é clicado:

window.parent.postMessage('closeButtonClicked', '*');

O método postMessage facilita a comunicação de origem cruzada entre o iframe e sua janela pai, permitindo notificar o pai sobre ações específicas do usuário.

O primeiro argumento de postMessage são os dados que você deseja enviar. A string 'customizationFinished' indica que o usuário finalizou a personalização e está adicionando o produto ao carrinho. 'closeButtonClicked' indica que o usuário optou por voltar.

Na janela pai, ouça estas mensagens usando o ouvinte de eventos message:

window.addEventListener('message', function(event) {
    if (event.origin === 'https://studio.fabrixa.com') {
        if (event.data === 'customizationFinished') {
            // Handle the Add to Cart event
            console.log('Customization finished and item can be added to cart.');
        } else if (event.data === 'closeButtonClicked') {
            // Handle the Back button event
            console.log('Back button clicked.');
        }
    }
});

Sempre verifique o origin das mensagens recebidas para garantir que elas venham de uma fonte confiável. Dependendo da mensagem recebida, execute as ações necessárias - atualize a interface do usuário, processe o carrinho, etc. A validação do origin é crucial para a segurança - evita que scripts não autorizados interajam com seu aplicativo.

MOSTRE O PROJETO ACABADO

Visualização da personalização

Após a conclusão da personalização, exiba o design final usando o URL de visualização abaixo. Este URL retorna uma imagem do produto customizado, adequada como o valor src em uma tag <img>. Ideal para mostrar o produto personalizado no carrinho, no resumo do pedido ou em qualquer lugar da interface da sua loja.

https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}

Substitua {CART_ITEM_KEY} pela chave real do item do carrinho e {APPLICATION_KEY} pela chave de aplicativo válida.

Exemplo de uso em uma tag de imagem:

<img
    src="https://api.fabrixa.com/v2/studio/customizations/{CART_ITEM_KEY}/preview?Application-Key={APPLICATION_KEY}"
    alt="Customized Product Preview"
    style="max-width: 100%; height: auto;" />
EXPERIMENTE COM SEUS VALORES

Demonstração ao vivo

A pré-visualização da personalização aparecerá aqui após a conclusão do design.

Customization preview
RECEBA ATUALIZAÇÕES DO EVENTO

Webhooks da Fabrixa

Webhooks são usados ​​pela Fabrixa para notificar seu sistema sobre eventos em tempo real - atualizações de pedidos ou criações. Quando ocorre um evento, a Fabrixa envia um webhook para o seu servidor contendo as informações relevantes. Seu servidor deve expor um endpoint POST público para lidar com webhooks recebidos.

REVER SEUS CABEÇALHOS DE ENTRADA

Cabeçalhos de solicitação de webhook

O pedido webhook inclui os seguintes headers para ajudar a identificar e validar o pedido recebido:

{
  "content-type": "application/json",
  "x-webhook-signature": "YmEwNjBhMGMyMzE3ZWQ5NGQ5NDYwOGVhNzNhMjQ4M2MyODZkZmI3NTQ1YzYxYjdkMzNhZjgzYzBmMTkxYTAxMw==",
  "x-webhook-topic": "order.updated"
}
Detalhamento do cabeçalho
ESCOLHA OS TÓPICOS DO SEU EVENTO

Eventos de webhook

Os webhooks da Fabrixa notificam o seu sistema sobre alterações no estado da encomenda ou atividade. Cada webhook é acionado por um valor específico de x-webhook-topic. Topics atualmente suportados:

TópicoDescrição
order.created Acionado quando um novo pedido é realizado na Fabrixa, seja via solicitação de API ou diretamente na plataforma.
order.updated Acionado quando os detalhes do pedido, como o status do pedido ou o status do atendimento, são atualizados.

Status do pedido

Status de cumprimento

INSPECIONE A CARGA DO SEU EVENTO

Exemplo de carga útil do webhook

Um exemplo de carga enviada com o webhook. Esta carga representa uma atualização do pedido:

{
  "id": 23069,
  "number": "1250211835",
  "comments": null,
  "is_archived": false,
  "status": "imported",
  "fulfillment_status": "unfulfilled",
  "purchased_at": "2025-04-17T16:17:21.000000Z",
  "created_at": "2025-04-17T16:17:23.000000Z",
  "updated_at": "2025-04-18T07:43:52.000000Z",
  "rows": [
    {
      "id": 27954,
      "quantity": 1,
      "client_barcode": "1250211835",
      "fulfillment_status": "unfulfilled",
      "variant": {
        "id": 293457,
        "name": "Sherpa fleece deken",
        "subtitle": "100x150",
        "SKU": "SFD787231",
        "product": {
          "id": 5319,
          "name": "Sherpa fleece deken",
          "subtitle": "Sherpa fleece deken"
        }
      },
      "sources": [
        {
          "type": "print",
          "url": "https://storage.googleapis.com/fabrixa-api/storage/99b10aaa-df4d-47e4-9bc9-b1d6a785df4c/orders/merchandise-sources/120002795400.pdf",
          "properties": {
            "fill_style": "contain"
          }
        }
      ]
    }
  ]
}
VERIFIQUE SUA FONTE DO WEBHOOK

Verifique assinaturas de webhook

Para garantir que o pedido webhook é autêntico e não foi alterado, verifique o header x-webhook-signature. Recalcule a signature HMAC-SHA256 usando o raw request payload e a sua secret key, e compare com a signature recebida.

Exemplo de PHP bruto

$payload = file_get_contents('php://input');
$yourSecret = 'your-secret-key';
$expectedSignature = base64_encode(hash_hmac('sha256', $payload, $yourSecret, true));
$receivedSignature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

if (!hash_equals($expectedSignature, $receivedSignature)) {
    http_response_code(403);
    exit('Invalid signature');
}

Exemplo de Laravel

public function handle(Request $request)
{
    $yourSecret = 'your-secret-key';
    $payload = $request->getContent();
    $expectedSignature = base64_encode(hash_hmac('sha256', $payload, $yourSecret, true));
    $receivedSignature = $request->header('x-webhook-signature');

    if (!hash_equals($expectedSignature, $receivedSignature)) {
        abort(403, 'Invalid signature');
    }

    // Continue processing...
}

Substitua $yourSecret pela sua chave secreta compartilhada. Sempre use hash_equals para comparar assinaturas para mitigar ataques de temporização.

E SE A ENTREGA FALHAR?

Novas tentativas de webhook

Por padrão, os webhooks são desativados após 10 tentativas de entrega malsucedidas. Se o seu endpoint retornar um status de falha, como 404 ou qualquer erro 5xx, o webhook tentará novamente por um total de 10 vezes. Se continuar retornando um código de resposta diferente de 2xx ou não 3xx, ele será desativado. As respostas bem-sucedidas incluem:

RETORNE UMA RESPOSTA CLARA

Resposta do webhook

Recomendamos fortemente que seu endpoint retorne um código de status 200 OK o mais rápido possível para confirmar o recebimento bem-sucedido do webhook. Embora qualquer resposta 2xx ou 3xx seja considerada bem-sucedida, 200 é a mais comumente usada e confiável.

Para evitar tempos limite de entrega ou novas tentativas, retorne 200 OK imediatamente e lide com o processamento de carga útil do webhook de forma assíncrona, por exemplo, por meio de uma tarefa ou fila em segundo plano. Se o seu endpoint demorar muito para responder, ele poderá ser considerado uma falha, mesmo que a resposta seja bem-sucedida.

Respostas com códigos de status no intervalo 4xx ou 5xx, ou tempos limite, acionarão novas tentativas de acordo com o mecanismo de novas tentativas.