Branch Partner OpenAPI

This page contains the current Branch Partner OpenAPI definition presented in both JSON and YAML formats.

Click to copy the code using the clipboard button, which appears when you hover your cursor at the top right.

{
  "openapi": "3.0.1",
  "info": {
    "title": "Branch API",
    "description": "Branch API",
    "version": "2.0.5"
  },
  "servers": [
    {
      "url": "https://api.branchapp.com",
      "description": "Production URL"
    },
    {
      "url": "https://sandbox.branchapp.com",
      "description": "Sandbox URL"
    }
  ],
  "paths": {
    "/v2/organizations/{orgId}/employees/{employeeId}/payment-profile": {
      "get": {
        "tags": [
          "Payment Profile"
        ],
        "summary": "Get Payment Profile",
        "description": "Get the payment profile for an employee, which shows the payment types by which a worker can be paid according to their current configuration, and the active payment type.",
        "operationId": "getEmployeePaymentProfile",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeePaymentProfileDto"
                }
              }
            }
          },
          "404": {
            "description": "Returned if the requested employeeId was not found",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "description": "Not Found",
                    "value": {
                      "timestamp": "2024-02-06T18:02:04.351+00:00",
                      "status": 404,
                      "error": "Not Found",
                      "message": "No message available",
                      "path": "/v2/organizations/100019/employees/2444666666/payment-profile"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Payment Profile"
        ],
        "summary": "Update Payment Profile",
        "description": "Update a worker's payment profile to change the active payment type.",
        "operationId": "updatePaymentProfileActiveType",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeePaymentProfileItem"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeePaymentProfileDto"
                }
              }
            }
          },
          "400": {
            "description": "Returned if the request does not adhere to the API specification. Or if the worker does not have the requested profile type configured",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Request": {
                    "description": "Invalid Request",
                    "value": {
                      "timestamp": "2024-02-06T18:13:21.047+00:00",
                      "status": 400,
                      "error": "Bad Request",
                      "message": "[400]  valid payment card not found for employee",
                      "path": "/v2/organizations/100019/employees/123456/payment-profile"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Returned if the requested employeeId was not found",
            "content": {
              "application/json": {
                "examples": {
                  "Not Found": {
                    "description": "Not Found",
                    "value": {
                      "timestamp": "2024-02-06T18:02:04.351+00:00",
                      "status": 404,
                      "error": "Not Found",
                      "message": "No message available",
                      "path": "/v2/organizations/100019/employees/2444666666/payment-profile"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/payroll-calendar/periods/{payrollPeriodId}": {
      "get": {
        "tags": [
          "Payroll Periods"
        ],
        "summary": "Get Payroll Period",
        "description": "Get an existing payroll period.",
        "operationId": "getPayrollPeriod",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "payrollPeriodId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollPeriodDto"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Payroll Periods"
        ],
        "summary": "Update Payroll Period",
        "description": "Update a payroll period pay date and deadline.",
        "operationId": "updatePayrollPeriod",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "payrollPeriodId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollPeriodUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollPeriodDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}": {
      "get": {
        "tags": [
          "Employees"
        ],
        "summary": "Get Employee",
        "description": "Get an Employee by ID.",
        "operationId": "getEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeDto"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Employees"
        ],
        "summary": "Update Employee",
        "description": "Update an employee by ID.",
        "operationId": "updateEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeeUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeDto"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Employees"
        ],
        "summary": "Create Employee",
        "description": "Create a new employee.",
        "operationId": "createEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeeCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeDto"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Employees"
        ],
        "summary": "Delete Employee",
        "description": "Delete an employee by ID.",
        "operationId": "deleteEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/shifts/{shiftId}": {
      "get": {
        "tags": [
          "Shifts"
        ],
        "summary": "Get Shift",
        "description": "Get a worker's completed shift. Requires shift_id to identify which shift to retrieve. If an existing shift cannot be found with the provided shift_id, call will return 404 - Not Found. Successful call will return the completed shift.",
        "operationId": "getShift",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "shiftId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ShiftDto"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Shifts"
        ],
        "summary": "Update Shift",
        "description": "Update a worker's completed shift. Requires shift_id to identify which shift to update. If an existing shift cannot be found with the provided shift_id, call will return 404 - Not Found. Requests made with missing required fields or invalid dates/times will return 400 - Bad Request. Successful call will return newly updated shift.",
        "operationId": "updateShift",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "shiftId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShiftUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ShiftDto"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Shifts"
        ],
        "summary": "Delete shift",
        "description": "Delete an existing shift. Requires shift_id to identify which shift to delete. If an existing shift cannot be found with the provided shift_id, call will return 404 - Not Found. Successful call will return status 204 - No Content.",
        "operationId": "deleteShift",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "shiftId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/period-earnings": {
      "put": {
        "tags": [
          "Employee Earnings"
        ],
        "summary": "Update Employee Earning",
        "description": "Update an employee's earning for a period.",
        "operationId": "updateEmployeePeriodEarning",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeePeriodEarningRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeePeriodEarningSummaryDto"
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{orgId}/workers/{workerId}/disbursements": {
      "get": {
        "tags": [
          "V2 Disbursements"
        ],
        "summary": "Search Disbursements",
        "description": "Searches all disbursements sent to worker.",
        "operationId": "getDisbursementsForWorker",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "PENDING",
                "SCHEDULED",
                "COMPLETED",
                "FAILED",
                "CANCELED",
                "SKIPPED",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "TIP",
                "TRIP",
                "MILEAGE",
                "PAYCHECK",
                "MISCELLANEOUS",
                "DEVICE",
                "DELIVERY",
                "DEPOSIT",
                "BONUS",
                "REWARD",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invoice_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "worker_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time_last_attempted_start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "time_last_attempted_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "before",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Format: field_name,direction",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ApiCursorPageV2DisbursementDto"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "V2 Disbursements"
        ],
        "summary": "Create Disbursement",
        "description": "Creates a disbursement for an worker. A disbursement is an initiation of payment to a worker.",
        "operationId": "createDisbursement",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/V2DisbursementCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returned if the disbursement already exists and an additional attempt to disburse funds was not made. This can occur if the disbursement was already complete or if the resulting status is in [ CANCELED | SKIPPED ]",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2DisbursementDto"
                }
              }
            }
          },
          "201": {
            "description": "Returned if an attempt to disburse funds was successful. This can occur if the disbursement is new or if it already exists and is retried successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2DisbursementDto"
                }
              }
            }
          },
          "202": {
            "description": "Returned if an attempt to disburse funds was unsuccessful. This can occur if the resulting status is in [ FAILED | PENDING ]. Additional information can be found via reason_code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2DisbursementDto"
                }
              }
            }
          },
          "400": {
            "description": "Returned if the request does not adhere to the API specification. Can also be returned if the disbursement cannot be created due to improper invoicing setup.",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Request": {
                    "description": "Invalid Request",
                    "value": {
                      "timestamp": "2023-01-01T00:00:00.000+00:00",
                      "status": 400,
                      "error": "Bad Request",
                      "message": "amount is required",
                      "path": "/v2/organizations/123/employees/123/disbursements"
                    }
                  },
                  "Missing Invoice Configuration": {
                    "description": "Missing Invoice Configuration",
                    "value": {
                      "timestamp": "2023-01-01T00:00:00.000+00:00",
                      "status": 400,
                      "error": "Bad Request",
                      "message": "Could not match disbursement to invoice configuration",
                      "path": "/v2/organizations/123/employees/123/disbursements"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Returned if the request is throttled. Throttling can occur based on requests/min or if you have reached your organization's daily disbursement limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "If persistent, contact your Branch representative.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{orgId}/employees/{employeeId}/external-cards": {
      "get": {
        "tags": [
          "External Cards"
        ],
        "summary": "Get External Cards for Employee",
        "description": "Get a list of external cards for an employee.",
        "operationId": "getExternalCardsForOrganizationEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "network",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "visa"
          },
          {
            "name": "last4",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": 1234
          },
          {
            "name": "time_created_start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2023-01-01T00:00:00.000Z"
          },
          {
            "name": "time_created_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2023-01-31T23:59:59.999Z"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageSlimEmployeeTabapayExternalCardDto"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "External Cards"
        ],
        "summary": "Add External Card for Employee",
        "description": "Add an external card for an employee.",
        "operationId": "addExternalCardForOrganizationEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmployeeDirectFormRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Returned if an attempt to add an external payment card was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeTabapayExternalCardDto"
                }
              }
            }
          },
          "400": {
            "description": "Returned if the request does not adhere to the API specification. This will also return if the payment card details are invalid or not supported",
            "content": {
              "application/json": {
                "examples": {
                  "Invalid Request": {
                    "description": "Invalid Request",
                    "value": {
                      "timestamp": "2023-01-01T00:00:00.000+00:00",
                      "status": 400,
                      "error": "Bad Request",
                      "message": "token is required",
                      "path": "/v2/organizations/123/employees/123/disbursements"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "Returned if the worker has an existing external payment card.  Direct worker,\nto delete their current card and try again.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/remittances/{remittanceId}/deductions": {
      "post": {
        "tags": [
          "Remittance"
        ],
        "summary": "Report Remittance Deduction",
        "description": "Post an amount that was deducted from a worker on the remittance.",
        "operationId": "reportOrganizationRemittanceDeduction",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "remittanceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeductionCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/payroll-calendar": {
      "get": {
        "tags": [
          "Payroll Calendar"
        ],
        "summary": "Get Payroll Calendar",
        "description": "Get the payroll calendar for an organization",
        "operationId": "getPayrollCalendar",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollCalendarDto"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Payroll Calendar"
        ],
        "summary": "Create Payroll Calendar",
        "description": "Create a new payroll calendar, which defines payroll periods.",
        "operationId": "createPayrollCalendar",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayrollCalendarCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PayrollCalendarDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/wallets": {
      "post": {
        "tags": [
          "Wallet"
        ],
        "summary": "Create Wallet",
        "description": "Creates a digital wallet for an employee.  Optionally allows a Branch card to be automatically ordered for the employee.",
        "operationId": "createWalletForEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Test-Mode",
            "in": "header",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "description": "The Organization ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "description": "The Employee ID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrganizationWalletCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationWalletCreatedSchema"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request. If a field provided is invalid, an error response will be returned with a message describing why.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                },
                "example": {
                  "timestamp": "2023-01-01T11:00:00.000+00:00",
                  "status": 400,
                  "error": "Bad Request",
                  "message": "Field 'example' was invalid",
                  "path": "/v1/organizations/123/employees/456/wallets"
                }
              }
            }
          },
          "404": {
            "description": "Not Found. Can occur for example if the create_employee field is set to false, and the employee ID provided does not match an existing worker.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                },
                "example": {
                  "timestamp": "2023-01-01T11:00:00.000+00:00",
                  "status": 404,
                  "error": "Not Found",
                  "message": "Employee does not exist for org",
                  "path": "/v1/organizations/123/employees/456/wallets"
                }
              }
            }
          },
          "409": {
            "description": "Conflict. Can occur for example if the email address provided matches an account that already exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                },
                "example": {
                  "timestamp": "2023-01-01T11:00:00.000+00:00",
                  "status": 409,
                  "error": "Conflict",
                  "message": "Could not create wallet account for user: An account with the email '[email protected]' already exists",
                  "path": "/v1/organizations/123/employees/456/wallets"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited. Max 2 wallet creation requests per second.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                },
                "example": {
                  "timestamp": "2023-01-01T11:00:00.000+00:00",
                  "status": 429,
                  "error": "Too Many Requests",
                  "message": "You have exhausted your API Request Quota",
                  "path": "/v1/organizations/123/employees/456/wallets"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/shifts": {
      "post": {
        "tags": [
          "Shifts"
        ],
        "summary": "Submit Shift",
        "description": "Submit a person's completed shift. Shifts are used to track hours worked by an individual employee and calculate EWA. Shifts may be created with a shift_id unique within the organization. Failure to provide a shift_id will cause a UUID to be generated instead.If a duplicate shift_id is provided, call will return 409 - Conflict. Successful call will return the created shift and status 201.",
        "operationId": "submitShift",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShiftCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ShiftDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/disbursements": {
      "get": {
        "tags": [
          "Disbursements"
        ],
        "summary": "Get Employee Disbursements",
        "description": "Get a list of disbursements for an employee.",
        "operationId": "getDisbursementsForEmployee",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CREATED",
                "ATTEMPTING_PAYBACK",
                "PAYBACK_FAILED",
                "COMPLETED",
                "FAILED",
                "SKIPPED",
                "CANCELLED",
                "SCHEDULED",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "TIPS",
                "TRIP",
                "MILEAGE",
                "PAYCHECK",
                "MISCELLANEOUS",
                "DEVICE",
                "DELIVERY",
                "DEPOSIT",
                "BONUS",
                "REWARD",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invoice_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employee_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "employee_group",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time_created_start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "time_created_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page_direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "PREV",
                "NEXT"
              ]
            }
          },
          {
            "name": "last_time_created",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "last_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Format: field_name,direction",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageDisbursementDto"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Disbursements"
        ],
        "summary": "Create Disbursement",
        "description": "Creates a disbursement for an employee. This initiates a payment to the employee.",
        "operationId": "createDisbursement_1",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DisbursementCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/DisbursementDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/remittances/{remittanceId}": {
      "patch": {
        "tags": [
          "Remittance"
        ],
        "summary": "Complete Remittance Deduction",
        "description": "Update an existing remittance to mark it as completed.",
        "operationId": "updateOrganizationRemittance",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "remittanceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemittanceUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v2/organizations/{orgId}/payouts/wallet/{transferId}": {
      "get": {
        "tags": [
          "Wallet Payout Details"
        ],
        "summary": "Get Wallet Payout",
        "description": "Returns Wallet payout details for a disbursement",
        "operationId": "getWalletPayoutDetails",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "transferId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/V2WalletPayoutDto"
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{orgId}/payouts/card/{transferId}": {
      "get": {
        "tags": [
          "Card Payout Details"
        ],
        "summary": "Get External Card Payout",
        "description": "Returns external card payout details for a disbursement",
        "operationId": "getExternalCardPayoutDetails",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "transferId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/V2CardPayoutDto"
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{orgId}/employees/{employeeId}/external-cards/{entityId}": {
      "get": {
        "tags": [
          "External Cards"
        ],
        "summary": "Get External Cards for Entity",
        "description": "Get a list of external cards for an entity.",
        "operationId": "getExternalCardByEntityId",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/EmployeeTabapayExternalCardDto"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "External Cards"
        ],
        "summary": "Delete External Card for Entity",
        "description": "Delete an external card for an entity.",
        "operationId": "deleteExternalCardByEntityId",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/v2/organizations/{orgId}/disbursements": {
      "get": {
        "tags": [
          "V2 Disbursements"
        ],
        "summary": "Search Disbursements",
        "description": "Searches all disbursements.",
        "operationId": "searchDisbursements",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "PENDING",
                "SCHEDULED",
                "COMPLETED",
                "FAILED",
                "CANCELED",
                "SKIPPED",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "TIP",
                "TRIP",
                "MILEAGE",
                "PAYCHECK",
                "MISCELLANEOUS",
                "DEVICE",
                "DELIVERY",
                "DEPOSIT",
                "BONUS",
                "REWARD",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invoice_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "worker_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time_last_attempted_start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "time_last_attempted_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "before",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Format: field_name,direction",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ApiCursorPageV2DisbursementDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations": {
      "get": {
        "tags": [
          "Organizations"
        ],
        "operationId": "getAllOrganizations",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageRequest",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/PageRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageOrganizationDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}": {
      "get": {
        "tags": [
          "Organizations"
        ],
        "operationId": "getOrganization",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/wallets": {
      "get": {
        "tags": [
          "Wallet"
        ],
        "summary": "Get Wallets",
        "description": "Get a list of wallets for an organization.",
        "operationId": "getWallets",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageOrganizationWalletDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/wallet-statuses": {
      "get": {
        "tags": [
          "Wallet"
        ],
        "summary": "Get Wallet Status",
        "description": "Get the status of wallets for an organization.",
        "operationId": "getWalletStatuses",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageOrganizationWalletStatusDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/remittances": {
      "get": {
        "tags": [
          "Remittance"
        ],
        "summary": "Get Remittances",
        "description": "Return a list of remittances by an organization.",
        "operationId": "getOrganizationRemittances",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageRemittanceDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/remittances/{remittanceId}/requested-deductions": {
      "get": {
        "tags": [
          "Remittance"
        ],
        "summary": "Get Remittance Requested Deductions",
        "description": "Return a list of requested deductions from an organization's remittance.",
        "operationId": "getOrganizationRemittanceRequestedDeductions",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "remittanceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageRemittanceRequestedDeductionDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/invoices/{invoiceId}/disbursements": {
      "get": {
        "tags": [
          "Disbursements"
        ],
        "summary": "Get Invoice Disbursements",
        "description": "Get a list of disbursements for an invoice.",
        "operationId": "getDisbursementsForInvoice",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CREATED",
                "ATTEMPTING_PAYBACK",
                "PAYBACK_FAILED",
                "COMPLETED",
                "FAILED",
                "SKIPPED",
                "CANCELLED",
                "SCHEDULED",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "TIPS",
                "TRIP",
                "MILEAGE",
                "PAYCHECK",
                "MISCELLANEOUS",
                "DEVICE",
                "DELIVERY",
                "DEPOSIT",
                "BONUS",
                "REWARD",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invoice_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employee_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "employee_group",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time_created_start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "time_created_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page_direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "PREV",
                "NEXT"
              ]
            }
          },
          {
            "name": "last_time_created",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "last_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Format: field_name,direction",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageDisbursementDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees": {
      "get": {
        "tags": [
          "Employees"
        ],
        "summary": "Search Employees",
        "description": "Search for employees by providing search criteria.",
        "operationId": "searchEmployees",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "first_name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "last_name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageEmployeeDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/wallet": {
      "get": {
        "tags": [
          "Wallet"
        ],
        "summary": "Get Employee Wallet",
        "description": "Get wallet for an employee.",
        "operationId": "getWallet",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationWalletDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/card": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get Active User Card",
        "description": "Card returned will be either active or temporarily suspended. Permanently terminated cards are not returned.  \nIf the provided user does not have an active or suspended card, call will return 404 - Not Found.",
        "operationId": "getCard",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success - Returns a user's active card.  \n`state` can be `ACTIVE` or `SUSPENDED`.  \n`card_type` can be `PHYSICAL` or `VIRTUAL`.",
            "content": {
              "application/json": {
                "example": {
                  "state": "ACTIVE",
                  "card_type": "PHYSICAL",
                  "time_created": "2020-02-18T19:42:48Z"
                }
              }
            }
          },
          "404": {
            "description": "Not Found. No active or suspended card",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                },
                "example": {
                  "timestamp": "2023-10-04T23:08:23.954+00:00",
                  "status": 404,
                  "error": "Not Found",
                  "message": "Employee does not have an active card.",
                  "path": "/v1/organizations/123/employees/456/card"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employees/{employeeId}/address": {
      "get": {
        "tags": [
          "Employees"
        ],
        "summary": "Get Employee Address",
        "description": "Get the address of an employee.",
        "operationId": "getEmployeeAddress",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Address"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/disbursements": {
      "get": {
        "tags": [
          "Disbursements"
        ],
        "summary": "Search Disbursements",
        "description": "Searches disbursements while returning HATEOAS links (e.g. prev_page, next_page) for retrieving additional data.",
        "operationId": "searchDisbursements_1",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CREATED",
                "ATTEMPTING_PAYBACK",
                "PAYBACK_FAILED",
                "COMPLETED",
                "FAILED",
                "SKIPPED",
                "CANCELLED",
                "SCHEDULED",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "TIPS",
                "TRIP",
                "MILEAGE",
                "PAYCHECK",
                "MISCELLANEOUS",
                "DEVICE",
                "DELIVERY",
                "DEPOSIT",
                "BONUS",
                "REWARD",
                "UNKNOWN"
              ]
            }
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invoice_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employee_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "employee_group",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "time_created_start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "time_created_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page_direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "PREV",
                "NEXT"
              ]
            }
          },
          {
            "name": "last_time_created",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "last_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Format: field_name,direction",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageDisbursementDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/card-programs": {
      "get": {
        "tags": [
          "card-program-controller"
        ],
        "operationId": "getCardPrograms",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CardProgram"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/organizations/{orgId}/advances": {
      "get": {
        "tags": [
          "Advances"
        ],
        "summary": "Search Advances",
        "description": "Search for advances by an organization by entering search criteria. ",
        "operationId": "searchOrganizationAdvances",
        "parameters": [
          {
            "name": "apikey",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orgId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employee_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageEmployeeAdvanceDto"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "EmployeePaymentProfileItem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "WALLET",
              "CARD",
              "NONE"
            ]
          },
          "ref": {
            "type": "string"
          }
        }
      },
      "EmployeePaymentProfileDto": {
        "type": "object",
        "properties": {
          "additional_payment_methods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmployeePaymentProfileItem"
            }
          },
          "payment_method": {
            "$ref": "#/components/schemas/EmployeePaymentProfileItem"
          }
        }
      },
      "PayrollPeriodUpdateRequest": {
        "type": "object",
        "properties": {
          "payroll_deadline": {
            "type": "string",
            "description": "The date by which workers' pay must be determined.",
            "format": "date",
            "example": "2000-01-01"
          },
          "pay_date": {
            "type": "string",
            "description": "The date individuals will receive payment.",
            "format": "date",
            "example": "2000-01-01"
          }
        }
      },
      "PayrollPeriodDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The existing payroll period id.",
            "format": "int32"
          },
          "payroll_deadline": {
            "type": "string",
            "description": "The date by which workers' pay must be determined.",
            "format": "date",
            "example": "2000-01-01"
          },
          "pay_date": {
            "type": "string",
            "description": "The date individuals will receive payment.",
            "format": "date",
            "example": "2000-01-01"
          }
        }
      },
      "EmployeeUpdateRequest": {
        "required": [
          "first_name",
          "last_name"
        ],
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "John"
          },
          "last_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "Larson"
          },
          "phone_number": {
            "type": "string",
            "example": "+11235550123"
          },
          "email_address": {
            "type": "string",
            "example": "[email protected]"
          },
          "type": {
            "type": "string",
            "enum": [
              "HOURLY",
              "SALARY"
            ]
          },
          "pay_rate": {
            "minimum": 0,
            "type": "integer",
            "description": "Rate of pay, in cents, used in conjunction with type. The following should be defined as follows:\n  If type = salary, then should be the annual salary of the employee\n  If type = hourly, then should be the hourly rate the employee earns",
            "format": "int32"
          },
          "business_name": {
            "type": "string",
            "example": "Dunder Mifflin Paper Company"
          },
          "group_name": {
            "type": "string",
            "example": "GOLD"
          },
          "ein": {
            "type": "string",
            "example": "XXXXXXXXX"
          },
          "password": {
            "type": "string"
          }
        }
      },
      "EmployeeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "first_name": {
            "type": "string",
            "description": "First name of employee"
          },
          "last_name": {
            "type": "string",
            "description": "Last name of employee"
          },
          "phone_number": {
            "type": "string",
            "description": "Phone number of employee"
          },
          "email_address": {
            "type": "string",
            "description": "Email address of employee"
          },
          "type": {
            "type": "string",
            "enum": [
              "HOURLY",
              "SALARY"
            ]
          },
          "pay_rate": {
            "type": "integer",
            "description": "Rate of pay, in cents, used in conjunction with type. The following should be defined as follows:\n  If type = salary, then is the annual salary of the employee\n  If type = hourly, then is the hourly rate the employee earns",
            "format": "int32"
          },
          "business_name": {
            "type": "string",
            "example": "Branch"
          },
          "group_name": {
            "type": "string",
            "example": "GOLD"
          },
          "ein": {
            "type": "string",
            "description": "9 digit employer identification number",
            "example": "XXXXXXXXX"
          }
        }
      },
      "ShiftUpdateRequest": {
        "type": "object",
        "properties": {
          "punch_in": {
            "type": "string",
            "description": "Time the shift started",
            "format": "date-time"
          },
          "punch_out": {
            "type": "string",
            "description": "Time the shift ended. This does not need to be provided if 'hours' is provided",
            "format": "date-time"
          },
          "hours": {
            "type": "number",
            "description": "Number of hours worked in the shift. This does not need to be provided if 'punch_out' is provided",
            "format": "double"
          },
          "rate": {
            "type": "integer",
            "description": "Amount of money, in cents, the employee made per hour/day depending on 'shift_type'",
            "format": "int32"
          },
          "shift_type": {
            "type": "string",
            "description": "Shift type, 'HOURLY' or 'DAILY'",
            "enum": [
              "Daily",
              "Hourly"
            ]
          }
        }
      },
      "ShiftDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the timekeeping record."
          },
          "employee_id": {
            "type": "string",
            "description": "The worker's ID"
          },
          "punch_in_time": {
            "type": "string",
            "description": "ISO-8601 date-time with offset from UTC for shift start time.",
            "format": "date-time"
          },
          "punch_out_time": {
            "type": "string",
            "description": "ISO-8601 date-time with offset from UTC for shift end time.",
            "format": "date-time"
          },
          "rate": {
            "type": "integer",
            "description": "The rate, in cents, that the employee gets paid for this shift.",
            "format": "int32"
          },
          "shift_type": {
            "type": "string",
            "description": "Shift type, hourly or daily.",
            "enum": [
              "Daily",
              "Hourly"
            ]
          },
          "pay_period_end": {
            "type": "string",
            "description": "ISO-8601 date for the end of the pay period.",
            "format": "date"
          },
          "time_modified": {
            "type": "string",
            "description": "ISO-8601 date-time with offset from UTC for when the timekeeping record was last updated",
            "format": "date-time"
          }
        }
      },
      "EmployeePeriodEarningRequest": {
        "type": "object",
        "properties": {
          "amount": {
            "minimum": 1,
            "type": "integer",
            "description": "earnings in cents. must be greater than 0",
            "format": "int32"
          },
          "date": {
            "pattern": "yyyy-MM-dd",
            "type": "string",
            "format": "date",
            "example": "2021-06-24"
          }
        }
      },
      "EmployeePeriodEarningSummaryDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "description": "Total current period earnings for an employee\n    Unit: Cents\n",
            "format": "int32"
          }
        }
      },
      "V2DisbursementCreateRequest": {
        "required": [
          "amount",
          "description",
          "external_id",
          "type"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "minimum": 0,
            "type": "integer",
            "description": "Amount, in cents, to be disbursed to the worker.",
            "format": "int32",
            "example": 500
          },
          "external_id": {
            "maxLength": 64,
            "minLength": 0,
            "type": "string",
            "description": "Allows the custom specification of a unique ID that correlates back to your own records.",
            "example": "123456"
          },
          "type": {
            "type": "string",
            "description": "TIP: Disbursement for a tip earned by worker<br />\nTRIP: Disbursement for a trip made by worker<br />\nMILEAGE: Disbursement for miles driven by worker<br />\nPAYCHECK: Disbursement for income earned by worker<br />\nMISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br />\nDEVICE: Disbursement for a worker’s device<br />\nDELIVERY: Disbursement for a delivery made by worker<br />\nDEPOSIT: Disbursement for a generic purposes<br />\nREWARD: Disbursement for a reward earned<br />\nBONUS: Disbursement representing a non-usual payment<br />\n",
            "example": "MILEAGE",
            "enum": [
              "TIP",
              "TRIP",
              "MILEAGE",
              "PAYCHECK",
              "MISCELLANEOUS",
              "DEVICE",
              "DELIVERY",
              "DEPOSIT",
              "BONUS",
              "REWARD",
              "UNKNOWN"
            ]
          },
          "worker_group": {
            "maxLength": 150,
            "minLength": 0,
            "type": "string",
            "description": "A grouping for the worker. This could be anything that is used by your organization in order to group workers: store id, worker tier, region code, etc.",
            "example": "Store #1"
          },
          "display_header_label": {
            "maxLength": 32,
            "minLength": 0,
            "type": "string",
            "description": "A description of the disbursement. This will be displayed to the worker",
            "example": "Tip for delivery"
          },
          "display_sub_label": {
            "maxLength": 32,
            "minLength": 0,
            "type": "string",
            "description": "A description of the disbursement. This will be displayed to the worker in the application",
            "example": "Tip for delivery"
          },
          "description": {
            "maxLength": 256,
            "minLength": 0,
            "type": "string",
            "example": "Disbursement for miles driven."
          },
          "retry": {
            "type": "boolean",
            "description": "Default false. If status goes into FAILED, allows disbursement to be reattempted."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          },
          "time_scheduled": {
            "type": "string",
            "description": "Date and time at which the specified amount will be disbursed to the worker.",
            "format": "date-time"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "V2DisbursementDto": {
        "type": "object",
        "properties": {
          "worker_id": {
            "type": "string",
            "description": "The worker's ID",
            "example": "123"
          },
          "amount": {
            "type": "integer",
            "description": "Amount, in cents, to be disbursed to the worker",
            "format": "int64",
            "example": 500
          },
          "external_id": {
            "type": "string",
            "description": "Allows the custom specification of a unique ID that correlates back to your own records. Max 64 characters",
            "example": "123456"
          },
          "type": {
            "type": "string",
            "description": "TIP: Disbursement for a tip earned by worker<br />\nTRIP: Disbursement for a trip made by worker<br />\nMILEAGE: Disbursement for miles driven by worker<br />\nPAYCHECK: Disbursement for income earned by worker<br />\nMISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br />\nDEVICE: Disbursement for a worker’s device<br />\nDELIVERY: Disbursement for a delivery made by worker<br />\nDEPOSIT: Disbursement for a generic purposes<br />\nREWARD: Disbursement for a reward earned<br />\nBONUS: Disbursement representing a non-usual payment<br />\n",
            "example": "TIP",
            "enum": [
              "TIP",
              "TRIP",
              "MILEAGE",
              "PAYCHECK",
              "MISCELLANEOUS",
              "DEVICE",
              "DELIVERY",
              "DEPOSIT",
              "BONUS",
              "REWARD",
              "UNKNOWN"
            ]
          },
          "worker_group": {
            "type": "string",
            "description": "A grouping for the worker. This could be anything that is used by your organization in order to group workers: store id, worker tier, region code, etc",
            "example": "Store #1"
          },
          "description": {
            "type": "string",
            "example": "Disbursement for miles driven"
          },
          "display_header_label": {
            "type": "string",
            "description": "A description of the disbursement. This will be displayed to the worker in the application",
            "example": "Tip for delivery"
          },
          "display_sub_label": {
            "type": "string",
            "description": "A description of the disbursement. This will be displayed to the worker in the application",
            "example": "Tip for delivery"
          },
          "status": {
            "type": "string",
            "description": "PENDING: The disbursement was created, but processing is not yet completed<br />\nSCHEDULED: The disbursement was created and will be processed at the specified time<br />\nCOMPLETED: Branch successfully disbursed funds<br />\nFAILED: Funds were unable to be disbursed<br />\nCANCELED: Funds were not disbursed and no further action will be attempted for the disbursement<br />\nSKIPPED: The disbursement was not attempted. See reason_code for more information<br />\n",
            "example": "COMPLETED",
            "enum": [
              "PENDING",
              "SCHEDULED",
              "COMPLETED",
              "FAILED",
              "CANCELED",
              "SKIPPED",
              "UNKNOWN"
            ]
          },
          "reason_code": {
            "type": "string",
            "description": "PAYOUT_PENDING: The disbursement is still in progress<br />\nAMOUNT_ZERO: The payout was recorded with an amount of $0.00<br />\nRETRY_PERIOD_ELAPSED: The disbursement already existed and is too old to be attempted again<br />\nLIKELY_MATCH_FOUND: The disbursement was not attempted because another disbursement was identified as a duplicate<br />\nWORKER_NOT_FOUND: The worker was not found on the active roster<br />\nPAYMENT_PROFILE_NOT_FOUND: No destination account could be found for the provided worker<br />\nPAYMENT_PROFILE_SUSPENDED: The destination account is not payable due to suspension<br />\nPAYMENT_PROFILE_NOT_ACTIVE: The destination account is not payable because it is closed or otherwise inactive<br />\nPAYMENT_PROFILE_FRAUDULENT: The destination account is not payable because it has been closed for fraud<br />\nTRANSFER_FAILED: An error occurred while issuing the funds to the worker<br />\nAMOUNT_EXCEEDS_ORG_SINGLE_DISBURSEMENT_LIMIT: The amount exceeds the organization's limit for a single disbursement<br />\nAMOUNT_EXCEEDS_ORG_DAILY_DISBURSEMENT_LIMIT: The amount would exceed the organization's daily limit for disbursements<br />\nAMOUNT_EXCEEDS_WORKER_DAILY_DISBURSEMENT_LIMIT: The amount would exceed the worker's daily limit for disbursements<br />\nAMOUNT_DOES_NOT_COVER_USER_FEES: The fee to be charged to the worker exceeds or is equal to the disbursement amount<br />\nUNEXPECTED_ERROR: Something unexpected occurred. Contact Branch support if this persists<br />\n",
            "example": "WORKER_NOT_FOUND",
            "enum": [
              "PAYOUT_PENDING",
              "AMOUNT_ZERO",
              "RETRY_PERIOD_ELAPSED",
              "LIKELY_MATCH_FOUND",
              "WORKER_NOT_FOUND",
              "PAYMENT_PROFILE_NOT_FOUND",
              "PAYMENT_PROFILE_SUSPENDED",
              "PAYMENT_PROFILE_NOT_ACTIVE",
              "PAYMENT_PROFILE_FRAUDULENT",
              "TRANSFER_FAILED",
              "AMOUNT_EXCEEDS_ORG_SINGLE_DISBURSEMENT_LIMIT",
              "AMOUNT_EXCEEDS_ORG_DAILY_DISBURSEMENT_LIMIT",
              "AMOUNT_EXCEEDS_WORKER_DAILY_DISBURSEMENT_LIMIT",
              "AMOUNT_DOES_NOT_COVER_USER_FEES",
              "UNEXPECTED_ERROR",
              "UNKNOWN"
            ]
          },
          "payout": {
            "$ref": "#/components/schemas/V2DisbursementPayoutDto"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          },
          "time_created": {
            "type": "string",
            "format": "date-time"
          },
          "time_modified": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "V2DisbursementPayoutDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the payout. Depending on the payout type, the format may differ."
          },
          "payment_type": {
            "type": "string",
            "description": "Describes which payment profile type was the destination for the disbursement's funds",
            "enum": [
              "WALLET",
              "CARD",
              "NONE"
            ]
          },
          "amount": {
            "type": "integer",
            "description": "How much of the disbursement was sent to the worker after any fees.",
            "format": "int64"
          },
          "fee": {
            "type": "integer",
            "description": "The fee charged by Branch for the disbursement.",
            "format": "int64"
          },
          "time_completed": {
            "type": "string",
            "description": "When the money arrived in the worker's account. This is not necessarily when the disbursement was created.",
            "format": "date-time"
          }
        },
        "description": "Payout details. Will be null if the disbursement has not been paid out"
      },
      "Address": {
        "required": [
          "address_1",
          "city",
          "postal_code",
          "state"
        ],
        "type": "object",
        "properties": {
          "address_1": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "state": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string"
          },
          "postal_code": {
            "pattern": "^\\d{5}(-\\d{4})?$",
            "type": "string"
          }
        }
      },
      "EmployeeDirectFormRequest": {
        "required": [
          "owner",
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "owner": {
            "$ref": "#/components/schemas/Owner"
          }
        }
      },
      "Owner": {
        "required": [
          "address",
          "first_name",
          "last_name"
        ],
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "EmployeeTabapayExternalCardDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "network": {
            "type": "string"
          },
          "last_four": {
            "type": "string"
          },
          "time_created": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "DeductionCreationRequest": {
        "required": [
          "employee_id"
        ],
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string"
          },
          "amount": {
            "minimum": 0,
            "type": "integer",
            "description": "Amount, in cents, that was successfully deducted for the employee",
            "format": "int32"
          }
        }
      },
      "PayrollCalendarCreationRequest": {
        "type": "object",
        "properties": {
          "payroll_periods": {
            "type": "array",
            "description": "The list of payroll periods creation requests for the calendar.",
            "items": {
              "$ref": "#/components/schemas/PayrollPeriodCreationRequest"
            }
          }
        }
      },
      "PayrollPeriodCreationRequest": {
        "type": "object",
        "properties": {
          "payroll_deadline": {
            "type": "string",
            "description": "The date by which workers' pay must be determined.",
            "format": "date",
            "example": "2000-01-01"
          },
          "pay_date": {
            "type": "string",
            "description": "The date individuals will receive payment.",
            "format": "date",
            "example": "2000-01-01"
          }
        },
        "description": "The list of payroll periods creation requests for the calendar."
      },
      "PayrollCalendarDto": {
        "type": "object",
        "properties": {
          "payroll_periods": {
            "type": "array",
            "description": "The list of payroll periods in the calendar.",
            "items": {
              "$ref": "#/components/schemas/PayrollPeriodDto"
            }
          }
        }
      },
      "EmployeeCreationRequest": {
        "required": [
          "first_name",
          "last_name"
        ],
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "John"
          },
          "last_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "Larson"
          },
          "phone_number": {
            "type": "string",
            "example": "+11235550123"
          },
          "email_address": {
            "type": "string",
            "example": "[email protected]"
          },
          "type": {
            "type": "string",
            "enum": [
              "HOURLY",
              "SALARY"
            ]
          },
          "pay_rate": {
            "minimum": 0,
            "type": "integer",
            "description": "Rate of pay, in cents, used in conjunction with type. The following should be defined as follows:\n  If type = salary, then should be the annual salary of the employee\n  If type = hourly, then should be the hourly rate the employee earns",
            "format": "int32"
          },
          "business_name": {
            "type": "string",
            "example": "Dunder Mifflin Paper Company"
          },
          "group_name": {
            "type": "string",
            "example": "GOLD"
          },
          "ein": {
            "type": "string",
            "example": "XXXXXXXXX"
          },
          "password": {
            "type": "string"
          }
        }
      },
      "ApiError": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "format": "int32",
            "example": 123
          },
          "error": {
            "type": "string",
            "example": "Bad Request"
          },
          "message": {
            "type": "string",
            "example": "An error occurred while processing your request"
          },
          "path": {
            "type": "string",
            "example": "/v1/organizations/123/employees/456/wallets"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "OrganizationWalletCreatedSchema": {
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string"
          },
          "account_number": {
            "type": "string",
            "example": "000000000000"
          },
          "routing_number": {
            "type": "string",
            "example": "123456789"
          },
          "has_activated_card": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "description": "CREATED: A Wallet has been created<br />FAILED: A failure occurred during wallet creation<br />CLOSED: A Wallet has been closed<br />PENDING: We are attempting to create the wallet. It is not yet available for disbursing funds<br />UNCLAIMED: A wallet has been created and is able to receive funds through the API, but the employee has not signed up with Branch yet<br />ACTIVE: A wallet has been created for an employee and they are in control of it<br />",
            "example": "ACTIVE",
            "enum": [
              "PENDING",
              "REVIEW",
              "CREATED",
              "UNCLAIMED",
              "ACTIVE",
              "FAILED",
              "SUSPENDED",
              "CLOSED"
            ]
          },
          "reason_code": {
            "type": "string",
            "description": "ADDITIONAL_DOCS_REQ: Branch was not able to confirm identity with the information provided the user will have to provide additional documentation, like drivers license, in order get a wallet on Branch<br />FRAUD_CHECK_REQ: Branch is performing checks to ensure that the user is not linked in any way to fraudulent activity. Once finished, this user's wallet will be activated. Until then, the wallet that was created for the user will not be able to be funded in any way<br />CONFIRMED_FRAUD: Branch determined this user to behave in fraudulent activities and will not be allowed to have a wallet on the platform. The wallet created for them will remain closed.<br />DENIED: For one reason or another, the user has been denied access to the platform<br />ERROR: A system error occurred, please try again",
            "example": "ADDITIONAL_DOCS_REQ",
            "enum": [
              "FRAUD_CHECK_REQ",
              "ADDITIONAL_DOCS_REQ",
              "CONFIRMED_FRAUD",
              "DENIED",
              "KYC_SSN_INVALID",
              "KYC_PII_SSN_MISMATCH",
              "KYC_DECEASED",
              "KYC_PO_BOX_NOT_ALLOWED",
              "KYC_ERROR",
              "ACCOUNT_SUSPENDED",
              "ACCOUNT_WITH_EMAIL_EXISTS",
              "EMPLOYEE_NOT_FOUND",
              "EMPLOYEE_UNDER_AGE",
              "EMPLOYEE_ALREADY_LINKED",
              "ERROR"
            ]
          },
          "reason": {
            "type": "string",
            "description": "A short message explaining the reason_code field. This may or may not provide additional context into the reason_code."
          },
          "onboarding_link": {
            "type": "string",
            "description": "If the wallet was initiated by the organization, will be populated with a link with which the employee can utilized to streamline onboarding."
          },
          "kyc_additional_documentation_link": {
            "type": "string"
          },
          "ein": {
            "type": "string",
            "description": "9 digit Employer Identification Number. Format: XXXXXXXXX"
          },
          "business_name": {
            "type": "string",
            "description": "Business name for the user."
          },
          "time_last_initialization_attempted": {
            "type": "string",
            "format": "date-time"
          },
          "time_created": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "OrganizationWalletCreationRequest": {
        "required": [
          "address",
          "date_of_birth",
          "email_address",
          "first_name",
          "last_name",
          "phone_number",
          "ssn"
        ],
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "John"
          },
          "middle_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "William"
          },
          "last_name": {
            "type": "string",
            "description": "Numbers not allowed",
            "example": "Larson"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "date_of_birth": {
            "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}",
            "type": "string",
            "description": "Birthdate provided must indicate greater than 14 years of age. Some organizations may not allow accounts if the age is not 18 or greater.",
            "example": "2000-01-01"
          },
          "ssn": {
            "pattern": "[0-9]{9}",
            "type": "string",
            "example": "123456789"
          },
          "phone_number": {
            "type": "string",
            "example": "+11235550123"
          },
          "email_address": {
            "type": "string",
            "example": "[email protected]"
          },
          "type": {
            "type": "string",
            "example": "HOURLY",
            "enum": [
              "HOURLY",
              "SALARY"
            ]
          },
          "pay_rate": {
            "minimum": 0,
            "type": "integer",
            "description": "Rate of pay, in cents, used in conjunction with type. The following should be defined as follows:\n  If type = salary, then should be the annual salary of the employee\n  If type = hourly, then should be the hourly rate the employee earns",
            "format": "int32",
            "example": 1500
          },
          "group_name": {
            "type": "string",
            "example": "GOLD"
          },
          "create_employee": {
            "type": "boolean",
            "description": "If true and the employee does not already exist, will create the employee with the given information.",
            "default": false
          },
          "order_card": {
            "type": "boolean",
            "description": "If true, a physical card will be shipped to the user when the account is created.",
            "default": false
          },
          "card_program": {
            "type": "string",
            "description": "Specifies which card should be ordered and delivered to the user. Available options for an organization can be found by querying the card-controller -> getCardPrograms endpoint.Default is organization's default card program - generally BRANCH_W2",
            "example": "BRANCH_W2"
          },
          "ein": {
            "type": "string",
            "description": "9 digit employer identification number",
            "example": "XXXXXXXXX"
          },
          "business_name": {
            "type": "string",
            "example": "Dunder Mifflin Paper Company"
          }
        }
      },
      "ShiftCreationRequest": {
        "required": [
          "shift_type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "If blank, defaults to UUID"
          },
          "punch_in": {
            "type": "string",
            "description": "Time the shift started",
            "format": "date-time"
          },
          "punch_out": {
            "type": "string",
            "description": "Time the shift ended. This does not need to be provided if 'hours' is provided",
            "format": "date-time"
          },
          "hours": {
            "minimum": 0,
            "exclusiveMinimum": false,
            "type": "number",
            "description": "Number of hours worked in the shift. This value cannot be negative. This does not need to be provided if 'punch_out' is provided",
            "format": "double"
          },
          "rate": {
            "type": "integer",
            "description": "Amount of money, in cents, the employee made per hour/day depending on 'shift_type'",
            "format": "int32"
          },
          "shift_type": {
            "type": "string",
            "description": "Shift type, 'HOURLY' or 'DAILY'",
            "enum": [
              "Daily",
              "Hourly"
            ]
          }
        }
      },
      "DisbursementCreationRequest": {
        "required": [
          "amount",
          "description",
          "external_id",
          "type"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "minimum": 0,
            "type": "integer",
            "description": "Amount, in cents, to be disbursed to the employee.",
            "format": "int32",
            "example": 500
          },
          "external_id": {
            "maxLength": 64,
            "minLength": 0,
            "type": "string",
            "description": "Allows the custom specification of a unique ID that correlates back to your own records.",
            "example": "123456"
          },
          "type": {
            "type": "string",
            "description": "TIPS: Disbursement for tips earned by worker<br />\nTRIP: Disbursement for trip made by worker<br />\nMILEAGE: Disbursement for miles driven by worker<br />\nPAYCHECK: Disbursement for income earned by worker<br />\nMISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br />\nDEVICE: Disbursement for a worker’s device<br />\nDELIVERY: Disbursement for delivery made by worker<br />\nDEPOSIT: Disbursement for generic purposes<br />\nREWARD: Disbursement for a reward earned<br />\nBONUS: Disbursement representing a non-usual payment<br />\n",
            "example": "MILEAGE",
            "enum": [
              "TIPS",
              "TRIP",
              "MILEAGE",
              "PAYCHECK",
              "MISCELLANEOUS",
              "DEVICE",
              "DELIVERY",
              "DEPOSIT",
              "BONUS",
              "REWARD",
              "UNKNOWN"
            ]
          },
          "employee_group": {
            "maxLength": 150,
            "minLength": 0,
            "type": "string",
            "description": "A grouping for the employee. This could be anything that is used by your organization in order to group employees: store id, employee tier, region code, etc.",
            "example": "Store #1"
          },
          "display_sub_label": {
            "maxLength": 150,
            "minLength": 0,
            "type": "string",
            "description": "A description of the disbursement. This will be displayed to the worker in the application",
            "example": "Tip for delivery"
          },
          "description": {
            "maxLength": 256,
            "minLength": 0,
            "type": "string",
            "example": "Disbursement for miles driven."
          },
          "retry": {
            "type": "boolean",
            "description": "Default false. If status goes into FAILED, allows disbursement to be reattempted."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          },
          "time_scheduled": {
            "type": "string",
            "description": "Date and time at which the specified amount will be disbursed to the employee.",
            "format": "date-time"
          }
        }
      },
      "DisbursementDto": {
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string",
            "description": "The Employee's ID",
            "example": "123"
          },
          "amount": {
            "type": "integer",
            "description": "Amount, in cents, to be disbursed to the employee",
            "format": "int64",
            "example": 500
          },
          "external_id": {
            "type": "string",
            "description": "Allows the custom specification of a unique ID that correlates back to your own records. Max 64 characters",
            "example": "123456"
          },
          "type": {
            "type": "string",
            "description": "TIPS: Disbursement for tips earned by worker<br />\nTRIP: Disbursement for trip made by worker<br />\nMILEAGE: Disbursement for miles driven by worker<br />\nPAYCHECK: Disbursement for income earned by worker<br />\nMISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br />\nDEVICE: Disbursement for a worker’s device<br />\nDELIVERY: Disbursement for delivery made by worker<br />\nDEPOSIT: Disbursement for generic purposes<br />\nREWARD: Disbursement for a reward earned<br />\nBONUS: Disbursement representing a non-usual payment<br />\n",
            "example": "MILEAGE",
            "enum": [
              "TIPS",
              "TRIP",
              "MILEAGE",
              "PAYCHECK",
              "MISCELLANEOUS",
              "DEVICE",
              "DELIVERY",
              "DEPOSIT",
              "BONUS",
              "REWARD",
              "UNKNOWN"
            ]
          },
          "employee_group": {
            "type": "string",
            "description": "A grouping for the employee. This could be anything that is used by your organization in order to group employees: store id, employee tier, region code, etc",
            "example": "Store #1"
          },
          "description": {
            "type": "string",
            "example": "Disbursement for miles driven"
          },
          "display_sub_label": {
            "type": "string",
            "description": "A description of the disbursement. This will be displayed to the worker in the application",
            "example": "Tip for delivery"
          },
          "status": {
            "type": "string",
            "description": "CREATED: The disbursement was created and Branch is attempting to disburse funds<br />ATTEMPTING_PAYBACK: Branch successfully disbursed funds and is attempting pay back for the disbursement<br />PAYBACK_FAILED: Branch successfully disbursed funds but was unable to complete pay back for the disbursement<br />COMPLETED: Branch successfully disbursed funds<br />FAILED: Funds were unable to be disbursed<br />CANCELLED: Funds were not disbursed and no further action will be attempted for the disbursement<br />",
            "example": "CREATED",
            "enum": [
              "CREATED",
              "ATTEMPTING_PAYBACK",
              "PAYBACK_FAILED",
              "COMPLETED",
              "FAILED",
              "SKIPPED",
              "CANCELLED",
              "SCHEDULED",
              "UNKNOWN"
            ]
          },
          "status_reason": {
            "type": "string"
          },
          "reason_code": {
            "type": "string",
            "description": "WORKER_NOT_MATCHED: The worker is not linked to a Branch account.<br />WORKER_NOT_FOUND: The worker is not found on the active roster.<br />AMOUNT_ZERO: The payout was recorded with an amount of $0.00.<br />WALLET_SUSPENDED: The worker's wallet is suspended.<br />WALLET_NOT_FOUND: The worker's wallet was not found.<br />WALLET_NOT_ACTIVE: The worker's wallet is inactive.<br />AMOUNT_TOO_LARGE: The requested amount exceeds the organization's limit.<br />INVOICING_FAILED: The payout succeeded, but something went wrong during invoicing. Safe to retry.<br />RETRY_PERIOD_ELAPSED: The disbursement is too old to be retried.<br />LIKELY_MATCH_FOUND: The disbursement was not attempted because another disbursement was identified as a duplicate.<br />TRANSFER_FAILED: An error occurred while issuing the funds to the worker.<br />UNEXPECTED_ERROR: There was an unexpected error. Contact Branch Support.<br />PENDING: Disbursement is Pending.<br />",
            "example": "WORKER_NOT_FOUND",
            "enum": [
              "UNEXPECTED_ERROR",
              "WORKER_NOT_MATCHED",
              "WORKER_NOT_FOUND",
              "TRANSFER_FAILED",
              "WALLET_SUSPENDED",
              "WALLET_NOT_FOUND",
              "WALLET_NOT_ACTIVE",
              "AMOUNT_ZERO",
              "AMOUNT_TOO_LARGE",
              "AMOUNT_DOES_NOT_COVER_FEES",
              "DAILY_DISBURSEMENT_LIMIT_MET",
              "WORKERS_DAILY_LIMIT_MET",
              "INVOICING_FAILED",
              "RETRY_PERIOD_ELAPSED",
              "LIKELY_MATCH_FOUND",
              "PENDING"
            ]
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            }
          },
          "time_created": {
            "type": "string",
            "format": "date-time"
          },
          "time_modified": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RemittanceUpdateRequest": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "pattern": "COMPLETED",
            "type": "string"
          }
        }
      },
      "ApiCursorPageV2DisbursementDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/V2DisbursementDto"
            }
          },
          "prev_cursor": {
            "type": "string"
          },
          "next_cursor": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "V2WalletPayoutDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the payout."
          },
          "amount": {
            "type": "integer",
            "description": "How much of the disbursement was sent to the worker after any fees.",
            "format": "int64"
          },
          "fee": {
            "type": "integer",
            "description": "The fee charged by Branch for the disbursement.",
            "format": "int64"
          },
          "account_number": {
            "type": "string",
            "description": "The account number of the Branch Wallet."
          },
          "routing_number": {
            "type": "string",
            "description": "The routing number of the Branch Wallet."
          },
          "time_completed": {
            "type": "string",
            "description": "When the money arrived in the worker's account. This is not necessarily when the disbursement was created.",
            "format": "date-time"
          }
        }
      },
      "V2CardPayoutDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the payout."
          },
          "amount": {
            "type": "integer",
            "description": "How much of the disbursement was sent to the worker after any fees.",
            "format": "int64"
          },
          "fee": {
            "type": "integer",
            "description": "The fee charged by Branch for the disbursement.",
            "format": "int64"
          },
          "last_four": {
            "type": "string",
            "description": "The last four digits of the card number."
          },
          "network": {
            "type": "string",
            "description": "The network of the card.",
            "example": "MASTERCARD"
          },
          "time_completed": {
            "type": "string",
            "description": "When the money arrived in the worker's account. This is not necessarily when the disbursement was created.",
            "format": "date-time"
          }
        }
      },
      "PageSlimEmployeeTabapayExternalCardDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmployeeTabapayExternalCardDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PageRequest": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "offset": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "OrganizationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "org_key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "PageOrganizationDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrganizationDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "OrganizationWalletDto": {
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string"
          },
          "account_number": {
            "type": "string",
            "example": "000000000000"
          },
          "routing_number": {
            "type": "string",
            "example": "123456789"
          },
          "has_activated_card": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "description": "CREATED: A Wallet has been created<br />FAILED: A failure occurred during wallet creation<br />CLOSED: A Wallet has been closed<br />NOT_CREATED: A Wallet has not yet been created<br />PENDING: We are attempting to create the wallet. It is not yet available for disbursing funds<br />UNCLAIMED: A wallet has been created and is able to receive funds through the API, but the employee has not signed up with Branch yet<br />ACTIVE: A wallet has been created for an employee and they are in control of it<br />",
            "example": "ACTIVE",
            "enum": [
              "NOT_CREATED",
              "PENDING",
              "REVIEW",
              "CREATED",
              "UNCLAIMED",
              "ACTIVE",
              "FAILED",
              "SUSPENDED",
              "CLOSED"
            ]
          },
          "reason_code": {
            "type": "string",
            "description": "ADDITIONAL_DOCS_REQ: Branch was not able to confirm identity with the information provided the user will have to provide additional documentation, like drivers license, in order get a wallet on Branch<br />FRAUD_CHECK_REQ: Branch is performing checks to ensure that the user is not linked in any way to fraudulent activity. Once finished, this user's wallet will be activated. Until then, the wallet that was created for the user will not be able to be funded in any way<br />CONFIRMED_FRAUD: Branch determined this user to behave in fraudulent activities and will not be allowed to have a wallet on the platform. The wallet created for them will remain closed.<br />DENIED: For one reason or another, the user has been denied access to the platform<br />ERROR: A system error occurred, please try again",
            "example": "ADDITIONAL_DOCS_REQ",
            "enum": [
              "FRAUD_CHECK_REQ",
              "ADDITIONAL_DOCS_REQ",
              "CONFIRMED_FRAUD",
              "DENIED",
              "KYC_SSN_INVALID",
              "KYC_PII_SSN_MISMATCH",
              "KYC_DECEASED",
              "KYC_PO_BOX_NOT_ALLOWED",
              "KYC_ERROR",
              "ACCOUNT_SUSPENDED",
              "ACCOUNT_WITH_EMAIL_EXISTS",
              "EMPLOYEE_NOT_FOUND",
              "EMPLOYEE_UNDER_AGE",
              "EMPLOYEE_ALREADY_LINKED",
              "ERROR"
            ]
          },
          "reason": {
            "type": "string",
            "description": "A short message explaining the reason_code field. This may or may not provide additional context into the reason_code."
          },
          "onboarding_link": {
            "type": "string",
            "description": "If the wallet was initiated by the organization, will be populated with a link with which the employee can utilized to streamline onboarding."
          },
          "kyc_additional_documentation_link": {
            "type": "string"
          },
          "ein": {
            "type": "string",
            "description": "9 digit Employer Identification Number. Format: XXXXXXXXX"
          },
          "business_name": {
            "type": "string",
            "description": "Business name for the user."
          },
          "time_last_initialization_attempted": {
            "type": "string",
            "format": "date-time"
          },
          "time_created": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PageOrganizationWalletDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrganizationWalletDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "OrganizationWalletStatusDto": {
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string"
          },
          "wallet_status": {
            "type": "string",
            "enum": [
              "NOT_CREATED",
              "PENDING",
              "REVIEW",
              "CREATED",
              "UNCLAIMED",
              "ACTIVE",
              "FAILED",
              "SUSPENDED",
              "CLOSED"
            ]
          }
        }
      },
      "PageOrganizationWalletStatusDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrganizationWalletStatusDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "PageRemittanceDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RemittanceDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "RemittanceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "pay_date": {
            "type": "string",
            "description": "ISO-8601 date for the pay date, provided by the organization, for the remittance and associated requested deductions",
            "format": "date"
          },
          "remittance_date": {
            "type": "string",
            "description": "ISO-8601 date-time with offset from UTC for when the remittance was created",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "description": "STARTED: Remittance is active; remittance has been created and has unsettled requested deductions\n\nPROCESSING: Remittance is actively processing reported deductions made; no further actions are necessary\n\nCOMPLETED: Remittance requested deductions are all settled and payment has been made; no further actions are necessary\n\nCANCELED: Remittance was created but is now invalid; no further actions are necessary\n\nAWAITING_PAYMENT: Remittance requested deductions are all settled and remittance has yet to be paid",
            "enum": [
              "STARTED",
              "PROCESSING",
              "COMPLETED",
              "CANCELED",
              "AWAITING_PAYMENT",
              "UNKNOWN"
            ]
          },
          "requested_amount": {
            "type": "integer",
            "description": "Total amount, in cents, that was requested for deductions for all employees",
            "format": "int32"
          }
        }
      },
      "PageRemittanceRequestedDeductionDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RemittanceRequestedDeductionDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "RemittanceRequestedDeductionDto": {
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string"
          },
          "amount": {
            "type": "integer",
            "description": "Amount, in cents, that should be deducted for the employee",
            "format": "int32"
          }
        }
      },
      "PageDisbursementDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DisbursementDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "PageEmployeeDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmployeeDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      },
      "CardProgram": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "EmployeeAdvanceDto": {
        "type": "object",
        "properties": {
          "employee_id": {
            "type": "string",
            "description": "The worker's ID"
          },
          "amount": {
            "type": "integer",
            "description": "The amount, in cents, of the advance that was taken",
            "format": "int32"
          },
          "date": {
            "type": "string",
            "description": "ISO-8601 date-time with offset from UTC for when the advance was taken",
            "format": "date-time"
          },
          "due_date": {
            "type": "string",
            "description": "ISO-8601 date for when the advance is due to be paid back",
            "format": "date"
          },
          "outstanding_amount": {
            "type": "integer",
            "description": "The amount, in cents, of the advance that has yet to be paid back",
            "format": "int32"
          },
          "status": {
            "type": "string",
            "description": "OUTSTANDING: Advance has not been paid back and there are no unsettled requested deductions on an active remittance\n\nDEDUCTION_REQUESTED: Advance has an unsettled requested deduction on an active remittance",
            "enum": [
              "OUTSTANDING",
              "DEDUCTION_REQUESTED"
            ]
          },
          "id": {
            "type": "string",
            "description": "The Advance ID"
          }
        }
      },
      "PageEmployeeAdvanceDto": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmployeeAdvanceDto"
            }
          },
          "page_number": {
            "type": "integer",
            "format": "int64"
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "total_pages": {
            "type": "integer",
            "format": "int64"
          },
          "total_number_of_elements": {
            "type": "integer",
            "format": "int64"
          },
          "has_next_page": {
            "type": "boolean"
          },
          "has_prev_page": {
            "type": "boolean"
          },
          "next_page": {
            "type": "string"
          },
          "prev_page": {
            "type": "string"
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Branch Direct",
      "tags": [
        "Wallet",
        "V2 Disbursements",
        "Wallet Payout Details",
        "Card Payout Details",
        "External Cards",
        "Payment Profile",
        "Cards"
      ]
    },
    {
      "name": "Wallets & Disbursements",
      "tags": [
        "Wallet",
        "Disbursements",
        "Cards"
      ]
    },
    {
      "name": "Earnings & Advances",
      "tags": [
        "Employees",
        "Payroll Periods",
        "Payroll Calendar",
        "Shifts",
        "Employee Earnings",
        "Remittance",
        "Advances"
      ]
    }
  ],
  "x-readme": {
    "explorer-enabled": true,
    "proxy-enabled": true,
    "samples-enabled": true
  }
}
openapi: 3.0.1
info:
  title: Branch API
  description: Branch API
  version: 2.0.5
servers:
  - url: https://api.branchapp.com
    description: Production URL
  - url: https://sandbox.branchapp.com
    description: Sandbox URL
paths:
  /v2/organizations/{orgId}/employees/{employeeId}/payment-profile:
    get:
      tags:
        - Payment Profile
      summary: Get Payment Profile
      description: >-
        Get the payment profile for an employee, which shows the payment types
        by which a worker can be paid according to their current configuration,
        and the active payment type.
      operationId: getEmployeePaymentProfile
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeePaymentProfileDto'
        '404':
          description: Returned if the requested employeeId was not found
          content:
            application/json:
              examples:
                Not Found:
                  description: Not Found
                  value:
                    timestamp: '2024-02-06T18:02:04.351+00:00'
                    status: 404
                    error: Not Found
                    message: No message available
                    path: >-
                      /v2/organizations/100019/employees/2444666666/payment-profile
    put:
      tags:
        - Payment Profile
      summary: Update Payment Profile
      description: Update a worker's payment profile to change the active payment type.
      operationId: updatePaymentProfileActiveType
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeePaymentProfileItem'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeePaymentProfileDto'
        '400':
          description: >-
            Returned if the request does not adhere to the API specification. Or
            if the worker does not have the requested profile type configured
          content:
            application/json:
              examples:
                Invalid Request:
                  description: Invalid Request
                  value:
                    timestamp: '2024-02-06T18:13:21.047+00:00'
                    status: 400
                    error: Bad Request
                    message: '[400]  valid payment card not found for employee'
                    path: /v2/organizations/100019/employees/123456/payment-profile
        '404':
          description: Returned if the requested employeeId was not found
          content:
            application/json:
              examples:
                Not Found:
                  description: Not Found
                  value:
                    timestamp: '2024-02-06T18:02:04.351+00:00'
                    status: 404
                    error: Not Found
                    message: No message available
                    path: >-
                      /v2/organizations/100019/employees/2444666666/payment-profile
  /v1/organizations/{orgId}/payroll-calendar/periods/{payrollPeriodId}:
    get:
      tags:
        - Payroll Periods
      summary: Get Payroll Period
      description: Get an existing payroll period.
      operationId: getPayrollPeriod
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: payrollPeriodId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PayrollPeriodDto'
    put:
      tags:
        - Payroll Periods
      summary: Update Payroll Period
      description: Update a payroll period pay date and deadline.
      operationId: updatePayrollPeriod
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: payrollPeriodId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayrollPeriodUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PayrollPeriodDto'
  /v1/organizations/{orgId}/employees/{employeeId}:
    get:
      tags:
        - Employees
      summary: Get Employee
      description: Get an Employee by ID.
      operationId: getEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EmployeeDto'
    put:
      tags:
        - Employees
      summary: Update Employee
      description: Update an employee by ID.
      operationId: updateEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EmployeeDto'
    post:
      tags:
        - Employees
      summary: Create Employee
      description: Create a new employee.
      operationId: createEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeCreationRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EmployeeDto'
    delete:
      tags:
        - Employees
      summary: Delete Employee
      description: Delete an employee by ID.
      operationId: deleteEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
  /v1/organizations/{orgId}/employees/{employeeId}/shifts/{shiftId}:
    get:
      tags:
        - Shifts
      summary: Get Shift
      description: >-
        Get a worker's completed shift. Requires shift_id to identify which
        shift to retrieve. If an existing shift cannot be found with the
        provided shift_id, call will return 404 - Not Found. Successful call
        will return the completed shift.
      operationId: getShift
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: shiftId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ShiftDto'
    put:
      tags:
        - Shifts
      summary: Update Shift
      description: >-
        Update a worker's completed shift. Requires shift_id to identify which
        shift to update. If an existing shift cannot be found with the provided
        shift_id, call will return 404 - Not Found. Requests made with missing
        required fields or invalid dates/times will return 400 - Bad Request.
        Successful call will return newly updated shift.
      operationId: updateShift
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: shiftId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShiftUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ShiftDto'
    delete:
      tags:
        - Shifts
      summary: Delete shift
      description: >-
        Delete an existing shift. Requires shift_id to identify which shift to
        delete. If an existing shift cannot be found with the provided shift_id,
        call will return 404 - Not Found. Successful call will return status 204
        - No Content.
      operationId: deleteShift
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: shiftId
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: No Content
  /v1/organizations/{orgId}/employees/{employeeId}/period-earnings:
    put:
      tags:
        - Employee Earnings
      summary: Update Employee Earning
      description: Update an employee's earning for a period.
      operationId: updateEmployeePeriodEarning
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeePeriodEarningRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EmployeePeriodEarningSummaryDto'
  /v2/organizations/{orgId}/workers/{workerId}/disbursements:
    get:
      tags:
        - V2 Disbursements
      summary: Search Disbursements
      description: Searches all disbursements sent to worker.
      operationId: getDisbursementsForWorker
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: workerId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - PENDING
              - SCHEDULED
              - COMPLETED
              - FAILED
              - CANCELED
              - SKIPPED
              - UNKNOWN
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - TIP
              - TRIP
              - MILEAGE
              - PAYCHECK
              - MISCELLANEOUS
              - DEVICE
              - DELIVERY
              - DEPOSIT
              - BONUS
              - REWARD
              - UNKNOWN
        - name: external_id
          in: query
          required: false
          schema:
            type: string
        - name: invoice_id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: worker_id
          in: query
          required: false
          schema:
            type: string
        - name: time_last_attempted_start
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: time_last_attempted_end
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: after
          in: query
          required: false
          schema:
            type: string
        - name: before
          in: query
          required: false
          schema:
            type: string
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: sort
          in: query
          description: 'Format: field_name,direction'
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ApiCursorPageV2DisbursementDto'
    post:
      tags:
        - V2 Disbursements
      summary: Create Disbursement
      description: >-
        Creates a disbursement for an worker. A disbursement is an initiation of
        payment to a worker.
      operationId: createDisbursement
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: workerId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V2DisbursementCreateRequest'
        required: true
      responses:
        '200':
          description: >-
            Returned if the disbursement already exists and an additional
            attempt to disburse funds was not made. This can occur if the
            disbursement was already complete or if the resulting status is in [
            CANCELED | SKIPPED ]
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2DisbursementDto'
        '201':
          description: >-
            Returned if an attempt to disburse funds was successful. This can
            occur if the disbursement is new or if it already exists and is
            retried successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2DisbursementDto'
        '202':
          description: >-
            Returned if an attempt to disburse funds was unsuccessful. This can
            occur if the resulting status is in [ FAILED | PENDING ]. Additional
            information can be found via reason_code.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2DisbursementDto'
        '400':
          description: >-
            Returned if the request does not adhere to the API specification.
            Can also be returned if the disbursement cannot be created due to
            improper invoicing setup.
          content:
            application/json:
              examples:
                Invalid Request:
                  description: Invalid Request
                  value:
                    timestamp: '2023-01-01T00:00:00.000+00:00'
                    status: 400
                    error: Bad Request
                    message: amount is required
                    path: /v2/organizations/123/employees/123/disbursements
                Missing Invoice Configuration:
                  description: Missing Invoice Configuration
                  value:
                    timestamp: '2023-01-01T00:00:00.000+00:00'
                    status: 400
                    error: Bad Request
                    message: Could not match disbursement to invoice configuration
                    path: /v2/organizations/123/employees/123/disbursements
        '429':
          description: >-
            Returned if the request is throttled. Throttling can occur based on
            requests/min or if you have reached your organization's daily
            disbursement limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: If persistent, contact your Branch representative.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v2/organizations/{orgId}/employees/{employeeId}/external-cards:
    get:
      tags:
        - External Cards
      summary: Get External Cards for Employee
      description: Get a list of external cards for an employee.
      operationId: getExternalCardsForOrganizationEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: network
          in: query
          required: false
          schema:
            type: string
          example: visa
        - name: last4
          in: query
          required: false
          schema:
            type: string
          example: 1234
        - name: time_created_start
          in: query
          required: false
          schema:
            type: string
            format: date-time
          example: '2023-01-01T00:00:00.000Z'
        - name: time_created_end
          in: query
          required: false
          schema:
            type: string
            format: date-time
          example: '2023-01-31T23:59:59.999Z'
        - name: sort
          in: query
          required: false
          schema:
            type: string
        - name: direction
          in: query
          required: false
          schema:
            type: string
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageSlimEmployeeTabapayExternalCardDto'
    post:
      tags:
        - External Cards
      summary: Add External Card for Employee
      description: Add an external card for an employee.
      operationId: addExternalCardForOrganizationEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeDirectFormRequest'
        required: true
      responses:
        '201':
          description: >-
            Returned if an attempt to add an external payment card was
            successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTabapayExternalCardDto'
        '400':
          description: >-
            Returned if the request does not adhere to the API specification.
            This will also return if the payment card details are invalid or not
            supported
          content:
            application/json:
              examples:
                Invalid Request:
                  description: Invalid Request
                  value:
                    timestamp: '2023-01-01T00:00:00.000+00:00'
                    status: 400
                    error: Bad Request
                    message: token is required
                    path: /v2/organizations/123/employees/123/disbursements
        '409':
          description: >
            Returned if the worker has an existing external payment card. 
            Direct worker,

            to delete their current card and try again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/organizations/{orgId}/remittances/{remittanceId}/deductions:
    post:
      tags:
        - Remittance
      summary: Report Remittance Deduction
      description: Post an amount that was deducted from a worker on the remittance.
      operationId: reportOrganizationRemittanceDeduction
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: remittanceId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeductionCreationRequest'
        required: true
      responses:
        '201':
          description: Created
  /v1/organizations/{orgId}/payroll-calendar:
    get:
      tags:
        - Payroll Calendar
      summary: Get Payroll Calendar
      description: Get the payroll calendar for an organization
      operationId: getPayrollCalendar
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PayrollCalendarDto'
    post:
      tags:
        - Payroll Calendar
      summary: Create Payroll Calendar
      description: Create a new payroll calendar, which defines payroll periods.
      operationId: createPayrollCalendar
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayrollCalendarCreationRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PayrollCalendarDto'
  /v1/organizations/{orgId}/employees/{employeeId}/wallets:
    post:
      tags:
        - Wallet
      summary: Create Wallet
      description: >-
        Creates a digital wallet for an employee.  Optionally allows a Branch
        card to be automatically ordered for the employee.
      operationId: createWalletForEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: X-Test-Mode
          in: header
          required: false
          schema:
            type: boolean
        - name: orgId
          in: path
          description: The Organization ID
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          description: The Employee ID
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationWalletCreationRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationWalletCreatedSchema'
        '400':
          description: >-
            Bad Request. If a field provided is invalid, an error response will
            be returned with a message describing why.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                timestamp: '2023-01-01T11:00:00.000+00:00'
                status: 400
                error: Bad Request
                message: Field 'example' was invalid
                path: /v1/organizations/123/employees/456/wallets
        '404':
          description: >-
            Not Found. Can occur for example if the create_employee field is set
            to false, and the employee ID provided does not match an existing
            worker.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                timestamp: '2023-01-01T11:00:00.000+00:00'
                status: 404
                error: Not Found
                message: Employee does not exist for org
                path: /v1/organizations/123/employees/456/wallets
        '409':
          description: >-
            Conflict. Can occur for example if the email address provided
            matches an account that already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                timestamp: '2023-01-01T11:00:00.000+00:00'
                status: 409
                error: Conflict
                message: >-
                  Could not create wallet account for user: An account with the
                  email '[email protected]' already exists
                path: /v1/organizations/123/employees/456/wallets
        '429':
          description: Rate limited. Max 2 wallet creation requests per second.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                timestamp: '2023-01-01T11:00:00.000+00:00'
                status: 429
                error: Too Many Requests
                message: You have exhausted your API Request Quota
                path: /v1/organizations/123/employees/456/wallets
  /v1/organizations/{orgId}/employees/{employeeId}/shifts:
    post:
      tags:
        - Shifts
      summary: Submit Shift
      description: >-
        Submit a person's completed shift. Shifts are used to track hours worked
        by an individual employee and calculate EWA. Shifts may be created with
        a shift_id unique within the organization. Failure to provide a shift_id
        will cause a UUID to be generated instead.If a duplicate shift_id is
        provided, call will return 409 - Conflict. Successful call will return
        the created shift and status 201.
      operationId: submitShift
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShiftCreationRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ShiftDto'
  /v1/organizations/{orgId}/employees/{employeeId}/disbursements:
    get:
      tags:
        - Disbursements
      summary: Get Employee Disbursements
      description: Get a list of disbursements for an employee.
      operationId: getDisbursementsForEmployee
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - CREATED
              - ATTEMPTING_PAYBACK
              - PAYBACK_FAILED
              - COMPLETED
              - FAILED
              - SKIPPED
              - CANCELLED
              - SCHEDULED
              - UNKNOWN
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - TIPS
              - TRIP
              - MILEAGE
              - PAYCHECK
              - MISCELLANEOUS
              - DEVICE
              - DELIVERY
              - DEPOSIT
              - BONUS
              - REWARD
              - UNKNOWN
        - name: external_id
          in: query
          required: false
          schema:
            type: string
        - name: invoice_id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: amount
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: employee_id
          in: query
          required: false
          schema:
            type: string
        - name: employee_group
          in: query
          required: false
          schema:
            type: string
        - name: time_created_start
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: time_created_end
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: page_direction
          in: query
          required: false
          schema:
            type: string
            enum:
              - PREV
              - NEXT
        - name: last_time_created
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: last_id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: sort
          in: query
          description: 'Format: field_name,direction'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageDisbursementDto'
    post:
      tags:
        - Disbursements
      summary: Create Disbursement
      description: >-
        Creates a disbursement for an employee. This initiates a payment to the
        employee.
      operationId: createDisbursement_1
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisbursementCreationRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/DisbursementDto'
  /v1/organizations/{orgId}/remittances/{remittanceId}:
    patch:
      tags:
        - Remittance
      summary: Complete Remittance Deduction
      description: Update an existing remittance to mark it as completed.
      operationId: updateOrganizationRemittance
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: remittanceId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemittanceUpdateRequest'
        required: true
      responses:
        '200':
          description: OK
  /v2/organizations/{orgId}/payouts/wallet/{transferId}:
    get:
      tags:
        - Wallet Payout Details
      summary: Get Wallet Payout
      description: Returns Wallet payout details for a disbursement
      operationId: getWalletPayoutDetails
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: transferId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/V2WalletPayoutDto'
  /v2/organizations/{orgId}/payouts/card/{transferId}:
    get:
      tags:
        - Card Payout Details
      summary: Get External Card Payout
      description: Returns external card payout details for a disbursement
      operationId: getExternalCardPayoutDetails
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: transferId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/V2CardPayoutDto'
  /v2/organizations/{orgId}/employees/{employeeId}/external-cards/{entityId}:
    get:
      tags:
        - External Cards
      summary: Get External Cards for Entity
      description: Get a list of external cards for an entity.
      operationId: getExternalCardByEntityId
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EmployeeTabapayExternalCardDto'
    delete:
      tags:
        - External Cards
      summary: Delete External Card for Entity
      description: Delete an external card for an entity.
      operationId: deleteExternalCardByEntityId
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: entityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: No Content
  /v2/organizations/{orgId}/disbursements:
    get:
      tags:
        - V2 Disbursements
      summary: Search Disbursements
      description: Searches all disbursements.
      operationId: searchDisbursements
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - PENDING
              - SCHEDULED
              - COMPLETED
              - FAILED
              - CANCELED
              - SKIPPED
              - UNKNOWN
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - TIP
              - TRIP
              - MILEAGE
              - PAYCHECK
              - MISCELLANEOUS
              - DEVICE
              - DELIVERY
              - DEPOSIT
              - BONUS
              - REWARD
              - UNKNOWN
        - name: external_id
          in: query
          required: false
          schema:
            type: string
        - name: invoice_id
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: worker_id
          in: query
          required: false
          schema:
            type: string
        - name: time_last_attempted_start
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: time_last_attempted_end
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: after
          in: query
          required: false
          schema:
            type: string
        - name: before
          in: query
          required: false
          schema:
            type: string
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: sort
          in: query
          description: 'Format: field_name,direction'
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ApiCursorPageV2DisbursementDto'
  /v1/organizations:
    get:
      tags:
        - Organizations
      operationId: getAllOrganizations
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: pageRequest
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/PageRequest'
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageOrganizationDto'
  /v1/organizations/{orgId}:
    get:
      tags:
        - Organizations
      operationId: getOrganization
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OrganizationDto'
  /v1/organizations/{orgId}/wallets:
    get:
      tags:
        - Wallet
      summary: Get Wallets
      description: Get a list of wallets for an organization.
      operationId: getWallets
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageOrganizationWalletDto'
  /v1/organizations/{orgId}/wallet-statuses:
    get:
      tags:
        - Wallet
      summary: Get Wallet Status
      description: Get the status of wallets for an organization.
      operationId: getWalletStatuses
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageOrganizationWalletStatusDto'
  /v1/organizations/{orgId}/remittances:
    get:
      tags:
        - Remittance
      summary: Get Remittances
      description: Return a list of remittances by an organization.
      operationId: getOrganizationRemittances
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageRemittanceDto'
  /v1/organizations/{orgId}/remittances/{remittanceId}/requested-deductions:
    get:
      tags:
        - Remittance
      summary: Get Remittance Requested Deductions
      description: Return a list of requested deductions from an organization's remittance.
      operationId: getOrganizationRemittanceRequestedDeductions
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: remittanceId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageRemittanceRequestedDeductionDto'
  /v1/organizations/{orgId}/invoices/{invoiceId}/disbursements:
    get:
      tags:
        - Disbursements
      summary: Get Invoice Disbursements
      description: Get a list of disbursements for an invoice.
      operationId: getDisbursementsForInvoice
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: invoiceId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - CREATED
              - ATTEMPTING_PAYBACK
              - PAYBACK_FAILED
              - COMPLETED
              - FAILED
              - SKIPPED
              - CANCELLED
              - SCHEDULED
              - UNKNOWN
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - TIPS
              - TRIP
              - MILEAGE
              - PAYCHECK
              - MISCELLANEOUS
              - DEVICE
              - DELIVERY
              - DEPOSIT
              - BONUS
              - REWARD
              - UNKNOWN
        - name: external_id
          in: query
          required: false
          schema:
            type: string
        - name: invoice_id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: amount
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: employee_id
          in: query
          required: false
          schema:
            type: string
        - name: employee_group
          in: query
          required: false
          schema:
            type: string
        - name: time_created_start
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: time_created_end
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: page_direction
          in: query
          required: false
          schema:
            type: string
            enum:
              - PREV
              - NEXT
        - name: last_time_created
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: last_id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: sort
          in: query
          description: 'Format: field_name,direction'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageDisbursementDto'
  /v1/organizations/{orgId}/employees:
    get:
      tags:
        - Employees
      summary: Search Employees
      description: Search for employees by providing search criteria.
      operationId: searchEmployees
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: first_name
          in: query
          required: false
          schema:
            type: string
        - name: last_name
          in: query
          required: false
          schema:
            type: string
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageEmployeeDto'
  /v1/organizations/{orgId}/employees/{employeeId}/wallet:
    get:
      tags:
        - Wallet
      summary: Get Employee Wallet
      description: Get wallet for an employee.
      operationId: getWallet
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OrganizationWalletDto'
  /v1/organizations/{orgId}/employees/{employeeId}/card:
    get:
      tags:
        - Cards
      summary: Get Active User Card
      description: >-
        Card returned will be either active or temporarily suspended.
        Permanently terminated cards are not returned.  

        If the provided user does not have an active or suspended card, call
        will return 404 - Not Found.
      operationId: getCard
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: |-
            Success - Returns a user's active card.  
            `state` can be `ACTIVE` or `SUSPENDED`.  
            `card_type` can be `PHYSICAL` or `VIRTUAL`.
          content:
            application/json:
              example:
                state: ACTIVE
                card_type: PHYSICAL
                time_created: '2020-02-18T19:42:48Z'
        '404':
          description: Not Found. No active or suspended card
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                timestamp: '2023-10-04T23:08:23.954+00:00'
                status: 404
                error: Not Found
                message: Employee does not have an active card.
                path: /v1/organizations/123/employees/456/card
  /v1/organizations/{orgId}/employees/{employeeId}/address:
    get:
      tags:
        - Employees
      summary: Get Employee Address
      description: Get the address of an employee.
      operationId: getEmployeeAddress
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Address'
  /v1/organizations/{orgId}/disbursements:
    get:
      tags:
        - Disbursements
      summary: Search Disbursements
      description: >-
        Searches disbursements while returning HATEOAS links (e.g. prev_page,
        next_page) for retrieving additional data.
      operationId: searchDisbursements_1
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - CREATED
              - ATTEMPTING_PAYBACK
              - PAYBACK_FAILED
              - COMPLETED
              - FAILED
              - SKIPPED
              - CANCELLED
              - SCHEDULED
              - UNKNOWN
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - TIPS
              - TRIP
              - MILEAGE
              - PAYCHECK
              - MISCELLANEOUS
              - DEVICE
              - DELIVERY
              - DEPOSIT
              - BONUS
              - REWARD
              - UNKNOWN
        - name: external_id
          in: query
          required: false
          schema:
            type: string
        - name: invoice_id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: amount
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: employee_id
          in: query
          required: false
          schema:
            type: string
        - name: employee_group
          in: query
          required: false
          schema:
            type: string
        - name: time_created_start
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: time_created_end
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: page_direction
          in: query
          required: false
          schema:
            type: string
            enum:
              - PREV
              - NEXT
        - name: last_time_created
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: last_id
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: sort
          in: query
          description: 'Format: field_name,direction'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageDisbursementDto'
  /v1/organizations/{orgId}/card-programs:
    get:
      tags:
        - card-program-controller
      operationId: getCardPrograms
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CardProgram'
  /v1/organizations/{orgId}/advances:
    get:
      tags:
        - Advances
      summary: Search Advances
      description: 'Search for advances by an organization by entering search criteria. '
      operationId: searchOrganizationAdvances
      parameters:
        - name: apikey
          in: header
          required: true
          schema:
            type: string
        - name: orgId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: employee_id
          in: query
          required: false
          schema:
            type: string
        - name: page
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: size
          in: query
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageEmployeeAdvanceDto'
components:
  schemas:
    EmployeePaymentProfileItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - WALLET
            - CARD
            - NONE
        ref:
          type: string
    EmployeePaymentProfileDto:
      type: object
      properties:
        additional_payment_methods:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaymentProfileItem'
        payment_method:
          $ref: '#/components/schemas/EmployeePaymentProfileItem'
    PayrollPeriodUpdateRequest:
      type: object
      properties:
        payroll_deadline:
          type: string
          description: The date by which workers' pay must be determined.
          format: date
          example: '2000-01-01'
        pay_date:
          type: string
          description: The date individuals will receive payment.
          format: date
          example: '2000-01-01'
    PayrollPeriodDto:
      type: object
      properties:
        id:
          type: integer
          description: The existing payroll period id.
          format: int32
        payroll_deadline:
          type: string
          description: The date by which workers' pay must be determined.
          format: date
          example: '2000-01-01'
        pay_date:
          type: string
          description: The date individuals will receive payment.
          format: date
          example: '2000-01-01'
    EmployeeUpdateRequest:
      required:
        - first_name
        - last_name
      type: object
      properties:
        first_name:
          type: string
          description: Numbers not allowed
          example: John
        last_name:
          type: string
          description: Numbers not allowed
          example: Larson
        phone_number:
          type: string
          example: '+11235550123'
        email_address:
          type: string
          example: [email protected]
        type:
          type: string
          enum:
            - HOURLY
            - SALARY
        pay_rate:
          minimum: 0
          type: integer
          description: >-
            Rate of pay, in cents, used in conjunction with type. The following
            should be defined as follows:
              If type = salary, then should be the annual salary of the employee
              If type = hourly, then should be the hourly rate the employee earns
          format: int32
        business_name:
          type: string
          example: Dunder Mifflin Paper Company
        group_name:
          type: string
          example: GOLD
        ein:
          type: string
          example: XXXXXXXXX
        password:
          type: string
    EmployeeDto:
      type: object
      properties:
        id:
          type: string
        first_name:
          type: string
          description: First name of employee
        last_name:
          type: string
          description: Last name of employee
        phone_number:
          type: string
          description: Phone number of employee
        email_address:
          type: string
          description: Email address of employee
        type:
          type: string
          enum:
            - HOURLY
            - SALARY
        pay_rate:
          type: integer
          description: >-
            Rate of pay, in cents, used in conjunction with type. The following
            should be defined as follows:
              If type = salary, then is the annual salary of the employee
              If type = hourly, then is the hourly rate the employee earns
          format: int32
        business_name:
          type: string
          example: Branch
        group_name:
          type: string
          example: GOLD
        ein:
          type: string
          description: 9 digit employer identification number
          example: XXXXXXXXX
    ShiftUpdateRequest:
      type: object
      properties:
        punch_in:
          type: string
          description: Time the shift started
          format: date-time
        punch_out:
          type: string
          description: >-
            Time the shift ended. This does not need to be provided if 'hours'
            is provided
          format: date-time
        hours:
          type: number
          description: >-
            Number of hours worked in the shift. This does not need to be
            provided if 'punch_out' is provided
          format: double
        rate:
          type: integer
          description: >-
            Amount of money, in cents, the employee made per hour/day depending
            on 'shift_type'
          format: int32
        shift_type:
          type: string
          description: Shift type, 'HOURLY' or 'DAILY'
          enum:
            - Daily
            - Hourly
    ShiftDto:
      type: object
      properties:
        id:
          type: string
          description: The id of the timekeeping record.
        employee_id:
          type: string
          description: The worker's ID
        punch_in_time:
          type: string
          description: ISO-8601 date-time with offset from UTC for shift start time.
          format: date-time
        punch_out_time:
          type: string
          description: ISO-8601 date-time with offset from UTC for shift end time.
          format: date-time
        rate:
          type: integer
          description: The rate, in cents, that the employee gets paid for this shift.
          format: int32
        shift_type:
          type: string
          description: Shift type, hourly or daily.
          enum:
            - Daily
            - Hourly
        pay_period_end:
          type: string
          description: ISO-8601 date for the end of the pay period.
          format: date
        time_modified:
          type: string
          description: >-
            ISO-8601 date-time with offset from UTC for when the timekeeping
            record was last updated
          format: date-time
    EmployeePeriodEarningRequest:
      type: object
      properties:
        amount:
          minimum: 1
          type: integer
          description: earnings in cents. must be greater than 0
          format: int32
        date:
          pattern: yyyy-MM-dd
          type: string
          format: date
          example: '2021-06-24'
    EmployeePeriodEarningSummaryDto:
      type: object
      properties:
        total:
          type: integer
          description: |
            Total current period earnings for an employee
                Unit: Cents
          format: int32
    V2DisbursementCreateRequest:
      required:
        - amount
        - description
        - external_id
        - type
      type: object
      properties:
        amount:
          minimum: 0
          type: integer
          description: Amount, in cents, to be disbursed to the worker.
          format: int32
          example: 500
        external_id:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            Allows the custom specification of a unique ID that correlates back
            to your own records.
          example: '123456'
        type:
          type: string
          description: >
            TIP: Disbursement for a tip earned by worker<br />

            TRIP: Disbursement for a trip made by worker<br />

            MILEAGE: Disbursement for miles driven by worker<br />

            PAYCHECK: Disbursement for income earned by worker<br />

            MISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br
            />

            DEVICE: Disbursement for a worker’s device<br />

            DELIVERY: Disbursement for a delivery made by worker<br />

            DEPOSIT: Disbursement for a generic purposes<br />

            REWARD: Disbursement for a reward earned<br />

            BONUS: Disbursement representing a non-usual payment<br />
          example: MILEAGE
          enum:
            - TIP
            - TRIP
            - MILEAGE
            - PAYCHECK
            - MISCELLANEOUS
            - DEVICE
            - DELIVERY
            - DEPOSIT
            - BONUS
            - REWARD
            - UNKNOWN
        worker_group:
          maxLength: 150
          minLength: 0
          type: string
          description: >-
            A grouping for the worker. This could be anything that is used by
            your organization in order to group workers: store id, worker tier,
            region code, etc.
          example: 'Store #1'
        display_header_label:
          maxLength: 32
          minLength: 0
          type: string
          description: >-
            A description of the disbursement. This will be displayed to the
            worker
          example: Tip for delivery
        display_sub_label:
          maxLength: 32
          minLength: 0
          type: string
          description: >-
            A description of the disbursement. This will be displayed to the
            worker in the application
          example: Tip for delivery
        description:
          maxLength: 256
          minLength: 0
          type: string
          example: Disbursement for miles driven.
        retry:
          type: boolean
          description: >-
            Default false. If status goes into FAILED, allows disbursement to be
            reattempted.
        metadata:
          type: object
          additionalProperties:
            type: object
        time_scheduled:
          type: string
          description: >-
            Date and time at which the specified amount will be disbursed to the
            worker.
          format: date-time
    ErrorResponse:
      type: object
      properties:
        status:
          type: integer
          format: int32
        error:
          type: string
        message:
          type: string
        path:
          type: string
        timestamp:
          type: string
          format: date-time
    V2DisbursementDto:
      type: object
      properties:
        worker_id:
          type: string
          description: The worker's ID
          example: '123'
        amount:
          type: integer
          description: Amount, in cents, to be disbursed to the worker
          format: int64
          example: 500
        external_id:
          type: string
          description: >-
            Allows the custom specification of a unique ID that correlates back
            to your own records. Max 64 characters
          example: '123456'
        type:
          type: string
          description: >
            TIP: Disbursement for a tip earned by worker<br />

            TRIP: Disbursement for a trip made by worker<br />

            MILEAGE: Disbursement for miles driven by worker<br />

            PAYCHECK: Disbursement for income earned by worker<br />

            MISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br
            />

            DEVICE: Disbursement for a worker’s device<br />

            DELIVERY: Disbursement for a delivery made by worker<br />

            DEPOSIT: Disbursement for a generic purposes<br />

            REWARD: Disbursement for a reward earned<br />

            BONUS: Disbursement representing a non-usual payment<br />
          example: TIP
          enum:
            - TIP
            - TRIP
            - MILEAGE
            - PAYCHECK
            - MISCELLANEOUS
            - DEVICE
            - DELIVERY
            - DEPOSIT
            - BONUS
            - REWARD
            - UNKNOWN
        worker_group:
          type: string
          description: >-
            A grouping for the worker. This could be anything that is used by
            your organization in order to group workers: store id, worker tier,
            region code, etc
          example: 'Store #1'
        description:
          type: string
          example: Disbursement for miles driven
        display_header_label:
          type: string
          description: >-
            A description of the disbursement. This will be displayed to the
            worker in the application
          example: Tip for delivery
        display_sub_label:
          type: string
          description: >-
            A description of the disbursement. This will be displayed to the
            worker in the application
          example: Tip for delivery
        status:
          type: string
          description: >
            PENDING: The disbursement was created, but processing is not yet
            completed<br />

            SCHEDULED: The disbursement was created and will be processed at the
            specified time<br />

            COMPLETED: Branch successfully disbursed funds<br />

            FAILED: Funds were unable to be disbursed<br />

            CANCELED: Funds were not disbursed and no further action will be
            attempted for the disbursement<br />

            SKIPPED: The disbursement was not attempted. See reason_code for
            more information<br />
          example: COMPLETED
          enum:
            - PENDING
            - SCHEDULED
            - COMPLETED
            - FAILED
            - CANCELED
            - SKIPPED
            - UNKNOWN
        reason_code:
          type: string
          description: >
            PAYOUT_PENDING: The disbursement is still in progress<br />

            AMOUNT_ZERO: The payout was recorded with an amount of $0.00<br />

            RETRY_PERIOD_ELAPSED: The disbursement already existed and is too
            old to be attempted again<br />

            LIKELY_MATCH_FOUND: The disbursement was not attempted because
            another disbursement was identified as a duplicate<br />

            WORKER_NOT_FOUND: The worker was not found on the active roster<br
            />

            PAYMENT_PROFILE_NOT_FOUND: No destination account could be found for
            the provided worker<br />

            PAYMENT_PROFILE_SUSPENDED: The destination account is not payable
            due to suspension<br />

            PAYMENT_PROFILE_NOT_ACTIVE: The destination account is not payable
            because it is closed or otherwise inactive<br />

            PAYMENT_PROFILE_FRAUDULENT: The destination account is not payable
            because it has been closed for fraud<br />

            TRANSFER_FAILED: An error occurred while issuing the funds to the
            worker<br />

            AMOUNT_EXCEEDS_ORG_SINGLE_DISBURSEMENT_LIMIT: The amount exceeds the
            organization's limit for a single disbursement<br />

            AMOUNT_EXCEEDS_ORG_DAILY_DISBURSEMENT_LIMIT: The amount would exceed
            the organization's daily limit for disbursements<br />

            AMOUNT_EXCEEDS_WORKER_DAILY_DISBURSEMENT_LIMIT: The amount would
            exceed the worker's daily limit for disbursements<br />

            AMOUNT_DOES_NOT_COVER_USER_FEES: The fee to be charged to the worker
            exceeds or is equal to the disbursement amount<br />

            UNEXPECTED_ERROR: Something unexpected occurred. Contact Branch
            support if this persists<br />
          example: WORKER_NOT_FOUND
          enum:
            - PAYOUT_PENDING
            - AMOUNT_ZERO
            - RETRY_PERIOD_ELAPSED
            - LIKELY_MATCH_FOUND
            - WORKER_NOT_FOUND
            - PAYMENT_PROFILE_NOT_FOUND
            - PAYMENT_PROFILE_SUSPENDED
            - PAYMENT_PROFILE_NOT_ACTIVE
            - PAYMENT_PROFILE_FRAUDULENT
            - TRANSFER_FAILED
            - AMOUNT_EXCEEDS_ORG_SINGLE_DISBURSEMENT_LIMIT
            - AMOUNT_EXCEEDS_ORG_DAILY_DISBURSEMENT_LIMIT
            - AMOUNT_EXCEEDS_WORKER_DAILY_DISBURSEMENT_LIMIT
            - AMOUNT_DOES_NOT_COVER_USER_FEES
            - UNEXPECTED_ERROR
            - UNKNOWN
        payout:
          $ref: '#/components/schemas/V2DisbursementPayoutDto'
        metadata:
          type: object
          additionalProperties:
            type: object
        time_created:
          type: string
          format: date-time
        time_modified:
          type: string
          format: date-time
    V2DisbursementPayoutDto:
      type: object
      properties:
        id:
          type: string
          description: >-
            The ID of the payout. Depending on the payout type, the format may
            differ.
        payment_type:
          type: string
          description: >-
            Describes which payment profile type was the destination for the
            disbursement's funds
          enum:
            - WALLET
            - CARD
            - NONE
        amount:
          type: integer
          description: How much of the disbursement was sent to the worker after any fees.
          format: int64
        fee:
          type: integer
          description: The fee charged by Branch for the disbursement.
          format: int64
        time_completed:
          type: string
          description: >-
            When the money arrived in the worker's account. This is not
            necessarily when the disbursement was created.
          format: date-time
      description: Payout details. Will be null if the disbursement has not been paid out
    Address:
      required:
        - address_1
        - city
        - postal_code
        - state
      type: object
      properties:
        address_1:
          type: string
        city:
          type: string
        state:
          maxLength: 2
          minLength: 2
          type: string
        postal_code:
          pattern: ^\d{5}(-\d{4})?$
          type: string
    EmployeeDirectFormRequest:
      required:
        - owner
        - token
      type: object
      properties:
        token:
          type: string
        owner:
          $ref: '#/components/schemas/Owner'
    Owner:
      required:
        - address
        - first_name
        - last_name
      type: object
      properties:
        first_name:
          type: string
        last_name:
          type: string
        address:
          $ref: '#/components/schemas/Address'
    EmployeeTabapayExternalCardDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
        network:
          type: string
        last_four:
          type: string
        time_created:
          type: string
          format: date-time
    DeductionCreationRequest:
      required:
        - employee_id
      type: object
      properties:
        employee_id:
          type: string
        amount:
          minimum: 0
          type: integer
          description: Amount, in cents, that was successfully deducted for the employee
          format: int32
    PayrollCalendarCreationRequest:
      type: object
      properties:
        payroll_periods:
          type: array
          description: The list of payroll periods creation requests for the calendar.
          items:
            $ref: '#/components/schemas/PayrollPeriodCreationRequest'
    PayrollPeriodCreationRequest:
      type: object
      properties:
        payroll_deadline:
          type: string
          description: The date by which workers' pay must be determined.
          format: date
          example: '2000-01-01'
        pay_date:
          type: string
          description: The date individuals will receive payment.
          format: date
          example: '2000-01-01'
      description: The list of payroll periods creation requests for the calendar.
    PayrollCalendarDto:
      type: object
      properties:
        payroll_periods:
          type: array
          description: The list of payroll periods in the calendar.
          items:
            $ref: '#/components/schemas/PayrollPeriodDto'
    EmployeeCreationRequest:
      required:
        - first_name
        - last_name
      type: object
      properties:
        first_name:
          type: string
          description: Numbers not allowed
          example: John
        last_name:
          type: string
          description: Numbers not allowed
          example: Larson
        phone_number:
          type: string
          example: '+11235550123'
        email_address:
          type: string
          example: [email protected]
        type:
          type: string
          enum:
            - HOURLY
            - SALARY
        pay_rate:
          minimum: 0
          type: integer
          description: >-
            Rate of pay, in cents, used in conjunction with type. The following
            should be defined as follows:
              If type = salary, then should be the annual salary of the employee
              If type = hourly, then should be the hourly rate the employee earns
          format: int32
        business_name:
          type: string
          example: Dunder Mifflin Paper Company
        group_name:
          type: string
          example: GOLD
        ein:
          type: string
          example: XXXXXXXXX
        password:
          type: string
    ApiError:
      type: object
      properties:
        status:
          type: integer
          format: int32
          example: 123
        error:
          type: string
          example: Bad Request
        message:
          type: string
          example: An error occurred while processing your request
        path:
          type: string
          example: /v1/organizations/123/employees/456/wallets
        timestamp:
          type: string
          format: date-time
    OrganizationWalletCreatedSchema:
      type: object
      properties:
        employee_id:
          type: string
        account_number:
          type: string
          example: '000000000000'
        routing_number:
          type: string
          example: '123456789'
        has_activated_card:
          type: boolean
        status:
          type: string
          description: >-
            CREATED: A Wallet has been created<br />FAILED: A failure occurred
            during wallet creation<br />CLOSED: A Wallet has been closed<br
            />PENDING: We are attempting to create the wallet. It is not yet
            available for disbursing funds<br />UNCLAIMED: A wallet has been
            created and is able to receive funds through the API, but the
            employee has not signed up with Branch yet<br />ACTIVE: A wallet has
            been created for an employee and they are in control of it<br />
          example: ACTIVE
          enum:
            - PENDING
            - REVIEW
            - CREATED
            - UNCLAIMED
            - ACTIVE
            - FAILED
            - SUSPENDED
            - CLOSED
        reason_code:
          type: string
          description: >-
            ADDITIONAL_DOCS_REQ: Branch was not able to confirm identity with
            the information provided the user will have to provide additional
            documentation, like drivers license, in order get a wallet on
            Branch<br />FRAUD_CHECK_REQ: Branch is performing checks to ensure
            that the user is not linked in any way to fraudulent activity. Once
            finished, this user's wallet will be activated. Until then, the
            wallet that was created for the user will not be able to be funded
            in any way<br />CONFIRMED_FRAUD: Branch determined this user to
            behave in fraudulent activities and will not be allowed to have a
            wallet on the platform. The wallet created for them will remain
            closed.<br />DENIED: For one reason or another, the user has been
            denied access to the platform<br />ERROR: A system error occurred,
            please try again
          example: ADDITIONAL_DOCS_REQ
          enum:
            - FRAUD_CHECK_REQ
            - ADDITIONAL_DOCS_REQ
            - CONFIRMED_FRAUD
            - DENIED
            - KYC_SSN_INVALID
            - KYC_PII_SSN_MISMATCH
            - KYC_DECEASED
            - KYC_PO_BOX_NOT_ALLOWED
            - KYC_ERROR
            - ACCOUNT_SUSPENDED
            - ACCOUNT_WITH_EMAIL_EXISTS
            - EMPLOYEE_NOT_FOUND
            - EMPLOYEE_UNDER_AGE
            - EMPLOYEE_ALREADY_LINKED
            - ERROR
        reason:
          type: string
          description: >-
            A short message explaining the reason_code field. This may or may
            not provide additional context into the reason_code.
        onboarding_link:
          type: string
          description: >-
            If the wallet was initiated by the organization, will be populated
            with a link with which the employee can utilized to streamline
            onboarding.
        kyc_additional_documentation_link:
          type: string
        ein:
          type: string
          description: '9 digit Employer Identification Number. Format: XXXXXXXXX'
        business_name:
          type: string
          description: Business name for the user.
        time_last_initialization_attempted:
          type: string
          format: date-time
        time_created:
          type: string
          format: date-time
    OrganizationWalletCreationRequest:
      required:
        - address
        - date_of_birth
        - email_address
        - first_name
        - last_name
        - phone_number
        - ssn
      type: object
      properties:
        first_name:
          type: string
          description: Numbers not allowed
          example: John
        middle_name:
          type: string
          description: Numbers not allowed
          example: William
        last_name:
          type: string
          description: Numbers not allowed
          example: Larson
        address:
          $ref: '#/components/schemas/Address'
        date_of_birth:
          pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}'
          type: string
          description: >-
            Birthdate provided must indicate greater than 14 years of age. Some
            organizations may not allow accounts if the age is not 18 or
            greater.
          example: '2000-01-01'
        ssn:
          pattern: '[0-9]{9}'
          type: string
          example: '123456789'
        phone_number:
          type: string
          example: '+11235550123'
        email_address:
          type: string
          example: [email protected]
        type:
          type: string
          example: HOURLY
          enum:
            - HOURLY
            - SALARY
        pay_rate:
          minimum: 0
          type: integer
          description: >-
            Rate of pay, in cents, used in conjunction with type. The following
            should be defined as follows:
              If type = salary, then should be the annual salary of the employee
              If type = hourly, then should be the hourly rate the employee earns
          format: int32
          example: 1500
        group_name:
          type: string
          example: GOLD
        create_employee:
          type: boolean
          description: >-
            If true and the employee does not already exist, will create the
            employee with the given information.
          default: false
        order_card:
          type: boolean
          description: >-
            If true, a physical card will be shipped to the user when the
            account is created.
          default: false
        card_program:
          type: string
          description: >-
            Specifies which card should be ordered and delivered to the user.
            Available options for an organization can be found by querying the
            card-controller -> getCardPrograms endpoint.Default is
            organization's default card program - generally BRANCH_W2
          example: BRANCH_W2
        ein:
          type: string
          description: 9 digit employer identification number
          example: XXXXXXXXX
        business_name:
          type: string
          example: Dunder Mifflin Paper Company
    ShiftCreationRequest:
      required:
        - shift_type
      type: object
      properties:
        id:
          type: string
          description: If blank, defaults to UUID
        punch_in:
          type: string
          description: Time the shift started
          format: date-time
        punch_out:
          type: string
          description: >-
            Time the shift ended. This does not need to be provided if 'hours'
            is provided
          format: date-time
        hours:
          minimum: 0
          exclusiveMinimum: false
          type: number
          description: >-
            Number of hours worked in the shift. This value cannot be negative.
            This does not need to be provided if 'punch_out' is provided
          format: double
        rate:
          type: integer
          description: >-
            Amount of money, in cents, the employee made per hour/day depending
            on 'shift_type'
          format: int32
        shift_type:
          type: string
          description: Shift type, 'HOURLY' or 'DAILY'
          enum:
            - Daily
            - Hourly
    DisbursementCreationRequest:
      required:
        - amount
        - description
        - external_id
        - type
      type: object
      properties:
        amount:
          minimum: 0
          type: integer
          description: Amount, in cents, to be disbursed to the employee.
          format: int32
          example: 500
        external_id:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            Allows the custom specification of a unique ID that correlates back
            to your own records.
          example: '123456'
        type:
          type: string
          description: >
            TIPS: Disbursement for tips earned by worker<br />

            TRIP: Disbursement for trip made by worker<br />

            MILEAGE: Disbursement for miles driven by worker<br />

            PAYCHECK: Disbursement for income earned by worker<br />

            MISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br
            />

            DEVICE: Disbursement for a worker’s device<br />

            DELIVERY: Disbursement for delivery made by worker<br />

            DEPOSIT: Disbursement for generic purposes<br />

            REWARD: Disbursement for a reward earned<br />

            BONUS: Disbursement representing a non-usual payment<br />
          example: MILEAGE
          enum:
            - TIPS
            - TRIP
            - MILEAGE
            - PAYCHECK
            - MISCELLANEOUS
            - DEVICE
            - DELIVERY
            - DEPOSIT
            - BONUS
            - REWARD
            - UNKNOWN
        employee_group:
          maxLength: 150
          minLength: 0
          type: string
          description: >-
            A grouping for the employee. This could be anything that is used by
            your organization in order to group employees: store id, employee
            tier, region code, etc.
          example: 'Store #1'
        display_sub_label:
          maxLength: 150
          minLength: 0
          type: string
          description: >-
            A description of the disbursement. This will be displayed to the
            worker in the application
          example: Tip for delivery
        description:
          maxLength: 256
          minLength: 0
          type: string
          example: Disbursement for miles driven.
        retry:
          type: boolean
          description: >-
            Default false. If status goes into FAILED, allows disbursement to be
            reattempted.
        metadata:
          type: object
          additionalProperties:
            type: object
        time_scheduled:
          type: string
          description: >-
            Date and time at which the specified amount will be disbursed to the
            employee.
          format: date-time
    DisbursementDto:
      type: object
      properties:
        employee_id:
          type: string
          description: The Employee's ID
          example: '123'
        amount:
          type: integer
          description: Amount, in cents, to be disbursed to the employee
          format: int64
          example: 500
        external_id:
          type: string
          description: >-
            Allows the custom specification of a unique ID that correlates back
            to your own records. Max 64 characters
          example: '123456'
        type:
          type: string
          description: >
            TIPS: Disbursement for tips earned by worker<br />

            TRIP: Disbursement for trip made by worker<br />

            MILEAGE: Disbursement for miles driven by worker<br />

            PAYCHECK: Disbursement for income earned by worker<br />

            MISCELLANEOUS: Disbursement to worker for miscellaneous reasons<br
            />

            DEVICE: Disbursement for a worker’s device<br />

            DELIVERY: Disbursement for delivery made by worker<br />

            DEPOSIT: Disbursement for generic purposes<br />

            REWARD: Disbursement for a reward earned<br />

            BONUS: Disbursement representing a non-usual payment<br />
          example: MILEAGE
          enum:
            - TIPS
            - TRIP
            - MILEAGE
            - PAYCHECK
            - MISCELLANEOUS
            - DEVICE
            - DELIVERY
            - DEPOSIT
            - BONUS
            - REWARD
            - UNKNOWN
        employee_group:
          type: string
          description: >-
            A grouping for the employee. This could be anything that is used by
            your organization in order to group employees: store id, employee
            tier, region code, etc
          example: 'Store #1'
        description:
          type: string
          example: Disbursement for miles driven
        display_sub_label:
          type: string
          description: >-
            A description of the disbursement. This will be displayed to the
            worker in the application
          example: Tip for delivery
        status:
          type: string
          description: >-
            CREATED: The disbursement was created and Branch is attempting to
            disburse funds<br />ATTEMPTING_PAYBACK: Branch successfully
            disbursed funds and is attempting pay back for the disbursement<br
            />PAYBACK_FAILED: Branch successfully disbursed funds but was unable
            to complete pay back for the disbursement<br />COMPLETED: Branch
            successfully disbursed funds<br />FAILED: Funds were unable to be
            disbursed<br />CANCELLED: Funds were not disbursed and no further
            action will be attempted for the disbursement<br />
          example: CREATED
          enum:
            - CREATED
            - ATTEMPTING_PAYBACK
            - PAYBACK_FAILED
            - COMPLETED
            - FAILED
            - SKIPPED
            - CANCELLED
            - SCHEDULED
            - UNKNOWN
        status_reason:
          type: string
        reason_code:
          type: string
          description: >-
            WORKER_NOT_MATCHED: The worker is not linked to a Branch account.<br
            />WORKER_NOT_FOUND: The worker is not found on the active roster.<br
            />AMOUNT_ZERO: The payout was recorded with an amount of $0.00.<br
            />WALLET_SUSPENDED: The worker's wallet is suspended.<br
            />WALLET_NOT_FOUND: The worker's wallet was not found.<br
            />WALLET_NOT_ACTIVE: The worker's wallet is inactive.<br
            />AMOUNT_TOO_LARGE: The requested amount exceeds the organization's
            limit.<br />INVOICING_FAILED: The payout succeeded, but something
            went wrong during invoicing. Safe to retry.<br
            />RETRY_PERIOD_ELAPSED: The disbursement is too old to be
            retried.<br />LIKELY_MATCH_FOUND: The disbursement was not attempted
            because another disbursement was identified as a duplicate.<br
            />TRANSFER_FAILED: An error occurred while issuing the funds to the
            worker.<br />UNEXPECTED_ERROR: There was an unexpected error.
            Contact Branch Support.<br />PENDING: Disbursement is Pending.<br />
          example: WORKER_NOT_FOUND
          enum:
            - UNEXPECTED_ERROR
            - WORKER_NOT_MATCHED
            - WORKER_NOT_FOUND
            - TRANSFER_FAILED
            - WALLET_SUSPENDED
            - WALLET_NOT_FOUND
            - WALLET_NOT_ACTIVE
            - AMOUNT_ZERO
            - AMOUNT_TOO_LARGE
            - AMOUNT_DOES_NOT_COVER_FEES
            - DAILY_DISBURSEMENT_LIMIT_MET
            - WORKERS_DAILY_LIMIT_MET
            - INVOICING_FAILED
            - RETRY_PERIOD_ELAPSED
            - LIKELY_MATCH_FOUND
            - PENDING
        metadata:
          type: object
          additionalProperties:
            type: object
        time_created:
          type: string
          format: date-time
        time_modified:
          type: string
          format: date-time
    RemittanceUpdateRequest:
      required:
        - status
      type: object
      properties:
        status:
          pattern: COMPLETED
          type: string
    ApiCursorPageV2DisbursementDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/V2DisbursementDto'
        prev_cursor:
          type: string
        next_cursor:
          type: string
        size:
          type: integer
          format: int64
    V2WalletPayoutDto:
      type: object
      properties:
        id:
          type: string
          description: The ID of the payout.
        amount:
          type: integer
          description: How much of the disbursement was sent to the worker after any fees.
          format: int64
        fee:
          type: integer
          description: The fee charged by Branch for the disbursement.
          format: int64
        account_number:
          type: string
          description: The account number of the Branch Wallet.
        routing_number:
          type: string
          description: The routing number of the Branch Wallet.
        time_completed:
          type: string
          description: >-
            When the money arrived in the worker's account. This is not
            necessarily when the disbursement was created.
          format: date-time
    V2CardPayoutDto:
      type: object
      properties:
        id:
          type: string
          description: The ID of the payout.
        amount:
          type: integer
          description: How much of the disbursement was sent to the worker after any fees.
          format: int64
        fee:
          type: integer
          description: The fee charged by Branch for the disbursement.
          format: int64
        last_four:
          type: string
          description: The last four digits of the card number.
        network:
          type: string
          description: The network of the card.
          example: MASTERCARD
        time_completed:
          type: string
          description: >-
            When the money arrived in the worker's account. This is not
            necessarily when the disbursement was created.
          format: date-time
    PageSlimEmployeeTabapayExternalCardDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeTabapayExternalCardDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
    PageRequest:
      type: object
      properties:
        page:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        offset:
          type: integer
          format: int64
    OrganizationDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        org_key:
          type: string
        name:
          type: string
    PageOrganizationDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/OrganizationDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    OrganizationWalletDto:
      type: object
      properties:
        employee_id:
          type: string
        account_number:
          type: string
          example: '000000000000'
        routing_number:
          type: string
          example: '123456789'
        has_activated_card:
          type: boolean
        status:
          type: string
          description: >-
            CREATED: A Wallet has been created<br />FAILED: A failure occurred
            during wallet creation<br />CLOSED: A Wallet has been closed<br
            />NOT_CREATED: A Wallet has not yet been created<br />PENDING: We
            are attempting to create the wallet. It is not yet available for
            disbursing funds<br />UNCLAIMED: A wallet has been created and is
            able to receive funds through the API, but the employee has not
            signed up with Branch yet<br />ACTIVE: A wallet has been created for
            an employee and they are in control of it<br />
          example: ACTIVE
          enum:
            - NOT_CREATED
            - PENDING
            - REVIEW
            - CREATED
            - UNCLAIMED
            - ACTIVE
            - FAILED
            - SUSPENDED
            - CLOSED
        reason_code:
          type: string
          description: >-
            ADDITIONAL_DOCS_REQ: Branch was not able to confirm identity with
            the information provided the user will have to provide additional
            documentation, like drivers license, in order get a wallet on
            Branch<br />FRAUD_CHECK_REQ: Branch is performing checks to ensure
            that the user is not linked in any way to fraudulent activity. Once
            finished, this user's wallet will be activated. Until then, the
            wallet that was created for the user will not be able to be funded
            in any way<br />CONFIRMED_FRAUD: Branch determined this user to
            behave in fraudulent activities and will not be allowed to have a
            wallet on the platform. The wallet created for them will remain
            closed.<br />DENIED: For one reason or another, the user has been
            denied access to the platform<br />ERROR: A system error occurred,
            please try again
          example: ADDITIONAL_DOCS_REQ
          enum:
            - FRAUD_CHECK_REQ
            - ADDITIONAL_DOCS_REQ
            - CONFIRMED_FRAUD
            - DENIED
            - KYC_SSN_INVALID
            - KYC_PII_SSN_MISMATCH
            - KYC_DECEASED
            - KYC_PO_BOX_NOT_ALLOWED
            - KYC_ERROR
            - ACCOUNT_SUSPENDED
            - ACCOUNT_WITH_EMAIL_EXISTS
            - EMPLOYEE_NOT_FOUND
            - EMPLOYEE_UNDER_AGE
            - EMPLOYEE_ALREADY_LINKED
            - ERROR
        reason:
          type: string
          description: >-
            A short message explaining the reason_code field. This may or may
            not provide additional context into the reason_code.
        onboarding_link:
          type: string
          description: >-
            If the wallet was initiated by the organization, will be populated
            with a link with which the employee can utilized to streamline
            onboarding.
        kyc_additional_documentation_link:
          type: string
        ein:
          type: string
          description: '9 digit Employer Identification Number. Format: XXXXXXXXX'
        business_name:
          type: string
          description: Business name for the user.
        time_last_initialization_attempted:
          type: string
          format: date-time
        time_created:
          type: string
          format: date-time
    PageOrganizationWalletDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/OrganizationWalletDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    OrganizationWalletStatusDto:
      type: object
      properties:
        employee_id:
          type: string
        wallet_status:
          type: string
          enum:
            - NOT_CREATED
            - PENDING
            - REVIEW
            - CREATED
            - UNCLAIMED
            - ACTIVE
            - FAILED
            - SUSPENDED
            - CLOSED
    PageOrganizationWalletStatusDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/OrganizationWalletStatusDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    PageRemittanceDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RemittanceDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    RemittanceDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        pay_date:
          type: string
          description: >-
            ISO-8601 date for the pay date, provided by the organization, for
            the remittance and associated requested deductions
          format: date
        remittance_date:
          type: string
          description: >-
            ISO-8601 date-time with offset from UTC for when the remittance was
            created
          format: date-time
        status:
          type: string
          description: >-
            STARTED: Remittance is active; remittance has been created and has
            unsettled requested deductions


            PROCESSING: Remittance is actively processing reported deductions
            made; no further actions are necessary


            COMPLETED: Remittance requested deductions are all settled and
            payment has been made; no further actions are necessary


            CANCELED: Remittance was created but is now invalid; no further
            actions are necessary


            AWAITING_PAYMENT: Remittance requested deductions are all settled
            and remittance has yet to be paid
          enum:
            - STARTED
            - PROCESSING
            - COMPLETED
            - CANCELED
            - AWAITING_PAYMENT
            - UNKNOWN
        requested_amount:
          type: integer
          description: >-
            Total amount, in cents, that was requested for deductions for all
            employees
          format: int32
    PageRemittanceRequestedDeductionDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RemittanceRequestedDeductionDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    RemittanceRequestedDeductionDto:
      type: object
      properties:
        employee_id:
          type: string
        amount:
          type: integer
          description: Amount, in cents, that should be deducted for the employee
          format: int32
    PageDisbursementDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/DisbursementDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    PageEmployeeDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
    CardProgram:
      type: object
      properties:
        token:
          type: string
        description:
          type: string
    EmployeeAdvanceDto:
      type: object
      properties:
        employee_id:
          type: string
          description: The worker's ID
        amount:
          type: integer
          description: The amount, in cents, of the advance that was taken
          format: int32
        date:
          type: string
          description: >-
            ISO-8601 date-time with offset from UTC for when the advance was
            taken
          format: date-time
        due_date:
          type: string
          description: ISO-8601 date for when the advance is due to be paid back
          format: date
        outstanding_amount:
          type: integer
          description: The amount, in cents, of the advance that has yet to be paid back
          format: int32
        status:
          type: string
          description: >-
            OUTSTANDING: Advance has not been paid back and there are no
            unsettled requested deductions on an active remittance


            DEDUCTION_REQUESTED: Advance has an unsettled requested deduction on
            an active remittance
          enum:
            - OUTSTANDING
            - DEDUCTION_REQUESTED
        id:
          type: string
          description: The Advance ID
    PageEmployeeAdvanceDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeAdvanceDto'
        page_number:
          type: integer
          format: int64
        size:
          type: integer
          format: int64
        total_pages:
          type: integer
          format: int64
        total_number_of_elements:
          type: integer
          format: int64
        has_next_page:
          type: boolean
        has_prev_page:
          type: boolean
        next_page:
          type: string
        prev_page:
          type: string
x-tagGroups:
  - name: Branch Direct
    tags:
      - Wallet
      - V2 Disbursements
      - Wallet Payout Details
      - Card Payout Details
      - External Cards
      - Payment Profile
      - Cards
  - name: Wallets & Disbursements
    tags:
      - Wallet
      - Disbursements
      - Cards
  - name: Earnings & Advances
    tags:
      - Employees
      - Payroll Periods
      - Payroll Calendar
      - Shifts
      - Employee Earnings
      - Remittance
      - Advances