> ## Documentation Index
> Fetch the complete documentation index at: https://docs.symmetry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart: Call the Payroll Point API

> Make your first PRP API tax lookup. Covers JWT authentication with an API key, calling `/prp/v1/taxes`, staging vs production, and reading the JSON response.

The Payroll Point (PRP) API identifies and accurately determines complex state and local taxes based on an employee's home and work addresses, returning results in JSON. This guide walks a new API client through the full flow: authenticate and look up taxes for an employee.

Prefer a UI over building your own integration? See the [Quickstart: Look up taxes in Portal](/prp/getting-started/portal-quickstart) instead.

## Before you begin

You'll need an API key to follow this guide. If you don't have one, contact your Symmetry Client Success representative or reach out through the [Client Support Center](https://support.symmetry.com).

See [Prerequisites](/prp/getting-started/prerequisites) for the account configuration your administrator needs to complete before any lookup will work.

<CardGroup cols={2}>
  <Card title="Postman" icon="mailbox" href="/prp/api-reference/postman-collection">
    Download the PRP Postman collection and environment variables to test all endpoints with pre-built sample requests.
  </Card>

  <Card title="Payroll Point API overview" icon="code" href="/prp/api-reference/overview">
    Base URLs, authentication, and the Swagger explorer for production and staging.
  </Card>
</CardGroup>

### Environments

| Environment | PRP API base URL                   |
| ----------- | ---------------------------------- |
| Production  | `https://api.symmetry.com`         |
| Staging     | `https://api-staging.symmetry.com` |

<Info>
  Always develop and test against the **staging** environment before pointing your integration at production.
</Info>

The primary endpoint that returns taxes for an employee's home and work location is `/prp/v1/taxes`.

***

## Step 1: Authenticate

Every PRP API endpoint other than `/authentication/login` itself requires a JWT access token. Request one by calling the authentication endpoint with your API key.

```bash theme={null}
GET /authentication/login
```

```bash theme={null}
curl --location --request GET 'https://api-staging.symmetry.com/authentication/login' \
--header 'api-key: y0urAPI-KeyG0esH3re'
```

A successful response returns an `accessToken`:

```json theme={null}
{
  "accessToken": "yoUrTokEnISh3re!"
}
```

Send this token as a **Bearer token** in the `Authorization` header on every other request in this guide. Tokens are valid for 24 hours. After they expire, Payroll Point endpoints return HTTP 401 with `{"message": "Unauthorized"}` until you request a new token.

***

## Step 2: Look up taxes for an employee

With your access token, call `/prp/v1/taxes` with the employee's home and work locations. The response contains every applicable state, local, and employer tax for both locations.

```bash theme={null}
POST /prp/v1/taxes
```

```bash theme={null}
curl --location --request POST 'https://api-staging.symmetry.com/prp/v1/taxes' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
  "taxRequestId": "1",
  "payDate": "",
  "useAddressSuggestion": false,
  "home": {
    "companyHasNexus": true,
    "location": {
      "address": {
        "streetAddress1": "123 main st",
        "city": "Edison",
        "state": "NJ",
        "zipCode": "08837"
      }
    }
  },
  "work": [
    {
      "locationName": "Symmetry Work Address",
      "nonResidentCertificateOnFile": true,
      "location": {
        "address": {
          "streetAddress1": "14350 87th st",
          "city": "Scottsdale",
          "state": "AZ",
          "zipCode": "85260"
        }
      }
    }
  ]
}'
```

```json theme={null}
{
  "result": {
    "homeResults": { "...": "normalized address, geocoordinates, and jurisdiction details for the home location" },
    "workResults": { "...": "normalized address, geocoordinates, and jurisdiction details for each work location" },
    "taxResults": [
      {
        "uniqueTaxID": "34-000-0000-SIT-000",
        "description": "New Jersey State Tax",
        "rate": 0.0,
        "rateType": "RATE_GRADUATED",
        "paid": true,
        "employerTax": false,
        "resident": true
      }
    ],
    "minimumWage": []
  }
}
```

`companyHasNexus` and `nonResidentCertificateOnFile` both affect which taxes come back as required. See [Required taxes](/prp/core-concepts/required-taxes) and [Reciprocity and nonresident certificates](/prp/core-concepts/reciprocity-and-nonresident-certificates) before setting these in production. For the full request/response schema, see the [location taxes endpoint](/prp/api-reference/location-taxes/returns-taxes-based-on-single-home-and-multiple-work-locations-passed-in) in the API reference.

***

## Step 3: Look up minimum wage rates (optional)

For clients who license the minimum wage add-on, call `/prp/v1/minimumwage/location` the same way, passing a single address (or latitude/longitude pair) and an effective date.

```bash theme={null}
GET /prp/v1/minimumwage/location
```

```bash theme={null}
curl --location --request GET 'https://api-staging.symmetry.com/prp/v1/minimumwage/location?streetAddress1=123 main st&city=Edison&state=NJ&zipCode=08837&effectiveDate=2026-01-01' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
```

See the [minimum wage location endpoint](/prp/api-reference/minimum-wage/returns-minimum-wage-rates-by-location-address-or-coordinates-and-effective-date), [minimum wage by ID](/prp/api-reference/minimum-wage/returns-minimum-wage-rates-by-the-minimum-wage-unique-id), and [upcoming rates](/prp/api-reference/minimum-wage/returns-upcoming-minimum-wage-rates-by-effective-date-range) in the API reference, [Retrieve recent minimum wage rate updates](/prp/api/recent-mw-updates) for recent rate changes, and [Minimum wage concepts](/prp/core-concepts/mw-overview) to understand why a location can return more than one rate.

***

## Next steps

<CardGroup cols={2}>
  <Card title="API reference" icon="code" href="/prp/api-reference/location-taxes/returns-taxes-based-on-single-home-and-multiple-work-locations-passed-in">
    Full reference for every PRP API endpoint, including query parameters and sample responses.
  </Card>

  <Card title="Tax results" icon="circle-check" href="/prp/core-concepts/tax-results">
    How to read what a lookup returns, and what each tax in the response means.
  </Card>
</CardGroup>

More references:

* [Request address suggestions](/prp/api/address-suggestions)
* [Tax jurisdictions](/prp/core-concepts/tax-jurisdictions)
* [Minimum wage concepts](/prp/core-concepts/mw-overview)
* [Account information endpoint](/prp/api-reference/account-info/returns-account-information-and-transaction-count-between-the-dates-passed-as-parameters)

Migrating from the legacy Payroll Point Web Service? [Create a ticket](https://support.symmetry.com/hc/en-us/requests/new) and our team can help you plan the move.
