Company Onboarding Overview
Create client companies, collect everything Everee needs to onboard them, and get them signed, all through the API.
The Company Onboarding API lets a platform partner create client companies in Everee and take them through onboarding without sending anyone to Everee's own sign-up flow. You collect the company's information in your own product and send it to Everee through the API. The person who signs for the company reviews and signs Everee's agreements in an embedded experience inside your product. Everee reviews the result and tells you the outcome with webhooks.
This API is for partners. If you are adding workers to a company that has already been onboarded, see Worker Onboarding.
How it fits together
Your platform Everee
| |
| 1. Create the company ───────────────────▶ | draft company
| ◀── company ID, company API key, |
| webhook signing key |
| |
| 2. Fill in the draft ────────────────────▶ | details, payroll profile,
| (as many calls as you like) | contacts, signer, owners, taxes
| |
| Everee sets the contract terms (pricing) for the company
| |
| ◀── company-onboarding.signature-requested | the draft is complete and
| | the terms are loaded
| 3. Create an embedded signing session ───▶ |
| show it to the company's signer | signer reviews three documents,
| ◀── company-onboarding.contract-signed | chooses the funding bank account
| | and signs once
| 4. Submit for review ────────────────────▶ | UNDER_REVIEW
| ◀── identity-verification-changed, | identity checks and Everee's review
| request-created |
| 5. Answer any requests ──────────────────▶ |
| ◀── contract-executed | Everee countersigns
| ◀── status-changed (APPROVED / DECLINED) |
- Create the company. You receive its ID and an API key for the company.
- Complete the draft. Everee tells you exactly what is still missing at any point.
- Get the agreements signed in the embedded signing experience.
- Submit for review and respond to Everee.
- Once the company is approved, use its company API key with the rest of the Everee API (for example to add workers and run payroll).
Authentication
Everee gives your platform a partner API key. It begins with prtk_ and is shown once when it is created, so store it like any other secret. Send it the same way you send a company API token to the rest of the Everee API: as an HTTP Basic credential, with the key as the user name and no password.
Authorization: Basic base64(prtk_xxxxxxxxxxxxxxxxxxxx:)The value after Basic is the Base64 encoding of your key. A trailing colon is optional, so base64(prtk_…) works too. Do not send the unencoded key after Basic. Most HTTP tools encode it for you: with curl, use -u "$KEY:" (as the examples in these guides do).
You can only see and change the companies you created.
Creating a company also returns a separate company API key (apiKey). It is shown only in that response. Keep it with the company's record in your system: after approval it is what you use to call the rest of the Everee API for that company.
Statuses
Every company has an onboarding status.
| Status | Meaning | What you can do |
|---|---|---|
DRAFT | You are collecting information. | Create and change everything. Submit when the readiness check is complete. Withdraw at any time. |
UNDER_REVIEW | Submitted. Everee is verifying identities and reviewing the company. | Respond to requests from Everee. Other data is locked. |
APPROVED | Everee approved the company and has countersigned the agreements. | Use the company API key to call the rest of the Everee API. |
DECLINED | Everee declined the company. decision.reasonCode has a generic reason. | Nothing. Contact your Everee representative. |
WITHDRAWN | You withdrew the onboarding. | Nothing. |
Read the current status, and what is missing, with Get onboarding status. You also receive a company-onboarding.status-changed webhook whenever it changes.
The readiness check
The status response includes a readiness object: complete is true when nothing is missing, and missing lists a code for each gap.
| Code | What to do |
|---|---|
LEGAL_ENTITY_TYPE | Set legalEntityType on the company. |
FORMATION_STATE | Set formationState on the company. |
BUSINESS_ADDRESS | Set the company's address. |
WORKER_TYPES | Say whether the company pays W-2 employees, contractors, or both in the payroll profile. |
EMPLOYEE_COUNT | Give employeeCount when the company pays employees. |
CONTRACTOR_COUNT | Give contractorCount when the company pays contractors. |
PAY_FREQUENCY | Set payFrequency in the payroll profile. |
PAY_PERIOD_START_DAY | Set payPeriodStartDay for weekly and bi-weekly pay frequencies. |
ANNUAL_REVENUE | Set annualRevenue in the payroll profile. |
NATURE_OF_BUSINESS | Set natureOfBusiness in the payroll profile. |
NAICS_CODE | Set naicsCode in the payroll profile. |
CONTACTS | Add at least one company contact. |
PRIMARY_CONTACT | Mark one contact as the primary contact. |
SIGNER | Provide the person who signs the agreements. |
SIGNER_IDENTITY | Provide identity details for a signer who is not a control person or owner. |
SIGNER_RELATIONSHIP | The signer says they are the control person or an owner, but no matching person is on file. Fix the signer or add that person. |
CONTROL_PERSON | Provide the control person. |
OWNERSHIP_DECLARATION | Declare whether anyone else owns 25% or more of the company. |
OWNERSHIP_TOTAL | The ownership percentages you gave are inconsistent. Fix the owners you provided. |
TAX_STATES | Set the states the company withholds taxes in (needed when it pays employees). |
BANK_ACCOUNT | The signer chooses the funding bank account while signing. |
SIGNED_CONTRACT | The signer has not signed the agreements yet. |
CERTIFICATE_OF_AUTHORITY | Upload the certificate of authority when the signer is not a control person or owner. |
SIGNED_CONTRACT and BANK_ACCOUNT are completed in the embedded signing experience, and the draft must otherwise be complete before a signature can be requested. See Signing the agreements.
Conventions
- Requests and responses are JSON, except file uploads, which are
multipart/form-datawith afilepart. PATCHendpoints change only the fields you send.PUTendpoints replace the resource.- Validation problems return
400or422with a message that names the field. A request that is not allowed in the company's current state (for example, changing data that has been signed, or submitting before the draft is complete) returns409or422with an explanation. - Everything in the draft is editable until the agreements are signed. Signing locks the information that appears on the documents; see Changing data after signing.
Where to next
Updated about 10 hours ago