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.
printavo_find_customer
Section titled “printavo_find_customer”Looks up a contact by email. Read-only.
| Setting | Required | What it does |
|---|---|---|
email | Yes | The 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).
printavo_find_or_create_customer
Section titled “printavo_find_or_create_customer”Returns the contact with that email, or creates a customer with it as the primary contact. Safe to run twice.
| Setting | Required | What it does |
|---|---|---|
email | Yes | The email address. |
name | No | A full name, split into first and last name. |
first_name, last_name | No | Used instead of splitting name. |
phone | No | The phone number. |
company_name | No | The customer (company) name. |
Output: as printavo_find_customer without found, plus
was_created.
printavo_create_customer
Section titled “printavo_create_customer”Creates a customer every time it runs. Prefer
printavo_find_or_create_customer unless you want a new customer on every
submission.
| Setting | Required | What it does |
|---|---|---|
email | Yes | The contact’s email address. |
first_name, last_name, phone, company_name | No | The contact and company details. |
Output: contact_id, customer_id, email, first_name, last_name,
full_name, phone, company_name, id.
printavo_create_quote
Section titled “printavo_create_quote”Creates a quote for a contact. Each run creates a new quote.
| Setting | Required | What it does | Default |
|---|---|---|---|
contact_id | Yes | Usually "{{ steps.customer.contact_id }}". | — |
nickname | No | The quote’s nickname in Printavo. | — |
description | No | Stored as the quote’s customer note. | — |
production_note | No | Stored as the internal production note. | — |
user_id | No | The Printavo user who owns the quote. | No owner |
customer_due_date | No | YYYY-MM-DD. | 14 days from today |
due_at | No | An 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.
Errors
Section titled “Errors”| Code | Usual cause |
|---|---|
credential_not_configured, credential_unreadable | The credential is missing, or stored but cannot be decrypted. |
config_error | email or contact_id is empty, or the stored credential lacks email or token. |
auth_failed | Printavo answered 401 or 403. Check the email and token. |
external_4xx | Printavo rejected the request. GraphQL errors, including “Account not active”, arrive as this code with Printavo’s message. |
rate_limited, external_5xx | Printavo is limiting or failing requests. |