API

Go PDF Generation SDK

The official cloudlayerio-go package provides Go PDF generation with context support and zero external dependencies. Convert HTML to PDF, capture URLs as documents, and render templates — using only the Go standard library.

Installation

go get github.com/cloudlayerio/cloudlayerio-go

Requirements: Go 1.21+, zero external dependencies

Setup

Get your API key by creating a free account at cloudlayer.io. Your account comes with free API credits for testing.

import cloudlayer "github.com/cloudlayerio/cloudlayerio-go"

client, err := cloudlayer.NewClient("YOUR-API-KEY", cloudlayer.V2)

The SDK requires you to choose an API version:

v1v2
Default modeSynchronous (returns binary)Asynchronous (returns Job)
Sync responseRaw binary (PDF/image bytes)JSON Job object
Binary accessDirect from result.DataVia DownloadJobResult()

URL to PDF

v2 returns a Job object. Use DownloadJobResult() to get the binary:

result, err := client.URLToPDF(ctx, &cloudlayer.URLToPDFOptions{
    URLOptions: cloudlayer.URLOptions{
        URL: cloudlayer.StringPtr("https://example.com"),
    },
})
if err != nil {
    log.Fatal(err)
}

// Wait for the job to complete
job, err := client.WaitForJob(ctx, result.Job.ID)
if err != nil {
    log.Fatal(err)
}

// Download the PDF binary
data, err := client.DownloadJobResult(ctx, job)
if err != nil {
    log.Fatal(err)
}

os.WriteFile("output.pdf", data, 0644)

v1 (legacy)

v1 returns raw binary directly:

client, _ := cloudlayer.NewClient("YOUR-API-KEY", cloudlayer.V1)

result, err := client.URLToPDF(ctx, &cloudlayer.URLToPDFOptions{
    URLOptions: cloudlayer.URLOptions{
        URL: cloudlayer.StringPtr("https://example.com"),
    },
})
if err != nil {
    log.Fatal(err)
}

os.WriteFile("output.pdf", result.Data, 0644)

HTML to PDF

result, err := client.HTMLToPDF(ctx, &cloudlayer.HTMLToPDFOptions{
    HTMLOptions: cloudlayer.HTMLOptions{
        HTML: cloudlayer.EncodeHTML("<h1>Hello World</h1><p>Generated by cloudlayer.io</p>"),
    },
    PDFOptions: cloudlayer.PDFOptions{
        Format:          &cloudlayer.FormatA4,
        PrintBackground: cloudlayer.BoolPtr(true),
    },
})

Template to PDF

result, err := client.TemplateToPDF(ctx, &cloudlayer.TemplateToPDFOptions{
    TemplateOptions: cloudlayer.TemplateOptions{
        TemplateID: cloudlayer.StringPtr("professional-invoice"),
        Data: map[string]interface{}{
            "invoiceNumber": "INV-2024-001",
            "companyName":   "Acme Corp",
            "items": []map[string]interface{}{
                {"name": "Widget A", "quantity": 10, "price": 25.00},
            },
            "total": 250.00,
        },
    },
})

Error Handling

All errors are concrete types supporting errors.As:

result, err := client.HTMLToPDF(ctx, opts)
if err != nil {
    var authErr *cloudlayer.AuthError
    if errors.As(err, &authErr) {
        log.Fatal("Invalid API key")
    }

    var rateLimitErr *cloudlayer.RateLimitError
    if errors.As(err, &rateLimitErr) {
        log.Printf("Rate limited, retry after %ds", *rateLimitErr.RetryAfter)
    }

    log.Fatal(err)
}
Error TypeWhen
*AuthErrorInvalid or missing API key (401/403)
*RateLimitErrorRate limit exceeded (429)
*APIErrorOther API errors
*ValidationErrorInvalid input parameters
*NetworkErrorConnection failures

All Conversion Methods

MethodDescription
URLToPDF()Convert a URL to PDF
URLToImage()Screenshot a URL
HTMLToPDF()Convert HTML to PDF
HTMLToImage()Convert HTML to image
TemplateToPDF()Render template as PDF
TemplateToImage()Render template as image
DOCXToPDF()Convert DOCX to PDF
DOCXToHTML()Convert DOCX to HTML
PDFToDOCX()Convert PDF to DOCX
MergePDFs()Merge multiple PDFs

Data Management

// List recent jobs
jobs, _ := client.ListJobs(ctx)

// Get account usage
account, _ := client.GetAccount(ctx)

// Configure custom storage
client.AddStorage(ctx, &cloudlayer.StorageParams{
    Title:          "My S3 Bucket",
    Bucket:         "my-pdfs",
    Region:         "us-east-1",
    AccessKeyID:    "AKIA...",
    SecretAccessKey: "...",
})