Authentication & Endpoint

Authentication

Overview

The Finale GraphQL API uses HTTP Basic Authentication with API credentials (an API key and secret). This page covers authentication setup, working examples in multiple languages, and troubleshooting.

API Endpoint

POST https://app.finaleinventory.com/{accountPathComponent}/api/graphql

Replace {accountPathComponent} with your Finale account identifier. You can find your accountPathComponent in your Finale URL when logged in: https://app.finaleinventory.com/YOUR-ACCOUNT-PATH.

Generating API Credentials

Before authenticating, you need to generate API credentials from your Finale account.

See How to Generate API Keys for step-by-step instructions on creating and managing your API credentials.

API Key Permissions

All API keys in Finale have full access to your account:

Authentication Method

Use HTTP Basic Authentication with your API key as the username and API secret as the password. All standard HTTP client libraries support Basic Authentication automatically.

Usage Limits

Finale has API usage limits to ensure system stability. For details about usage policies and limits, see the Rate limits documentation.

Examples

JavaScript (Node.js)

const apiKey = 'your-api-key';
const apiSecret = 'your-api-secret';
const accountPathComponent = 'your-account';

const credentials = Buffer.from(`${apiKey}:${apiSecret}`).toString('base64');

const query = `
  query {
    productViewConnection(first: 5) {
      edges {
        node {
          productId
        }
      }
    }
  }
`;

fetch(`https://app.finaleinventory.com/${accountPathComponent}/api/graphql`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Basic ${credentials}`
  },
  body: JSON.stringify({ query })
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

Python

import requests
import base64

api_key = 'your-api-key'
api_secret = 'your-api-secret'
account_path_component = 'your-account'

credentials = base64.b64encode(f'{api_key}:{api_secret}'.encode()).decode()

query = """
query {
  productViewConnection(first: 5) {
    edges {
      node {
        productId
      }
    }
  }
}
"""

url = f'https://app.finaleinventory.com/{account_path_component}/api/graphql'
headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Basic {credentials}'
}
payload = {'query': query}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

cURL

curl -X POST "https://app.finaleinventory.com/your-account/api/graphql" \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic $(echo -n 'your-api-key:your-api-secret' | base64)" \
  -d '{
    "query": "query { productViewConnection(first: 5) { edges { node { productId } } } }"
  }'

Common Authentication Errors

401 Unauthorized

Cause: Invalid API credentials or incorrect format

Response Example:

{
  "errors": [
    {
      "message": "Authentication failed",
      "extensions": {
        "code": "UNAUTHENTICATED"
      }
    }
  ]
}

Troubleshooting:

404 Not Found

Cause: Incorrect accountPathComponent in URL

Troubleshooting:

Security Requirements

Updated 9 months ago.