Skip to content

Printavo Steps

These steps use Printavo’s API (version 2) to look up and create customers and create quotes. They all need the printavo_api_token credential; see Printavo credential.

In Printavo a customer is the company and a contact is the person. A quote attaches to a contact, so the customer steps return both ids and printavo_create_quote takes the contact_id.

Looks up a contact by email. Read-only.

SettingRequiredWhat it does
emailYesThe email address. Matching ignores case.

Output: found, and when found contact_id, customer_id, email, first_name, last_name, full_name, phone, company_name, and id (the same as contact_id).

Returns the contact with that email, or creates a customer with it as the primary contact. Safe to run twice.

SettingRequiredWhat it does
emailYesThe email address.
nameNoA full name, split into first and last name.
first_name, last_nameNoUsed instead of splitting name.
phoneNoThe phone number.
company_nameNoThe customer (company) name.

Output: as printavo_find_customer without found, plus was_created.

Creates a customer every time it runs. Prefer printavo_find_or_create_customer unless you want a new customer on every submission.

SettingRequiredWhat it does
emailYesThe contact’s email address.
first_name, last_name, phone, company_nameNoThe contact and company details.

Output: contact_id, customer_id, email, first_name, last_name, full_name, phone, company_name, id.

Creates a quote for a contact. Each run creates a new quote.

SettingRequiredWhat it doesDefault
contact_idYesUsually "{{ steps.customer.contact_id }}".—
nicknameNoThe quote’s nickname in Printavo.—
descriptionNoStored as the quote’s customer note.—
production_noteNoStored as the internal production note.—
user_idNoThe Printavo user who owns the quote.No owner
customer_due_dateNoYYYY-MM-DD.14 days from today
due_atNoAn ISO 8601 date and time.30 days from today, 17:00 UTC

customer_id is still accepted in place of contact_id for older workflows; it is treated as a contact id.

Output: id, visual_id, nickname, description, url, public_url, customer_due_at, due_at.

[
{ "name": "customer", "type": "printavo_find_or_create_customer",
"config": { "email": "{{ data.email }}", "name": "{{ data.full_name }}",
"company_name": "{{ data.company }}" } },
{ "name": "quote", "type": "printavo_create_quote",
"config": { "contact_id": "{{ steps.customer.contact_id }}",
"nickname": "Web quote — {{ labels.product }}",
"description": "{{ labels.details }}" } }
]

Use data.* for values Printavo stores as identifiers and labels.* for text a person reads in Printavo.

CodeUsual cause
credential_not_configured, credential_unreadableThe credential is missing, or stored but cannot be decrypted.
config_erroremail or contact_id is empty, or the stored credential lacks email or token.
auth_failedPrintavo answered 401 or 403. Check the email and token.
external_4xxPrintavo rejected the request. GraphQL errors, including “Account not active”, arrive as this code with Printavo’s message.
rate_limited, external_5xxPrintavo is limiting or failing requests.