Error fixFishbowl InventoryREST API / Integrated Apps

Fix Fishbowl REST API Login 401 and Integrated App Errors

Error
Fishbowl API login 401 unauthorized

Also searched as

  • Fishbowl REST API login not working
  • Fishbowl integrated app not approved
  • Fishbowl API token appId appName
  • Fishbowl api/login returns error

Short answer

A failed Fishbowl REST API login is usually one of three things: the integration was never approved inside Fishbowl, the appName and appId in the request do not match the approved entry, or the Fishbowl user lacks permission. Approve the app in the Fishbowl client, fix the login payload, use a dedicated API user and send the returned token on later calls.

Applies to: Fishbowl Inventory versions with the REST API (Fishbowl Advanced and Fishbowl Drive offerings that expose it). Verify the endpoint paths in your version's API documentation.

How to fix the login failure

  1. 1Confirm the server URL, port and whether the REST API is enabled on your Fishbowl server.
  2. 2Send a POST to the login endpoint with JSON containing appName, appId, appDescription, username and password.
  3. 3Open the Fishbowl client and look in the integrated apps list for a pending entry from your appName. Approve it.
  4. 4Make sure the appName and appId you send are exactly the same on every later login, because Fishbowl identifies the integration by them.
  5. 5Create a dedicated Fishbowl user for the integration with only the permissions it needs, and do not share an admin login.
  6. 6Read the token from the successful response and send it as a bearer token on every later request.
  7. 7Call the logout endpoint when the job ends so you do not exhaust concurrent sessions or licenses.
  8. 8If you still get an error, read the response body and the Fishbowl server log for the exact reason before changing anything else.

Why approval is required

Fishbowl does not let any program that knows a username and password connect. The first login from a new integration creates a pending integrated app entry that an administrator must approve inside Fishbowl. Until then the API rejects the login, which developers often read as a bad password.

The approval is tied to the appName and appId you send. Change either one in your code, for example while moving from test to production, and Fishbowl treats it as a different, unapproved app. Keep them as fixed configuration values.

A correct login request

The login is a JSON POST. Store the returned token in memory for the life of the job and pass it in the Authorization header on later calls. Do not log the token or password.

POST /api/login
Content-Type: application/json

{
  "appName": "NetrayInventorySync",
  "appId": 4321,
  "appDescription": "Nightly stock sync to warehouse dashboard",
  "username": "api_sync",
  "password": "<from secret store>"
}

Permissions, licenses and sessions

The API user needs the same Fishbowl permissions as a person doing that work. A user who cannot view parts in the client cannot read them through the API, and you will see access errors on specific calls even though login succeeded.

API sessions count against your licensing and concurrency limits. Scripts that log in repeatedly without logging out can leave stale sessions and cause later logins to fail. Reuse one token per run and always log out in a finally block.

Network and server checks

If no request reaches Fishbowl, check the firewall, the port, TLS certificates and whether you are calling the server from the correct network. A certificate mismatch often shows up as a client library error rather than a 401.

If Fishbowl is reachable but returns errors on many calls, check the server log and that the database is healthy. A database connection problem can surface through the API as generic failures; the related MySQL connection article covers that case.

Common pitfalls

  • !Never approving the integrated app and debugging the password instead.
  • !Changing appId or appName between environments and creating a new unapproved app.
  • !Using an administrator account for the integration instead of a least-privilege user.
  • !Logging in on every call instead of reusing the token, then hitting session limits.
  • !Storing the Fishbowl password in source control or logs.
  • !Skipping logout so stale sessions pile up.

How an ERP-grounded AI assistant handles this

SyteRay-style tooling is for SyteLine, but the same principle applies to Fishbowl through an ERPray or DataRay connector: a read-only service account, an approved integration, and every query visible to the user. An assistant can explain a failing API call from the response and server log, but it should not hold admin credentials or write to the system without human approval. For a single simple integration, Fishbowl's own documented integrations may be enough.

Frequently asked questions

Why does Fishbowl reject my API login with a correct password?

Often the integrated app has not been approved in the Fishbowl client, or the appName and appId changed. Approve the pending app, keep those values constant and retry. Also confirm the user account is active and has the needed permissions.

Where do I approve a Fishbowl integration?

In the Fishbowl client, an administrator reviews integrated apps and approves the pending request from your appName. The exact menu location can vary by version, so check the Fishbowl documentation for your release.

Should I log in for every API call?

No. Log in once per job, reuse the token on later calls and log out at the end. Repeated logins waste time and can leave stale sessions that interfere with licensing and later logins.

Can the API user be my administrator account?

It works but is a poor choice. Create a dedicated user with only the permissions the integration needs, so you can audit and revoke it without affecting people, and so a leaked credential has limited reach.

Related

Error fix

Fix Fishbowl Error: MySQL Server Has Gone Away

This error means the Fishbowl Server lost its connection to the underlying MySQL database, usually because a session sat idle past MySQL's wait_timeout, MySQL itself restarted, or a large import or report exceeded max_allowed_packet. Raise the relevant MySQL timeout and packet settings, confirm the MySQL service is actually running, and restart both MySQL and the Fishbowl Server service.

How-to

Fishbowl SQL Query for Inventory by Location

Fishbowl stores physical inventory as rows in the tag table, one per part per location per tracking combination. Join tag to part and location, group by part and location, and sum quantity to get on hand by location. Run it read-only through Fishbowl's reporting module or a read-only MySQL user, and verify column names against your version.

Error fix

Fix Katana API 429 Too Many Requests

HTTP 429 from the Katana public API means your integration exceeded the per-key request allowance for the current time window. Fix it by honoring the retry headers, backing off with jitter, paging with the largest allowed page size, caching reference data such as products and variants, and replacing polling loops with scheduled incremental syncs.

How-to

How to Create a Generic Inquiry in Acumatica

Generic Inquiries (GI) are Acumatica's no-code query builder for joining tables, adding filters, and exposing the result as an inquiry screen, dashboard data source, or API endpoint. Open System > Customization > Generic Inquiry, add your base table, define joins and conditions, then run and save. No SQL or customization project is required.

Error fix

Fix Odoo AccessError: You Are Not Allowed to Access Records

Odoo raises AccessError when a user's security groups do not grant a CRUD right on a model through ir.model.access.csv, or when an ir.rule record rule filters the specific record out for that user or company. Fix it by adding the user to the group named in the error, editing the model's access rights, or reviewing the record rule's domain under Settings > Technical > Security.

How-to

How to Void a Check in Sage 100

Sage 100 voids checks through Accounts Payable > Main > Check and Payment Voiding. Select the bank code, choose the check number, and Sage reverses the Cash Disbursements Journal entry and reopens the invoice it paid. A check that already cleared in Bank Reconciliation or falls in a closed period needs an extra step before it can be voided cleanly.

AI for ERP

AI for quote-to-cash in manufacturing and job shop ERPs

AI reads incoming RFQs, drafts quotes from your ERP's own cost and pricing history, and flags parts your shop has never quoted before, keeping the estimator in control.

AI for ERP

AI Demand Forecasting for Manufacturers: Better Numbers and an Explanation Planners Can Trust

AI demand forecasting explains ERP forecast changes in plain language, flags exceptions for planners, and handles short-history SKUs without Excel overrides.

Stuck on Fishbowl Inventory?

Talk to engineers who work inside Fishbowl Inventory every week, and who build private AI that answers these questions from your own ERP data.