Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/lob-send-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: Lob Send API
version: 1.20.2
description: Experience direct mail like never before, with unmatched personalization and scalability all in one intuitive platform.
license:
name: MIT
url: https://mit-license.org/
contact:
name: Lob Developer Experience
url: https://support.lob.com/
email: lob-openapi@lob.com
termsOfService: https://www.lob.com/legal
servers:
- url: https://api.lob.com/v1
description: production
security:
- basicAuth: []
tags:
- name: Send
paths:
/campaigns/{cmp_id}/send:
parameters:
- in: path
name: cmp_id
description: id of the campaign
required: true
schema:
$ref: '#/components/schemas/cmp_id'
post:
operationId: campaign_send
summary: Send Campaign
description: Sends a campaign. You need only supply the unique campaign identifier that was returned upon campaign creation.
tags:
- Send
responses:
'200':
description: Returns a campaign object
content:
application/json:
schema:
$ref: '#/components/schemas/campaign'
example:
id: cmp_e05ee61ff80764b
billing_group_id: bg_fe3079dcdd80e5ae
name: My Campaign
description: My Campaign's description
schedule_type: immediate
cancel_window_campaign_minutes: 60
metadata: {}
use_type: marketing
is_draft: true
deleted: false
creatives: []
uploads: []
auto_cancel_if_ncoa: false
date_created: '2017-09-05T17:47:53.767Z'
date_modified: '2017-09-05T17:47:53.767Z'
object: campaign
default:
$ref: '#/components/responses/campaigns_error'
x-codeSamples:
- lang: Shell
source: "curl https://api.lob.com/v1/campaigns/cmp_e05ee61ff80764b/send \\\n -u <YOUR API KEY>:\n"
label: CURL
components:
schemas:
postcard_size:
type: string
enum:
- 4x6
- 6x9
- 6x11
description: 'Specifies the size of the postcard. Only `4x6` postcards can be sent to international destinations.
'
default: 4x6
address_editable_us:
allOf:
- $ref: '#/components/schemas/address_fields_us'
- type: object
anyOf:
- title: address obj with `name` defined
required:
- name
- title: address obj with `company` defined
required:
- company
properties:
description:
$ref: '#/components/schemas/resource_description'
name:
type:
- string
- 'null'
description: 'Either `name` or `company` is required, you may also add both. Must be no longer than 40 characters. If both `name` and `company` are provided, they will be printed on two separate lines above the rest of the address.
'
maxLength: 40
company:
$ref: '#/components/schemas/company'
phone:
type:
- string
- 'null'
description: Must be no longer than 40 characters.
maxLength: 40
email:
type:
- string
- 'null'
description: Must be no longer than 100 characters.
maxLength: 100
address_country:
type: string
enum:
- US
default: US
metadata:
$ref: '#/components/schemas/metadata'
campaign:
allOf:
- $ref: '#/components/schemas/lob_base'
- $ref: '#/components/schemas/campaign_writable'
- type: object
required:
- id
- name
- description
- schedule_type
- use_type
- is_draft
- creatives
- uploads
- auto_cancel_if_ncoa
- date_created
- date_modified
- object
properties:
id:
$ref: '#/components/schemas/cmp_id'
is_draft:
description: Whether or not the campaign is still a draft.
type: boolean
default: true
creatives:
description: An array of creatives that have been associated with this campaign.
type: array
items:
$ref: '#/components/schemas/creative'
minItems: 0
uploads:
description: A single-element array containing the upload object that is assocated with this campaign.
type: array
items:
$ref: '#/components/schemas/upload'
minItems: 0
maxItems: 1
object:
type: string
description: Value is resource type.
enum:
- campaign
default: campaign
use_type:
$ref: '#/components/schemas/cmp_use_type'
uploads_metadata:
title: Metadata
type: object
required:
- columns
properties:
columns:
type: array
description: The list of column names from the csv file which you want associated with each of your mailpieces
default: []
items:
type: string
default:
columns: []
example:
columns:
- recipient_name
description: The list of column headers in your file as an array that you want as metadata associated with each mailpiece. See our <a href="https://help.lob.com/print-and-mail/building-a-mail-strategy/campaign-or-triggered-sends/campaign-audience-guide#required-columns-2" target="_blank">Campaign Audience Guide</a> for additional details.
failure_status_code:
type: integer
enum:
- 401
- 403
- 404
- 413
- 422
- 429
- 500
description: "A conventional HTTP status code:\n * `401` - Authorization error with your API key or account\n * `403` - Forbidden error with your API key or account\n * `404` - The requested item does not exist\n * `413` - Payload too large\n * `422` - The query or body parameters did not pass validation\n * `429` - Too many requests have been sent with an API key in a given amount of time\n * `500` - An internal server error occurred, please contact support@lob.com\n"
returned_resource:
oneOf:
- allOf:
- title: Postcard Creative
required:
- resource_type
- details
properties:
resource_type:
type: string
description: Mailpiece type for the creative
enum:
- postcard
details:
$ref: '#/components/schemas/returned'
- $ref: '#/components/schemas/creative_base'
- allOf:
- title: Letter Creative
required:
- from
- resource_type
- details
properties:
resource_type:
type: string
description: Mailpiece type for the creative
enum:
- letter
details:
$ref: '#/components/schemas/letter_details_returned'
- $ref: '#/components/schemas/creative_base'
- allOf:
- title: Self Mailer Creative
required:
- resource_type
- details
properties:
resource_type:
type: string
description: Mailpiece type for the creative
enum:
- self_mailer
details:
$ref: '#/components/schemas/self_mailer_details_returned'
- $ref: '#/components/schemas/creative_base'
company:
type:
- string
- 'null'
description: 'Either `name` or `company` is required, you may also add both. Must be no longer than 40 characters. If both `name` and `company` are provided, they will be printed on two separate lines above the rest of the address. This field can be used for any secondary recipient information which is not part of the actual mailing address (Company Name, Department, Attention Line, etc).
'
maxLength: 40
metadata:
type: object
additionalProperties:
type: string
description: 'Use metadata to store custom information for tagging and labeling back to your internal systems. Must be an object with up to 20 key-value pairs. Keys must be at most 40 characters and values must be at most 500 characters. Neither can contain the characters `"` and `\`. i.e. ''{"customer_id" : "NEWYORK2015"}'' Nested objects are not supported. See [Metadata](#section/Metadata) for more information.'
maxLength: 500
pattern: '[^"\\]{0,500}'
error:
type: object
description: Lob uses RESTful HTTP response codes to indicate success or failure of an API request. In general, 2xx indicates success, 4xx indicate an input error, and 5xx indicates an error on Lob's end.
required:
- error
properties:
error:
type: object
required:
- message
- status_code
- code
properties:
message:
type: string
description: A human-readable message with more details about the error
example: Rate limit exceeded. Please wait 5 seconds and try your request again.
status_code:
$ref: '#/components/schemas/failure_status_code'
code:
type: string
enum:
- bad_request
- conflict
- feature_limit_reached
- internal_server_error
- invalid
- not_deletable
- not_found
- request_timeout
- service_unavailable
- unrecognized_endpoint
- unsupported_lob_version
- address_length_exceeds_limit
- bank_account_already_verified
- bank_error
- billing_address_required
- custom_envelope_inventory_depleted
- deleted_bank_account
- failed_deliverability_strictness
- file_pages_below_min
- file_pages_exceed_max
- file_size_exceeds_limit
- foreign_return_address
- inconsistent_page_dimensions
- invalid_bank_account
- invalid_bank_account_verification
- invalid_check_international
- invalid_country_covid
- invalid_file
- invalid_file_dimensions
- invalid_file_download_time
- invalid_file_url
- invalid_image_dpi
- invalid_international_feature
- invalid_perforation_return_envelope
- invalid_template_html
- mail_use_type_can_not_be_null
- merge_variable_required
- merge_variable_whitespace
- payment_method_unverified
- pdf_encrypted
- special_characters_restricted
- unembedded_fonts
- email_required
- invalid_api_key
- publishable_key_not_allowed
- rate_limit_exceeded
- unauthorized
- unauthorized_token
description: 'A pre-defined string identifying an error. Error codes fall into three categories:
**GENERIC**
* `bad_request` - 422: an invalid request was made. See error message for details.
* `conflict` - 409/422: this operation would leave data in a conflicted state.
* `feature_limit_reached` - 403: the account has reached its resource limit and requires upgrading to add more.
* `internal_server_error` - 500: an error has occured on Lob''s servers. Please try request again.
* `invalid` - 422: an invalid request was made. See error message for details.
* `not_deletable` - 422: an attempt was made to delete a resource, but the resource cannot be deleted.
* `not_found` - 404: the requested resource was not found.
* `request_timeout` - 408: the request took too long. Please try again.
* `service_unavailable` - 503: the Lob servers are temporarily unavailable. Please try agian.
* `unrecognized_endpoint` - 404: the requested endpoint doesn''t exist.
* `unsupported_lob_version` - 422: an unsupported Lob API version was requested.
**ADVANCED**
* `address_length_exceeds_limit` - 422: the sum of to.address_line1 and to.address_line2 cannot surpass 50 characters.
* `bank_account_already_verified` - 422: the bank account has already been verified.
* `bank_error` - 422: there''s an issue with the bank account.
* `billing_address_required` - 403: in order to create a live mail piece, your account needs to set up a billing address.
* `custom_envelope_inventory_depleted` - 422: custom envelope inventory is depleted, and more will need to be ordered.
* `deleted_bank_account` - 404: checks cannot be created with a deleted bank account.
* `failed_deliverability_strictness` - 422: the `to` address doesn''t meet strictness requirements. See <a href="https://dashboard.lob.com/#/settings/account" target="_blank">Account Settings</a> to configure strictness.
* `file_pages_below_min` - 422: not enough pages.
* `file_pages_exceed_max` - 422: too many pages.
* `file_size_exceeds_limit` - 422: the file size is too large. See description for details.
* `foreign_return_address` - 422: the `from` address must be a US address.
* `inconsistent_page_dimensions` - 422: all pages of the input file must have the same dimensions.
* `invalid_bank_account` - 422: the provided bank routing number is invalid.
* `invalid_bank_account_verification` - 422: verification amounts do not match.
* `invalid_check_international` - 422: checks cannot be sent internationally.
* `invalid_country_covid` - 422: the postal service in the specified country is currently unable to process the request due to COVID-19 restrictions.
* `invalid_file` - 422: the file is invalid.
* `invalid_file_dimensions` - 422: file dimensions are incorrect for the selected mail type.
* `invalid_file_download_time` - 422: file download from remote server took too long.
* `invalid_file_url` - 422: the file URL when creating a resource is invalid.
* `invalid_image_dpi` - 422: DPI must be at least 300.
* `invalid_international_feature` - 422: the specified product cannot be sent to the destination.
* `invalid_perforation_return_envelope` - 422: both `return_envelope` and `perforation` must be used together.
* `invalid_template_html` - 422: the provided HTML is invalid.
* `mail_use_type_can_not_be_null` - 422: use_type must be one of "marketing" or "operational". Alternatively, an admin can set the account default use type in Account Settings.
* `merge_variable_required` - 422: a required merge variable is missing.
* `merge_variable_whitespace` - 422: merge variable names cannot contain whitespace.
* `payment_method_unverified` - 401: you must have a verified bank account or credit card to submit live requests.
* `pdf_encrypted` - 422: an encrypted PDF was provided.
* `special_characters_restricted` - 422: cannot use special characters for merge variable names.
* `unembedded_fonts` - 422: the provided PDF contains non-standard unembedded fonts. See description for details.
**AUTHENTICATION**
* `email_required` - 401: account must have a verified email address before creating live resources.
* `invalid_api_key` - 401/403: the API key is invalid.
* `publishable_key_not_allowed` - 403: the requested operation needs a secret key, not a publishable key. See [API Keys](#section/API-Keys) for more information.
* `rate_limit_exceeded` - 429: requests were sent too quickly and must be slowed down.
* `unauthorized` - 401: the request isn''t authorized.
* `unauthorized_token` - 401: token isn''t authorized.
'
card_id:
type: string
description: Unique identifier prefixed with `card_`.
pattern: ^card_[a-zA-Z0-9]+$
mail_type:
type: string
enum:
- usps_first_class
- usps_standard
description: 'A string designating the mail postage type:
* `usps_first_class` - (default)
* `usps_standard` - a <a href="https://lob.com/pricing/print-mail#compare" target="_blank">cheaper option</a> which is
less predictable and takes longer to deliver. `usps_standard` cannot be used with `4x6`
postcards or for any postcards sent outside of the United States.
'
default: usps_first_class
crv_id:
type: string
description: Unique identifier prefixed with `crv_`.
pattern: ^crv_[a-zA-Z0-9]+$
example: crv_2a3b096c409b32c
upload_state:
title: Upload State
enum:
- Preprocessing
- Draft
- Ready for Validation
- Validating
- Scheduled
- Cancelled
- Errored
default: Draft
type: string
description: The `state` property on the `upload` object. As the file is processed, the `state` will change from `Ready for Validation` to `Validating` and then will be either `Scheduled` (successfully processed) or `Errored` (Unsuccessfully processed).
returned:
description: Properties that the postcards in your Creative should have. See the `qr_code` attribute below to add a QR code to your creative.
properties:
mail_type:
$ref: '#/components/schemas/mail_type'
size:
$ref: '#/components/schemas/postcard_size'
front_original_url:
description: The original URL of the `front` template.
maxLength: 2083
minLength: 1
type: string
format: uri
back_original_url:
description: The original URL of the `back` template.
maxLength: 2083
minLength: 1
type: string
format: uri
optional_address_column_mapping:
title: Optional Address Columns
type: object
required:
- address_line2
- company
- address_country
properties:
address_line2:
type:
- string
- 'null'
default: null
description: The column header from the csv file that should be mapped to the optional field "address_line2"
company:
type:
- string
- 'null'
default: null
description: The column header from the csv file that should be mapped to the optional field "company"
address_country:
type:
- string
- 'null'
default: null
description: The column header from the csv file that should be mapped to the optional field "address_country"
example:
address_line2: secondary_line
company: company
address_country: country,
description: The mapping of column headers in your file to Lob-optional fields for the resource created. See our <a href="https://help.lob.com/print-and-mail/building-a-mail-strategy/campaign-or-triggered-sends/campaign-audience-guide#optional-columns-3" target="_blank">Campaign Audience Guide</a> for additional details.
lob_base:
type: object
required:
- date_created
- date_modified
- object
properties:
date_created:
$ref: '#/components/schemas/date_created'
date_modified:
$ref: '#/components/schemas/date_modified'
deleted:
$ref: '#/components/schemas/deleted'
object:
$ref: '#/components/schemas/object'
extra_service:
type:
- string
- 'null'
enum:
- certified
- certified_return_receipt
- registered
- null
description: "Add an extra service to your letter. Can only be non-`null` if `mail_type` isn't `usps_standard`. See <a href=\"https://www.lob.com/pricing/print-mail#compare\" target=\"_blank\">pricing</a> for extra costs incurred.\n * `certified` - track and confirm delivery for domestic destinations. An extra sheet (1 PDF page single-sided or 2 PDF pages double-sided) is added to the beginning of your letter for address and barcode information. See here for templates: <a href=\"https://s3-us-west-2.amazonaws.com/public.lob.com/assets/templates/letter_certified_template.pdf\" target=\"_blank\">#10 envelope</a> and <a href=\"https://s3-us-west-2.amazonaws.com/public.lob.com/assets/templates/letter_certified_flat_template.pdf\" target=\"_blank\">flat envelope</a> (used for letters over 6 pages single-sided or 12 pages double-sided). You will not be charged for this extra sheet.\n * `certified_return_receipt` - request an electronic copy of the recipient's signature to prove delivery of your certified letter\n * `registered` - provides tracking and confirmation for international addresses\n \nNot available for `us_legal` letter size.\n"
double_sided:
type: boolean
description: Set this attribute to `true` for double sided printing, or `false` for for single sided printing. Defaults to `true`.
default: true
adr_id:
type: string
description: Unique identifier prefixed with `adr_`.
pattern: ^adr_[a-zA-Z0-9]+$
upload_writable:
type: object
required:
- campaignId
properties:
campaignId:
allOf:
- $ref: '#/components/schemas/cmp_id'
- description: Associated Campaign ID
type: string
example: cmp_1933ad629bae1408
requiredAddressColumnMapping:
$ref: '#/components/schemas/required_address_column_mapping'
optionalAddressColumnMapping:
$ref: '#/components/schemas/optional_address_column_mapping'
metadata:
$ref: '#/components/schemas/uploads_metadata'
mergeVariableColumnMapping:
$ref: '#/components/schemas/merge_variable_column_mapping'
description: test
cmp_use_type:
description: The use type for each mailpiece. Can be one of marketing, operational, or null. Null use_type is only allowed if an account default use_type is selected in Account Settings. For more information on use_type, see our [Help Center article](https://help.lob.com/print-and-mail/building-a-mail-strategy/managing-mail-settings/declaring-mail-use-type).
type:
- string
- 'null'
enum:
- marketing
- operational
- null
letter_details_returned:
description: Properties that the letters in your Creative should have. See the `qr_code` attribute below to add a QR code to your creative.
properties:
address_placement:
$ref: '#/components/schemas/address_placement'
buckslips:
description: A single-element array containing an existing buckslip id in a string format. See [buckslips](#tag/Buckslips) for more information.
type:
- array
- 'null'
items:
$ref: '#/components/schemas/buckslip_id'
minItems: 0
maxItems: 1
cards:
description: A single-element array containing an existing card id in a string format. See [cards](#tag/Cards) for more information.
type:
- array
- 'null'
items:
$ref: '#/components/schemas/card_id'
minItems: 0
maxItems: 1
custom_envelope:
$ref: '#/components/schemas/custom_envelope_returned'
color:
$ref: '#/components/schemas/color'
double_sided:
$ref: '#/components/schemas/double_sided'
extra_service:
$ref: '#/components/schemas/extra_service'
file_original_url:
description: The original URL of the `file` template.
type: string
mail_type:
$ref: '#/components/schemas/mail_type'
upload:
allOf:
- $ref: '#/components/schemas/upload_writable'
- type: object
required:
- id
- accountId
- campaignId
- requiredAddressColumnMapping
- optionalAddressColumnMapping
- metadata
- mergeVariableColumnMapping
- mode
- state
- totalMailpieces
- failedMailpieces
- validatedMailpieces
- bytesProcessed
- dateCreated
- dateModified
properties:
id:
$ref: '#/components/schemas/upl_id'
accountId:
title: Account ID
type: string
description: Account ID that made the request
example: fa9ea650fc7b31a89f92
mode:
enum:
- test
- live
type: string
description: The environment in which the mailpieces were created. Today, will only be `live`.
failuresUrl:
title: Failures URL
type: string
example: https://www.example.com
description: Url where your campaign mailpiece failures can be retrieved
originalFilename:
title: Original Filename
type: string
example: my_audience.csv
description: Filename of the upload
state:
$ref: '#/components/schemas/upload_state'
totalMailpieces:
title: Total Mailpieces
type: integer
example: 100
description: Total number of recipients for the campaign
failedMailpieces:
title: Failed Mailpieces
type: integer
example: 5
description: Number of mailpieces that failed to create
validatedMailpieces:
title: Validated Mailpieces
type: integer
example: 95
description: Number of mailpieces that were successfully created
bytesProcessed:
title: Bytes Processed
type: integer
example: 17268
description: Number of bytes processed in your CSV
dateCreated:
title: Date Created
type: string
format: date-time
description: A timestamp in ISO 8601 format of the date the upload was created
dateModified:
title: Date Modified
type: string
format: date-time
description: A timestamp in ISO 8601 format of the date the upload was last modified
inline_address_us:
allOf:
- $ref: '#/components/schemas/address_editable_us'
- type: object
required:
- address_line1
- address_city
- address_state
- address_zip
buckslip_id:
type: string
description: Unique identifier prefixed with `bck_`.
pattern: ^bck_[a-zA-Z0-9]+$
campaign_writable:
type: object
required:
- name
- schedule_type
- use_type
properties:
billing_group_id:
type:
- string
- 'null'
description: Unique identifier prefixed with `bg_`.
pattern: ^bg_[a-zA-Z0-9]+$
name:
description: Name of the campaign.
type: string
description:
$ref: '#/components/schemas/resource_description'
schedule_type:
$ref: '#/components/schemas/cmp_schedule_type'
target_delivery_date:
description: If `schedule_type` is `target_delivery_date`, provide a targeted delivery date for mail pieces in this campaign.
type:
- string
- 'null'
format: date-time
send_date:
description: If `schedule_type` is `scheduled_send_date`, provide a date to send this campaign.
type:
- string
- 'null'
format: date-time
cancel_window_campaign_minutes:
description: A window, in minutes, within which the campaign can be canceled.
type:
- integer
- 'null'
metadata:
$ref: '#/components/schemas/metadata'
use_type:
$ref: '#/components/schemas/cmp_use_type'
auto_cancel_if_ncoa:
description: Whether or not a mail piece should be automatically canceled and not sent if the address is updated via NCOA.
type: boolean
upl_id:
type: string
description: Unique identifier prefixed with `upl_`.
pattern: ^upl_[a-zA-Z0-9]+$
self_mailer_details_returned:
description: Properties that the self mailers in your Creative should have. See the `qr_code` attribute below to add a QR code to your creative.
properties:
mail_type:
$ref: '#/components/schemas/mail_type'
size:
$ref: '#/components/schemas/self_mailer_size'
inside_original_url:
description: The original URL of the `inside` template.
maxLength: 2083
minLength: 1
type: string
format: uri
outside_original_url:
description: The original URL of the `outside` template.
maxLength: 2083
minLength: 1
type: string
format: uri
object:
type: string
description: Value is resource type.
cmp_id:
type: string
title: Campaign id
description: Unique identifier prefixed with `cmp_`.
pattern: ^cmp_[a-zA-Z0-9]+$
date_created:
type: string
format: date-time
description: A timestamp in ISO 8601 format of the date the resource was created.
merge_variable_column_mapping:
title: Merge Variable Mapping
type:
- object
- 'null'
default: null
example:
name: recipient_name
gift_code: code
qr_code_redirect_url: redirect_url
description: The mapping of column headers in your file to the merge variables present in your creative. See our <a href="https://help.lob.com/print-and-mail/building-a-mail-strategy/campaign-or-triggered-sends/campaign-audience-guide#step-3-map-merge-variable-data-if-applicable-7" target="_blank">Campaign Audience Guide</a> for additional details. <br />If a merge variable has the same "name" as a "key" in the `requiredAddressColumnMapping` or `optionalAddressColumnMapping` objects, then they **CANNOT** have a different value in this object. If a different value is provided, then when the campaign is processing it will get overwritten with the mapped value present in the `requiredAddressColumnMapping` or `optionalAddressColumnMapping` objects. The redirect URLs for QR codes can also be customized using this mapping. If the URL has a variable and the variable mapping existsing here, then data from the respective column in the audience file will be merged into the URL template.
creative_base:
type: object
properties:
from:
$ref: '#/components/schemas/from_attribute'
description:
$ref: '#/components/schemas/resource_description'
metadata:
$ref: '#/components/schemas/metadata'
cmp_schedule_type:
description: How the campaign should be scheduled. Only value available today is `immediate`.
type: string
enum:
- immediate
address_fields_us:
type: object
required:
- address_line1
- address_city
- address_state
- address_zip
properties:
address_line1:
type: string
description: The primary number, street name, and directional information.
maxLength: 64
address_line2:
type:
- string
- 'null'
description: An optional field containing any information which can't fit into line 1.
maxLength: 64
address_city:
type: string
maxLength
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lob/refs/heads/main/openapi/lob-send-api-openapi.yml