Ship Toolkit API

Barındırılan etiket ve PDF endpoint'leri HTTPS üzerinden JSON kabul eder ve oluşturulan PDF dosyalarını doğrudan döndürür. API anahtarlarını kaynak kodun dışında tutun ve bearer token olarak gönderin.

Hızlı başlangıç

Temel URLhttps://shiptoolkit.com
YöntemPOST barındırılan oluşturma API'leri için
Kimlik doğrulamaAuthorization: Bearer <api-key>
GövdeContent-Type: application/json
İdempotensiIdempotency-Key: <unique value>
Başarılıapplication/pdf

Barındırılan etiket ve PDF API'leri bir API anahtarı gerektirir. Erişim istemek için iletişime geçin: shiptoolkit@element-express.com.

Başarılı PDF yanıtları şunları içerir Content-Disposition, X-Page-Count, X-Content-SHA256 ve ayrıca X-Label-Type veya X-PDF-Operation. Hata yanıtları, şu alanı içeren JSON'dur: error .

{
  "standardLabelSize": [
    "2.00x1.00",
    "2.25x1.25",
    "2.50x1.00",
    "3.00x1.00",
    "3.00x1.50",
    "3.00x2.00",
    "4.00x2.00",
    "50x30mm",
    "60x30mm",
    "60x40mm"
  ],
  "cartonMarkLabelSize": ["6x4", "4x4", "4x3", "4x2"]
}

Python yardımcısı

import base64
import json
import os
import uuid
import urllib.request
from pathlib import Path

BASE_URL = "https://shiptoolkit.com"
API_KEY = os.environ["SHIPTOOLKIT_API_KEY"]

def post_pdf(path, payload, output_file):
    request = urllib.request.Request(
        BASE_URL + path,
        data=json.dumps(payload).encode("utf-8"),
        method="POST",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
            "Idempotency-Key": str(uuid.uuid4()),
            "User-Agent": "ShipToolkit-API-Example/1.0",
        },
    )
    with urllib.request.urlopen(request, timeout=60) as response:
        pdf = response.read()
        if not pdf.startswith(b"%PDF-"):
            raise RuntimeError("Ship Toolkit returned a non-PDF response.")
    Path(output_file).write_bytes(pdf)

def pdf_base64(filename):
    return base64.b64encode(Path(filename).read_bytes()).decode("ascii")

Java yardımcısı

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
import java.util.UUID;

class ShipToolkitApi {
    static final String BASE_URL = "https://shiptoolkit.com";
    static final String API_KEY = System.getenv("SHIPTOOLKIT_API_KEY");
    static final HttpClient CLIENT = HttpClient.newHttpClient();

    static void postPdf(String path, String json, Path outputFile)
            throws IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(BASE_URL + path))
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "application/json")
            .header("Idempotency-Key", UUID.randomUUID().toString())
            .header("User-Agent", "ShipToolkit-API-Example/1.0")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
        HttpResponse<byte[]> response = CLIENT.send(
            request,
            HttpResponse.BodyHandlers.ofByteArray()
        );
        if (response.statusCode() != 200) {
            throw new IOException("Ship Toolkit API failed: " + response.statusCode());
        }
        Files.write(outputFile, response.body());
    }

    static String pdfBase64(Path file) throws IOException {
        return Base64.getEncoder().encodeToString(Files.readAllBytes(file));
    }
}

Etiket API'leri

Bu endpoint'ler PDF etiket dosyaları döndürür ve bearer API anahtarı gerektirir.

POST /v1/labels/amazon-fnsku

10 karakterli bir FNSKU'dan Amazon ürün etiketi oluşturun.

AlanTürZorunluVarsayılanKısıtlamalar
skustringtrue-pattern: ^[A-Z0-9]{10}$
modelstringtrue-maxLength: 240
titlestringtrue-maxLength: 500
madeInstringtrue-maxLength: 80
labelSizeenumtrue-standardLabelSize
oldSkustringfalse""maxLength: 128
productConditionenumfalse"other"["new", "other"]

Python

payload = {
    "sku": "X001ABC123",
    "model": "ABC-123",
    "title": "Sample product",
    "madeIn": "China",
    "productCondition": "new",
    "labelSize": "2.25x1.25",
    "oldSku": "OLD-123",
}
post_pdf("/v1/labels/amazon-fnsku", payload, "amazon-fnsku.pdf")

Java

String json = """
{
  "sku": "X001ABC123",
  "model": "ABC-123",
  "title": "Sample product",
  "madeIn": "China",
  "productCondition": "new",
  "labelSize": "2.25x1.25",
  "oldSku": "OLD-123"
}
""";
ShipToolkitApi.postPdf(
    "/v1/labels/amazon-fnsku",
    json,
    Path.of("amazon-fnsku.pdf")
);

POST /v1/labels/amazon-fba-ups

Add text overlays to Amazon FBA and UPS labels, then return 4 x 6 inch output pages with optional scaling and duplicate copies.

AlanTürZorunluVarsayılanKısıtlamalar
pdfBase64stringtrue-maxBytes: 7MB
filenamestringfalse"amazon-fba-ups-labels.pdf"maxLength: 160
fbaTextstringfalse""maxLength: 500
upsTextstringfalse""maxLength: 500
scalePercentnumberfalse95min: 1, max: 100
twoFbaCopiesbooleanfalsefalse-
twoUpsCopiesbooleanfalsefalserequires twoFbaCopies

Python

payload = {
    "pdfBase64": pdf_base64("fba-ups-source.pdf"),
    "filename": "fba-ups-source.pdf",
    "fbaText": "BOX 1",
    "upsText": "CARTON A",
    "scalePercent": 95,
    "twoFbaCopies": False,
    "twoUpsCopies": False,
}
post_pdf("/v1/labels/amazon-fba-ups", payload, "fba-ups-labels.pdf")

Java

String source = ShipToolkitApi.pdfBase64(Path.of("fba-ups-source.pdf"));
String json = """
{
  "pdfBase64": "%s",
  "filename": "fba-ups-source.pdf",
  "fbaText": "BOX 1",
  "upsText": "CARTON A",
  "scalePercent": 95
}
""".formatted(source);
ShipToolkitApi.postPdf(
    "/v1/labels/amazon-fba-ups",
    json,
    Path.of("fba-ups-labels.pdf")
);

Source pages may be native 4 x 6, 4.25 x 6, or US Letter pages with two labels. US Letter pages use the built-in two-label crop layout.

POST /v1/labels/walmart-sku

14 haneli Walmart SKU'sundan Walmart fulfillment ürün etiketi oluşturun.

AlanTürZorunluVarsayılanKısıtlamalar
skustringtrue-pattern: ^\d{14}$
modelstringtrue-maxLength: 240
titlestringtrue-maxLength: 500
madeInstringtrue-maxLength: 80
labelSizeenumtrue-standardLabelSize
productConditionenumfalse"other"["new", "other"]

Python

payload = {
    "sku": "12345678901234",
    "model": "ShipToolkit-001",
    "title": "Walmart fulfillment label",
    "madeIn": "China",
    "productCondition": "new",
    "labelSize": "2.25x1.25",
}
post_pdf("/v1/labels/walmart-sku", payload, "walmart-sku.pdf")

Java

String json = """
{
  "sku": "12345678901234",
  "model": "ShipToolkit-001",
  "title": "Walmart fulfillment label",
  "madeIn": "China",
  "productCondition": "new",
  "labelSize": "2.25x1.25"
}
""";
ShipToolkitApi.postPdf(
    "/v1/labels/walmart-sku",
    json,
    Path.of("walmart-sku.pdf")
);

POST /v1/labels/outbound-box

Kutu barkodu ve ürün özeti içeren kompakt bir çıkış kutusu etiketi oluşturun.

AlanTürZorunluVarsayılanKısıtlamalar
boxIdstringtrue-maxLength: 80
organizationstringtrue-maxLength: 160
itemsarray<object>true-maxItems: 200
items[].skustringfalseitems[].model maxLength: 128
items[].quantitystring|numberfalseitems[].qtymaxLength: 20
dimensionstringfalse""maxLength: 120
weightstringfalse""maxLength: 120
labelSizeenumfalse"2.25x1.25"standardLabelSize
createBarcodebooleanfalsetrue-
barcodeValuestringfalseboxIdmaxLength: 80

Python

payload = {
    "boxId": "BOX-1001",
    "organization": "Example Seller",
    "dimension": "20 x 10 x 8 in",
    "weight": "15 lbs",
    "labelSize": "3.00x1.50",
    "createBarcode": true,
    "items": [
        {"sku": "X001ABC123", "quantity": 4},
        {"sku": "X001ABC456", "quantity": 2},
    ],
}
post_pdf("/v1/labels/outbound-box", payload, "outbound-box.pdf")

Java

String json = """
{
  "boxId": "BOX-1001",
  "organization": "Example Seller",
  "dimension": "20 x 10 x 8 in",
  "weight": "15 lbs",
  "labelSize": "3.00x1.50",
  "createBarcode": true,
  "items": [
    {"sku": "X001ABC123", "quantity": 4},
    {"sku": "X001ABC456", "quantity": 2}
  ]
}
""";
ShipToolkitApi.postPdf(
    "/v1/labels/outbound-box",
    json,
    Path.of("outbound-box.pdf")
);

POST /v1/labels/carton-mark

Her karton için bir sayfa olacak şekilde karton işareti etiketleri oluşturun.

AlanTürZorunluVarsayılanKısıtlamalar
consigneestringtrue-maxLength: 120
shipperstringtrue-maxLength: 120
destinationAddressstringtrue-maxLength: 500
orderNostringtrue-maxLength: 80
cartonTotalintegertrue-min: 1
quantitystring|numbertrue-maxLength: 80
productDescriptionstringtrue-maxLength: 500
labelSizeenumfalse"6x4"cartonMarkLabelSize
barcodeValuestringfalseorderNomaxLength: 120
cartonStartintegerfalse1min: 1

Python

payload = {
    "consignee": "Receiving Team",
    "shipper": "Example Seller",
    "destinationAddress": "123 Warehouse Way, Newark, DE 19713",
    "orderNo": "PO-20260717-001",
    "cartonTotal": 3,
    "quantity": "50 PCS",
    "productDescription": "Portable night light",
    "labelSize": "6x4",
}
post_pdf("/v1/labels/carton-mark", payload, "carton-mark.pdf")

Java

String json = """
{
  "consignee": "Receiving Team",
  "shipper": "Example Seller",
  "destinationAddress": "123 Warehouse Way, Newark, DE 19713",
  "orderNo": "PO-20260717-001",
  "cartonTotal": 3,
  "quantity": "50 PCS",
  "productDescription": "Portable night light",
  "labelSize": "6x4"
}
""";
ShipToolkitApi.postPdf(
    "/v1/labels/carton-mark",
    json,
    Path.of("carton-mark.pdf")
);

POST /v1/labels/transparency

Amazon Transparency etiket PDF'lerini FNSKU, model, tarih ve hedef etiket boyutuyla özelleştirin.

AlanTürZorunluVarsayılanKısıtlamalar
pdfBase64stringtrue-maxBytes: 7MB
fnskustringtrue-maxLength: 80
labelSizeenumtrue-standardLabelSize
modelstringfalse""maxLength: 240
datestringfalsenowmaxLength: 40

Python

payload = {
    "pdfBase64": pdf_base64("transparency-source.pdf"),
    "fnsku": "X001ABC123",
    "model": "MODEL-1",
    "date": "2026-07-17",
    "labelSize": "2.25x1.25",
}
post_pdf("/v1/labels/transparency", payload, "transparency.pdf")

Java

String source = ShipToolkitApi.pdfBase64(Path.of("transparency-source.pdf"));
String json = """
{
  "pdfBase64": "%s",
  "fnsku": "X001ABC123",
  "model": "MODEL-1",
  "date": "2026-07-17",
  "labelSize": "2.25x1.25"
}
""".formatted(source);
ShipToolkitApi.postPdf(
    "/v1/labels/transparency",
    json,
    Path.of("transparency.pdf")
);

PDF API'leri

Bu endpoint'ler dönüştürülmüş PDF dosyaları döndürür ve bearer API anahtarı gerektirir.

POST /v1/pdf/resize

Her sayfayı kaynak içeriği kırpmadan ön ayarlı veya özel sayfa boyutuna yeniden boyutlandırın.

AlanTürZorunluVarsayılanKısıtlamalar
pdfBase64stringtrue-maxBytes: 7MB
filenamestringfalse"document.pdf"maxLength: 160
sizeenumfalse"letter""letter"|"legal"|"a4"|"4x6"|"custom"
orientationenumfalse"match""match"|"portrait"|"landscape"
customWidthnumberfalse-required when size="custom"
customHeightnumberfalse-required when size="custom"
customUnitenumfalse"in""in"|"mm"

Python

payload = {
    "pdfBase64": pdf_base64("source.pdf"),
    "filename": "source.pdf",
    "size": "custom",
    "customWidth": 2.25,
    "customHeight": 1.25,
    "customUnit": "in",
}
post_pdf("/v1/pdf/resize", payload, "resized.pdf")

Java

String source = ShipToolkitApi.pdfBase64(Path.of("source.pdf"));
String json = """
{
  "pdfBase64": "%s",
  "filename": "source.pdf",
  "size": "custom",
  "customWidth": 2.25,
  "customHeight": 1.25,
  "customUnit": "in"
}
""".formatted(source);
ShipToolkitApi.postPdf("/v1/pdf/resize", json, Path.of("resized.pdf"));

POST /v1/pdf/scale

Her sayfa boyutunu değiştirmeden sayfa içeriğini merkez etrafında ölçeklendirin.

AlanTürZorunluVarsayılanKısıtlamalar
pdfBase64stringtrue-maxBytes: 7MB
filenamestringfalse"document.pdf"maxLength: 160
scalePercentnumberfalse100min: 1, max: 400

Python

payload = {
    "pdfBase64": pdf_base64("source.pdf"),
    "filename": "source.pdf",
    "scalePercent": 82,
}
post_pdf("/v1/pdf/scale", payload, "scaled.pdf")

Java

String source = ShipToolkitApi.pdfBase64(Path.of("source.pdf"));
String json = """
{
  "pdfBase64": "%s",
  "filename": "source.pdf",
  "scalePercent": 82
}
""".formatted(source);
ShipToolkitApi.postPdf("/v1/pdf/scale", json, Path.of("scaled.pdf"));