Sending personalized documents
has never been easier

Try it Now Full Pricing

Trigger recurring, event-driven letters at scale

With the Lob API, you can send customized letters based on specific events you define or actions your customers take. From personalized test results to tailored offer letters, you can generate each document on demand, no batching required.

Secure documents for your customer's eyes only

Your letters are sent quickly, securely, and accurately. Lob offers 100% HIPAA compliance from production to delivery, ensuring each document is for the intended recipient's eyes only.

Track everything along the way

Keep an eye on your delivery stats and add any additional campaign tracking you'd like, from promo codes to unique URLs and phone numbers. With Lob, you know when each document is processed, printed, and delivered, at no additional cost.


Simple, on-demand pricing

Lob's prices are determined based on your volume over time—not batch by batch. Printing, mailing, and postage are all included in one low price. Start by paying for only what you send, or leverage our subscription plans to see additional savings and gain access to special features. No setup costs or guesswork, only the clearest billing structure possible to help you get up and running smoothly.

Pricing Calculator



$0.95 $1.15 per 1-page domestic letter

Check out our pricing plans for further discounts at higher volumes.

Full Pricing

See how Counsyl uses Lob to automate invoicing

Counsyl abandoned uninformative invoices in favor of clear, custom ones sent through Lob. Their HIPAA-compliant invoice process is now entirely automated, and each bill contains specific information to help patients understand their payment responsibility. Patient payments increased dramatically and customer service inquiries plummeted as a result. Read more…


Easy integration via REST API

Submit your template along with a shipping address in one simple API call. Integration is dead simple with pre-built wrappers and code examples in Ruby, Python, PHP, Java, and Node.js.

Read the Docs View Libraries
  • curl

  • Node

  • Ruby

  • Python

  • PHP

  • Java

  • 
    curl https://api.lob.com/v1/letters \
      -u test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc: \
      -d "description=Demo Letter" \
      -d "to[name]=Harry Zhang" \
      -d "to[address_line1]=123 Test Street" \
      -d "to[address_city]=Mountain View" \
      -d "to[address_state]=CA" \
      -d "to[address_zip]=94041" \
      -d "to[address_country]=US" \
      -d "from=adr_76e48bf412848b2a" \
      --data-urlencode "file=<html style='padding-top: 3in; margin: .5in;'>HTML Letter for {{name}}</html>" \
      -d "merge_variables[name]=Harry" \
      -d "color=true"
    
              
    
    Lob.letters.create({
      description: 'My First Letter',
      to: {
        name: 'Joe Smith',
        address_line1: '123 Main Street',
        address_city: 'Mountain View',
        address_state: 'CA',
        address_zip: '94041'
      },
      from: 'adr_657076073eb87af2',
      file: '<html style="padding-top: 3in; margin: .5in;">HTML Letter for {{name}}</html>',
      merge_variables: {
        name: 'Harry'
      },
    }, function (err, res) {
      console.log(err, res);
    });
    
              
    
    @Lob.letters.create(
      description: "My First Letter",
      to: {
        name: "Joe Smith",
        address_line1: "123 Main Street",
        address_city: "Mountain View",
        address_state: "CA",
        address_zip: 94041
      },
      from: "adr_657076073eb87af2",
      file: "<html style='padding-top: 3in; margin: .5in;'>HTML Letter for {{name}}</html>",
      merge_variables: {
        name: "Harry"
      },
      color: true
    )
    
              
    
    Lob.Letter.create(
        description = 'My First Letter',
        to_address = {
            'name': 'Joe Smith',
            'address_line1': '123 Main Street',
            'address_city': 'Mountain View',
            'address_state': 'CA',
            'address_zip': '94041',
        },
        from_address = 'adr_657076073eb87af2',
        file = '<html style="padding-top: 3in; margin: .5in;">HTML Letter for {{name}}</html>',
        merge_variables = {
          'name': 'Harry'
        },
        color = True
    )
    
              
    
    $Lob->letters()->create(array(
      'description' => 'My First Letter',
      'to' => array(
        'name'          => 'Joe Smith',
        'address_line1' => '123 Main Street',
        'address_city'  => 'Mountain View',
        'address_state' => 'CA',
        'address_zip'   => '94041',
      ),
      'from' => 'adr_657076073eb87af2',
      'file'                  => '<html style="padding-top: 3in; margin: .5in;">HTML Letter for {{name}}</html>',
      'merge_variables[name]' => 'Harry',
      'color'                 => true
    ));
    
              
    
    final Map<String, String> mergeVariables = Maps.newHashMap();
    mergeVariables.put("name", "Harry");
    
    final LetterRequest letterRequest = LetterRequest.builder()
      .description("Demo Letter")
      .to(AddressRequest.builder()
        .name("Harry Zhang")
        .line1("123 Test Street")
        .city("Mountain View")
        .state("CA")
        .zip("94041")
        .country("US")
        .build())
      .from(AddressId.parse("adr_657076073eb87af2"))
      .file("<html style='padding-top: 3in; margin: .5in;'>HTML Letter for {{name}}</html>")
      .mergeVariables(mergeVariables)
      .color(true)
      .build();
    
    final LetterResponse letter = client.createLetter(letterRequest).get();