Read the handbook
The complete integration guide — authentication, every field, matching behaviour,
webhooks and the go-live checklist.
Browse the endpoints
Generated from our OpenAPI spec, with a request builder you can call from the page.
The shape of an integration
1
Get credentials
Ask Provident for a client id and secret. There is no self-service signup.
2
Exchange them for a token
OAuth 2.0 Client Credentials against
POST /v2/oauth2/token. No user login, no
redirect, no consent screen — your server talks to ours.3
Post the lead
POST /v2/public/leads with the customer’s name and at least one way to reach them.
Everything else is optional and improves routing.4
Find out where it landed
Either take the webhooks
and be told, or poll
GET /v2/public/leads/{id}/assignment. Prefer the webhooks.Environments
Build against staging first. Credentials are issued per environment — a production
secret will not authenticate against dev, and vice versa.
Two things worth knowing up front
An unrecognised value is stored, not rejected
An unrecognised value is stored, not rejected
Most optional fields are matched against our own catalogues — sources, campaigns,
developers, locations. When a value matches nothing we keep it verbatim and return it
under
intakeUnresolved rather than failing the request. A lead is never lost over
a field we could not match.An ownerless lead is not always a failure
An ownerless lead is not always a failure
Routing runs after we answer your
POST, so assignedTo can legitimately be
absent at create time. GET /v2/public/leads/{id}/assignment distinguishes
“routing hasn’t finished” from “nobody took it” — read it before treating an
ownerless lead as an error.