Welcome to Knowledge Base!

KB at your finger tips

This is one stop global knowledge base where you can learn about all the products, solutions and support features.

Categories
All
CRM-Salesforce
Salesforce Developers

Order Level Constraints

There are solutions where items remain on a vehicle longer than desired in problems involving pickup and dropoff. Still, the solutions have shorter overall travel times. The additional_journey_time constraint controls consideration of these solutions. Additional journey time is the difference between an item's journey_time and the travel time directly from the pickup location to the delivery/dropoff location. The associated violation_increment is in seconds.

In the passenger pickup and dropoff example below, the journey_time , additional_journey_time , and dropoff_deadline constraints are used simultaneously. In the example, several vans start and end their routes at an Atlanta hotel. Each van has a six (6) passenger capacity expressed using the capacity_by_item array with passengers described as "items" using "item_type": "person" .

Expand to view request sample

img

The solution for this example does not violate any constraints. It utilizes all three (3) vehicles with a total travel time of approximately 7.5 hours. The longest journey for any passenger is short of one (1) hour. In contrast, removing the constraints and adding ones that enforce meeting pickup time windows and minimizing travel time, the solution requires two (2) vehicles and only six (6) hours of total travel time. Why would one not want a shorter overall travel time? Because in not considering the passengers' dropoff time, Mark and Oscar needlessly wait 3.5 hours at the airport before their eventual dropoff at the tennis tournament 5 hours later! This example illustrates many of the tradeoffs inherent in complex routing problems. Punishing customers with a terrible experience can be avoided with the right mix of constraints.


Prevent orders from being assigned to vehicles with attributes that are “undesirable” for some orders. The attributes_to_avoid are specified at the order level, and then vehicle attributes are compared against these values when evaluating the constraint. Thus there are no additional constraint parameters beyond the default. Violation increment has no impact on this constraint.

Expand to view request sample

img

Solution with no attempt to avoid incompatible attributes

img

We assign the attribute “Loud vehicle” to Vehicle 1, represented by the new solution's pink route. Many orders now request to avoid this attribute via the constraint, forcing the route for vehicle 1 to be very inefficient, traveling far from the start location to service orders. In particular, order 693192 boxed in red is right next to the start/end location for Vehicle 1. However, since this order has “Loud vehicle” in its attributes_to_avoid, Vehicle 1 does not visit it, forcing the green route to travel very far out of the way to hit this order.


Given an order with a dropoff_location_id , a dropoff_deadline enforces the latest time that the dropoff occurs. The associated violation_increment is in seconds.

In the passenger pickup and dropoff example below, the journey_time , additional_journey_time , and dropoff_deadline constraints are used simultaneously. In the example, several vans start and end their routes at an Atlanta hotel. Each van has a six (6) passenger capacity expressed using the capacity_by_item array with passengers described as "items" using "item_type": "person" .

Expand to view request sample

img

The solution for this example does not violate any constraints. It utilizes all three (3) vehicles with a total travel time of approximately 7.5 hours. The longest journey for any passenger is short of one (1) hour. In contrast, removing the constraints and adding ones that enforce meeting pickup time windows and minimizing travel time, the solution requires two (2) vehicles and only six (6) hours of total travel time. Why would one not want a shorter overall travel time? Because in not considering the passengers' dropoff time, Mark and Oscar needlessly wait 3.5 hours at the airport before their eventual dropoff at the tennis tournament 5 hours later! This example illustrates many of the tradeoffs inherent in complex routing problems. Punishing customers with a terrible experience can be avoided with the right mix of constraints.


The journey_time constraint specifies the maximum number of seconds between when an item is picked up and dropped off, delivered, or the route ends. For example, if refrigerated goods can only be on a vehicle for one hour before beginning to spoil, add the journey_time constraint with the max_journey_seconds parameter set to 3600. The associated violation_increment is in seconds.

In the passenger pickup and dropoff example below, the journey_time , additional_journey_time , and dropoff_deadline constraints are used simultaneously. In the example, several vans start and end their routes at an Atlanta hotel. Each van has a six (6) passenger capacity expressed using the capacity_by_item array with passengers described as "items" using "item_type": "person" .

Expand to view request sample

img

The solution for this example does not violate any constraints. It utilizes all three (3) vehicles with a total travel time of approximately 7.5 hours. The longest journey for any passenger is short of one (1) hour. In contrast, removing the constraints and adding ones that enforce meeting pickup time windows and minimizing travel time, the solution requires two (2) vehicles and only six (6) hours of total travel time. Why would one not want a shorter overall travel time? Because in not considering the passengers' dropoff time, Mark and Oscar needlessly wait 3.5 hours at the airport before their eventual dropoff at the tennis tournament 5 hours later! This example illustrates many of the tradeoffs inherent in complex routing problems. Punishing customers with a terrible experience can be avoided with the right mix of constraints.


Matches the attributes of an order with the attributes of the vehicle servicing the order. This can be used to enforce “skill matching” type constraints. Each order can be given a set of attributes. If any one of these attributes is not present in the vehicle's attributes that services this order, then a penalty is assessed. The violation_increment is in terms of the percentage points of the attributes matched in order. For example, suppose an order has five attributes, and three are matched by the vehicle that services it. In that case, 60% of the attributes are matched. A violation increment of 10 would mean that this scenario would incur a penalty of 4 times the original penalty amount since 40% of the attributes are unmatched and 40/10 =4.

Suppose some attributes are more important than others when assigning vehicles to orders. In that case, the constraint can assign different penalties at the attribute level. This is illustrated in the second example below.

Expand to view request sample

img

A solution to the original problem with no Match Attributes constraint.

img

Vehicle 1 (blue route) is assigned the attribute “speaks Spanish.” In contrast, Vehicle 4 (red route) has the attributes “speaks Russian” and “speaks Spanish.” Various order is now assigned these attributes, and we see that the blue route (vehicle 1) and red route (vehicle 2) now cover a much larger geographical area since the Match_Attributes constraints have a high penalty, effectively forbidding any vehicle from visiting these orders unless they have the correct attributes.

In this example, we have a more nuanced approach towards attribute matching. Our vehicles now have various attributes: paint, drywall, gutters, Charles, and Gavin. The skill (paint, drywall, or gutter) is enforced to match a very high penalty. The penalty for matching these attributes is higher than visit_range. The optimization will only visit an order if the skill is matched – visiting an order with inadequate skills incurs a higher penalty than missing to enforce this behavior. Additional Match_Attributes constraints enforce a “soft matching” with the preferred driver, either Gavin or Charles. These assignments are violated due to the lower penalty.

Expand to view request sample

img

In this example, the two unserved orders have the attribute “gutter.” The only route with the “gutter” attribute is the light blue route, which has less than a minute of extra time and can not visit any more orders. The pink route has 2.5 hours of slack time. Still, since the vehicle does not have the “gutter” attribute, the two unserved “gutter” orders are not visited by this vehicle.


Favor visiting high priority orders. If the priority p is greater than one and order with min_visits: m is visited k times in the solution with k < m , then we assess a penalty amount of (p – 1) * (m – k) . Thus, an order with a priority of 1 will not receive a penalty. Otherwise, the higher the order’s priority, the higher the penalty for not visiting at least min_visits times. No additional parameters are necessary for this constraint beyond the defaults as the priority information is part of each order object.

Expand to view request sample

img

Original solution with two vehicles and no order_priority constraint.

img

In the original two vehicle solution, we have 12 unvisited orders. We now add the order_priority constraint and specify a priority for many orders. In the resulting solution, we have 17 unvisited orders. Still, we visit all of the orders that have a priority greater than 1. In other words, we visit fewer customers but hit the important ones. Order 688798 at the bottom is boxed in black – we do not visit this order in the original solution since it is so far out of the way. However, the penalty for missing this priority ten order is now high enough that a lower overall score is obtained by adding this order to the solution.


There may be some cases where traversing a particular segment in a solution is undesirable (here, a segment refers to the path between two stops, not particular streets or roads). Such segments can be avoided by using the Prevent_Segment constraint, which takes in an array of pairs of location_ids and penalizes the solution if the segment connecting these pairs is present in the solution.

Expand to view request sample

img

The original four-vehicle solution before any segments is penalized.

img

The example introduces a Prevent_Segment constraint that penalizes links that start or end at location “loc36” (boxed in black) and the five other locations boxed in red. This results in the blue northeast route now traveling far out of the way since the Cumming order is effectively prevented from being serviced by the green route. This results in an overall increase in travel time, but all of these undesirable segments are avoided.


A scheduled appointment is more stringent than a time window. Appointments are expressed inside the order object, and they must include an appointment_start and appointment_end time. One can additionally specify a specific shift_id or a vehicle_id if the appointment should be satisfied by a particular shift or vehicle. Given some appointments at an order, service must begin precisely at the specified time and end at the specified time. Meeting an appointment can sometimes force the vehicle to idle/wait to meet the appointment, often resulting in fewer orders being visited due to the lack of flexibility in determining the routes. The scheduled_appointment constraint ensures that the appointment times given in each order are met – note that if appointments are given in the orders but there is no scheduled_appointment constraint, the appointments will virtually be ignored. To ensure that a specific shift or vehicle satisfies the appointment, one should invoke the scheduled_appointment_shift or scheduled_appointment_vehicle constraint. By applying a combination of these constraint types to a particular appointment, one can ensure that service at the order begins at the right time by a specific vehicle or shift. This technique can be useful when an existing schedule has been determined. A new disruptive event occurs - this leads to a so-called "schedule repair" problem. One of the considerations is to produce a new schedule that is "similar" to what was planned. By expressing this previously determined schedule as a set of appointments, one can generate a new optimization problem. Part of the objective is to adhere to this former plan.

Expand to view request sample

img

Shown above is the original two vehicle solution with no scheduled appointments. With two vehicles, we are left with 12 orders that cannot be feasibly visited.

img

Solution with scheduled appointments met at the orders with black boxes around them. This results in 14 unvisited orders vs. 12 unvisited in the case of 2 vehicles with no scheduled appointments. Also, note the pink route's relative inefficiency where stop three must be added to this route since a single-vehicle can't satisfy both of the scheduled appointments.


The span constraint allows us to ensure that the service at all orders in a provided set is completed within a specific time limit. The constraint offers an array of order_id ’s and a max_seconds value. The constraint is violated if the difference between the latest departure and earliest service starts exceeds max_seconds .

Expand to view request sample

img

The solution before adding the Span constraint.

img

In this example, we force a set of 9 orders in the center of Atlanta (inside the black region) to all be visited around the same time – the time between the earliest arrival and the latest departure must be <= 120 minutes. These orders are visited by two routes (cyan and purple), the earliest arrival being at and the cyan route, in particular, becomes relatively inefficient due to this constraint. Overall, travel time increases by about 30 minutes when we don’t have this constraint.


Individual orders can have time windows – intervals during which a vehicle must arrive and begin service. This constraint determines the importance of meeting time windows for each customer. By default, it applies to all orders. Still, if specific orders have more critical time windows, this constraint can be used multiple times for sets of order_ids. The constraint checks each order’s visit(s) against the time windows defined inside the order object.

Expand to view request sample

img

Original four-vehicle solution with no time window constraints

img

Shown above is the four vehicle solution after adding time window constraints. The bottom orange route changes substantially, and we can see backtracking in this route to satisfy the time windows. We add about an hour to the total travel time across all routes to satisfy all the time windows.


This constraint encourages the solution to visit orders with higher urgency values earlier on in the planning period. An order’s urgency must be in the range 1-99 and should be viewed as a percentile. An urgency of 90 means that we want to visit this order in the first 10% of the planning period. If violation_increment is specified, then an additional penalty is assessed for each percentile outside the desired range. So if the planning period is 10,000 seconds and an order has urgency 89, we will penalize a solution that has us visiting this order after ((100-89)/100)*10,000 = 1100 seconds. In this case, the violation increment is in percentage points.

Expand to view request sample

img

Original four-vehicle solution with no urgency enforced.

img

We add an urgency of 99 to 4 orders, indicating that we want them to be visited in the first 1% of the planning period's available time. These four orders now become one of the first two orders visited on the cyan and orange routes. This comes at the expense of increasing total travel time by about 90 minutes. Since it is impossible to visit all these orders in the first 1% of the planning period, we still incur a penalty from this constraint. However, since the constraint in the example utilizes violation_increment, a lower total score of the solution is obtained when we visit these orders as early as possible, even if we still violate the constraint.


The vehicle_coverage constraint allows one to specify that a small number of vehicles must visit a certain set of orders. Typically, this would be to force a set of orders to be covered by a single-vehicle. Still, it is flexible enough to handle more complex use cases. The constraint must specify a set of orders and values for min_vehicles and max_vehicles. If violation_increment is specified, then the units are expressed in the # of vehicles used to cover the set of orders. For example, if we have a penalty of 1000 with min_vehicles=1, max_vehicles=2, violation_increment=1, and four vehicles are used to service a set of orders. A penalty of 3000 will be assessed: 1000 for using too many vehicles, and an additional penalty of 2000 for exceeding the limit by 2.

Expand to view request sample

img

Original solution with no vehicle_coverage constraint.

img

Three widely spread orders (boxed in black) are added to the vehicle_coverage constraint with min_vehicles equal to 1 and max_vehicles equal to 1. The result is that Vehicle 1 now covers a huge territory and visits all three of these orders. Note that Vehicle 2 is now not used, leading to a very unbalanced solution in terms of the # stops per route and total travel time per route.


The visit_gap constraint will enable one to constrain these visits. The constraint can be restricted to a subset of orders if desired by specifying an optional order_id 's array, as shown below.

Ensure the spacing of visits at an order meets requirements. The gap between consecutive visits at a single order is measured as the difference in the first arrival time and the next arrival time. The constraint checks the visit spacing at each order against the values for min_days and max_days . If the amount of time between visits at an order falls outside this range, a penalty is assessed. The units of violation_increment are days.

In the full example below, we specify a problem with four vehicles where each vehicle has two shifts over two consecutive days. Many of the orders now require a minimum of two visits with a gap (min_days) of 1. If the visit gap constraint is not given, then the routes consecutively visit each of these orders that require two visits. This allows a solution with only three vehicles and another vehicle that is only active on one of the days. With the visit gap constraint in place, we must have at least one day (24 hours) between visits – all visit requirements are still met, but all eight shifts are required. The request below contains both the visit_range and Visit_Gap constraints.

Expand to view request sample

img

Shown above is the solution where no visit gap constraint is specified. All the orders that require multiple visits are now visited back to back on the route since there is no incentive to space out the visits. The vehicle starting at the northwest-most location is not needed at all.

img

The solution when we use both visit range and visit gap constraints. Visits to each customer location now do not occur within 24 hours of one another. All four vehicles are active on both days.


The visit_range constraint allows one to specify the number of times an order is visited. The constraint can be restricted to a subset of orders if desired by specifying an optional order_id 's array, as shown below.

Ensure an order receives a minimum or a maximum number of visits over the entire planning period. This constraint is particularly useful in problems that span multiple days where vehicles have numerous shifts. The default value of min_visits is 1 for any order. Suppose the visit range constraint is not included in a request. In that case, the optimization has no incentive to visit the orders. The default behavior would be not to visit any orders and return an empty solution. Since this is undoubtedly not the desired behavior, the user is protected if they do not include a visit range constraint. The optimization proceeds as if one wants to visit all the orders one time.

Suppose we use the default travel_time constraint so that one second of travel by a vehicle is equivalent to one penalty unit. In that case, we can use the visit range to express our problem as a revenue optimization problem. In the example below, we have two visit_range constraints – one for generic orders with a penalty of 1000 and another with a penalty of 40,000 for a set of “high profit” orders. Now the tradeoff is that for the specific order, if we must travel more than 2000 seconds out of the way to visit a location, we will choose not to do so. For the high-profit orders, if we must travel more than 40,000 seconds out of the way to hit these, we will decide not to do so. Suppose one has a dollar cost associated with a vehicle traveling 1 second and a dollar revenue amount for visiting each location. In that case, the objective function becomes an excellent proxy for the route's profit. The request below includes both visit range constraints (for the generic orders and the high-profit orders). Note that it is also possible to achieve this behavior with the order_priority constraint – here, we are just expressing this differently.

Expand to view request sample

img

When we account for revenue at the generic orders and do not treat any of the high-profit orders differently, note the unserviced orders boxed in red – these will be added to the second visit_range constraint in the next request.

img

After adding the second visit_range constraint for the high-profit orders, "constraint_name": "service high-profit orders" . Now note that all of the outlying orders missed in the first solution are now visited (green boxes above).

Salesforce Developers

CHANGELOG

Added

  • Details of the territory optimization service.
  • Introduced new constraints:
    • order_dependency
    • promptness
    • vehicle_attribute
    • vehicle_attribute_distribution
    • vehicle_attribute_duration_distribution
    • vehicle_balance
    • visit_range_across_shifts
  • Documented "easter egg" parameters which output debugging information. These parameters can be searched for using the phrase " FOR DEBUGGING ".
  • Unlimited mixing of vehicle types is supported. For example, one vehicle object can have a "type": "car" and another vehicle object can be "type": "truck" and so on.
  • Additional truck parameters:
    • num_trailers
    • weight_per_axle .
  • Where relevant, parameters now have default , minimum , and maximum .
  • OpenAPI Specification validators now included in pre-publication to ensure standardization followed.

Added

  • Documented the shift_duration_sum constraint
  • Documented the visit_same_location constraint
  • Documented the max_flights constraint
  • Added values for default constraint values when a request is sent without a constraints object

Changed

  • Updated max_distance docs to indicate 0 baseline is equivalent to minimizing distance travel
  • Corrected docs to indicate URLs expect one of /sync or /async
  • Clarified sources and destinations usage in matrix documentation
  • Clarified shifts description in routing
  • Corrected volume and weight descriptions in item object to indicate arbitrary units
  • Updated description of priority and urgency in order object
  • Updated directions description to reflect richness of response

Added

  • Published a "coverage status" map per country based on random matrix and routing tests
  • Added a strict, finite request/response data retention policy of maximum 90 days

Changed

  • Improved driving directions for mainland China
  • Fixed bug related to floating breaks some times not being honored
  • Improved handling of null values in request and updated to a meaningful error message.

Added

  • Routing optimization requests can now contain multiple vehicles of type: "truck" each with different parameters, e.g., height , weight , volume_capacity , etc. The routes for each truck are guaranteed to be compliant for that truck's parameters.
  • Standardized the expression of driving directions and polylines across all regions, including China and Japan.
  • Verbose driving directions included for all routing responses.

Added

  • Addition of a work_speed parameter to the shift object which controls the speed of work at an order. This parameter helps account for historical variations of technicians work speed versus the baseline duration one expects to complete an order.

    The default value is one (1). When set to a value other than 1, the duration at any order_id serviced during the shift is longer/shorter than the stated duration of the order. For example, "work speed": 1.2 results in the order taking 20% longer to complete.

  • Additional info incorporated into the response for problems involving drop-offs. Each stop in the route object's stops array now includes an array of order_ids_dropped_off .

  • New constraints to handle appointments:

    • scheduled_appointment_shift
    • scheduled_appointment_vehicle
  • New constraints for problems involving drop-offs:

    • journey_time
    • additional_journey_time
    • dropoff_deadline

Changed

  • Minor bugfixes in lesser used constraints involving journey time
  • In visit_gap constraint, time intervals expressed via seconds as well as days by using min_seconds and max_seconds to express desired visit spacing. Previously allowed only min_days and max_days .

Added

  • Documentation for existing constraints shown in examples but not explicitly noted in technical documentation.

Removed

  • Removed num_visits constraint since it is redundant with the visit_range constraint.

Added

  • New Max_Commute constraint added to handle first and last legs of routes
  • Optional rounding_minutes added to the round start of service events to nearest k minutes
  • For matrix calls with no path between source/end locations, added count and warning message to response

Changed

  • Updated worldwide map with latest street network and traffic data
  • A more cost-effective and efficient method of traffic window interpolation and storage
  • Improved error checking for errors in input requests (e.g., empty orders, invalid parameters)
  • Improved handling of complex pickup/delivery/-drop-off/replenishment problems
  • Improved handling of truck routing with changes to underlying map service
  • For cases of non-obvious input in routing JSON, changed HTTP return code from 409 to 422
  • Bug fixed in output JSON for items_delivered and items_picked up in pickup/delivery problems

Changed

  • Enforce the requirement that all vehicles with type truck have identical dimensions. Previously, the routing endpoint in the Optimization API accepted mixed dimension fleets; Now, the routing endpoint in the Optimization API responds with an error.

Added

  • Enforce requirement that all vehicles in a problem be the same type vehicle, i.e., do not allow the mixed fleet problem.
  • Submitting a request with an empty vehicle array now results in an error response.

Changed

  • Updated the behavior of the Visit Sequence constraint.
  • Solutions are now deterministic for repeatable behavior.

Added

  • Forced route structures are now supported

Added

  • A constraint for limiting distance traveled from a home location.

  • A constraint for handling orders at the same physical location, e.g., apartment buildings.

  • Handling of hard, soft, and floating breaks.

  • A constraint for handling orders at the same physical location, e.g., apartment buildings.

  • Handling of hard, soft, and floating breaks.

Added

  • Initial major release of all functionality.
Read article
Salesforce Developers

Get Started with Pardot API

Pardot’s REST APIs let you access and manipulate your Pardot data.

Extend Pardot

Build your own custom integrations to better support your business needs.

Augment Pardot Data

Clean and enrich prospect data, saving your sales reps hours of time spent on menial tasks.

Expand Reporting

Use the Pardot API to automate exporting visitor data to your own external analytics tools for richer insights.

Boost Your Business Value

Automate tasks, segment prospects with external data, or create custom external scoring models and update prospects.

To get answers to your questions about the API, or report a documentation issue, open a ticket with our Support team. Learn how.

If you're new to using Pardot APIs, see our Quick Start.

Versions 3 and 4

If your Pardot account has the Allow Multiple Prospects with the Same Email Address (AMPSEA) feature disabled, use version 3 of the Pardot API.

If your Pardot account has AMPSEA enabled, use version 4 of the Pardot API.

Versions 3 and 4 provide the same functionality, using slightly different input and output syntax to support working with prospects that share an email address.

See Version 3 and 4 Overview for information about using versions 3 and 4.

Version 5

Version 5 provides new functionality. You can use this version whether or not your Pardot account has "Allow Multiple Prospects with the Same Email Address" enabled.

See Version 5 Overview for information about using version 5.

Different Pardot environments are hosted on different domains, and you must use the correct domain in your request URLs. In general:

  • Demos, developer orgs, and sandbox environments are hosted on the domain pi.demo.pardot.com .
  • Training and production environments are hosted on the domain pi.pardot.com .

You can find the correct URL for your Pardot domain from Salesforce Setup.

  1. In Salesforce, click the gear icon to access Setup.
  2. From Setup, enter Installed Packages in the Quick Find box, and then select Installed Packages .
  3. Find the package b2bmaIntegration .
    • If the namespace prefix is "b2bma", use the domain pi.pardot.com in your request URLs.
    • If the namespace prefix is "pi3", use the domain pi.demo.pardot.com in your request URLs.

We enforce API rate limits in two ways:

  • daily requests
  • concurrent requests

Daily Requests Limits

Pardot Edition Allocated Daily Requests
Growth 25,000
Plus 50,000
Advanced 100,000
Premium 100,000

These limits reset at the beginning of the day based on your account time zone settings. Any request made exceeding the limits result in an error code 122

You can check your current daily usage on the "usage and limits" page.

Concurrent Requests

To interact with our API more efficiently, you can have up to five concurrent API requests. Any connection over five results in an error code 66 response.

These wrappers aren't officially supported, but are available to use with the Pardot API.

  • ruby-pardot
  • python-pypardot4 for version 4 of the API
  • pardot-java-client
Read article
Salesforce Developers

Use Cases for Pardot API

Extend Pardot to fit your business needs, providing access to your data for use in various ways. The API has so many possibilities that it can feel overwhelming to get started, so we’ve rounded up a few common use cases here. Start with these examples, then get creative.

You can use the Pardot API to clean and enrich prospect data, saving your sales reps hours of time spent on menial tasks. Automate data clean up tasks like normalizing picklist values, capitalizing names, and formatting phone numbers. You can also add data from your vendors by updating prospects via the API.

Example

Your manager asks you to fix all prospect name fields that are in all-caps or lowercase. They also want you to update prospect scores regularly, based on an internal scoring tool. You write some code that checks each prospect name and updates the capitalization. You set it up to run when a new prospect is added, keeping the database neat. You then set up an integration between your internal scoring tool and Pardot that updates the prospect score field every day.

Pardot Objects

  • Prospect: get prospect data, update prospect field values

Use the Pardot API to automate exporting visitor data to your own external analytics tools for richer insights.

Example The marketing team wants a detailed analysis of all the web analytics to see how much budget they need to drive clicks and sync web ad targeting. You automate a bulk export of Pardot visitor data, then import it into your company’s analytics tool at regular intervals.

Pardot Objects

  • Visitor Activity (via the Export API)
  • Prospect: get prospect data
  • Prospect Account: get prospect account data

Use the Pardot API to help you target the right groups of prospects, so you can optimize your messaging and personalization. If another system contains most of your data, you can segment prospects in that system instead of Pardot. In this case, use the API to get the prospect data you need. Do your segmentation analysis outside of Pardot so you can update the prospects. Then, import the updated prospects into Pardot and add them to lists for engagement programs and other marketing efforts

Example

A marketing manager at your company wants to create a Pardot list for a new marketing initiative, but the information for the segmentation criteria is hosted outside of Pardot. The manager gives you a list from an external database, and the list includes Pardot prospect IDs. You use the Create operation with the List object and create a Pardot list.

Pardot Objects

  • Prospect: get prospect IDs
  • List: Read or Create the List for the segment
  • List Membership: Add or remove prospects from the list
Read article
Salesforce Developers

Authentication

Prerequisites:

  1. You must have Salesforce OAuth set up in the org. To set up a connected app for OAuth, the "pardot_api" scope must be one of the selected OAuth scopes. Otherwise, OAuth flows other than username/password flow can't be used with the Pardot API. Check out this video for an example of how to implement OAuth.
Implement Salesforce OAuth for Pardot API
undefined
  1. You must have the Pardot Business Unit ID that you want to authenticate with. To find the Pardot Business Unit ID, use Setup in Salesforce. From Setup, enter "Pardot Account Setup" in the Quick Find box. Your Pardot Business Unit ID begins with "0Uv" and is 18 characters long. If you can’t access the Pardot Account Setup information, ask your Salesforce Administrator to provide you with the Pardot Business Unit ID.

  2. Authenticate with a user that is SSO enabled. An SSO-enabled user is one who can log in to pi.pardot.com using "Log In with Salesforce" or who can access Pardot using the Pardot Lightning App.

Pardot Account Type Salesforce Domain Pardot Domain
Production Account login.salesforce.com pi.pardot.com
Pardot Developer Org login.salesforce.com pi.demo.pardot.com
Sandbox test.salesforce.com pi.demo.pardot.com

OAuth 2.0 Flows

There are numerous OAuth 2.0 Flow types supported. The Web Server Flow is the most commonly used. For a list of all flows, see the OAuth 2.0 Flows Help page. Read the descriptions of the flows to choose the best one for your case.

After you get the access token, you must pass it and the Pardot Business Unit ID using the Authorization and Pardot-Business-Unit-Id headers.

Sample Request

Request must be made using HTTPS.

Request Parameters

Parameter Required Description
access_token X Access token obtained from Salesforce OAuth Endpoint
business_unit_id X Pardot Business Unit ID

If a valid access token is provided with a valid business unit ID, the Pardot endpoint works as expected.

Note: The Pardot API doesn’t enforce IP address restrictions that are configured using the Salesforce option "Enforce login IP ranges on every request".

Read article
Salesforce Developers

Error Codes and Messages

Use your error code or message to troubleshoot problems with the API.

Use CTRL+F to search this page for the error code or message you recieved.

In versions 3 and 4, errors are formatted as follows:

In version 5, errors are formatted as follows:

Error Code: 1

Message : Invalid API key or user key

Problem : Either the user or API keys are incorrect, or the API key has expired.

Solution : Check the user and API keys in the request. If the user key was entered accurately, then submit a request for a new API key.

Error Code: 2

Message : Invalid action

Problem : The requested operation was not recognized by the API.

Solution : Verify that the requested operation is valid for the target object type. If that operation is allowed, then check for misspellings and other typos.

Error Code: 3

Message : Invalid prospect ID

Problem : Pardot could not find a match for the provided prospect ID.

Solution : Verify that the prospect ID is accurate.

Error Code: 4

Message : Invalid prospect email address

Problem : Pardot could not find a prospect with the provided email address (for read, update, or delete), or the prospect email address is too long (> 255 characters) or has invalid syntax (for create/upsert). See Allowed Characters in Email Addresses for email address verification.

Solution : If running create or upsert, verify the email address is valid. If running read, update, or delete, verify that a prospect with this email address exists in your Pardot account.

Error Code: 5

Message : Invalid query parameters

Problem : Pardot did not recognize any of the provided search parameters.

Solution : Check parameter spellings. Also, ensure that the specified search parameter is supported by the API. See Parameters to Select Prospects for more details.

Error Code: 6

Message : Invalid time frame

Problem : The value of the timeframe search parameter was not recognized.

Solution : Check for misspellings in the timeframe value. Also, verify that the provided value is supported by the API. See Parameters to Select Prospects for more for supported timeframe values.

Error Code: 7

Message : Invalid timestamp

Problem : Pardot could not decipher a specified timestamp.

Solution : Verify that the timestamp adheres to GNU standards for date and time input. See GNU Date Input Format & Syntax for more information. Also, ensure all characters in the timestamp are URL safe. See Parameters to Select Prospects for supported values.

Error Code: 8

Message : Invalid time range

Problem : The provided start timestamp is later than the end timestamp.

Solution : Swap the values of the timestamps.

Error Code: 9

Message : A prospect with the specified email address already exists

Problem : The provided email address is already assigned to a prospect within Pardot. This error can occur when a create request with the same email address is submitted more than once.

Solution : Check the existing prospect record to see if data can be merged through an update request.

Error Code: 10

Message : Invalid user ID

Problem : The provided user ID does not exist in Pardot.

Solution : Verify that the user ID was typed correctly and matches the intended user in Pardot.

Error Code: 11

Message : Invalid user email address

Problem : The provided user email address could not be found in Pardot.

Solution : Verify that the provided email address belongs to a registered Pardot user and that it was typed correctly.

Error Code: 12

Message : Invalid group ID

Problem : The provided group ID does not exist in Pardot.

Solution : Verify that the group ID was typed correctly and matches the intended group in Pardot.

Error Code: 13

Message : One or more required parameters are missing

Problem : One or more of the required parameters for this type of request are missing.

Solution : Verify that all of the required parameters have been provided. Check that all parameter names were spelled accurately and as specified in Object Field References. Ensure the proper URL punctuation was used, including ? before parameters and & between parameters.

Error Code: 14

Message : Non-existent prospect ID; No email address provided

Problem : The ID provided for the upsert was not valid, and no email address was provided for a new prospect to be created.

Solution : Verify the provided ID. If creating a prospect was intended, ensure that an email address was provided.

Error Code: 15

Message : Login failed

Problem : The provided email address, password, or user key is invalid.

Solution : Check the provided credentials for typos. Also, ensure that the specified user account has at least "Marketing" access privileges.

Error Code: 16

Message : Invalid ID

Problem : The provided ID is not valid.

Solution : Ensure that only valid integer values were provided.

Error Code: 17

Message : Invalid ID range

Problem : The provided ID range is not valid.

Solution : Swap the values of the specified IDs.

Error Code: 18

Message : Invalid value for profile criteria matching status

Problem : The provided value for a profile criteria's matching status was not recognized.

Solution : Ensure that only the values match , nomatch , or unknown are being used.

Error Code: 19

Message : Invalid value specified for sort_by

Problem : The provided value for the sort_by is not a supported sorting order.

Solution : Check that the specified sorting values are listed in Using (Object Type): Supported Sorting Options section for the target object.

Error Code: 20

Message : Invalid value specified for sort_order

Problem : The provided value for the sort_order is not a supported sorting order.

Solution : Ensure that only the values ascending or descending are being used.

Error Code: 21

Message : Invalid value specified for offset

Problem : The provided value for offset could not be interpreted as an integer.

Solution : Check for typos that can prevent the value from being interpreted.

Error Code: 22

Message : Unsupported feature in this version of the API

Problem : The feature requested by the API call is not implemented in this version of the API.

Solution : Update the request to use the necessary API version.

Error Code: 23

Message : Invalid value specified for limit

Problem : The provided value for limit is invalid.

Solution : Ensure that the provided value is an integer and is no larger than 200.

Error Code: 24

Message : Invalid visitor ID

Problem : The provided visitor ID does not exist in Pardot.

Solution : Verify that the visitor ID was typed correctly and matches the intended visitor in Pardot.

Error Code: 25

Message : Parameter is_starred must be true or false

Problem : The value specified for is_starred could not be interpreted as a boolean.

Solution : Verify that only the values true or false were specified.

Error Code: 26

Message : Parameter assigned must be true or false

Problem : The value specified for assigned could not be interpreted as a boolean.

Solution : Verify that only the values true or false were specified.

Error Code: 27

Message : Parameter deleted must be true or false

Problem: The value specified for deleted could not be interpreted as a boolean.

Solution: Verify that only the values true or false were specified.

Error Code: 28

Message : Parameter new must be true or false

Problem: The value specified for new could not be interpreted as a boolean.

Solution: Verify that only the values true or false were specified.

Error Code: 29

Message : Invalid value specified for score

Problem : The value specified for score could not be interpreted as an integer.

Solution : Check for typos that can prevent the value from being interpreted correctly.

Error Code: 30

Message : Invalid score range specified

Problem : The provided score range is not valid.

Solution : Swap the values of the specified scores.

Error Code: 31

Message : Invalid combination of parameters for score

Problem : A conflicting set of query criteria for the prospect's score has been specified.

Solution : Make sure that score_equal_to is not being used in combination with score_greater_than or score_less_than .

Error Code: 32

Message : Invalid value specified for grade

Problem : The value specified for grade is not one of the allowed options.

Solution : Check for typos that may prevent grade from being interpreted correctly. SeeParameters to Select Prospects for supported values. Also, ensure that the specified grades are URL-encoded.

Error Code: 33

Message : Invalid grade range specified

Problem : The provided grade range is not valid.

Solution : Swap the values of the specified grades.

Error Code: 34

Message : Invalid combination of parameters for grade

Problem : A conflicting set of query criteria for the grade has been specified.

Solution : Make sure that grade_equal_to is not being used in combination with grade_greater_than or grade_less_than .

Error Code: 35

Message : Invalid opportunity ID

Problem : Pardot could not find a match for the provided opportunity ID.

Solution : Verify that the opportunity ID is accurate.

Error Code: 36

Message : One or more required parameter values are missing

Problem : Some of the parameters necessary to complete the specified API request were omitted from the request.

Solution : Ensure that all required parameters have been included. In addition, check from typos in the parameter names. Also check that the request has been properly formatted.

Error Code: 37

Message : A Salesforce connector was detected

Problem : Your Pardot account has a Salesforce connector. When a Salesforce connector is present, opportunities and prospect account cannot be modified by Pardot.

Solution : (NOT RECOMMENDED) Deleting the Salesforce connector allows for opportunity modification to be done through the API. However, doing so disables synchronization with Salesforce. If a Salesforce connector is present, modifications to opportunities must be done within Salesforce.

Error Code: 38

Message : Invalid campaign ID

Problem : Pardot could not find a match for the provided campaign ID.

Solution : Verify that the campaign ID is accurate.

Error Code: 39

Message : Invalid profile ID

Problem : Pardot could not find a match for the provided profile ID.

Solution : Verify that the profile ID is accurate.

Error Code: 40

Message : Invalid opportunity probability

Problem : The value specified for probability is not valid.

Solution : Ensure that the specified value is a number from 0 through 100 inclusive.

Error Code: 41

Message : Invalid probability range specified

Problem : The specified probability range is not valid.

Solution : Ensure that the specified values are numbers from 0 through 100, inclusive. It might be necessary to swap the values of the specified probabilities.

Error Code: 42

Message : Invalid opportunity value

Problem : The value specified for value is not valid.

Solution : Ensure that the specified value is a non-negative number.

Error Code: 43

Message : Invalid opportunity value range specified

Problem : The specified value range is not valid.

Solution : Ensure that the specified values are non-negative numbers. It might be necessary to swap the specified values.

Error Code: 44

Message : The provided prospect_id and prospect_email parameters do not match

Problem : The specified prospect_email and prospect_id parameters do not correspond to the same prospect.

Solution : Ensure that the specified email address and the ID both correspond to the desired prospect. Note: Typically, only one of these parameters is required. Consider omitting one of them.

Error Code: 45

Message : The provided user_id and user_email parameters do not match

Problem : The specified user_id and user_email parameters do not correspond to the same user.

Solution : Ensure that the specified email address and the ID both correspond to the desired user. (Note: Typically, only one of these parameters is required. Consider omitting one of them.)

Error Code: 46

Message : This API user lacks sufficient permissions for the requested operation

Problem : The currently authenticated API user doesn't have the necessary permissions to perform the requested operation.

Solution : Some API operations are only available to users with Administrative permissions. If the requested operation has such a requirement, reauthenticate as an administrative user and resubmit the request. See the Authentication section for more information.

Error Code: 47

Message : Multiple assignment targets were specified

Problem : More than one object was specified as a target for this ASSIGN request. For example, both a group and user were specified as targets of a prospect assignment.

Solution : Ensure that only one target is specified when submitting an ASSIGN request.

Error Code: 48

Message : Invalid visit ID

Problem : The provided visit ID does not exist in Pardot.

Solution : Verify that the visit ID was typed correctly and matches the intended visit in Pardot.

Error Code: 49

Message : Access Denied

Problem : User is not authorized to perform the requested operation either due to access restrictions or forbidden method of passing credentials

Solution : Verify user has required access to perform the requested operation. Ensure that credentials are passed via a supported method as per the API documentation. Contact customer support if problem persists.

Error Code: 50

Message : Invalid boolean

Problem : Need a valid boolean value, like true.

Solution : Make sure to use lowercase.

Error Code: 51

Message : Invalid parameter

Problem : Object type is invalid.

Solution : Change the object type to one of the allowed types.

Error Code: 52

Message : Invalid parameter range

Problem : A parameter in the request is outside its acceptable range.

Solution : Update the parameter to be within the acceptable range.

Error Code: 53

Message : Client IP address/location must be activated before accessing API

Problem : IP is not in the allowed list.

Solution : Add the IP address to the allowed list to access the API.

Error Code: 54

Message : Email address is already in use

Problem : Email address is already being used by other prospect.

Solution : Use different email address.

Error Code: 55

Message : Invalid list ID

Problem : You either did not specify the list ID, or that List ID doesn't exist.

Solution : Specify an ID, or check to make sure using the correct ID.

Error Code: 56

Message : Invalid number entered for field

Problem : The value entered doesn't match the field's type of Number.

Solution : Verify that there are no characters in the value.

Error Code: 57

Message : Invalid date entered for field

Problem : The value entered doesn't match the field's type of Date, it is an invalid format.

Solution : Verify that the timestamp adheres to GNU standards for date and time input. See GNU Date Input Format & Syntax for more information. Also, ensure all characters in the timestamp are URL safe. See Supported Search Criteria in Prospects for supported values.

Error Code: 58

Message : That prospect is already a member of that list. Update the membership instead.

Problem : The prospect is a member of the list already.

Solution : Update the membership.

Error Code: 59

Message : A CRM connector was detected

Problem : Your Pardot account has a CRM connector. When a CRM connector is present, opportunities and prospect account cannot be modified by Pardot.

Solution : (NOT RECOMMENDED) Deleting the CRM connector allows for opportunity modification to be done through the API. However, doing so disables synchronization with your CRM. If a CRM connector is present, modifications to opportunities must be done within your CRM.

Error Code: 60

Message : Invalid HTTP request method

Problem : The endpoint does not support the HTTP method of the request.

Solution : Use the proper HTTP method for the endpoint. Reference object endpoint documentation or Version 5 Overview.

Error Code: 61

Message : Invalid prospect account id

Problem : Prospect Account ID was incorrect or doesn't exist.

Solution : Verify that the prospect account ID was typed correctly and matches the intended Prospect Account in Pardot.

Error Code: 62

Message : Conflicting Update

Problem : Another update is occurring at the same time.

Solution : Wait before performing this action.

Error Code: 63

Message : Too many IDs specified

Problem : There is a limit on how many IDs you can specify for this query.

Solution : Lower the number of IDs you are querying for.

Error Code: 64

Message : Email content missing required variables

Problem : The content of the email is missing required variables.

Solution : Ensure that all required variables, such as unsubscribe link, are present.

Error Code: 65

Message : Invalid email format

Problem : Doesn't have all required fields present or are not in proper format, such as from address.

Solution : Ensure all fields are present, populated, and in proper format.

Error Code: 66

Message : You have exceeded your concurrent request limit. Please wait, before trying again

Problem : Have made too many requests in this time period.

Solution : Wait a little before making more requests.

Error Code: 67

Message : You have reached or exceeded the limit of how many of this type of object you may have.

Problem : You have too many of the specified object type to create more.

Solution : Delete some of the object if you must make more.

Error Code: 68

Message : Template with this id does not exist.

Problem : The template you are trying to access does not exist.

Solution : Make sure you are using the correct template ID or create a one to use.

Error Code: 70

Message : Batch processing is limited to 50 prospects at once.

Problem : You are requesting to batch more prospects in an operation than we allow.

Solution : Ensure that your batch request has 50 or fewer prospects.

Error Code: 71

Message : Input needs to be valid JSON or XML

Problem : You've inputted invalid JSON or XML.

Solution : Ensure that your request is properly formatted.

Error Code: 72

Message : JSON has been corrupted, hash does not match

Problem : The encoded JSON has been corrupted at some point.

Solution : Ensure that you are sending the correct information.

Error Code: 73

Message : Currently there is not an Email Plug-in Campaign associated to successfully track this email. Please contact your Pardot administrator to ensure there is a proper campaign associated with the Account Settings in Pardot.

Problem : Currently there is not an Email Plug-in Campaign associated to successfully track this email.

Solution : Contact your Pardot administrator to ensure there is a proper campaign associated with the Account Settings in Pardot.

Error Code: 74

Message : The email client is not supported by the plugin API

Problem : The email client used is not supported by this API.

Solution : Use an appropriate email client.

Error Code: 75

Message : There was an error processing the request for the account variable tags

Problem : There was an error processing the request for the account variable tags.

Solution : Review the variable tags, and resubmit the request.

Error Code: 76

Message : API access was disabled

Problem : API access for your account has been disabled.

Solution : Contact customer support.

Error Code: 77

Message : Invalid prospect fid

Problem : The provided Prospect FID was invalid.

Solution : Provide a valid Prospect FID.

Error Code: 79

Message : Invalid CRM_FID

Problem : The CRM FID provided is invalid.

Solution : Provide a valid CRM FID that can be accessed by your account, or is already attached to a prospect.

Error Code: 80

Message : Invalid CRM_TYPE

Problem : The CRM type provided or used is invalid.

Solution : Specify a correct CRM type.

Error Code: 81

Message : Prospect ID and FID do not match

Problem : The provided Prospect ID and FID do not match a single prospect.

Solution : Provide a prospect ID and FID that match a single prospect.

Error Code: 83

Message : No valid CRM connectors available

Problem : Your account does not have an available CRM connector.

Solution : Add a CRM connector to your account.

Error Code: 84

An error has occurred for which no reason is provided.

Error Code: 85

Message : Unable to save the prospect

Problem : For some reason, the prospect was not saved.

Solution : Resubmit the request or review the original request for errors.

Error Code: 86

Message : Invalid Template id

Problem : The template ID provided does not correspond to a template.

Solution : Provide a template ID that is valid.

Error Code: 88

Message : Your account must use version 4 of the API.

Problem : You have requested version 3 of the API, but your account must use version 4.

Solution : Make the request using /version/4 in place of /version/3 .

Error Code: 89

Message : Your account is unable to use version 4 of the API.

Problem : You have requested version 4 of the API, but your account must use version 3.

Solution : Make the request using /version/3 in place of /version/4 .

Error Code: 90

Message : Prospect array should be a flat array of attributes

Problem : The prospect array given was not a flat array, and it should have been.

Solution : Resubmit the request with a flat array. See the Prospect Batch sections of the Prospect object documentation for examples.

Error Code: 91

Message : Prospect array must be keyed by email address

Problem : The prospect array given was not keyed by email addresses, but should have been.

Solution : Resubmit the request with an array keyed by email addresses. See the Prospect Batch sections of the Prospect object documentation for examples.

Error Code: 92

Message : Prospect record could not be found

Problem : The prospect record was not found with the provided information.

Solution : Resubmit the request with different parameters.

Error Code: 93

Message : The selected template is missing send options

Problem : Send options are required for the template.

Solution : Resubmit the request with send options.

Error Code: 94

Message : The provided version is not a valid number

Problem : The version number used is not valid.

Solution : Resubmit the request with a valid version number.

Error Code: 95

Message : Folder name is invalid

Problem : The name for the folder is not valid.

Solution : Resubmit the request with a valid folder name.

Error Code: 96

Message : User does not have access to this folder

Problem : The role assigned for this user does not have access to this folder.

Solution : Update the users permissions and resubmit the request.

Error Code: 97

Message : The folder ID provided does not exist

Problem : No folder was found for the ID provided.

Solution : Resubmit the request with a different folder ID.

Error Code: 98

Message : Prospect not mailable

Problem : One or more of the recipient prospects cannot receive the email requested (due to opting out, being flagged as "Do Not Email", or for other reasons)

Solution : Check that the recipient list is correct, and that the prospect's email preferences are up to date.

Error Code: 99

Message : User with the provided email already exists

Problem : A user with the email provided is already in the system.

Solution : Resubmit the request with a different email address.

Error Code: 100

Message : The provided time zone is invalid

Problem : The value provided does not match a valid time zone.

Solution : Resubmit the request with a different time zone.

Error Code: 101

Message : The provided role is invalid

Problem : The value provided for role is not valid.

Solution : Resubmit the request with a different role.

Error Code: 102

Message : The CRM Username specified is currently applied to another user

Problem : This CRM username is already in use and cannot be used for another user.

Solution : Resubmit the request with a different CRM username to apply for the user.

Error Code: 103

Message : A CRM connector was not detected

Problem : A CRM connector was not found.

Solution : Make sure to configure a valid CRM connector and try again.

Error Code: 104

Message : The CRM Username specified was not detected

Problem : The CRM username was not found.

Solution : Verify the CRM username provided is correct and try again.

Error Code: 105

Message : There is no activation hash for the specified user

Problem : The activation hash for the provided user was not found.

Error Code: 106

Message : User is already active

Problem : The user is already activate.

Error Code: 107

Message : Password does not meet requirements

Problem : The submitted password does not meet the password requirements.

Solution : Resubmit the request using a password that meets the requirements.

Error Code: 108

Message : This Asset cannot be deleted because it is being used in other places.

Problem : Unable to delete an asset if it is used in other places.

Solution : Remove all dependencies of this asset and try again.

Error Code: 109

Message : The requested record was not found.

Problem : Unable to find the requested resource.

Solution : Verify the parameters are correct and resubmit the request.

Error Code: 110

Message : Invalid Account Id

Problem : Invalid account id submitted.

Solution : Verify the account id is correct and resubmit the request.

Error Code: 111

Message : The Integration Username specified is currently applied to another Account

Problem : Unable to use the submitted username as it is already used.

Solution : Resubmit the request using a different integration username.

Error Code: 112

Message : Missing recipient to Track With Engage.

Problem : The recipient parameter is missing.

Solution : Resubmit the request with a valid recipient.

Error Code: 113

Message : Missing CRM ID or Email Address of recipient.

Problem : The request is missing required information.

Solution : Resubmit the request with a valid CRM ID or email address.

Error Code: 114

Message : Invalid CRM ID or Email Address of recipient.

Problem : The CRM ID or email address is invalid.

Solution : Resubmit the request with a valid CRM ID or email address.

Error Code: 115

Message : Number of recipients is more than threshold.

Problem : The number of recipients provided is too large.

Solution : Resubmit the request with fewer recipients.

Error Code: 116

Message : Request outdated.

Problem : The request time has expired.

Solution : Resubmit the request.

Error Code: 117

Message : There was an error deleting the micro campaign.

Problem : There was an error deleting the micro campaign.

Error Code: 118

Message : This API can only be called in a test environment.

Problem : This endpoint can only be called in a test environment.

Error Code: 119

Message : Unable to create refresh tokens for Salesforce connector

Problem : Unable to create a refresh token for the Salesforce connector for authentication.

Solution : Resubmit the request to try again. If the problem persists, contact support.

Error Code: 120

Message : Unable to verify Salesforce connector

Problem : Unable to verify the Salesforce connector.

Solution : Resubmit the request to try again. If the problem persists, contact support.

Error Code: 121

Message : Unable to sync Prospect with Salesforce

Problem : Unable to sync prospects with Salesforce.

Solution : Resubmit the request to try again. If the problem persists, contact support.

Error Code: 122

Message : Daily API rate limit met

Problem : The daily allowed API requests have been met.

Solution : Wait until the next calendar day for the daily limit to reset and try again.

Error Code: 123

Message : Unable to verify Salesforce username; User may already have a verified Salesforce username.

Problem : Unable to verify Salesforce username.

Solution : Verify if the username has already been verified in the system.

Error Code: 124

Message : Unable to set Salesforce username or id

Problem : Unable to set the Salesforce username or id.

Solution : Verify the Salesforce username or ID is correct and resubmit the request.

Error Code: 125

Message : Cannot accept both user_id and crm_owner_fid.

Problem : This request only accepts a user_id or crm_owner_fid but not both.

Solution : Resubmit the request passing only a user_id or crm_owner_fid.

Error Code: 126

Message : Invalid authentication mechanism

Problem : This authentication method has been deprecated.

Solution : Resubmit the request using a valid authentication method.

Error Code: 128

Message : Cannot create campaigns

Problem : Campaigns cannot be created for an account that has Connected Campaigns enabled.

Solution : Create a campaign in Salesforce.

Error Code: 129

Message : Cannot modify campaign name or cost

Problem : Campaign name and cost can't be modified via the API.

Solution : Remove the name and cost fields from the request.

Error Code: 130

Message : One or more of the specified fields are invalid

Problem : One or more of the fields in the CSV is not a recognized standard or custom field.

Solution : Ensure all of the column headers in the CSV match the headers in the field reference. Ensure the number of columns in the CSV matches the number of columns in the header row.

Error Code: 131

Message : Your account is locked due to too many failed login attempts. Reset your password at https://pi.pardot.com/user/passwordReset

Problem : Too many invalid api requests have been made.

Solution : Reset your password at https://pi.pardot.com/user/passwordReset

Error Code: 132

Message : Prospect is archived

Problem : The prospect is in the recycle bin and can't be read.

Solution : Undelete the prospect via the UI or choose another prospect.

Error Code: 133

Message : Up to 2 sort by options are allowed.

Problem : Too many columns were passed into the sort parameter.

Solution : Use 2 or fewer sort by columns.

Error Code: 134

Message : Up to 2 sort order options are allowed.

Problem : Too many orders were passed into the sort parameter.

Solution : Use 2 or fewer sort orders.

Error Code: 135

Message : When passing a comma-separated value, one of the two values must be id.

Problem : When sorting by multiple columns, one column must be the ID column.

Solution : Add the ID column to the request.

Error Code: 137

Message : URL is not valid. Please include a protocol (e.g., http:// or https:// )

Problem : An invalid URL was supplied in the request.

Solution : Add one of the requested protocols to the request.

Error Code: 138

Message : Name must be 50 characters or less.

Problem : The name supplied was too long.

Solution : Reduce the length of the name field.

Error Code: 139

Message : The supplied name is not valid.

Problem : The name field has an invalid character.

Solution : Remove special characters from the name field.

Error Code: 145

Message : Invalid archived parameter specified. Allowed values are true or false.

Problem : The archived parameter only accepts boolean values.

Solution : Update the request to send the proper boolean value.

Error Code: 146

Message : Invalid archived parameter specified. Allowed values are true or false.

Problem : The archived parameter only accepts boolean values.

Solution : Update the request to send the proper boolean value.

Error Code: 150

Message : Input needs to be valid JSON

Problem : The JSON that was submitted was invalid.

Solution : Submit valid JSON. A JSON linter may help ensure that the payload is valid before sending.

Error Code: 151

Message : Unsupported content-type

Problem : The 'Content-Type' header has an unsupported value for this endpoint.

Solution : Check the documentation for the specific endpoint and ensure you are sending the correct Content Type value.

Error Code: 152

Message : Request body can't be empty

Problem : The API request has no body.

Solution : Ensure that the payload of the request is being sent and is encoded as 'application/json'

Error Code: 153

Message : Missing required property in request

Problem : A required field in the request body could not be found.

Solution : Check the documentation and ensure that all required fields in the request body are specified.

Error Code: 154

Message : Invalid property in request

Problem : A field in the request body has an invalid value.

Solution : Check the documentation and ensure that the value that is being passed is supported. Several values are not supported at this time.

Error Code: 155

Message : Can't update. Import must be in "Open" state.

Problem : The import that is trying to be updated is not in the “Open” state.

Solution : This import is no longer eligible to receive updates. Create an import, or update an existing import in the “Open” state.

Error Code: 156

Message : Can't start processing. Import has no associated data.

Problem : The import that is trying to be set to “Ready” has no data associated with it.

Solution : Upload a batch of data before setting the import to “Ready”.

Error Code: 157

Message : Error processing import request. Please contact your Pardot support representative

Problem : The import has no background processing agent associated with it.

Solution : This import was improperly created and is unsalvageable. Create an import and upload the same batch of data to ensure processing occurs.

Error Code: 158

Message : Uploading a file was unsuccessful

Problem : The “files” element of the request body could not be found.

Solution : Ensure that the CSV being uploaded belongs to a key named “files”.

Error Code: 159

Message : The file is not in a valid CSV format

Problem : The CSV file is invalid.

Solution : Ensure that the CSV file is properly formatted. There must be 1 header row, at least 1 data row, and the number of columns in each row must match the number of columns in the header.

Error Code: 160

Message : The limit of batches per import has been reached

Problem : Too many batches have been submitted for this import

Solution : Create an import to submit this batch, or submit this batch to an import that has batch capacity.

Error Code: 161

Message : The current state of the import does not allow the operation

Problem : A batch was submitted to an import that is not “Open”

Solution : Create an import to submit this batch, or submit this batch to an import that is “Open”. Processing is not affected for the import associated with the failed request.

Error Code: 162

Message : No file was specified or uploaded

Problem : No CSV file was submitted

Solution : Submit a CSV file in the body of the request under the “files” key.

Error Code: 163

Message : Too many files were specified or uploaded

Problem : Problem: More than 1 file was submitted in a single request

Solution : Submit only 1 file per request.

Error Code: 164

Message : Daily limit of import batches has been reached

Problem : Too many batches have been submitted over a 24-hour period. The account limit has been reached.

Solution : Wait and try again later.

Error Code: 165

Message : column options is invalid

Problem : API input was incorrectly formatted.

Solution : See documentation for correct input formatting.

Error Code: 166

Message : The input is not in the required format

Problem : The request input was not specified according to the documentation.

Solution : Check the documentation for the desired endpoint and ensure the request is formatted properly.

Error Code: 174

Message : Unknown procedure name.

Problem : The provided procedure name does not exist.

Solution : Check procedure name is spelled correctly or try another procedure name.

Error Code: 175

Message : Unknown procedure argument.

Problem : An unsupported argument was included in the procedure arguments.

Solution : Check arguments are spelled correctly or remove unsupported argument.

Error Code: 176

Message : Missing required argument.

Problem : The export procedure is missing a requirement argument.

Solution : Include the required argument in your procedure definition.

Error Code: 177

Message : Invalid procedure argument.

Problem : An invalid value has been provided for a procedure argument.

Solution : Check the values provided for the procedure arguments are correct.

Error Code: 178

Message : The current state of the export does not allow the operation

Problem : The operation is not possible because of the state of the export. Possible reasons are that the export is expired or is still running.

Solution : If the export has not completed, wait until the read endpoint indicates that the export is complete before retrying the operation.

Error Code: 180

Message : One or more of the specified fields are invalid

Problem : One or more of the fields included in a create or update operation are not valid for that operation.

Solution : Only include fields that are writable in the operation.

Error Code: 181

Message : A required header is missing

Problem : A required HTTP header is missing on the request. For example, if using Salesforce access tokens for authentication, the Pardot-Business-Unit-Id header must be included.

Solution : Include the required header.

Error Code: 182

Message : Invalid header value

Problem : The value included in an HTTP header is not valid. It may be formatted incorrectly.

Solution : Check documentation for the header.

Error Code: 183

Message : An internal error occurred, please try your request again

Problem : An internal error occurred.

Solution : Try the request again. The error may have been related to a temporary condition such as a request failure between internal Pardot or Salesforce systems.

Error Code: 184

Message : access_token is invalid, unknown, or malformed

Problem : The access token passed in the Authorization header is not usable to make API requests to Pardot.

Solution : Make sure the access token is formatted correctly and was obtained using a Connected App that includes the pardot_api OAuth scope. Make sure the user associated with the token is synced to the Pardot business unit. Make sure the token used is within its expiration time.

Error Code: 188

Message : Provided import origin is invalid

Problem : The import origin specified is not valid.

Solution : Use "ui", "api", or "all" for the import origin.

Error Code: 190

Message : Email sending is blocked for this account.

Problem : The account has email sending blocked, and an email is being sent.

Solution : Contact support.

Error Code: 192

Message : Object specified does not exist

Problem : The object ID specified in the API request does not correspond to an object that exists. The object may have been deleted or the object ID passed in may never have been valid.

Solution : Pass in a valid ID for an object that is not deleted or change the request to request a deleted object (one that is in the Pardot recycle bin). Use the deleted=true parameter in v5.

Error Code: 193

Description : Too many subfields have been requested for one of the fields in the fields URL parameter for the API call. Pardot limits the number of fields that can be traversed when constructing an API response.

Error Code: 194

Message : Invalid MIME type.

Problem : The uploaded file is not of an allowed type.

Solution : Upload a file of an allowed type. Make sure the extension of the file is appropriate for its type.

Error Code: 199

Message : Authentication using an api_key is no longer supported. Use Salesforce OAuth access token instead. See https://developer.pardot.com/kb/authentication/ for details.

Problem : The Pardot API doesn't support api_key based authentication.

Solution : Salesforce OAuth endpoints should be used to retrieve an access token. See Authentication for details

Error Code: 201

Message : Business Unit specified in Pardot-Business-Unit-Id header not found or inactive.

Problem : The Business Unit ID is invalid or the business unit isn't active. This error is also returned when you use the wrong hostname (pi.pardot.com or pi.demo.pardot.com).

Solution : Make sure that you're using a valid Business Unit ID for an active business unit, and that your URL contains the correct hostname.

Error Code: 203

Message : An admin user for the account not found. Ensure a user with the default admin role exists.

Problem : There are no users with the default admin role.

Solution : Make sure there is at least 1 user with the default admin role in Pardot.

Error Code: 204

Message : File size exceeds the max post size or the body message can't be empty

Problem : The file attached is larger than 50MB or has 0 bytes.

Solution : Make sure the content of the file does not exceed 50MB

Error Code: 205

Message : Action name is either missing or incorrect

Problem : The requested object doesn't support the requested record action.

Solution : Check spelling and verify that the record action is available for the requested object.

Error Code: 206

Message : Invalid action argument value

Problem : The supplied value for the argument is not of the required data type.

Solution : Make sure that the arguments are of the required data type according to the documentation. Strings must be enclosed by double quotes (").

Error Code: 207

Message : Missing required action argument

Problem : One or more of the required arguments are missing.

Solution : Make sure that you provide all of the required arguments for the requested record action.

Error Code: 208

Message : Unknown action argument

Problem : The supplied arguments to the record action are misspelled or invalid.

Solution : Make sure that the arguments are spelled correctly and that they correspond to the arguments supported by the record action, according to the documentation.

Error Code: 209

Message : Too many fields have filters: The max number of 3 distinct fields with filters was exceeded for this query.

Problem : Too many fields in the request have filters. You can add filters to up to 3 fields.

Solution : Decrease the number of fields with filters in the request.

Error Code: 210

Message : Page token has expired.

Problem : The page token is expired. Tokens are valid for 4 hours.

Solution : Make sure you aren't using a page token that was issued more than 4 hours ago.

Error Code: 211

Message : Page token is invalid.

Problem : The token is null or invalid.

Solution : Make sure the page token sent corresponds to the one provided by the last call's response.

Error Code: 214

Message : API request timed out.

Problem : The request timed out.

Solution : Retry the query with smaller limits, offsets, or filter ranges.

Error Code: 215

Message : Feature state is invalid: Connected Campaigns is not enabled for this account.

Problem : Connected Campaigns is not enabled for the Pardot account or business unit.

Solution : Enable Connected Campaigns.

Error Code: 216

Message : Destination folder is full.

Problem : The target folder for the object is full, and the object can't be created.

Solution : Choose a different folder, or remove assets from the target folder.

Error Code: 217

Message : Visitor is invalid.

Problem : The visitor is invalid because is_identified is false or null on the visitor record, or ipAddress is null on the visitor record.

Solution : Check the visitor ID or fix the is_identified or ipAddress fields on the visitor record.

Error Code: 10000

Problem : An error occurred when processing the parameter designated in the param attribute of the <err> node. Several <err> nodes may be contained within the ``` ` node if multiple errors occurred.

Solution : The msg attribute of each <err> node should contain advice as to how to remedy the error.

Read article