branch-onboarding-expert — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited branch-onboarding-expert (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill defines the correct way to integrate with Branch for worker onboarding and payouts. It exists because the Branch API exposes endpoints that look like valid integration paths but are not the standard workflow. Without this guidance, AI agents will build integrations that handle sensitive data incorrectly.
The Branch OpenAPI spec (available via the ReadMe.io MCP server) lists endpoints like POST /employees/{id}/wallets that accept KYC fields (SSN, DOB, address). An agent discovering the API will naturally reach for these endpoints to build an onboarding flow. This is wrong. Branch hosts its own onboarding experience — the partner application never collects or transmits KYC data. The /wallets endpoint exists for specific non-standard use cases and must not be used as the default integration path.
Branch hosts the onboarding. The partner system is never responsible for collecting KYC data (SSN, DOB, address) or calling wallet creation endpoints directly. Workers complete identity verification and payment method setup on Branch's hosted onboarding flow.
Before starting, identify the partner's persona:
The onboarding path is the same for both. The difference affects disbursement types and some business logic, not the technical integration.
Before launch, all existing workers must be registered with Branch. The partner can either send Branch a roster file for bulk import, or batch CreateEmployee calls for each existing worker record.
Call CreateEmployee with roster data only. No KYC fields.
POST /v1/organizations/{orgId}/employees/{employeeId}Required fields:
first_namelast_namephone_numberemail_addressgroup_name (location identifier)Also include: Org ID, Worker ID.
This is an upsert — safe to call on every sync cycle. Do not include SSN, date of birth, home address, or any other PII beyond the fields listed above.
The worker must have completed the partner's own onboarding and been presented with Branch as a payment option before this call is made. The sequence is: worker completes partner onboarding → partner presents payment options → worker chooses Branch → partner calls CreateEmployee → partner redirects to Branch.
Generate the onboarding URL and present it to the worker:
https://onboarding.branchapp.com/?org_id={{OrgUUID}}&worker_id={{workerID}}The worker_id parameter is critical — it allows Branch to pre-associate the worker's record with their onboarding session. Omitting it breaks the link between the roster record and the payment profile.
Branch walks the worker through:
The partner application has no involvement in this step. No API calls, no data collection, no intermediate screens. The worker interacts directly with Branch's hosted flow.
Branch fires PAYMENT_PROFILE_ACTIVATED to the partner's registered webhook endpoint once the worker has completed setup and their account is fundable.
This webhook is the gate. Do not enable payouts, do not attempt disbursements, do not assume the worker is ready until this event arrives. There is no polling alternative — implement webhook handling.
Upon receiving the webhook, the partner enables Branch payouts for that worker in their own system and updates the worker's status to active.
POST /v2/organizations/{orgId}/workers/{workerId}/disbursementsRequired fields:
amount — in cents ($12.50 = 1250)external_id — the partner's unique identifier, used as an idempotency keytype — disbursement category (see below)worker_group — location identifierdescription — human-readable descriptionDisbursement types vary by use case: TIP, DELIVERY, MILEAGE, TRIP, BONUS, PAYCHECK, and others depending on the partner's business model.
Always use the V2 disbursement endpoint. V1 exists in the API but is not the current standard.
For retry behavior and failure handling, read references/disbursement-details.md.
| Webhook | Action |
|---|---|
PAYMENT_PROFILE_DEACTIVATED | Stop disbursements for that worker immediately |
PAYMENT_PROFILE_ACTIVATED | Re-enable disbursements |
The deactivation/reactivation cycle also applies when workers change payment methods. If a worker wants to switch from Wallet to Direct (or vice versa), redirect them back to the org-specific onboarding URL. Branch handles the transition; the partner listens for the webhook events.
Use Update Employee and Delete Employee endpoints to keep roster data accurate when worker information changes or workers leave the organization.
These are the most common mistakes agents and developers make when building Branch integrations without this guidance:
/wallets DirectlyPOST /v1/organizations/{orgId}/employees/{employeeId}/wallets exists in the API spec. It accepts SSN, DOB, and address. Do not use it. This endpoint is not part of the standard onboarding path. Using it means the partner application is collecting and transmitting KYC data that should be handled exclusively by Branch's hosted flow.
No SSN fields, no date-of-birth inputs, no address forms for Branch onboarding. The partner app's only responsibility is roster data (name, phone, email, group).
Do not attempt disbursements before receiving PAYMENT_PROFILE_ACTIVATED. Do not poll the payment profile endpoint as a substitute. Do not assume that completing the CreateEmployee call means the worker is ready for payouts.
The V1 disbursement endpoint may be visible in the API. Always use V2: POST /v2/organizations/{orgId}/workers/{workerId}/disbursements
The URL must include both org_id and worker_id. Without worker_id, Branch cannot associate the onboarding session with the roster record.
The Branch MCP server (provided by ReadMe.io) exposes read-only documentation tools. When using it:
get-server-variables first — this is required before callingget-endpoint, or execute-request.
search-endpoints or list-endpoints to discover API paths.get-endpoint for detailed endpoint documentation.search and fetch to find and read guide pages.execute-request is the only tool that hits the live API and requires validBranch API credentials. All other tools are read-only documentation lookups.
Even when reading endpoint documentation from the MCP server, follow the standard path defined in this skill. The API spec describes what endpoints exist, not which ones to use or in what order.
| Setting | Sandbox | Production |
|---|---|---|
| Base URL (employee APIs) | https://sandbox.branchapp.com/v1/ | https://api.branchapp.com/v1/ |
| Base URL (disbursement APIs) | https://sandbox.branchapp.com/v2/ | https://api.branchapp.com/v2/ |
| API Keys | Sandbox keys only | Production keys only |
| KYC/Fraud | Fixed responses | Live verification |
Onboarding URLs and Org IDs are org-specific and provided during implementation.
For detailed disbursement failure handling (HTTP status codes, reason codes, retry logic, reversals) and sandbox testing procedures, read: references/disbursement-details.md
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.