Skip to content
Get started

Print Mail

ModelsExpand Collapse
Create Bank Account
print_mail.bank_accounts.create(BankAccountCreateParams**kwargs) -> BankAccount
POST/print-mail/v1/bank_accounts
List Bank Accounts
print_mail.bank_accounts.list(BankAccountListParams**kwargs) -> SyncSkipLimit[BankAccount]
GET/print-mail/v1/bank_accounts
Get Bank Account
print_mail.bank_accounts.retrieve(strid) -> BankAccount
GET/print-mail/v1/bank_accounts/{id}
Delete Bank Account
print_mail.bank_accounts.delete(strid) -> BankAccountDeleteResponse
DELETE/print-mail/v1/bank_accounts/{id}
ModelsExpand Collapse
One of the following:
One of the following:

The campaigns API enables you to send out large volumes of fully personalized mail to a mailing list.

Create Campaign
print_mail.campaigns.create(CampaignCreateParams**kwargs) -> Campaign
POST/print-mail/v1/campaigns
List Campaigns
print_mail.campaigns.list(CampaignListParams**kwargs) -> SyncSkipLimit[Campaign]
GET/print-mail/v1/campaigns
Get Campaign
print_mail.campaigns.retrieve(strid) -> Campaign
GET/print-mail/v1/campaigns/{id}
Update Campaign
print_mail.campaigns.update(strid, CampaignUpdateParams**kwargs) -> Campaign
POST/print-mail/v1/campaigns/{id}
Delete Campaign
print_mail.campaigns.delete(strid) -> CampaignDeleteResponse
DELETE/print-mail/v1/campaigns/{id}
Send Campaign
print_mail.campaigns.send(strid, CampaignSendParams**kwargs) -> Campaign
POST/print-mail/v1/campaigns/{id}/send
ModelsExpand Collapse
One of the following:
One of the following:
Create Cheque
print_mail.cheques.create(ChequeCreateParams**kwargs) -> Cheque
POST/print-mail/v1/cheques
List Cheques
print_mail.cheques.list(ChequeListParams**kwargs) -> SyncSkipLimit[Cheque]
GET/print-mail/v1/cheques
Get Cheque
print_mail.cheques.retrieve(strid) -> Cheque
GET/print-mail/v1/cheques/{id}
Cancel Cheque
print_mail.cheques.delete(strid) -> Cheque
DELETE/print-mail/v1/cheques/{id}
Get Cheque Preview
print_mail.cheques.retrieve_url(strid) -> ChequeRetrieveURLResponse
GET/print-mail/v1/cheques/{id}/url
Retrieve Cheque Deposit-Ready PDF (Digital Only)
print_mail.cheques.retrieve_with_deposit_ready_pdf(strid) -> Cheque
GET/print-mail/v1/cheques/{id}/with_deposit_ready_pdf
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
Create Contact
print_mail.contacts.create(ContactCreateParams**kwargs) -> Contact
POST/print-mail/v1/contacts
List Contacts
print_mail.contacts.list(ContactListParams**kwargs) -> SyncSkipLimit[Contact]
GET/print-mail/v1/contacts
Get Contact
print_mail.contacts.retrieve(strid) -> Contact
GET/print-mail/v1/contacts/{id}
Delete Contact
print_mail.contacts.delete(strid) -> ContactDeleteResponse
DELETE/print-mail/v1/contacts/{id}
ModelsExpand Collapse
One of the following:
One of the following:
Create Letter
print_mail.letters.create(LetterCreateParams**kwargs) -> Letter
POST/print-mail/v1/letters
List Letters
print_mail.letters.list(LetterListParams**kwargs) -> SyncSkipLimit[Letter]
GET/print-mail/v1/letters
Get Letter
print_mail.letters.retrieve(strid) -> Letter
GET/print-mail/v1/letters/{id}
Cancel Letter
print_mail.letters.delete(strid) -> Letter
DELETE/print-mail/v1/letters/{id}
Get Letter Preview
print_mail.letters.retrieve_url(strid) -> LetterRetrieveURLResponse
GET/print-mail/v1/letters/{id}/url
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:

The mailing list imports API enables you to import contact lists from files and validate them for use in campaigns.

Create Mailing List Import
print_mail.mailing_list_imports.create(MailingListImportCreateParams**kwargs) -> MailingListImportResponse
POST/print-mail/v1/mailing_list_imports
List Mailing List Imports
print_mail.mailing_list_imports.list(MailingListImportListParams**kwargs) -> SyncSkipLimit[MailingListImportResponse]
GET/print-mail/v1/mailing_list_imports
Update Mailing List Import
print_mail.mailing_list_imports.update(strid, MailingListImportUpdateParams**kwargs) -> MailingListImportResponse
POST/print-mail/v1/mailing_list_imports/{id}
Get Mailing List Import
print_mail.mailing_list_imports.retrieve(strid) -> MailingListImportResponse
GET/print-mail/v1/mailing_list_imports/{id}
Delete Mailing List Import
print_mail.mailing_list_imports.delete(strid) -> MailingListImportDeleteResponse
DELETE/print-mail/v1/mailing_list_imports/{id}
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
Create Mailing List
print_mail.mailing_lists.create(MailingListCreateParams**kwargs) -> MailingList
POST/print-mail/v1/mailing_lists
List Mailing Lists
print_mail.mailing_lists.list(MailingListListParams**kwargs) -> SyncSkipLimit[MailingList]
GET/print-mail/v1/mailing_lists
Get Mailing List
print_mail.mailing_lists.retrieve(strid) -> MailingList
GET/print-mail/v1/mailing_lists/{id}
Update Mailing List
print_mail.mailing_lists.update(strid, MailingListUpdateParams**kwargs) -> MailingListUpdate
POST/print-mail/v1/mailing_lists/{id}
Delete Mailing List
print_mail.mailing_lists.delete(strid) -> MailingListDeleteResponse
DELETE/print-mail/v1/mailing_lists/{id}
Submit a Mailing List Job
print_mail.mailing_lists.jobs(strid, MailingListJobsParams**kwargs) -> MailingList
POST/print-mail/v1/mailing_lists/{id}/jobs
ModelsExpand Collapse
One of the following:
One of the following:

Order Profiles are reusable blueprints for creating print and mail orders (Letters, Postcards, Cheques, Self-Mailers). They define common properties like size, content (via templates or uploaded PDFs), mailing class, and metadata. Using profiles simplifies order creation, especially for recurring mailings or campaigns, by pre-filling many parameters.

Profiles are environment-specific (live vs. test).

Create Cheque Profile
print_mail.order_profiles.cheques.create(ChequeCreateParams**kwargs) -> ChequeProfile
POST/print-mail/v1/order_profiles/cheques
List Cheque Profiles
print_mail.order_profiles.cheques.list(ChequeListParams**kwargs) -> SyncSkipLimit[ChequeListResponse]
GET/print-mail/v1/order_profiles/cheques
Retrieve Cheque Profile
print_mail.order_profiles.cheques.retrieve(strid, ChequeRetrieveParams**kwargs) -> ChequeProfile
GET/print-mail/v1/order_profiles/cheques/{id}
Update Cheque Profile
print_mail.order_profiles.cheques.update(strid, ChequeUpdateParams**kwargs) -> ChequeProfile
POST/print-mail/v1/order_profiles/cheques/{id}
Delete Cheque Profile
print_mail.order_profiles.cheques.delete(strid) -> ChequeDeleteResponse
DELETE/print-mail/v1/order_profiles/cheques/{id}
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
One of the following:

Order Profiles are reusable blueprints for creating print and mail orders (Letters, Postcards, Cheques, Self-Mailers). They define common properties like size, content (via templates or uploaded PDFs), mailing class, and metadata. Using profiles simplifies order creation, especially for recurring mailings or campaigns, by pre-filling many parameters.

Profiles are environment-specific (live vs. test).

Create Letter Profile
print_mail.order_profiles.letters.create(LetterCreateParams**kwargs) -> LetterProfile
POST/print-mail/v1/order_profiles/letters
List Letter Profiles
print_mail.order_profiles.letters.list(LetterListParams**kwargs) -> SyncSkipLimit[LetterProfile]
GET/print-mail/v1/order_profiles/letters
Retrieve Letter Profile
print_mail.order_profiles.letters.retrieve(strid, LetterRetrieveParams**kwargs) -> LetterProfile
GET/print-mail/v1/order_profiles/letters/{id}
Update Letter Profile
print_mail.order_profiles.letters.update(strid, LetterUpdateParams**kwargs) -> LetterProfile
POST/print-mail/v1/order_profiles/letters/{id}
Delete Letter Profile
print_mail.order_profiles.letters.delete(strid) -> LetterDeleteResponse
DELETE/print-mail/v1/order_profiles/letters/{id}
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
One of the following:

Order Profiles are reusable blueprints for creating print and mail orders (Letters, Postcards, Cheques, Self-Mailers). They define common properties like size, content (via templates or uploaded PDFs), mailing class, and metadata. Using profiles simplifies order creation, especially for recurring mailings or campaigns, by pre-filling many parameters.

Profiles are environment-specific (live vs. test).

Create Postcard Profile
print_mail.order_profiles.postcards.create(PostcardCreateParams**kwargs) -> PostcardProfile
POST/print-mail/v1/order_profiles/postcards
List Postcard Profiles
print_mail.order_profiles.postcards.list(PostcardListParams**kwargs) -> SyncSkipLimit[PostcardProfile]
GET/print-mail/v1/order_profiles/postcards
Retrieve Postcard Profile
print_mail.order_profiles.postcards.retrieve(strid, PostcardRetrieveParams**kwargs) -> PostcardProfile
GET/print-mail/v1/order_profiles/postcards/{id}
Update Postcard Profile
print_mail.order_profiles.postcards.update(strid, PostcardUpdateParams**kwargs) -> PostcardProfile
POST/print-mail/v1/order_profiles/postcards/{id}
Delete Postcard Profile
print_mail.order_profiles.postcards.delete(strid) -> PostcardDeleteResponse
DELETE/print-mail/v1/order_profiles/postcards/{id}
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:

Order Profiles are reusable blueprints for creating print and mail orders (Letters, Postcards, Cheques, Self-Mailers). They define common properties like size, content (via templates or uploaded PDFs), mailing class, and metadata. Using profiles simplifies order creation, especially for recurring mailings or campaigns, by pre-filling many parameters.

Profiles are environment-specific (live vs. test).

Create Self-Mailer Profile
print_mail.order_profiles.self_mailers.create(SelfMailerCreateParams**kwargs) -> SelfMailerProfile
POST/print-mail/v1/order_profiles/self_mailers
List Self-Mailer Profiles
print_mail.order_profiles.self_mailers.list(SelfMailerListParams**kwargs) -> SyncSkipLimit[SelfMailerProfile]
GET/print-mail/v1/order_profiles/self_mailers
Retrieve Self-Mailer Profile
print_mail.order_profiles.self_mailers.retrieve(strid, SelfMailerRetrieveParams**kwargs) -> SelfMailerProfile
GET/print-mail/v1/order_profiles/self_mailers/{id}
Update Self-Mailer Profile
print_mail.order_profiles.self_mailers.update(strid, SelfMailerUpdateParams**kwargs) -> SelfMailerProfile
POST/print-mail/v1/order_profiles/self_mailers/{id}
Delete Self-Mailer Profile
print_mail.order_profiles.self_mailers.delete(strid) -> SelfMailerDeleteResponse
DELETE/print-mail/v1/order_profiles/self_mailers/{id}
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
Create Postcard
print_mail.postcards.create(PostcardCreateParams**kwargs) -> Postcard
POST/print-mail/v1/postcards
List Postcards
print_mail.postcards.list(PostcardListParams**kwargs) -> SyncSkipLimit[Postcard]
GET/print-mail/v1/postcards
Get Postcard
print_mail.postcards.retrieve(strid) -> Postcard
GET/print-mail/v1/postcards/{id}
Cancel Postcard
print_mail.postcards.delete(strid) -> Postcard
DELETE/print-mail/v1/postcards/{id}
Get Postcard Preview
print_mail.postcards.retrieve_url(strid) -> PostcardRetrieveURLResponse
GET/print-mail/v1/postcards/{id}/url
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:

The reports API lets you run SQL queries against a data lake with all of your PostGrid data. You can use this to run ad-hoc SQL queries or save them as reports. You can bulk export data from these reports to fit all of your reporting needs. Note that the data this API provides may be up to 2 hours behind your current PostGrid environment. Your test and live data lakes are fully segregated, so you'll need a live API key to run queries against your live data.

You can request access to this to this feature by reaching out to [email protected]

Create Saved Report
print_mail.reports.create(ReportCreateParams**kwargs) -> Report
POST/print-mail/v1/reports
Run Ad-hoc Query
print_mail.reports.sample(ReportSampleParams**kwargs) -> ReportSample
POST/print-mail/v1/reports/samples
Update Report
print_mail.reports.update(strid, ReportUpdateParams**kwargs) -> Report
POST/print-mail/v1/reports/{id}
List Saved Reports
print_mail.reports.list(ReportListParams**kwargs) -> SyncSkipLimit[Report]
GET/print-mail/v1/reports
Retrieve Saved Report
print_mail.reports.retrieve(strid) -> Report
GET/print-mail/v1/reports/{id}
Delete Saved Report
print_mail.reports.delete(strid) -> DeletedResponse
DELETE/print-mail/v1/reports/{id}
ModelsExpand Collapse

The reports API lets you run SQL queries against a data lake with all of your PostGrid data. You can use this to run ad-hoc SQL queries or save them as reports. You can bulk export data from these reports to fit all of your reporting needs. Note that the data this API provides may be up to 2 hours behind your current PostGrid environment. Your test and live data lakes are fully segregated, so you'll need a live API key to run queries against your live data.

You can request access to this to this feature by reaching out to [email protected]

Sample a Saved Report
print_mail.reports.samples.create(strid, SampleCreateParams**kwargs) -> ReportSample
POST/print-mail/v1/reports/{id}/samples
ModelsExpand Collapse

The reports API lets you run SQL queries against a data lake with all of your PostGrid data. You can use this to run ad-hoc SQL queries or save them as reports. You can bulk export data from these reports to fit all of your reporting needs. Note that the data this API provides may be up to 2 hours behind your current PostGrid environment. Your test and live data lakes are fully segregated, so you'll need a live API key to run queries against your live data.

You can request access to this to this feature by reaching out to [email protected]

Create a Report Export
print_mail.reports.exports.create(strreport_id, ExportCreateParams**kwargs) -> ReportExport
POST/print-mail/v1/reports/{reportID}/exports
Get Report Export
print_mail.reports.exports.retrieve(strexport_id, ExportRetrieveParams**kwargs) -> ReportExport
GET/print-mail/v1/reports/{reportID}/exports/{exportID}
Delete Report Export
print_mail.reports.exports.delete(strexport_id, ExportDeleteParams**kwargs) -> DeletedResponse
DELETE/print-mail/v1/reports/{reportID}/exports/{exportID}
ModelsExpand Collapse
Create Self Mailer
print_mail.self_mailers.create(SelfMailerCreateParams**kwargs) -> SelfMailer
POST/print-mail/v1/self_mailers
List Self Mailers
print_mail.self_mailers.list(SelfMailerListParams**kwargs) -> SyncSkipLimit[SelfMailer]
GET/print-mail/v1/self_mailers
Get Self Mailer
print_mail.self_mailers.retrieve(strid) -> SelfMailer
GET/print-mail/v1/self_mailers/{id}
Cancel Self Mailer
print_mail.self_mailers.delete(strid) -> SelfMailer
DELETE/print-mail/v1/self_mailers/{id}
Get Self Mailer Preview
print_mail.self_mailers.retrieve_url(strid) -> SelfMailerRetrieveURLResponse
GET/print-mail/v1/self_mailers/{id}/url
ModelsExpand Collapse
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:
One of the following:

Sub-organizations enable you to create isolated PostGrid accounts ("sub-organizations") under your PostGrid account (the "parent organization"). Each sub-organization has fully isolated resources and users, and can act independently.

This allows you to isolate different departments or even re-sell PostGrid entirely.

You can request access to this feature by reaching out to [email protected]

Create a sub-organization.
print_mail.sub_organizations.update(SubOrganizationUpdateParams**kwargs) -> SubOrganizationUpdateResponse
POST/print-mail/v1/sub_organizations
List sub-organizations.
print_mail.sub_organizations.list(SubOrganizationListParams**kwargs) -> SyncSkipLimit[SubOrganization]
GET/print-mail/v1/sub_organizations
Get a sub-organization.
print_mail.sub_organizations.retrieve(strid) -> SubOrganization
GET/print-mail/v1/sub_organizations/{id}
List users for a sub-organization.
print_mail.sub_organizations.retrieve_users(strid, SubOrganizationRetrieveUsersParams**kwargs) -> SubOrganizationRetrieveUsersResponse
GET/print-mail/v1/sub_organizations/{id}/users
ModelsExpand Collapse
One of the following:
Create Template
print_mail.templates.create(TemplateCreateParams**kwargs) -> Template
POST/print-mail/v1/templates
List Templates
print_mail.templates.list(TemplateListParams**kwargs) -> SyncSkipLimit[Template]
GET/print-mail/v1/templates
Get Template
print_mail.templates.retrieve(strid) -> Template
GET/print-mail/v1/templates/{id}
Update Template
print_mail.templates.update(strid, TemplateUpdateParams**kwargs) -> Template
POST/print-mail/v1/templates/{id}
Delete Template
print_mail.templates.delete(strid) -> TemplateDeleteResponse
DELETE/print-mail/v1/templates/{id}
ModelsExpand Collapse