The token request fails
The token endpoint returns an error code in the response body. Match it to the cause:
Send the request as application/x-www-form-urlencoded. A JSON body is rejected even when the credentials are correct.
Every request returns 401
A 401 with an empty body means crmSeries rejected the credential before running the operation. Check, in order:
- The header format: Authorization: Bearer followed by the token, or Authorization: ApiKey followed by the key, with one space and no quotes.
- Token expiry. There's no grace period; renew a minute before expires_in runs out, and make sure your server clock is synchronized.
- The environment. A token or key issued for a test environment doesn't work in production, and the reverse.
- X-User-Email. If you send it, the address must belong to an active crmSeries user in your dealership. Remove the header to check whether it's the cause.
- Your integration user. Client-credential tokens act as the administrator user crmSeries set up for your dealership's integration. If that user is deactivated or its email changes, every request returns 401 until crmSeries updates it.
- The credential type. Operations that accept only client-credential tokens reject an API key with 401. The reference lists the methods each operation accepts.
A request returns 403
Your credential is valid but doesn't grant this operation. Retrying won't help. Confirm in the reference that the operation supports your credential type, then ask crmSeries whether your integration has access to it.
The data isn't what you expected
- A record returns 404. Every credential is scoped to one dealership, so records from another dealership are never visible. Also check that you sent a crmSeries ID where the path expects one, not your own system’s identifier.
- Records are duplicated. Operations that match records by your system’s identifier create a new record when no match is found. Send exactly the same identifier every time, with the same leading zeros, letter case, and prefix.
- An update didn’t change anything. Only fields named in updatedFields are applied. See partial updates.
- A list stops early or repeats rows. Follow hasNextPage instead of assuming every page is full, and don’t change filters while you page through a result set. See pagination.
Contact crmSeries
If you’re still stuck, email support@crmseries.com with the X-Trace-Id header value, the UTC time of the request, the method and path, and the status code. Never include your client secret, API key, or access token.