PostTimely API Reference

60 tools for automated direct mail campaigns, brand analysis, audience targeting, and more.

Authentication

All requests require a Bearer token in the Authorization header.

Authorization: Bearer pt_live_...

Credit System

Each tool has a credit cost (some are free). Credits are deducted from your account balance. Signup includes 1,000 free credits.

Rate Limits

Per-key rate limits apply (default: 30/min for free tier). Check X-RateLimit-Remaining response headers.

Error Codes

INVALID_API_KEYAPI key is missing, invalid, or expired
INSUFFICIENT_CREDITSNot enough credits for this operation
RATE_LIMITEDToo many requests — retry after X-RateLimit-Reset
INVALID_INPUTRequest body failed validation (details has field errors)
TOOL_NOT_FOUNDUnknown tool name in URL
INTERNAL_ERRORUnexpected server error

getSubscriptionStatus

Get Subscription Status

AccountFree

Returns listing subscription details: status, billing period, monthly estimate.

POST /api/v1/getSubscriptionStatus
~300msIdempotent

manageListingSubscription

Manage Listing Subscription

AccountFree

Manages listing mailer subscription: pause, resume, cancel, or update payment.

POST /api/v1/manageListingSubscription
Side effects: updates_subscription~2000ms

upgradeAccountPlan

Upgrade Account Plan

AccountFree

Initiates account plan change. Returns Stripe checkout session for paid plans.

POST /api/v1/upgradeAccountPlan
Side effects: creates_subscription~2000ms

getCampaignAnalytics

Get Campaign Analytics

AnalyticsFree

Returns campaign performance: delivery breakdown, QR engagement, total cost, cost per piece.

POST /api/v1/getCampaignAnalytics
~500msIdempotent

getMailingStatuses

Get Mailing Statuses

AnalyticsFree

Returns individual mailing statuses with recipient address and tracking info.

POST /api/v1/getMailingStatuses
~500msIdempotent

configureNeighborhoodMail

Configure Neighbourhood Mail

Audience & TargetingFree

Configures neighbourhood blanket mail (Canada Post / Stannp). Radius-based delivery to all homes in area. Min 500 pieces, step 100.

POST /api/v1/configureNeighborhoodMail
Prerequisites: geocodeLocationSide effects: updates_campaign~300ms

estimateSearchCost

Estimate Search Cost

Audience & TargetingFree

Pre-search cost estimation. Returns estimated lead count and credit cost before committing to a search.

POST /api/v1/estimateSearchCost
Prerequisites: geocodeLocation~500msIdempotent

getAvailableMailSizes

Get Available Mail Sizes

Audience & TargetingFree

Returns available mail sizes for a country and channel.

POST /api/v1/getAvailableMailSizes
~100msIdempotent

previewNewListings

Preview New Listings

Audience & TargetingFree

Returns listing statistics for an area: 7-day count, daily average, monthly estimate, 20 sample listings.

POST /api/v1/previewNewListings
Prerequisites: geocodeLocation~10000msIdempotent

searchBusinessLeads

Search Business Leads

Audience & TargetingFree

Searches Google Places for businesses by type in a geographic area. Returns contacts with address, rating, phone, website, coordinates. Costs 1 credit per lead returned.

POST /api/v1/searchBusinessLeads
Prerequisites: geocodeLocationSide effects: creates_contacts, charges_credits~15000msVariable: +1/resultCount

searchHomeownerLeads

Search Homeowner Leads

Audience & TargetingFree

Searches Houski for homeowners by intent: pool_owners, older_homes, homes_with_yards, higher_value_homeowners, family_oriented_homeowners. Costs 1 credit per lead.

POST /api/v1/searchHomeownerLeads
Prerequisites: geocodeLocationSide effects: creates_contacts, charges_credits~12000msVariable: +1/resultCount

uploadLeadsCsv

Upload Leads CSV

Audience & TargetingFree

Imports leads from CSV with column mapping. Costs 1 credit per lead imported.

POST /api/v1/uploadLeadsCsv
Prerequisites: createCampaignSide effects: creates_contacts, charges_credits~5000msVariable: +1/leadCount

checkCanSpend

Check Can Spend

Billing & PricingFree

Checks if customer has sufficient credits for an operation.

POST /api/v1/checkCanSpend
~200msIdempotent

createListingSubscription

Create Listing Subscription

Billing & PricingFree

Creates recurring Stripe subscription for a listing campaign. Returns clientSecret.

POST /api/v1/createListingSubscription
Prerequisites: createListingCampaign, designPostcardFrontSide effects: creates_subscription~3000ms

createPaymentIntent

Create Payment Intent

Billing & PricingFree

Creates Stripe PaymentIntent for a campaign. Returns clientSecret.

POST /api/v1/createPaymentIntent
Prerequisites: createCampaign, searchBusinessLeads, designPostcardFrontSide effects: creates_payment~3000ms

getAccountPlans

Get Account Plans

Billing & PricingFree

Returns available account plans: Starter, Growth, Agency.

POST /api/v1/getAccountPlans
~100msIdempotent

getCreditBalance

Get Credit Balance

Billing & PricingFree

Returns current credit balance, lifetime earned, and lifetime spent for a customer.

POST /api/v1/getCreditBalance
~200msIdempotent

getMailingEstimate

Get Mailing Estimate

Billing & PricingFree

Returns tiered pricing breakdown for a campaign.

POST /api/v1/getMailingEstimate
~300msIdempotent

getNeighborhoodPricing

Get Neighbourhood Pricing

Billing & PricingFree

Returns neighbourhood mail pricing tiers.

POST /api/v1/getNeighborhoodPricing
~200msIdempotent

getTriggeredPricing

Get Triggered Pricing

Billing & PricingFree

Returns triggered/listing campaign pricing with generous tier qualification.

POST /api/v1/getTriggeredPricing
~300msIdempotent

postal.get_quote

Get Quote

Billing & PricingFree

Current per-piece pricing for your account, including volume-tier details.

POST /api/v1/postal.get_quote
Idempotent

postal.get_usage

Get Usage

Billing & PricingFree

Month-to-date piece counts, verified/unverified split, and accrued charges.

POST /api/v1/postal.get_usage
Idempotent

purchaseCredits

Purchase Credits

Billing & PricingFree

Initiates credit top-up. Returns Stripe PaymentIntent clientSecret.

POST /api/v1/purchaseCredits
Side effects: creates_payment~2000ms

createCampaign

Create Campaign

Campaign ManagementFree

Creates a draft campaign. Size defaults to 4x6 for postcards.

POST /api/v1/createCampaign
Side effects: creates_campaign~1000ms

createListingCampaign

Create Listing Campaign

Campaign ManagementFree

Creates new listing mailer campaign with preview stats and brand.

POST /api/v1/createListingCampaign
Prerequisites: previewNewListings, brandLookupSide effects: creates_campaign, may_grant_credits~2000ms

getCampaignStatus

Get Campaign Status

Campaign ManagementFree

Returns current campaign state: status, contacts count, designs, payment state, send progress.

POST /api/v1/getCampaignStatus
~300msIdempotent

scheduleSend

Schedule Send

Campaign ManagementFree

Schedules campaign for a future send date.

POST /api/v1/scheduleSend
Prerequisites: createPaymentIntentSide effects: updates_campaign~300ms

validateCampaignRouting

Validate Campaign Routing

Campaign ManagementFree

Validates multitype campaigns — checks template assignments, neighborhood config, required fields.

POST /api/v1/validateCampaignRouting
Prerequisites: createCampaign, searchBusinessLeads~500msIdempotent

getContactSummary

Get Contact Summary

ContactsFree

Returns summary counts: total, selected, deselected, by business type.

POST /api/v1/getContactSummary
Prerequisites: createCampaign~300msIdempotent

listCampaignContacts

List Campaign Contacts

ContactsFree

Returns paginated list of contacts for a campaign.

POST /api/v1/listCampaignContacts
Prerequisites: createCampaign~500msIdempotent

toggleContactSelection

Toggle Contact Selection

ContactsFree

Soft-selects or deselects contacts. Does NOT delete.

POST /api/v1/toggleContactSelection
Prerequisites: searchBusinessLeadsSide effects: updates_contacts~300ms

designLetter

Design Letter

Design50 credits

Creates letter design (US Letter XL Window format). Sections: paragraphs, bullets, CTAs, dividers, images.

POST /api/v1/designLetter
Prerequisites: brandLookupSide effects: creates_design, charges_credits~5000ms

designPostcardBack

Design Postcard Back

Design50 credits

Generates back design with address block compositing.

POST /api/v1/designPostcardBack
Prerequisites: designPostcardFrontSide effects: creates_design, charges_credits~20000ms

designPostcardFront

Design Postcard Front

Design50 credits

Generates front postcard design via Gemini at the correct bleed-inclusive resolution for the selected size.

POST /api/v1/designPostcardFront
Prerequisites: brandLookupSide effects: creates_design, charges_credits~25000ms

editDesign

Edit Design

Design50 credits

Edits an existing front design using Gemini image editing mode with natural language instructions.

POST /api/v1/editDesign
Prerequisites: designPostcardFrontSide effects: updates_design, charges_credits~20000ms

generateQrCode

Generate QR Code

Design2 credits

Generates QR code PNG. Auto-prepends https://, validates max 100 chars. Uses brand color if contrast >= 4:1.

POST /api/v1/generateQrCode
Side effects: creates_file~500msIdempotent

renderLetterPdf

Render Letter PDF

Design10 credits

Renders letter design to PDF via @react-pdf/renderer, uploads to storage, returns URL.

POST /api/v1/renderLetterPdf
Prerequisites: designLetterSide effects: creates_file, charges_credits~3000ms

geocodeLocation

Geocode Location

Geocoding1 credits

Geocodes an address to coordinates and bounding box for area targeting.

POST /api/v1/geocodeLocation
~1000msIdempotent

placeSelfLookup

Place Self-Lookup

Geocoding1 credits

Finds own business location and address via Google Places. Used for neighborhood mail center point.

POST /api/v1/placeSelfLookup
~1500msIdempotent

postal.validate_address

Validate Address

GeocodingFree

Validate and normalize a recipient address. Verified addresses qualify for the lower per-piece rate.

POST /api/v1/postal.validate_address
Idempotent

getListingCampaignStats

Get Listing Campaign Stats

Listing MailerFree

Returns postcards sent, period, monthly estimate, subscription status.

POST /api/v1/getListingCampaignStats
~300msIdempotent

getListingPreview

Get Listing Preview

Listing MailerFree

Returns listing stats: 7-day count, daily avg, monthly estimate, sample listings.

POST /api/v1/getListingPreview
Prerequisites: geocodeLocation~10000msIdempotent

checkSlugAvailability

Check Slug Availability

PlaybookFree

Checks if a playbook slug is available.

POST /api/v1/checkSlugAvailability
~200msIdempotent

configurePlaybookAudience

Configure Playbook Audience

PlaybookFree

Configures audience targeting for playbook.

POST /api/v1/configurePlaybookAudience
Prerequisites: createPlaybookSide effects: updates_playbook~300ms

createPlaybook

Create Playbook

PlaybookFree

Creates playbook from an existing campaign. Auto-generates slug.

POST /api/v1/createPlaybook
Prerequisites: createCampaignSide effects: creates_playbook~1000ms

createPlaybookFromScratch

Create Playbook from Scratch

PlaybookFree

Auto-generates a source campaign then creates a playbook from it.

POST /api/v1/createPlaybookFromScratch
Side effects: creates_campaign, creates_playbook~2000ms

generatePlaybookCopy

Generate Playbook Copy

Playbook10 credits

AI-generates launch page copy using brand/leads/area context.

POST /api/v1/generatePlaybookCopy
Prerequisites: createPlaybookSide effects: updates_playbook, charges_credits~8000ms

previewPlaybook

Preview Playbook

PlaybookFree

Loads full playbook preview.

POST /api/v1/previewPlaybook
Prerequisites: createPlaybook~2000msIdempotent

updatePlaybook

Update Playbook

PlaybookFree

Updates playbook configuration.

POST /api/v1/updatePlaybook
Prerequisites: createPlaybookSide effects: updates_playbook~300ms

postal.cancel_mailing

Cancel Mailing

SendingFree

Cancel a postcard. Guaranteed while held; best-effort after submission to print.

POST /api/v1/postal.cancel_mailing
Idempotent

postal.get_mailing

Get Mailing

SendingFree

Fetch one mailing with current status and proof PDF.

POST /api/v1/postal.get_mailing
Idempotent

postal.get_specs

Get Print Specs

SendingFree

Print specifications for available products: pixel dimensions at 300dpi including bleed, safe zones, and the reserved address area.

POST /api/v1/postal.get_specs
Idempotent

postal.list_mailings

List Mailings

SendingFree

List your mailings, newest first.

POST /api/v1/postal.list_mailings
Idempotent

postal.send_postcard

Send Postcard

SendingFree

Create a 4x6 postcard send. Artwork is fetched from your URLs, quality-checked, and held for your cancel window before printing. Priced per piece on your account rates.

POST /api/v1/postal.send_postcard

processCampaignSend

Process Campaign Send

SendingFree

Triggers full send pipeline. Awards +10 credits per postcard sent.

POST /api/v1/processCampaignSend
Prerequisites: createPaymentIntentSide effects: sends_mail, updates_campaign, awards_credits~30000ms

sendTestMailing

Send Test Mailing

SendingFree

Sends a single test postcard/letter to verify design before full campaign send.

POST /api/v1/sendTestMailing
Prerequisites: designPostcardFrontSide effects: sends_mail~5000ms

validateAddresses

Validate Addresses

SendingFree

Pre-send address validation via Google Address Validation API. Costs 5 credits per address.

POST /api/v1/validateAddresses
Prerequisites: createCampaign, searchBusinessLeadsSide effects: updates_contacts, charges_credits~10000msVariable: +5/addressCount

analyzeBusiness

Analyze Business

Setup & Brand5 credits

AI analysis of a business using web search. Returns business type, description, target audiences, and service areas.

POST /api/v1/analyzeBusiness
~8000msIdempotent

brandLookup

Brand Lookup

Setup & Brand5 credits

Scrapes a business website and extracts brand identity: logo URL, brand colors, tagline, voice, visual style, and contact info. Returns a brandId for use in design tools.

POST /api/v1/brandLookup
Side effects: creates_brand~5000msIdempotent

generateDescription

Generate Description

Setup & Brand3 credits

AI-generates a 1-2 sentence business description using Gemini with Google Search grounding.

POST /api/v1/generateDescription
Prerequisites: createCampaignSide effects: updates_campaign~4000ms