Migration: Ferret API v1 to Octopus API
Ferret API v1 was primarily built to provide an API for some of our integrations. While it served its purpose for these integrations, it did not fully meet the broader needs of our customers. Ferret API v1 includes very specific API methods related to these integrations, which made the API less generic and versatile.
To unlock the full power of the Maximizer API, we have prepared a guide on how to migrate the most used API methods from Ferret API v1 to the Octopus API, our main API.
We have prepared a comprehensive Postman collection with hundreds of examples. Explore it here.
If you need assistance with an alternative for any of the Ferret API v1 methods, please reach out to us via our Forums.
Authentication
This is an alternative to the POST /v1/authentication/tokens
method.
// POST https://api.maximizer.com/octopus/Authenticate
{
"Database": "{{Database}}",
"UID": "{{UID}}",
"Password": "{{Password}}",
"VendorId": "{{VendorId}}",
"AppKey": "{{AppKey}}"
}
For more details, please follow the link: Authentication (Octopus API)
Users
To migrate User API requests, please get familiar with User (Octopus API).
Get current session info (user & address book)
// POST https://api.maximizer.com/octopus/GetSessionInfo
// Authorization: Bearer <token>
{
"AddressBook": {
"Udbid": 1,
"Database": 1,
"DisplayValue": 1,
"WorkspaceId": 1
},
"User": {
"Key": {
"Value": 1,
"Uid": 1
},
"DisplayName": 1
}
}
Get user details
This is an alternative to the GET /v1/users/details
method.
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"User": {
"Scope": {
"Fields": {
"Key": {
"Uid": 1,
"Value": 1
},
"FirstName": 1,
"LastName": 1,
"Email": {
"Address": 1,
"Description": 1
},
"Enabled": 1
}
},
"Criteria": {
"SearchQuery": {
"Key": {
"$EQ": "USER_KEY_HERE"
}
},
"Top": 1
}
},
"Configuration": {
"Drivers": {
"IUserSearcher": "Maximizer.Model.Access.Sql.UserSearcher"
}
}
}
Search for a user
This is an alternative to the GET /v1/users/drop-down
method.
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"User": {
"Scope": {
"Fields": {
"Key": {
"Uid": 1,
"Value": 1
},
"FirstName": 1,
"LastName": 1,
"Email": {
"Address": 1,
"Description": 1
},
"Enabled": 1
}
},
"Criteria": {
"SearchQuery": {
"$OR": [
{
"FirstName": {
"$LIKE": "%DMI%"
}
},
{
"LastName": {
"$LIKE": "%DMI%"
}
},
{
"Email": {
"Address": {
"$LIKE": "%DMI%"
}
}
}
]
}
},
"OrderBy": {
"PageKey": null,
"PageSize": 50,
"Fields": [
{
"FirstName": "ASC"
}
]
}
},
"Configuration": {
"Drivers": {
"IUserSearcher": "Maximizer.Model.Access.Sql.UserSearcher"
}
}
}
Companies
To migrate Companies API requests, please get familiar with AbEntry (Octopus API). AbEntry object represents Companies, Individuals and Contacts.
Get a list of companies (paginated)
This is an alternative to the GET /v1/companies/
method.
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"AbEntry": {
"Scope": {
"Fields": {
"Key": 1,
"ParentKey": 1,
"Type": 1,
"CompanyName": 1,
"Position": 1,
"Phone1": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone2": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone3": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone4": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"AccountManager": {
"Value": 1,
"Uid": 1
},
"Creator": {
"DisplayName": 1
},
"CreationDate": 1,
"ModifiedBy": {
"DisplayName": 1
},
"LastModifyDate": 1,
"Email1": {
"Address": 1,
"Description": 1
},
"Email2": {
"Address": 1,
"Description": 1
},
"Email3": {
"Address": 1,
"Description": 1
},
"WebSite": 1,
"Address": {
"AddressLine1": 1,
"AddressLine2": 1,
"City": 1,
"StateProvince": 1,
"ZipCode": 1,
"Country": 1,
"Description": 1
},
"LastContactDate": 1
}
},
"Criteria": {
"SearchQuery": {
"Type": {
"$EQ": "Company"
}
}
},
"OrderBy": {
"PageKey": null,
"PageSize": 50,
"Fields": [
{
"CreationDate": "ASC"
}
]
}
},
"Configuration": {
"Drivers": {
"IAbEntrySearcher": "Maximizer.Model.Access.Sql.AbEntrySearcher"
}
},
"Compatibility": {
"AbEntryKey": "2.0"
}
}
Search by company name
This is an alternative to the GET /v1/companies/drop-down
method.
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"AbEntry": {
"Scope": {
"Fields": {
"Key": 1,
"ParentKey": 1,
"Type": 1,
"CompanyName": 1,
"Position": 1,
"Phone1": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone2": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone3": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone4": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"AccountManager": {
"Value": 1,
"Uid": 1
},
"Creator": {
"DisplayName": 1
},
"CreationDate": 1,
"ModifiedBy": {
"DisplayName": 1
},
"LastModifyDate": 1,
"Email1": {
"Address": 1,
"Description": 1
},
"Email2": {
"Address": 1,
"Description": 1
},
"Email3": {
"Address": 1,
"Description": 1
},
"WebSite": 1,
"Address": {
"AddressLine1": 1,
"AddressLine2": 1,
"City": 1,
"StateProvince": 1,
"ZipCode": 1,
"Country": 1,
"Description": 1
},
"LastContactDate": 1
}
},
"Criteria": {
"SearchQuery": {
"$AND": [
{
"Type": {
"$EQ": "Company"
}
},
{
"CompanyName": {
"$LIKE": "SEARCH%"
}
}
]
}
},
"OrderBy": {
"PageKey": null,
"PageSize": 50,
"Fields": [
{
"CreationDate": "ASC"
}
]
}
},
"Configuration": {
"Drivers": {
"IAbEntrySearcher": "Maximizer.Model.Access.Sql.AbEntrySearcher"
}
},
"Compatibility": {
"AbEntryKey": "2.0"
}
}
Contacts
To migrate Contacts API requests, please get familiar with AbEntry (Octopus API) and Lead (Octopus API). The Ferret API v1 combines AbEntry contacts, AbEntry individuals, and Leads.
Get a list of contacts (paginated)
This is an alternative to the GET /v1/contacts/
method (without leads contacts).
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"AbEntry": {
"Scope": {
"Fields": {
"Key": 1,
"ParentKey": 1,
"Type": 1,
"Parent": {
"Type": 1,
"FirstName": 1,
"MiddleName": 1,
"LastName": 1
},
"CompanyName": 1,
"FirstName": 1,
"MiddleName": 1,
"LastName": 1,
"Position": 1,
"Department": 1,
"Division": 1,
"Phone1": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone2": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone3": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone4": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"AccountManager": {
"Value": 1,
"Uid": 1
},
"Creator": {
"DisplayName": 1
},
"CreationDate": 1,
"ModifiedBy": {
"DisplayName": 1
},
"LastModifyDate": 1,
"Email1": {
"Address": 1,
"Description": 1
},
"Email2": {
"Address": 1,
"Description": 1
},
"Email3": {
"Address": 1,
"Description": 1
},
"WebSite": 1,
"Address": {
"AddressLine1": 1,
"AddressLine2": 1,
"City": 1,
"StateProvince": 1,
"ZipCode": 1,
"Country": 1,
"Description": 1
},
"LastContactDate": 1
}
},
"Criteria": {
"SearchQuery": {
"Type": {
"$IN": ["Contact", "Individual"]
}
}
},
"OrderBy": {
"PageKey": null,
"PageSize": 50,
"Fields": [
{
"CreationDate": "ASC"
}
]
}
},
"Configuration": {
"Drivers": {
"IAbEntrySearcher": "Maximizer.Model.Access.Sql.AbEntrySearcher"
}
},
"Compatibility": {
"AbEntryKey": "2.0"
}
}
Get a list of contacts for a given email addresses
This is an alternative to the GET /v1/contacts/by-email
method (without leads contacts).
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"AbEntry": {
"Scope": {
"Fields": {
"Key": 1,
"ParentKey": 1,
"Type": 1,
"Parent": {
"Type": 1,
"FirstName": 1,
"MiddleName": 1,
"LastName": 1
},
"CompanyName": 1,
"FirstName": 1,
"MiddleName": 1,
"LastName": 1,
"Position": 1,
"Department": 1,
"Division": 1,
"Phone1": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone2": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone3": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"Phone4": {
"Extension": 1,
"Number": 1,
"Description": 1
},
"AccountManager": {
"Value": 1,
"Uid": 1
},
"Creator": {
"DisplayName": 1
},
"CreationDate": 1,
"ModifiedBy": {
"DisplayName": 1
},
"LastModifyDate": 1,
"Email1": {
"Address": 1,
"Description": 1
},
"Email2": {
"Address": 1,
"Description": 1
},
"Email3": {
"Address": 1,
"Description": 1
},
"WebSite": 1,
"Address": {
"AddressLine1": 1,
"AddressLine2": 1,
"City": 1,
"StateProvince": 1,
"ZipCode": 1,
"Country": 1,
"Description": 1
},
"LastContactDate": 1
}
},
"Criteria": {
"SearchQuery": {
"Type": {
"$IN": ["Contact", "Individual"]
},
"Email": {
"$IN": [
"[email protected]", "[email protected]"
]
}
}
},
"OrderBy": {
"PageKey": null,
"PageSize": 50,
"Fields": [
{
"CreationDate": "ASC"
}
]
}
},
"Configuration": {
"Drivers": {
"IAbEntrySearcher": "Maximizer.Model.Access.Sql.AbEntrySearcher"
}
},
"Compatibility": {
"AbEntryKey": "2.0"
}
}
Search contacts by name
This is an alternative to the GET /v1/contacts/drop-down
method (without leads contacts).
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"AbEntry": {
"Scope": {
"Fields": {
"Key": {
"Id": 1,
"Value": 1
},
"MrMs": 1,
"FirstName": 1,
"LastName": 1,
"Parent": 1, // Parent company/individual of the contact. It's an AbEntry object so it can be expanded using any AbEntry property
"CompanyName": 1, // Company name of the parent AbEntry
"Email": 1,
"Phone": 1,
"AccountManager": 1,
"LastContactDate": 1,
"Position": 1
}
},
"Criteria": {
"SearchQuery": {
"$AND": [
{
"$PHRASE": "Name: Johnson"
},
{
"Type": {
// If contactType is null, it searches for both Contact and Individual. Otherwise, filter is applied as requested
"$IN": [
"Contact",
"Individual"
]
}
}
]
},
"Top": 1
}
},
"Configuration": {
"Drivers": {
"IAbEntrySearcher": "Maximizer.Model.Access.Sql.AbEntrySearcher"
}
},
"Compatibility": {
"AbEntryKey": "2.0"
}
}
Search leads by name
This is an alternative to the GET /v1/contacts/drop-down
method (only for leads).
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"Lead": {
"Scope": {
"Fields": {
"Key": {
"Id": 1,
"Value": 1
},
"CompanyName": 1,
"MrMs": 1,
"FirstName": 1,
"MiddleName": 1,
"LastName": 1,
"Salutation": 1,
"Position": 1,
"Email": 1,
"WebSite": 1,
"Status": 1,
"AssignedTo": 1,
"Address": 1,
"Phone1": 1,
"Phone2": 1,
"Creator": 1,
"CreationDate": 1,
"ModifiedBy": 1,
"LastModifyDate": 1,
"FullName": 1,
"SecStatus": 1,
"AbEntryKey": 1,
"OpportunityKey": 1,
"Source": 1,
"NoEmployees": 1,
"Industry": 1,
"SourceUrl": 1,
"ArchivedDate": 1,
"DisplayValue": 1
}
},
"Criteria": {
"SearchQuery": {
"$PHRASE": "Name: Test"
},
"Top": 1
}
},
"Configuration": {
"Drivers": {
"ILeadSearcher": "Maximizer.Model.Access.Sql.LeadSearcher"
}
}
}
Get contact by key
This is an alternative to the GET /v1/contacts/XXX
method (only for contacts and individuals, without leads).
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"AbEntry": {
"Scope": {
"Fields": {
"Key": {
"Id": 1,
"Value": 1
},
"MrMs": 1,
"FirstName": 1,
"LastName": 1,
"Parent": 1, // Parent company/individual of the contact. It's an AbEntry object so it can be expanded using any AbEntry property
"CompanyName": 1, // Company name of the parent AbEntry
"Email": 1,
"Phone": 1,
"AccountManager": 1,
"LastContactDate": 1,
"Position": 1
}
},
"Criteria": {
"SearchQuery": {
"Key": {
"$EQ": "QWJFbnRyeQkyMjA1MDUyNTIyMjkzNzMxMjAwMzFDCTE="
}
},
"Top": 1
}
},
"Configuration": {
"Drivers": {
"IAbEntrySearcher": "Maximizer.Model.Access.Sql.AbEntrySearcher"
}
},
"Compatibility": {
"AbEntryKey": "2.0"
}
}
Get lead by key
This is an alternative to the GET /v1/contacts/XXX
method (only for leads).
// POST https://api.maximizer.com/octopus/Read
// Authorization: Bearer <token>
{
"Lead": {
"Scope": {
"Fields": {
"Key": {
"Id": 1,
"Value": 1
},
"CompanyName": 1,
"MrMs": 1,
"FirstName": 1,
"MiddleName": 1,
"LastName": 1,
"Salutation": 1,
"Position": 1,
"Email": 1,
"WebSite": 1,
"Status": 1,
"AssignedTo": 1,
"Address": 1,
"Phone1": 1,
"Phone2": 1,
"Creator": 1,
"CreationDate": 1,
"ModifiedBy": 1,
"LastModifyDate": 1,
"FullName": 1,
"SecStatus": 1,
"AbEntryKey": 1,
"OpportunityKey": 1,
"Source": 1,
"NoEmployees": 1,
"Industry": 1,
"SourceUrl": 1,
"ArchivedDate": 1,
"DisplayValue": 1
}
},
"Criteria": {
"SearchQuery": {
"Key": {
"$EQ": "TGVhZAkyNDAyMjYwMDAwMDAwMDAxNzMwODNMRQkw"
}
},
"Top": 1
}
},
"Configuration": {
"Drivers": {
"ILeadSearcher": "Maximizer.Model.Access.Sql.LeadSearcher"
}
}
}
Notes
To migrate Notes API requests, please get familiar with Notes (Octopus API).
Create a note
This is an alternative to the POST/v1/notes/
method.
// POST https://api.maximizer.com/octopus/Create
// Authorization: Bearer <token>
{
"Note": {
"Data": {
"Key": null,
// ParentKey can be OpportunityKey, AbEntryKey, LeadKey
"ParentKey": "QWJFbnRyeQlERU1PXzFDCTA=",
"DateTime": "2018-04-20T11:12:13",
"Type": {
// 0 = Manual,
// 1 = Mailouts,
// 2 = OutgoingCalls,
// 3 = TimedNote,
// 4 = TransferLog,
// 5 = CompletedTask,
// 6 = ScheduledTask,
// 7 = Email,
// 8 = Opportunity,
// 9 = History,
// 10 = ReassignTask,
// 11 = Other,
// 12 = CustomerService,
// 13 = Accounting,
// 14 = IncomingCalls
"Key": 0
},
"Category": "Comment",
"RichText": "<div>NoteRichText</div>",
// Alternatively, instead of RichText you can use:
// "Text": "Plain text"
"Creator": {
"UID": "MASTER"
},
"Important": true
}
},
"Configuration": {
"Drivers": {
"INoteAccess": "Maximizer.Model.Access.Sql.NoteAccess"
}
}
}
Attachments
To migrate Attachments API requests, please get familiar with Document (Octopus API).
Create an attachment
This is an alternative to the POST/v1/attachments/
method.
At first, you must upload the file itself by using the endpoint:
// POST https://api.maximizer.com/octopus/AttachmentCreate
// Authorization: Bearer <token>
<files body>
You will receive an AttachmentId:
{
"Code": 0,
"Attachment": {
"Data": {
"Size": 38324,
"AttachmentId": "7ca83da2-0b51-4f1f-8138-a6d91fb2b508"
}
}
}
After that, you can create a document:
// POST https://api.maximizer.com/octopus/Create
// Authorization: Bearer <token>
{
"Document": {
"Data": {
"Key": null,
"Name": "Documents name",
"Ext": ".xlsx",
"AttachmentId": "7ca83da2-0b51-4f1f-8138-a6d91fb2b508",
// Type could be one of the following:
// 1 = MaximizerDocuments,
// 3 = Emails,
// 7 = Others,
// 8 = LinkedDocuments,
// 12 = HyperlinkDocuments
"Type": 1,
"Description": "New File",
// ParentKey can be OpportunityKey, AbEntryKey
"ParentKey": "QWJFbnRyeQlERU1PXzFDCTA="
}
},
"Configuration": {
"Drivers": {
"IDocumentAccess": "Maximizer.Model.Access.Sql.DocumentAccess"
}
}
}
Tasks
To migrate Attachments API requests, please get familiar with Task (Octopus API).
Create a new task for a Lead
This is an alternative to the POST/v1/tasks/
method.
// POST https://api.maximizer.com/octopus/Create
// Authorization: Bearer <token>
{
"Task": {
"Data": {
"LeadKey": "ContactKey",
// Activity can be "Call", "Send Email", "Follow-up". Check fieldOptions for more details
"Activity": "Call",
"Category": [
"1"
],
"Result": [
"2"
],
"Completed": true,
"AssignedTo": "UserKey",
// Priority can be HI, LOW or MED. Check fieldOptions for more details
"Priority": "LOW",
"DateTime": "2024-08-01"
}
}
}
Create a new task for an AbEntry
This is an alternative to the POST/v1/tasks/
method.
// POST https://api.maximizer.com/octopus/Create
// Authorization: Bearer <token>
{
"Task": {
"Data": {
"AbEntryKey": {
"Value": "ContactKeyOrCompanyKey"
},
"WithKey": "OpportunityKey",
// Activity can be "Call", "Send Email", "Follow-up". Check fieldOptions for more details
"Activity": "Call",
"Category": [
"1"
],
"Result": [
"2"
],
"Completed": true,
"AssignedTo": "UserKey",
// Priority can be HI, LOW or MED. Check fieldOptions for more details
"Priority": "LOW",
"DateTime": "2024-08-01"
}
}
}
Known Limitations
GET /v1/tenants/product-version
is deprecated. We don't provide an alternative for it.
Updated 5 days ago