API: Difference between revisions

From Fishbowl Advanced
m (I fixed a bunch of punctuation issues and other things.)
No edit summary
Line 1: Line 1:
Just as Fishbowl integrates with QuickBooks, we allow developers to integrate their own software with Fishbowl. The Fishbowl API allows users to log in from third-party applications. These applications can run certain procedures when connected to the Fishbowl Server. This provides developers with the connection they need to customize applications to meet your business's specific needs. The API also has the responsibility to validate and process the requests that are sent to it from third-party integrated applications and send the response back.
The Fishbowl API allows developers to integrate with Fishbowl Advanced. Fishbowl provides documentation and examples, but no official support for the API.


The Fishbowl API provides integration with the data and objects stored on the Fishbowl Server. Connecting to this API requires a socket connection to the port. Some basic Java and C# code samples can be downloaded by clicking [https://fishbowlhelp.com/files/code-samples.zip here]. All of the documentation and examples were obtained by using the Fishbowl example database and the [[Fishbowl Developer Hook]], which is also available for download.
=FAQs=
* '''What alternatives are there to using the API?'''
** We have found that most customers are looking for a way to view data, import data, and perform basic functions. This can all be done ''without'' the API.
*# All of the database tables can be viewed, queried, and exported from the {{Module|Data}}.
*# New data can be imported and basic order functions can be performed using [[Imports and Exports]].
*# The {{Module|Data Import}} allows files to be imported, even if the column headers don't match the Fishbowl format. This allows many external files to be imported into Fishbowl without modification.
*# The {{Module|Schedule}} can automatically email reports, run data queries, or import local files or files on a server, such as an FTP server.


More objects, requests, and examples are available in the [[Fishbowl Legacy API|Fishbowl Legacy API]] and in the new [[{{REST API}}|Fishbowl REST API]].
* '''Are there multiple versions of the API?'''
** Yes. We recommend using v3, but you can also download the documentation and examples for v1, and v2 by clicking here.


=Requests=
* '''What are the major differences between the 3 versions of the API'''
** v1 uses a socket connection to send XML.
** v2 uses a socket connection to send JSON.
** v3 is a JSON REST API that runs on your Fishbowl Server computer. It can be accessed locally or through the web.


{| class="prettytable"
* '''Why is there a web server?'''
|-
** Typically, Fishbowl Advanced is installed on your computer as an on-premise solution, but the ports can be opened up to allow you to connect from anywhere in the world.
! Request
** With Fishbowl Hosting, we install Fishbowl Advanced for you on our high-performance servers, and configure it so that you can access it from anywhere in the world.
! Syntax
** Fishbowl Drive is 100% web based and hosted in the cloud with its own API.
! Brief Description
|-
| {{l|Execute Query}}
| ExecuteQueryRq
| Returns results of sql query in csv format.
|-
| {{l|Import}}
| ImportRq
| Request allows you to import data.
|-
| {{l|Import Headers}}
| ImportHeaderRq
| Returns a list of import headers for a specific import.
|-
| {{l|Issue SO}}
| IssueSORq
| Issues an SO.
|-
| {{l|Login}}
| LoginRq
| Logs a user into Fishbowl.
|-
| {{l|Logout}}
| LogoutRq
| Logs a user out of Fishbowl.
|-
| {{l|QuickShip}}
| QuickShipRq
| Will do an automatic pick, pack, and ship on an SO.
|-
| {{l|Void SO}}
| VoidSORq
| This request is used to void sales orders.
|-
| [[Fishbowl Legacy API]]
|
| More objects, requests, and examples are available in the [[Fishbowl Legacy API|Fishbowl Legacy API]].
|-
| [[Fishbowl_Server_Administration#Server_tab|Fishbowl REST API]]
|
| More objects, requests, and examples are available in the [[Fishbowl_Server_Administration#Server_tab|Fishbowl REST API]].
|}


=Examples=
* '''Do I need a certificate to encrypt the API traffic?'''
** Yes. For security, you must have a [https://en.wikipedia.org/w/index.php?title=Java_KeyStore .JKS certificate file] for the [[Fishbowl_Server_Administration#Server_tab|Fishbowl Server]]. The certificate can be self-signed or purchased online from a Certificate Authority.


Each example listed below will include 3 things.
* '''How do I access the documentation for the REST API calls'''
# A description
** The REST API documentation is automatically installed on your Fishbowl Server. This allows you to see the documentation that is intended for your version of Fishbowl.
# The generic syntax
** To see the documentation from the Fishbowl Server computer, click the following link: http://localhost:80/apidocs<br>[[File:REST API.png|class=noinvert]]
# An example using the demo database included with Fishbowl
** To see the documentation from other computers on the network, enter the IP address of the Fishbowl Server computer, replacing '''80''' with your '''Web Port'''. For example: '''<nowiki>192.168.29.37:80/apidocs</nowiki>'''
 
** An example of the API documentation can be accessed [https://fishbowlhelp.com/files/apidocs/introduction.html here].
{{Request|Execute Query}}
'''Description:''' Returns results of sql query in csv format. The ExecuteQueryRq can run a query saved in the {{Module|Data}}, or a custom query included in the request. The {{Module|Data}} may be helpful for testing queries and [[Data#Extract_a_query|extracting]] queries based on reports.<br/>
'''Note:''' Using this request requires the user to have view access to the {{Module|Data}}.
 
'''Syntax:'''
<pre><source>
{
"ExecuteQueryRq": {
"Query": "",
"Name": ""
}
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"ExecuteQueryRq": {
"Name": "PartList"
}
}
}
}
</source></pre>
or
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"ExecuteQueryRq": {
"Query": "SELECT part.num AS partNumber, part.description AS partDescription FROM part"
}
}
}
}
</source></pre>
 
{{Request|Import}}
'''Description:''' This request allows you to run any of the [[Imports_and_Exports#List_of_imports_and_exports|CSV imports]]. The type is formatted as "ImportCsvName" with no spaces. Data columns can be blank, but each data column must be represented in the request.
The example uses the import to edit/add a vendor. '''It is a best practice to always include the header rows when importing data.'''
 
'''Syntax:'''
<pre><source>
{
"ImportRq": {
"Type": "",
"Rows": ["",
""
]
}
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"ImportRq": {
"Type": "ImportVendors",
"Rows": {
"Row": [
"\"Name\",\"AddressName\",\"AddressContact\",\"AddressType\",\"IsDefault\",\"Address\",\"City\",\"State\",\"Zip\",\"Country\",\"Main\",\"Home\",\"Work\",\"Mobile\",\"Fax\",\"Email\",\"Pager\",\"Web\",\"Other\",\"DefaultTerms\",\"DefaultShippingTerms\",\"Status\",\"AlertNotes\",\"URL\",\"DefaultCarrier\",\"MinOrderAmount\",\"Active\",\"AccountNumber\",\"CurrencyName\",\"CurrencyRate\",\"CF-Custom1\",\"CF-Custom2\",\"CF-Custom3\",\"CF-Custom4\"",
"\"Monroe Bike Company\",\"Williams Bike Company - 210\",\"Williams Bike Company\",\"50\",\"true\",\"Wall st.\",\"New York\",\"NY\",\"21004\",\"UNITED STATES\",\"212-321-5643\",,,,,,,,,,,,,"
]
}
}
}
}
}
</source></pre>
 
{{Request|Import Headers}}
'''Description:''' This request allows you to get the headers of an import. The type is formatted as "ImportCsvName" with no spaces.
The example retrieves the import headers of the Add Inventory import.
 
'''Syntax:'''
<pre><source>
{
"ImportHeaderRq": {
"Type": ""
}
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"ImportHeaderRq": {
"Type": "ImportAddInventory"
}
}
}
}
</source></pre>
 
{{Request|Issue SO}}
'''Description:''' This will issue a sales order.
 
'''Syntax:'''
<pre><source>
{
"IssueSORq": {
"SONumber": ""
}
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"IssueSORq": {
"SONumber": "50054"
}
}
}
}
</source></pre>
 
{{Request|Login}}
'''Description:''' This logs a user into Fishbowl. The IAID can be any randomly generated integer value as long as the IAID and the IAName are unique per Fishbowl Server.
 
'''{{r|Note:}}''' Because the password is sent as plain text, use of the LoginRq is discouraged. Instead, the [[{{REST API}}|REST API Login]] should be used with a certificate to encrypt the traffic. The '''token''' returned by the REST API login can then be used as the '''Key''' in any of the older API calls.
 
'''Syntax:'''
<pre><source>
{
"LoginRq": {
"IAID": 111111,
"IADescription": "",
"UserName": "",
"IAName": "",
"UserPassword": ""
}
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"LoginRq": {
"IAID": 1234,
"IADescription": "Fishbowl Developer Hook an API test application for Fishbowl Inventory",
"IAName": "Fishbowl Developer Hook",
"UserName": "admin",
"UserPassword": "admin"
}
}
}
}
</source></pre>
 
{{Request|Logout}}
'''Description:''' This logs a user out of Fishbowl.
 
'''Syntax:'''
<pre><source>
{
"LogoutRq": ""
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"LogoutRq": ""
}
}
}
</source></pre>
 
{{Request|QuickShip}}
'''Description:''' This will do an automatic pick, pack, and ship on a sales order.
 
'''Syntax:'''
<pre><source>
{
"QuickShipRq": {
"SONumber": "",
"FulfillServiceItems": boolean,
"ErrorIfNotFulfilled": boolean,
"ShipDate": ""
}
 
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"QuickShipRq": {
"SONumber": "50052"
}
}
}
}
</source></pre>
 
{{Request|Void SO}}
'''Description:''' This request is used to void sales orders.
 
'''Syntax:'''
<pre><source>
{
"VoidSORq": {
"SONumber": ""
}
 
}
</source></pre>
 
'''Example:'''
<pre><source>
{
"FbiJson": {
"Ticket": {
"Key": "5ef615e9-5ae0-4ab6-9c44-323254cedf5e"
},
"FbiMsgsRq": {
"VoidSORq": {
"SONumber": "50052"
}
}
}
}
</source></pre>
 
{{:Fishbowl Legacy API}}
 
=Best practices=
==First integration==
When you first connect your application you will receive a status code 1110 or 1112 which indicates you will need to [[Fishbowl_Developer_Hook#Application_approval|approve]] your application.
 
==Creating Orders==
In order to create orders through the API, the recommended method is to use the [[#Import|ImportRq]] and specify the type of ImportSalesOrder. The ImportRq allows you to run any of the [[Imports_and_Exports#List_of_imports_and_exports|CSV imports]], and specifying the ImportSalesOrder defines that you want to import a Sales Order. Going through the ImportRq is the fastest, easiest, and safest way to create an order in Fishbowl.
 
==Updating Orders==
Occasionally once an order has been entered into the system it requires some changes. If you are changing order details such as the shipping or billing address you can use the [[#Import|ImportRq]] using a type of [[Imports_and_Exports#List_of_imports_and_exports|ImportSalesOrderDetails]] in order to update order level information. If you need to make changes to order items through the API then you will need to run the [[#Void_SO|VoidSORq]] in order to close the current order and recreate the order using the order creation process above. The VoidSORq will either void out the order or close it short if it has already been partially shipped. The easiest way to ensure track-ability in this case is to append "-1" or "-2" to the end of the order number. This will allow you to search back the original order number in Fishbowl and find the historical orders.
 
==Troubleshooting tips==
The following general tips may be helpful for developers when troubleshooting an issue. Completing these steps will often reveal the source of the problem and eliminate the need to submit a developer ticket.
 
* Use the {{Module|Data}} to examine the database tables.
* Run [[Support#Run_eve.bat_and_client.bat|eve.bat and client.bat]] and examine the output or errors displayed in the command window.<br>[[File:Eve.bat example.png]]
* To increase the logging level of the server, double-click the server tray icon and then click the '''Logging''' tab. '''Debug''' is the recommended level to show all relevant data. '''Trace''' may overwhelm the logging with too much information.<br>[[File:Increase Logging Level.png]]
* If an error is being displayed in Fishbowl, clicking the {{Icon Button|Double Arrow}} will display [[Support#Understanding_Fishbowl_Errors|more information about the error]].
* It is highly recommended to have a separate installation of Fishbowl that can be used for testing and troubleshooting purposes.
* '''NOTE: Fishbowl can assist in troubleshooting issues, but will not debug your code for you.'''
 
=Error codes=
{| class="prettytable"
|-
! Code
! Error
|-
|'''900'''
| Success! This API request is deprecated and could be removed in the future.
|-
|'''1000'''
| Success!
|-
|'''1001'''
| Unknown message received.
|-
|'''1002'''
| Connection to Fishbowl server was lost.
|-
|'''1003'''
| Some requests had errors.
|-
|'''1004'''
| There was an error with the database.
|-
|'''1009'''
| Fishbowl server has been shut down.
|-
|'''1010'''
| You have been logged off the server by an administrator.
|-
|'''1011'''
| Not found.
|-
|'''1012'''
| General error.
|-
|'''1013'''
| Dependencies need to be deleted
|-
|'''1014'''
| Unable to establish network connection.
|-
|'''1015'''
| Your subscription date is greater than your server date.
|-
|'''1016'''
| Incompatible database version.
|-
|'''1100'''
| Unknown login error occurred.
|-
|'''1109'''
| This integrated application registration key is already in use.
|-
|'''1110'''
| A new integrated application has been added to Fishbowl. Please contact the Fishbowl administrator to approve this integrated application.
|-
|'''1111'''
| This integrated application registration key does not match.
|-
|'''1112'''
| This integrated application has not been approved by the Fishbowl administrator.
|-
|'''1120'''
| Invalid username or password.
|-
|'''1130'''
| Invalid ticket passed to Fishbowl server.
|-
|'''1131'''
| Invalid ticket key passed to Fishbowl server.
|-
|'''1140'''
| Initialization token is not correct type.
|-
|'''1150'''
| Request was invalid.
|-
|'''1161'''
| Response was invalid.
|-
|'''1162'''
| The login limit has been reached for the server's key.
|-
|'''1163'''
| Your API session has timed out.
|-
|'''1164'''
| Your API session has been logged out.
|-
|'''1200'''
| Custom field is invalid.
|-
|'''1300'''
| Was not able to find the memo _________.
|-
|'''1301'''
| The memo was invalid.
|-
|'''1400'''
| Was not able to find the order history.
|-
|'''1401'''
| The order history was invalid.
|-
|'''1500'''
| The import was not properly formed.
|-
|'''1501'''
| That import type is not supported.
|-
|'''1502'''
| File not found.
|-
|'''1503'''
| That export type is not supported.
|-
|'''1504'''
| Unable to write to file.
|-
|'''1505'''
| The import data was of the wrong type.
|-
|'''1506'''
| Import requires a header.
|-
|'''1600'''
| Unable to load the user.
|-
|'''1601'''
| Unable to find the user.
|-
|'''2000'''
| Was not able to find the part _________.
|-
|'''2001'''
| The part was invalid.
|-
|'''2002'''
| Was not able to find a unique part.
|-
|'''2003'''
| BOM had an error on the part
|-
|'''2100'''
| Was not able to find the product _________.
|-
|'''2101'''
| The product was invalid.
|-
|'''2102'''
| The product is not unique
|-
|'''2120'''
| The kit item was invalid.
|-
|'''2121'''
| The associated product was invalid.
|-
|'''2200'''
| Yield failed.
|-
|'''2201'''
| Commit failed.
|-
|'''2202'''
| Add initial inventory failed.
|-
|'''2203'''
| Cannot adjust committed inventory.
|-
|'''2204'''
| Invalid quantity.
|-
|'''2205'''
| Quantity must be greater than zero.
|-
|'''2206'''
| Serial number _________ already committed.
|-
|'''2207'''
| Part _________ is not an inventory part.
|-
|'''2208'''
| Not enough available quantity in _________.
|-
|'''2209'''
| Move failed.
|-
|'''2210'''
| Cycle count failed.
|-
|'''2300'''
| Was not able to find the tag number _________.
|-
|'''2301'''
| The tag was invalid.
|-
|'''2302'''
| The tag move failed.
|-
|'''2303'''
| Was not able to save tag number _________.
|-
|'''2304'''
| Not enough available inventory in tag number _________.
|-
|'''2305'''
| Tag number _________ is a location.
|-
|'''2400'''
| Invalid UOM.
|-
|'''2401'''
| UOM _________ not found.
|-
|'''2402'''
| Integer UOM _________ cannot have non-integer quantity.
|-
|'''2403'''
| The UOM is not compatible with the part's base UOM.
|-
|'''2404'''
| Cannot convert to the requested UOM
|-
|'''2405'''
| Cannot convert to the requested UOM
|-
|'''2406'''
| The quantity must be a whole number.
|-
|'''2407'''
| The UOM conversion for the quantity must be a whole number.
|-
|'''2500'''
| The tracking is not valid.
|-
|'''2501'''
| Part tracking not found.
|-
|'''2502'''
| The part tracking name is required.
|-
|'''2503'''
| The part tracking name ''_________'' is already in use.
|-
|'''2504'''
| The part tracking abbreviation is required.
|-
|'''2505'''
| The part tracking abbreviation ''_________'' is already in use.
|-
|'''2506'''
| The part tracking ''_________'' is in use or was used and cannot be deleted.
|-
|'''2510'''
| Serial number is missing.
|-
|'''2511'''
| Serial number is null.
|-
|'''2512'''
| Duplicate serial number.
|-
|'''2513'''
| The serial number is not valid.
|-
|'''2514'''
| Tracking is not equal.
|-
|'''2515'''
| The tracking ''_________'' was not found in location ''_________' or is committed to another order.
|-
|'''2600'''
| Location _________ not found.
|-
|'''2601'''
| Invalid location.
|-
|'''2602'''
| Location group _________ not found.
|-
|'''2603'''
| Default customer not specified for location _________.
|-
|'''2604'''
| Default vendor not specified for location _________.
|-
|'''2605'''
| Default location for part _________ not found.
|-
|'''2606'''
| _________ is not a pickable location.
|-
|'''2607'''
| _________ is not a receivable location.
|-
|'''2700'''
| Location group not found.
|-
|'''2701'''
| Invalid location group.
|-
|'''2702'''
| User does not have access to location group _________.
|-
|'''3000'''
| Customer _________ not found.
|-
|'''3001'''
| Customer is invalid.
|-
|'''3002'''
| Customer _________ must have a default main office address.
|-
|'''3100'''
| Vendor _________ not found.
|-
|'''3101'''
| Vendor is invalid.
|-
|'''3300'''
| Address not found
|-
|'''3301'''
| Invalid address
|-
|'''4000'''
| There was an error loading PO _________.
|-
|'''4001'''
| Unknown status _________.
|-
|'''4002'''
| Unknown carrier _________.
|-
|'''4003'''
| Unknown QuickBooks Class _________.
|-
|'''4004'''
| PO does not have a PO number. Please turn on the auto-assign PO number option in the purchase order module options.
|-
|'''4005'''
| Duplicate order number _________.
|-
|'''4006'''
| Cannot create PO with configurable parts: _________.
|-
|'''4007'''
| The following parts were not added to the purchase order. They have no default vendor:
|-
|'''4008'''
| Unknown type _________.
|-
|'''4100'''
| There was an error loading SO _________.
|-
|'''4101'''
| Unknown salesman _________.
|-
|'''4102'''
| Unknown tax rate _________.
|-
|'''4103'''
| Cannot create SO with configurable parts: _________.
|-
|'''4104'''
| The sales order item is invalid: _________.
|-
|'''4105'''
| SO does not have a SO number. Please turn on the auto-assign SO numbers option in the sales order module options.
|-
|'''4106'''
| Cannot create SO with kit products
|-
|'''4107'''
| A kit item must follow a kit header.
|-
|'''4108'''
| Sales order cannot be found.
|-
|'''4200'''
| There was an error loading BOM _________.
|-
|'''4201'''
| Bill of materials cannot be found.
|-
|'''4202'''
| Duplicate BOM number _________.
|-
|'''4203'''
| The bill of materials is not up to date and must be reloaded.
|-
|'''4204'''
| Bill of materials was not saved.
|-
|'''4205'''
| Bill of materials is in use and cannot be deleted
|-
|'''4206'''
| requires a raw good and a finished good, or a repair.
|-
|'''4207'''
| This change would make this a recursive bill of materials.
|-
|'''4210'''
| There was an error loading MO _________.
|-
|'''4211'''
| Manufacture order cannot be found.
|-
|'''4212'''
| No manufacture order was created. Duplicate order number _________.
|-
|'''4213'''
| The manufacture order is not up to date and must be reloaded.
|-
|'''4214'''
| Manufacture order was not saved.
|-
|'''4215'''
| Manufacture order is closed and cannot be modified.
|-
|'''4220'''
| There was an error loading WO _________.
|-
|'''4221'''
| Work order cannot be found.
|-
|'''4222'''
| Duplicate work order number _________.
|-
|'''4223'''
| The work order is not up to date and must be reloaded.
|-
|'''4224'''
| Work order was not saved.
|-
|'''4300'''
| There was an error loading TO _________.
|-
|'''4301'''
| Unknown status _________.
|-
|'''4302'''
| Unknown carrier _________.
|-
|'''4303'''
| Transfer order cannot be found.
|-
|'''4304'''
| TO does not have a TO number. Please turn on the auto-assign TO number option in the Transfer Order module options.
|-
|'''4305'''
| Duplicate order number _________.
|-
|'''4306'''
| Unknown type _________.
|-
|'''4307'''
| Transfer order was not saved.
|-
|'''4308'''
| The transfer order is not up to date and must be reloaded.
|-
|'''5000'''
| There was a receiving error.
|-
|'''5001'''
| Receive ticket invalid.
|-
|'''5002'''
| Could not find a line item for part number _________.
|-
|'''5003'''
| Could not find a line item for product number _________.
|-
|'''5004'''
| Not a valid receive type.
|-
|'''5005'''
| The receipt is not up to date and must be reloaded.
|-
|'''5006'''
| A location is required to receive this part. Part num: _________
|-
|'''5007'''
| Cannot receive or reconcile more than the quantity ordered on a TO.
|-
|'''5008'''
| Receipt not found _________.
|-
|'''5100'''
| Pick invalid
|-
|'''5101'''
| Pick not found _________.
|-
|'''5102'''
| Pick not saved.
|-
|'''5103'''
| An order on pick _________ has a problem.
|-
|'''5104'''
| Pick item not found _________.
|-
|'''5105'''
| Could not finalize pick. Quantity is not correct.
|-
|'''5106'''
| The pick is not up to date and must be reloaded.
|-
|'''5107'''
| The part in tag _________ does not match part _________.
|-
|'''5108'''
| Incorrect slot for this item. Item must be placed with others for this order.
|-
|'''5109'''
| Wrong number of serial numbers sent for pick.
|-
|'''5110'''
| Pick items must be started to assign tag.
|-
|'''5111'''
| Order must be picked from location group _________.
|-
|'''5112'''
| The item must be picked from _________.
|-
|'''5200'''
| Shipment invalid
|-
|'''5201'''
| Shipment not found _________.
|-
|'''5202'''
| Shipment status error
|-
|'''5203'''
| Unable to process shipment.
|-
|'''5204'''
| Carrier not found _________.
|-
|'''5205'''
| The shipment _________ has already been shipped.
|-
|'''5206'''
| Cannot ship order _________. The customer has a ship hold.
|-
|'''5207'''
| Cannot ship order _________. The vendor has a ship hold.
|-
|'''5300'''
| Could not load RMA.
|-
|'''5301'''
| Could not find RMA.
|-
|'''5400'''
| Could not take payment.
|-
|'''5500'''
| Could not load the calendar.
|-
|'''5501'''
| Could not find the calendar.
|-
|'''5502'''
| Could not save the calendar.
|-
|'''5503'''
| Could not delete the calendar.
|-
|'''5504'''
| Could not find the calendar activity.
|-
|'''5505'''
| Could not save the calendar activity.
|-
|'''5506'''
| Could not delete the calendar activity.
|-
|'''5507'''
| The start date must be before the stop date.
|-
|'''6000'''
| Account invalid
|-
|'''6001'''
| Discount invalid
|-
|'''6002'''
| Tax rate invalid
|-
|'''6003'''
| Accounting connection failed
|-
|'''6005'''
| Accounting system not defined
|-
|'''6006'''
| Accounting brought back a null result
|-
|'''6007'''
| Accounting synchronization error
|-
|'''6008'''
| The export failed
|-
|'''6009'''
| Fishbowl and QuickBooks multiple currency features don't match
|-
|'''6010'''
| The data validation for the export has failed.
|-
|'''6011'''
| Accounting integration is not configured. Please reintegrate.
|-
|'''6100'''
| Class already exists
|-
|'''7000'''
| Pricing rule error
|-
|'''7001'''
| Pricing rule not found
|-
|'''7002'''
| The pricing rule name is not unique
|-
|'''8000'''
| Unknown FOB _________.
|}

Revision as of 14:40, 10 August 2023

The Fishbowl API allows developers to integrate with Fishbowl Advanced. Fishbowl provides documentation and examples, but no official support for the API.

FAQs

  • What alternatives are there to using the API?
    • We have found that most customers are looking for a way to view data, import data, and perform basic functions. This can all be done without the API.
    1. All of the database tables can be viewed, queried, and exported from the Icon.Data.png Data module.
    2. New data can be imported and basic order functions can be performed using Imports and Exports.
    3. The Icon.Data Import.png Data Import module allows files to be imported, even if the column headers don't match the Fishbowl format. This allows many external files to be imported into Fishbowl without modification.
    4. The Icon.Schedule.png Schedule module can automatically email reports, run data queries, or import local files or files on a server, such as an FTP server.
  • Are there multiple versions of the API?
    • Yes. We recommend using v3, but you can also download the documentation and examples for v1, and v2 by clicking here.
  • What are the major differences between the 3 versions of the API
    • v1 uses a socket connection to send XML.
    • v2 uses a socket connection to send JSON.
    • v3 is a JSON REST API that runs on your Fishbowl Server computer. It can be accessed locally or through the web.
  • Why is there a web server?
    • Typically, Fishbowl Advanced is installed on your computer as an on-premise solution, but the ports can be opened up to allow you to connect from anywhere in the world.
    • With Fishbowl Hosting, we install Fishbowl Advanced for you on our high-performance servers, and configure it so that you can access it from anywhere in the world.
    • Fishbowl Drive is 100% web based and hosted in the cloud with its own API.
  • Do I need a certificate to encrypt the API traffic?
  • How do I access the documentation for the REST API calls
    • The REST API documentation is automatically installed on your Fishbowl Server. This allows you to see the documentation that is intended for your version of Fishbowl.
    • To see the documentation from the Fishbowl Server computer, click the following link: http://localhost:80/apidocs
      REST API.png
    • To see the documentation from other computers on the network, enter the IP address of the Fishbowl Server computer, replacing 80 with your Web Port. For example: 192.168.29.37:80/apidocs
    • An example of the API documentation can be accessed here.