Knowledgebase

Sort by:
Summary Creating many-to-many relationships with Marketo custom objects requires an intermediary object with one link to a Lead or Company and another link to a secondary custom object. Here's how to solve the problem of the secondary custom object not showing up to be selected as the linked object. Issue Creating a many-to-many or N:N custom object structure such that a lead or company can be associated with multiple custom objects and a custom object can be associated with multiple leads or companies at the same time. When adding a link to the secondary custom object, that secondary object is not list as an available linked object.     Solution If you find that the custom object you'd like to link to is not list in the "Link Object" list, there are two things two check: The secondary CO must be approved. The secondary CO must not have any link type fields. Since it's not possible to change a link field once a custom object is approved, if you already have link fields, the only solution is discard the secondary custom object and create a new one. Recreate the custom object without link fields. Then, in the intermediary object, the target object will show up as an available link object.  More detail can be found at:  Understanding Marketo Custom Objects Add Marketo Custom Object Link Fields - Create a Link Field for a Many-to-Many Structure Root Cause The secondary custom object type is not approved. - or - The secondary custom object type is approved type and has link fields. Environment Marketo Custom Objects Many to Many Relationship - N:N Link Fields
View full article
Issue When using the GET Activities API with a specific list Id in the parameter, the response will get all the specified activities from other assets as well. This is the endpoint for this article.     Solution Instead of using list Id (listId) as a parameter, change that to asset Ids (assetId) in the API call. The Asset ID (assetId) is the Id of the primary asset for an activity. Then, the response will narrow down the activities associated to the primary asset by looking up the Id during the call.
View full article
Summary When submitting a file for bulk import via the REST API, the uploads appears to stall with no response. Issue Occasionally Bulk Import API calls will "hang" or "stall" never returning a response. This may appear to be a blank or missing response when the API is actually still waiting for the end of the file to be transferred. Solution You can add the following header: 'Transfer-Encoding: chunked' to your API calls and it will fix this issue. Please note that adding this header on the client side will cause cURL to send data in chunks. For more information on chunked file transfer, see Wikipedia: Chunked Transfer Encoding Environment REST API Bulk Import
View full article
Note: Please ensure that you have access to an experienced Web developer. Marketo Technical Support is not set up to assist with troubleshooting code. The listOperation SOAP API call allows for the ability to interact with static lists (My Lists) in the Lead Database. The supported operations are adding a lead to list (ADDTOLIST), checking if a lead is a member of the list (ISMEMBEROFLIST), and removing a lead from a list (REMOVEFROMLIST) Note, there is no operation to create a new list (or delete) via the SOAP API. The list must be created beforehand in the Lead Database. In the examples, the list is named "Static List". Example 1 - Request: Adding multiple leads into the list <soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:mkt = "http://www.marketo.com/mktows/">     <soapenv:Header>         <mkt:AuthenticationHeader>          <mktowsUserId>[User Id]</mktowsUserId>          <requestSignature>[Signature]</requestSignature>          <requestTimestamp>[yyyy-mm-ddThh:mm:ss-00:00]</requestTimestamp>         </mkt:AuthenticationHeader>     </soapenv:Header>     <soapenv:Body>         <mkt:paramsListOperation>             <listOperation>ADDTOLIST</listOperation>             <listKey>                 <keyType>MKTOLISTNAME</keyType>                 <keyValue>Static List</keyValue>             </listKey>             <listMemberList>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>213</keyValue>                 </leadKey>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>215</keyValue>                 </leadKey>             </listMemberList>         </mkt:paramsListOperation>     </soapenv:Body> </soapenv:Envelope> Example 1 - Response: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">    <SOAP-ENV:Body>       <ns1:successListOperation>          <result>             <success>true</success>             <statusList xsi:nil="true"/>          </result>       </ns1:successListOperation>    </SOAP-ENV:Body> </SOAP-ENV:Envelope> Example 2 - Request: Check to see if leads are a part of list. One lead (Lead ID #213) is and the other (Lead ID #70) is not  <soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:mkt = "http://www.marketo.com/mktows/">     <soapenv:Header>         <mkt:AuthenticationHeader>          <mktowsUserId>[User Id]</mktowsUserId>          <requestSignature>[Signature]</requestSignature>          <requestTimestamp>[yyyy-mm-ddThh:mm:ss-00:00]</requestTimestamp>         </mkt:AuthenticationHeader>     </soapenv:Header>     <soapenv:Body>         <mkt:paramsListOperation>             <listOperation>ISMEMBEROFLIST</listOperation>             <listKey>                 <keyType>MKTOLISTNAME</keyType>                 <keyValue>Static List</keyValue>             </listKey>             <listMemberList>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>213</keyValue>                 </leadKey>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>70</keyValue>                 </leadKey>             </listMemberList>         </mkt:paramsListOperation>     </soapenv:Body> </soapenv:Envelope> Example 2 - Response: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">    <SOAP-ENV:Body>       <ns1:successListOperation>          <result>             <success>false</success>             <statusList>                <leadStatus>                   <leadKey>                      <keyType>IDNUM</keyType>                      <keyValue>213</keyValue>                   </leadKey>                   <status>true</status>                </leadStatus>                <leadStatus>                   <leadKey>                      <keyType>IDNUM</keyType>                      <keyValue>70</keyValue>                   </leadKey>                   <status>false</status>                </leadStatus>             </statusList>          </result>       </ns1:successListOperation>    </SOAP-ENV:Body> </SOAP-ENV:Envelope> Example 3 - Request: Similar to Example 2, but all leads are valid  <soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:mkt = "http://www.marketo.com/mktows/">     <soapenv:Header>         <mkt:AuthenticationHeader>          <mktowsUserId>[User Id]</mktowsUserId>          <requestSignature>[Signature]</requestSignature>          <requestTimestamp>[yyyy-mm-ddThh:mm:ss-00:00]</requestTimestamp>         </mkt:AuthenticationHeader>     </soapenv:Header>     <soapenv:Body>         <mkt:paramsListOperation>             <listOperation>ISMEMBEROFLIST</listOperation>             <listKey>                 <keyType>MKTOLISTNAME</keyType>                 <keyValue>Static List</keyValue>             </listKey>             <listMemberList>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>213</keyValue>                 </leadKey>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>215</keyValue>                 </leadKey>             </listMemberList>         </mkt:paramsListOperation>     </soapenv:Body> </soapenv:Envelope> Example 3 - Response:  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">    <SOAP-ENV:Body>       <ns1:successListOperation>          <result>             <success>true</success>             <statusList xsi:nil="true"/>          </result>       </ns1:successListOperation>    </SOAP-ENV:Body> </SOAP-ENV:Envelope> Example 4 - Request: Remove leads from the list. One lead (Lead ID #213) is a member of the list, the other (Lead ID #70) is not  <soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:mkt = "http://www.marketo.com/mktows/">     <soapenv:Header>         <mkt:AuthenticationHeader>          <mktowsUserId>[User Id]</mktowsUserId>          <requestSignature>[Signature]</requestSignature>          <requestTimestamp>[yyyy-mm-ddThh:mm:ss-00:00]</requestTimestamp>         </mkt:AuthenticationHeader>     </soapenv:Header>     <soapenv:Body>         <mkt:paramsListOperation>             <listOperation>REMOVEFROMLIST</listOperation>             <listKey>                 <keyType>MKTOLISTNAME</keyType>                 <keyValue>Static List</keyValue>             </listKey>             <listMemberList>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>213</keyValue>                 </leadKey>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>70</keyValue>                 </leadKey>             </listMemberList>         </mkt:paramsListOperation>     </soapenv:Body> </soapenv:Envelope> Request 4 - Response:  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">    <SOAP-ENV:Body>       <ns1:successListOperation>          <result>             <success>false</success>             <statusList>                <leadStatus>                   <leadKey>                      <keyType>IDNUM</keyType>                      <keyValue>213</keyValue>                   </leadKey>                   <status>true</status>                </leadStatus>                <leadStatus>                   <leadKey>                      <keyType>IDNUM</keyType>                      <keyValue>70</keyValue>                   </leadKey>                   <status>false</status>                </leadStatus>             </statusList>          </result>       </ns1:successListOperation>    </SOAP-ENV:Body> </SOAP-ENV:Envelope> Example 5 - Request: Similar to Example 4, but all leads are valid  <soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:mkt = "http://www.marketo.com/mktows/">     <soapenv:Header>         <mkt:AuthenticationHeader>          <mktowsUserId>[User Id]</mktowsUserId>          <requestSignature>[Signature]</requestSignature>          <requestTimestamp>[yyyy-mm-ddThh:mm:ss-00:00]</requestTimestamp>         </mkt:AuthenticationHeader>     </soapenv:Header>     <soapenv:Body>         <mkt:paramsListOperation>             <listOperation>REMOVEFROMLIST</listOperation>             <listKey>                 <keyType>MKTOLISTNAME</keyType>                 <keyValue>Static List</keyValue>             </listKey>             <listMemberList>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>213</keyValue>                 </leadKey>                 <leadKey>                     <keyType>IDNUM</keyType>                     <keyValue>215</keyValue>                 </leadKey>             </listMemberList>         </mkt:paramsListOperation>     </soapenv:Body> </soapenv:Envelope> Example 5 - Response:  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/">    <SOAP-ENV:Body>       <ns1:successListOperation>          <result>             <success>true</success>             <statusList xsi:nil="true"/>          </result>       </ns1:successListOperation>    </SOAP-ENV:Body> </SOAP-ENV:Envelope> Related Learning Resources Marketo SOAP API Reference
View full article
Using the Marketo SOAP API, you can check whether or not your website visitors have filled out a form and present them content accordingly. The following code below is unsupported and is intended to help you develop your own solution. In the resources section of the Marketo website, we use this method for our premium content. For leads who have already registered, their links go directly to the resource. Leads who haven't registered are given links to a landing page. In both cases, the link appears the same. Behind the scenes, a cookie is used to store whether or not this lead has registered: If the user has the premium registration cookie, the premium links are shown. If the user does not have that cookie, the lead's record is retrieved via the SOAP API. Based on the lead's record: If the lead has a valid email address, the premium content links are shown and the premium registration cookie is set. If not, the premium content links are not shown. Instead, they take leads to a landing page to fill out a form. First, you'll need to develop a SOAP API connection to Marketo. The attached ZIP file has a sample connection PHP file. You'll need to make the following changes in this file: ... $this->access_key = 'Your API Access Key Goes Here'; $this->secret_key = 'Your Secret API Key Goes Here'; // // The endpoint is in the "SOAP API Setup" page in the Marketo Admin section // ex. $soap_end_point = 'https://xx-1.marketo.com/soap/mktows/'; // $soap_end_point = 'Your SOAP API End Point URL Goes Here'; // // Errors are sent to this email address. Your web server // must be configured to send email for this to work correctly. // // ex. $this->error_email_address = 'example@example.com'; // $this->error_email_address = 'Put your debug email address here'; ... After creating your SOAP API connection, the next step is to implement the logic that determines which content to show if the user is logged in or not. The get_premium_url_status() function returns true if the lead has the premium cookie or if they've filled out a form. Otherwise, it returns false. You can use that result to determine what content the lead should see. The attached ZIP file has a PHP file that contains an example of this check.
View full article
Attached to this article is a ASP.NET C# implementation of Marketo's SOAP API. This is just a sample, but it may be useful for providing a starting point for building your own SOAP API client. Learn more: Marketo SOAP API Note: You will need access to experienced developers This is not supported development by Marketo Support. Our support engineers are not able to provide assistance in building or troubleshooting SOAP API's.
View full article
Issue Do webhook calls contribute to the daily API limit/quota visible in [Admin > Integration > Web Services > API Call Information] ?   Solution No, webhook calls are not counted as part of the daily API limit. Webhooks do not have any execution limits.  
View full article
Issue Issue Description When a lead is created through an API call, the Reason and Source attributes say "Web Service API" with no further detail.       Solution Issue Resolution As described in the doc here, https://docs.marketo.com/display/DOCS/Understanding+System+Managed+Fields, "Source" and "Reason" fields are managed by Marketo: Web Service API for Original Source Type means Person was discovered by a web service API. For Registration Source Type, it states that Person was created via SOAP/REST API When a lead is created via API, no additional "Source" or "Reason" is provided to Marketo. A possible workaround is to create a custom field and populate it as needed through the API.    
View full article
Issue REST API call, Get Lead Activities, is returning 603 error     Solution Error 603 refers to 'access denied' where authentication is successful but the user doesn’t have sufficient permission to call this API. Additional permissions may need to be assigned to the user role. http://developers.marketo.com/rest-api/error-codes/ Go to Admin > Users and Roles Select API User and identify what role it is assigned to (e.g. API role) Go to Roles and check the permissions assigned to the API role Check to see if the API role has 'Read-Only Activity' or 'Read-Write Activity' permission In order to make a Get Lead Activities REST API call with the API user, the API role of the user must be modified to have permissions to  'Read-Only Activity' or 'Read-Write Activity'. If you use Workspaces and Partitions, make sure the API User has the necessary access to the workspaces/partitions being called.    
View full article
Issue Per our developer page: https://developers.marketo.com/rest-api/assets/programs/#update, it is possible to update tags on your existing program When updating a program tag within an existing program, you may encounter an error below given the tag and its values are correct.  {"code": "709","message": "Required tags are mandatory"}]} Environment Any API clients when performing the Web Service API Solution The workaround is to have the tag updated via the UI. Root Cause "Updating tags is a destructive operation." Any attempt to update the tags of a program must include valid values for all of the required tags for a program. Unless the 'specific' tag type you are working on is the only required tag type in the instance, then that is possible to update it using the API. Otherwise, you'll encounter the error above as it is a system behaviour.
View full article
Issue Issue Description API Only user is not appearing when creating a service in [Admin > LaunchPoint]     Solution Issue Resolution It is highly likely that the reason why the API user was not appearing because it did not have "API Only" ticked. This can be checked in [Admin > Users & Roles > User > Edit User]. However, this cannot be modified once the API user is created, so in order for the API user to appear in LaunchPoint, "API Only" must be ticked when the API user is created.    Reference: Create an API Only User Role   Who This Solution Applies To Admin users
View full article
Issue Executing a GET API call to retrieve a list of available activity types in the target instance using the '/rest/v1/activities/types.json' endpoint, resolves with an unexpected attribute name for a field with the display name ID in the context of Marketo Custom Objects. An example of that may be a Marketo Custom Object with the following name: '3 to be', as can be shown in the image below: One of the '3 to be' Marketo custom object fields name is 'ID'. (highlighted in red). When performing a GET API call using the '/rest/v1/activities/types.json' endpoint, you will be getting a list of available activity types in the target instance, along with associated metadata of each type, however for a Marketo custom object with an ID field name, you may see it returns back with a slightly different name, in this case, it would be returning the following output for my test Marketo Custom Object activity: { "id": 100019, "name": "Add to 3 to be", "primaryAttribute": { "name": "3 to be ObjRef", "dataType": "integer" }, "attributes": [ { "name": "3 To Be Person Id", "dataType": "integer" }, { "name": "ID (3)", "dataType": "string" }, { "name": "Linkfield4", "dataType": "string" } ] } ], Here's an image of what it may look like when making the call using POSTMAN: In fact, the character in the brackets next to the ID field represents the very first character of your Marketo Custom Object name.    Environment Customers who have Marketo Custom Objects where one of the custom object fields is named 'ID'. Solution If this is interrupting your business, you may want to select a different name for the ID field under your Marketo Custom Object. (ie. ID number, Transaction ID etc.) Root Cause This behavior is expected and is a result of the 'ID' field being a unique field in the context of Marketo custom objects world and while it may be possible to create a Marketo Custom Object field with the name 'ID', it may be better to give it a distinct name that will be better describing what kind of ID field it is.   
View full article
Issue When making API calls, Marketo reports the daily API limit has been reached but does not show when the limit resets.   Solution When Marketo shows the daily API limit has been reached, it will reset itself that night at midnight central time, and then will allow for the API calls to resume. These are the reset times according to US time zones.   10:00 PM Pacific 11:00 PM Mountain 12:00 AM Central 01:00 AM Eastern      
View full article
Issue Would a requested campaign via API show in activity log if filtered? Ex: You request a campaign, and the lead does not qualify due to a filter. Will the activity log show the request occurring?     Solution Yes, the request will show no matter if the lead runs through the flow or not. The request campaign action will be recorded, but the lead will not go through the flow steps if they do not meet the requested campaign's Smart List requirements.  
View full article
Issue The Get Lead Activities REST API is not returning any activities even though the lead referenced definitely has multiple activities of the type being called. REQUEST: https://[munchkinID].mktorest.com/rest/v1/activities.json?access_token=x&leadIds=123&nextPageToken=ABC&activityTypeIds=46 RESPONSE: { "requestId": "xyz123", "success": true, "nextPageToken": "ABC", "moreResult": true }     Solution The Get Lead Activity REST API are reliant on timestamps for their nextPageToken. Each Get Lead Activity call will go through 300 activities of ALL types from the timestamp placed on the nextPageToken. This is supported by the article http://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#/Activities/getLeadActivitiesUsingGET "By default, the endpoints mentioned in this section will return 300 activity items at a time.  If the moreResult attribute is true, this means that more results are available. Continue to call the endpoint until the moreResult attribute returns false, which means that there are no more results available." Based on that, the reason why the API call does not return any activities is that it does not find any activities of type 46 in the 300 activities it checks from the timestamp placed on the nextPageToken So when making a Get Lead Activity call for a specific activity type, ensure that nextPageToken is as close as to the timestamp of the specific activities    
View full article
Issue Customers may run into limitations with Webhook providers or other third party REST services that require their fields are an integer type field.  This may present issues with those values being inputted to Marketo (and other systems) accurately if a record has a value outside of the integer value limitation range: -2147483647 to 2147483647   Environment Marketo/Third Party REST/Webhook Providers Solution There is no way to increase/modify the integer value limitations on the Marketo side.  This is not a Marketo product limitation, it's the defined constraints of Integer data types. If you're running into issues with values from a third party/webhook provider falling outside of the limitation range, this will present issues with the field value being accurately logged in Marketo. In this scenario, it's worth checking with the third party/webhook provider to see if they have any flexibility around which field types they can allow (for example, String or Float type fields have less limitations and will allow for larger or smaller numbers outside of the -2147483647 to 2147483647 range). For a full overview of Marketo field limitations, you can visit the below article: Marketo Field Limits by Field Type
View full article
Issue When using the [mktorest.com/rest/asset/v1/emailTemplates.json] end-point to pull all Email templates, the COUNT is much less than what is shown in Marketo's Design Studio Global Search.   Solution This is the expected behavior. When viewing the total count of Email templates in the Design Studio UI, it will count EACH shared template that is shared across other workspaces, counting the same template multiple times depending on how many workspaces it's shared to. However, when retrieving the Email Templates from the REST API, it will only return DISTINCT Email Template ID's from the originating shared workspace where the template resides. It will not return the templates from the shared workspaces. Root Cause REST API Expected Behavior
View full article
Summary This article explains why certain Company fields show up on the Person/Lead Object when you do a describe API call to Marketo. Issue When making the Describe call on the Lead object in Marketo (/rest/v1/leads/describe.json),  several Company object fields are returned along with the Lead object fields.   Environment Marketo REST API Solution This is expected behavior. Users can utilize the Describe Leads call to retrieve a full list of the fields available for interaction via the REST API. Several areas within Marketo treat custom Company fields as though they were on the Person/Lead object. For example if you were doing a Bulk Import, you can target the Company and Person/Lead fields and you have the ability to update Company field values as if you were changing it manually on a Person record in the UI.   Root Cause This is expected behavior, due to how the Describe call retrieves all 
View full article