Official API documentation for PayComp API.
Welcome to the PayComp API documentation.
Use this manual to integrate PayComp as your Pay-As-You-Go engine, not just as a standalone product.
This API is designed for carriers, agencies, and integration teams that want to launch their own branded pay-as-you-go experience while using PayComp's core processing and document intelligence behind the scenes.
Use grouped endpoints to navigate by workflow:
PayComp API is protected with multiple security layers:
Use this 5-minute flow to test your integration end-to-end.
# 1) Login
curl -X POST "https://pcapi.ddns.net/api/v1/login" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"email": "dev@example.com",
"password": "password123"
}'
Copy the returned token from data.tokens.jwt (or data.tokens.access_token) and use it in the next calls. Login responses also include data.tokens.token_type and data.tokens.expires_in so clients can schedule proactive refresh.
When a session needs to stay alive, call POST /api/v1/refresh with the current bearer token, then replace the stored JWT with the new data.tokens.jwt (or data.tokens.access_token) value immediately. Refresh can be used after access-token expiry while still inside the configured refresh window.
The API also exposes public password recovery endpoints:
POST /api/v1/forgot-passwordPOST /api/v1/reset-passwordForgot-password always returns the same success message to avoid revealing whether an account exists.
Reset email notifications build the link using APP_FRONTEND_URL:
{APP_FRONTEND_URL}/reset-password?token=...&email=...
Your frontend should read those query parameters and send them to POST /api/v1/reset-password with the new password.
# 2) Create a file
curl -X POST "https://pcapi.ddns.net/api/v1/files" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"name": "demo.txt",
"content": "This is a demo payload from the Quickstart section."
}'
# 3) Fetch the file by ID returned above
curl -X GET "https://pcapi.ddns.net/api/v1/files/1" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
# 4) Logout
curl -X POST "https://pcapi.ddns.net/api/v1/logout" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
To authenticate requests, include a Authorization header with the value "{YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Retrieve a token by calling POST /api/v1/login and use data.tokens.jwt (or data.tokens.access_token) as Authorization: Bearer <token>. Login and refresh both return data.tokens.access_token, data.tokens.jwt, data.tokens.token_type, and data.tokens.expires_in. Use POST /api/v1/refresh to rotate the JWT, including when the access token is expired but still within the configured refresh window. Public password recovery is available through POST /api/v1/forgot-password and POST /api/v1/reset-password, with reset links generated from APP_FRONTEND_URL.
Refresh endpoint handoff summary: POST /api/v1/refresh with Authorization: Bearer {current_token}. Response fields are in the standard envelope at data.tokens.access_token, data.tokens.token_type, and data.tokens.expires_in.
APIs for user authentication using JWT.
Authenticate a user and issue a JWT token.
curl --request POST \
"http://localhost:8000/api/v1/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"dev@example.com\",
\"password\": \"password123\"
}"
{
"data": {
"user": {
"id": 1,
"name": "Dev User",
"email": "dev@example.com"
},
"tokens": {
"access_token": "<jwt-token>",
"jwt": "<jwt-token>",
"token_type": "bearer",
"expires_in": 3600
}
},
"message": "Login successful",
"errors": null
}
Request a password reset link by email.
For security, this endpoint always returns a generic success message to prevent account enumeration.
curl --request POST \
"http://localhost:8000/api/v1/forgot-password" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"dev@example.com\"
}"
{
"data": null,
"message": "If your email exists in our system, a password reset link has been sent.",
"errors": null
}
Reset account password using a valid reset token.
curl --request POST \
"http://localhost:8000/api/v1/reset-password" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"token\": \"7f7d9d4f0d...\",
\"email\": \"dev@example.com\",
\"password\": \"NewStrongPassword123!\",
\"password_confirmation\": \"NewStrongPassword123!\"
}"
{
"data": null,
"message": "Password has been reset successfully.",
"errors": null
}
Rotate the provided JWT and return a fresh access token.
This endpoint supports expired access tokens, as long as they are still inside the configured JWT refresh window.
curl --request POST \
"http://localhost:8000/api/v1/refresh" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"tokens": {
"access_token": "<jwt-token>",
"jwt": "<jwt-token>",
"token_type": "bearer",
"expires_in": 3600
}
},
"message": "Token refreshed successfully",
"errors": null
}
Invalidate the currently authenticated JWT token.
curl --request POST \
"http://localhost:8000/api/v1/logout" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": null,
"message": "Logged out successfully",
"errors": null
}
APIs for managing carrier resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Return carrier/driver submission metadata used by UI test-submit flows.
Carrier ID.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers/submission/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"carrier": {
"id": 1,
"name": "UPS",
"driver_id": 1
},
"driver": "CSV Parser",
"submission_mode": "SFTP"
},
"message": "OK",
"errors": null
}
Upload a single file and submit it to the carrier destination.
Carrier ID.
curl --request POST \
"http://localhost:8000/api/v1/carriers/test_submit/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/phpv4k2tekv3sa39S6nnEI" {
"data": {
"status": true
},
"message": "Submission completed successfully.",
"errors": null
}
Return formatter fields for the given carrier.
The ID of the carrier.
Carrier ID.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers/formatter-fields/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"fields": [
{
"name": "employee_id",
"label": "Employee ID"
}
]
},
"message": "OK",
"errors": null
}
Show remote directory files available on the carrier's SFTP destination.
The ID of the carrier.
Carrier ID.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers/sftp/remotedir/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"files": [
"inbound_20260415.csv"
],
"carrier": {
"id": 1,
"name": "UPS",
"driver_id": 1
}
},
"message": "OK",
"errors": null
}
Download one file from the carrier's remote SFTP directory.
The ID of the carrier.
Remote file name.
Carrier ID.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers/sftp/download/1/inbound_20260415.csv" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"message": "Binary file stream returned."
}
Build and return SFTP/GPG formatted file preview content.
Carrier ID.
curl --request POST \
"http://localhost:8000/api/v1/carriers/sftp/gpg/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/phpn1niv63aomt82JVYbvX" {
"message": "Text preview stream returned."
}
Retrieve a paginated list of carriers.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "UPS",
"driver_id": 1
}
],
"message": "OK",
"errors": null
}
Create a new carrier.
curl --request POST \
"http://localhost:8000/api/v1/carriers" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"UPS\",
\"driver_id\": 1,
\"settings\": {
\"Host\": \"sftp.example.com\",
\"Root\": \"\\/inbound\",
\"Username\": \"paycomp_user\",
\"Password\": \"secret123\"
}
}"
{
"data": {
"id": 2,
"name": "UPS",
"driver_id": 1
},
"message": "Created",
"errors": null
}
Retrieve a specific carrier.
The ID of the carrier.
curl --request GET \
--get "http://localhost:8000/api/v1/carriers/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "UPS",
"driver_id": 1
},
"message": "OK",
"errors": null
}
Update an existing carrier.
The ID of the carrier.
curl --request PUT \
"http://localhost:8000/api/v1/carriers/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"UPS\",
\"driver_id\": 1,
\"settings\": {
\"Host\": \"sftp.example.com\",
\"Root\": \"\\/inbound\",
\"Username\": \"paycomp_user\",
\"Password\": \"secret123\"
}
}"
{
"data": {
"id": 1,
"name": "UPS",
"driver_id": 1
},
"message": "OK",
"errors": null
}
Delete a carrier.
The ID of the carrier.
curl --request DELETE \
"http://localhost:8000/api/v1/carriers/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": null,
"message": "Deleted",
"errors": null
}
APIs for managing client resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/clients/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of clients.
curl --request GET \
--get "http://localhost:8000/api/v1/clients?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Client Inc",
"company_id": 1
}
],
"message": "OK",
"errors": null
}
Create a new client.
curl --request POST \
"http://localhost:8000/api/v1/clients" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Client Inc\",
\"company_id\": 1,
\"client_code\": \"sample\",
\"pc_client_id\": \"sample\",
\"policy\": \"sample\",
\"fein\": \"sample\",
\"effective_date\": \"2026-04-02\",
\"location_code\": \"sample\"
}"
{
"data": {
"id": 2,
"name": "Client Inc",
"company_id": 1
},
"message": "Created",
"errors": null
}
Retrieve a specific client.
The ID of the client.
curl --request GET \
--get "http://localhost:8000/api/v1/clients/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Client Inc",
"company_id": 1
},
"message": "OK",
"errors": null
}
Update an existing client.
The ID of the client.
curl --request PUT \
"http://localhost:8000/api/v1/clients/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Client Inc\",
\"company_id\": 1,
\"client_code\": \"sample\",
\"pc_client_id\": \"sample\",
\"policy\": \"sample\",
\"fein\": \"sample\",
\"effective_date\": \"2026-04-02\",
\"location_code\": \"sample\"
}"
{
"data": {
"id": 1,
"name": "Client Inc",
"company_id": 1
},
"message": "OK",
"errors": null
}
The ID of the client.
curl --request DELETE \
"http://localhost:8000/api/v1/clients/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a client.
APIs for managing company resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/companies/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of companies.
curl --request GET \
--get "http://localhost:8000/api/v1/companies?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Acme Corp"
}
],
"message": "OK",
"errors": null
}
Create a new company.
curl --request POST \
"http://localhost:8000/api/v1/companies" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Acme Corp\",
\"logo\": \"sample\"
}"
{
"data": {
"id": 2,
"name": "Acme Corp"
},
"message": "Created",
"errors": null
}
Retrieve a specific company.
The ID of the company.
curl --request GET \
--get "http://localhost:8000/api/v1/companies/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Acme Corp"
},
"message": "OK",
"errors": null
}
Update an existing company.
The ID of the company.
curl --request PUT \
"http://localhost:8000/api/v1/companies/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Acme Corp\",
\"logo\": \"sample\"
}"
{
"data": {
"id": 1,
"name": "Acme Corp"
},
"message": "OK",
"errors": null
}
The ID of the company.
curl --request DELETE \
"http://localhost:8000/api/v1/companies/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a company.
APIs for managing company mapping configurations with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/company-mappings/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of company mappings.
curl --request GET \
--get "http://localhost:8000/api/v1/company-mappings?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Default Mapping",
"company_id": 1,
"carrier_id": 1,
"mode": "MAPPING"
}
],
"message": "OK",
"errors": null
}
Create a new company mapping.
curl --request POST \
"http://localhost:8000/api/v1/company-mappings" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Default Mapping\",
\"company_id\": 1,
\"carrier_id\": 1,
\"header_row\": 1,
\"mapping\": null,
\"version\": \"1.0\",
\"active\": true,
\"mode\": \"MAPPING\"
}"
{
"data": {
"id": 2,
"name": "Default Mapping",
"company_id": 1,
"carrier_id": 1,
"mode": "MAPPING"
},
"message": "Created",
"errors": null
}
Retrieve a specific company mapping.
The ID of the company mapping.
curl --request GET \
--get "http://localhost:8000/api/v1/company-mappings/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Default Mapping",
"company_id": 1,
"carrier_id": 1,
"mode": "MAPPING"
},
"message": "OK",
"errors": null
}
Update an existing company mapping.
The ID of the company mapping.
curl --request PUT \
"http://localhost:8000/api/v1/company-mappings/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Default Mapping\",
\"company_id\": 1,
\"carrier_id\": 1,
\"header_row\": 1,
\"version\": \"1.0\",
\"active\": true,
\"mode\": \"MAPPING\"
}"
{
"data": {
"id": 1,
"name": "Default Mapping",
"company_id": 1,
"carrier_id": 1,
"mode": "MAPPING"
},
"message": "OK",
"errors": null
}
The ID of the company mapping.
curl --request DELETE \
"http://localhost:8000/api/v1/company-mappings/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a company mapping.
APIs for managing driver resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/drivers/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of drivers.
curl --request GET \
--get "http://localhost:8000/api/v1/drivers?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "CSV Parser",
"single_record": false,
"is_active": true
}
],
"message": "OK",
"errors": null
}
Create a new driver.
curl --request POST \
"http://localhost:8000/api/v1/drivers" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"CSV Parser\",
\"single_record\": false,
\"is_active\": true
}"
{
"data": {
"id": 2,
"name": "CSV Parser",
"single_record": false,
"is_active": true
},
"message": "Created",
"errors": null
}
Retrieve a specific driver.
The ID of the driver.
curl --request GET \
--get "http://localhost:8000/api/v1/drivers/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "CSV Parser",
"single_record": false,
"is_active": true
},
"message": "OK",
"errors": null
}
Update an existing driver.
The ID of the driver.
curl --request PUT \
"http://localhost:8000/api/v1/drivers/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"CSV Parser Updated\",
\"single_record\": false,
\"is_active\": true
}"
{
"data": {
"id": 1,
"name": "CSV Parser Updated",
"single_record": false,
"is_active": true
},
"message": "OK",
"errors": null
}
The ID of the driver.
curl --request DELETE \
"http://localhost:8000/api/v1/drivers/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a driver.
APIs for managing extractor resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/extractors/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of extractors.
curl --request GET \
--get "http://localhost:8000/api/v1/extractors?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Default Extractor",
"class": "App\\Extractors\\DefaultExtractor",
"company_id": 1,
"carrier_id": 1
}
],
"message": "OK",
"errors": null
}
Create a new extractor.
curl --request POST \
"http://localhost:8000/api/v1/extractors" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Default Extractor\",
\"class\": \"App\\\\\\\\Extractors\\\\\\\\DefaultExtractor\",
\"company_id\": 1,
\"carrier_id\": 1
}"
{
"data": {
"id": 2,
"name": "Default Extractor",
"class": "App\\Extractors\\DefaultExtractor",
"company_id": 1,
"carrier_id": 1
},
"message": "Created",
"errors": null
}
Retrieve a specific extractor.
The ID of the extractor.
curl --request GET \
--get "http://localhost:8000/api/v1/extractors/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Default Extractor",
"class": "App\\Extractors\\DefaultExtractor",
"company_id": 1,
"carrier_id": 1
},
"message": "OK",
"errors": null
}
Update an existing extractor.
The ID of the extractor.
curl --request PUT \
"http://localhost:8000/api/v1/extractors/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Updated Extractor\",
\"class\": \"App\\\\\\\\Extractors\\\\\\\\UpdatedExtractor\",
\"company_id\": 1,
\"carrier_id\": 1
}"
{
"data": {
"id": 1,
"name": "Updated Extractor",
"class": "App\\Extractors\\UpdatedExtractor",
"company_id": 1,
"carrier_id": 1
},
"message": "OK",
"errors": null
}
The ID of the extractor.
curl --request DELETE \
"http://localhost:8000/api/v1/extractors/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete an extractor.
APIs for managing file resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/files/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Download a file's decompressed binary content.
The ID of the file.
curl --request GET \
--get "http://localhost:8000/api/v1/files/download/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"message": "Binary file stream returned."
}
Retrieve a paginated list of files.
curl --request GET \
--get "http://localhost:8000/api/v1/files?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "document.txt"
}
],
"message": "OK",
"errors": null
}
Create a new file record.
curl --request POST \
"http://localhost:8000/api/v1/files" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"document.txt\",
\"content\": \"This is file content\"
}"
{
"data": {
"id": 2,
"name": "document.txt"
},
"message": "Created",
"errors": null
}
Retrieve a specific file record.
The ID of the file.
curl --request GET \
--get "http://localhost:8000/api/v1/files/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "document.txt"
},
"message": "OK",
"errors": null
}
Update an existing file record.
The ID of the file.
curl --request PUT \
"http://localhost:8000/api/v1/files/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"updated_document.txt\",
\"content\": \"Updated content\"
}"
{
"data": {
"id": 1,
"name": "updated_document.txt"
},
"message": "OK",
"errors": null
}
Delete a file record.
The ID of the file.
curl --request DELETE \
"http://localhost:8000/api/v1/files/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": null,
"message": "Deleted",
"errors": null
}
APIs for managing formatter resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/formatters/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of formatters.
curl --request GET \
--get "http://localhost:8000/api/v1/formatters?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "Default Formatter",
"class": "App\\Formatters\\DefaultFormatter",
"carrier_id": 1
}
],
"message": "OK",
"errors": null
}
Create a new formatter.
curl --request POST \
"http://localhost:8000/api/v1/formatters" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Default Formatter\",
\"class\": \"App\\\\\\\\Formatters\\\\\\\\DefaultFormatter\",
\"carrier_id\": 1
}"
{
"data": {
"id": 2,
"name": "Default Formatter",
"class": "App\\Formatters\\DefaultFormatter",
"carrier_id": 1
},
"message": "Created",
"errors": null
}
Retrieve a specific formatter.
The ID of the formatter.
curl --request GET \
--get "http://localhost:8000/api/v1/formatters/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "Default Formatter",
"class": "App\\Formatters\\DefaultFormatter",
"carrier_id": 1
},
"message": "OK",
"errors": null
}
Update an existing formatter.
The ID of the formatter.
curl --request PUT \
"http://localhost:8000/api/v1/formatters/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Updated Formatter\",
\"class\": \"App\\\\\\\\Formatters\\\\\\\\UpdatedFormatter\",
\"carrier_id\": 1
}"
{
"data": {
"id": 1,
"name": "Updated Formatter",
"class": "App\\Formatters\\UpdatedFormatter",
"carrier_id": 1
},
"message": "OK",
"errors": null
}
The ID of the formatter.
curl --request DELETE \
"http://localhost:8000/api/v1/formatters/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a formatter.
APIs for managing import resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/imports/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Detect matching extractor and return available mappings for the uploaded file.
curl --request POST \
"http://localhost:8000/api/v1/imports/validate" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "data_file=@/tmp/phpkaqtkmcct82m48lWLuT" {
"data": {
"status": "success",
"message": "File validated successfully",
"extractor": "Asure",
"data": "Employee ID,Name\n\"1001\",\"Jane Doe\"\n",
"mappings": [
{
"id": 1,
"name": "Asure Mapping",
"company_name": "Acme Payroll",
"carrier_name": "Guardian"
}
]
},
"message": "File validated",
"errors": null
}
Run mapping or extraction + formatting pipeline and return preview data.
curl --request POST \
"http://localhost:8000/api/v1/imports/preview" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "mapping_id=1"\
--form "data_file=@/tmp/phpup6g546ep2700WNVMqQ" {
"data": {
"status": "success",
"mode": "MAPPING",
"data": "formatted-preview-content"
},
"message": "Preview generated",
"errors": null
}
Run full import pipeline and submit data to the carrier destination.
curl --request POST \
"http://localhost:8000/api/v1/imports/submit" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "mapping_id=1"\
--form "payroll_company_id=2"\
--form "data_file=@/tmp/phpvve96paaurnna6yDVF5" {
"data": {
"message": "Data was sent to carrier successfully.",
"carrier_id": 5
},
"message": "Import submitted",
"errors": null
}
Retrieve a paginated list of imports.
curl --request GET \
--get "http://localhost:8000/api/v1/imports?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"user_id": 1,
"carrier_id": 1,
"file_id": 1
}
],
"message": "OK",
"errors": null
}
Create a new import.
curl --request POST \
"http://localhost:8000/api/v1/imports" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": 1,
\"payroll_company_id\": 1,
\"carrier_id\": 1,
\"file_id\": 1
}"
{
"data": {
"id": 2,
"user_id": 1,
"carrier_id": 1,
"file_id": 1
},
"message": "Created",
"errors": null
}
Retrieve a specific import.
The ID of the import.
curl --request GET \
--get "http://localhost:8000/api/v1/imports/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"user_id": 1,
"carrier_id": 1,
"file_id": 1
},
"message": "OK",
"errors": null
}
Update an existing import.
The ID of the import.
curl --request PUT \
"http://localhost:8000/api/v1/imports/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": 1,
\"payroll_company_id\": 1,
\"carrier_id\": 1,
\"file_id\": 1
}"
{
"data": {
"id": 1,
"user_id": 1,
"carrier_id": 1,
"file_id": 1
},
"message": "OK",
"errors": null
}
Delete an import.
The ID of the import.
curl --request DELETE \
"http://localhost:8000/api/v1/imports/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": null,
"message": "Deleted",
"errors": null
}
APIs for managing application permissions.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/permissions/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" Retrieve all permissions.
curl --request GET \
--get "http://localhost:8000/api/v1/permissions" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" Create a new permission.
curl --request POST \
"http://localhost:8000/api/v1/permissions" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"create reports\"
}"
The ID of the permission.
Permission ID.
curl --request DELETE \
"http://localhost:8000/api/v1/permissions/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" APIs for managing the authenticated user's own profile.
Retrieve the authenticated user's profile.
curl --request GET \
--get "http://localhost:8000/api/v1/profile" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"user": {
"id": 1,
"name": "Profile Tester",
"email": "profile@example.com",
"roles": [
"user"
]
},
"email_verified_at": "2026-04-15T09:00:00.000000Z"
},
"message": "OK",
"errors": null
}
Update the authenticated user's profile information.
curl --request PATCH \
"http://localhost:8000/api/v1/profile" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Jane Doe\",
\"email\": \"jane.doe@example.com\"
}"
{
"data": {
"user": {
"id": 1,
"name": "Jane Doe",
"email": "jane.doe@example.com",
"roles": [
"user"
]
},
"email_verified_at": null
},
"message": "Profile updated",
"errors": null
}
Update the authenticated user's password.
curl --request PUT \
"http://localhost:8000/api/v1/profile/password" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"current_password\": \"password123\",
\"password\": \"NewStrongPassword123!\",
\"password_confirmation\": \"NewStrongPassword123!\"
}"
{
"data": null,
"message": "Password updated",
"errors": null
}
Delete the authenticated user's account.
curl --request DELETE \
"http://localhost:8000/api/v1/profile" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"password\": \"password123\"
}"
{
"data": null,
"message": "Profile deleted",
"errors": null
}
APIs for managing application roles with permissions.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/roles/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve all roles with permissions.
curl --request GET \
--get "http://localhost:8000/api/v1/roles" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "admin",
"permissions": [
{
"id": 1,
"name": "manage users"
}
]
}
],
"message": "OK",
"errors": null
}
Create a new role.
curl --request POST \
"http://localhost:8000/api/v1/roles" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"moderator\",
\"permissions\": [
1,
2,
3
]
}"
{
"data": {
"id": 2,
"name": "moderator",
"permissions": [
{
"id": 1,
"name": "manage users"
}
]
},
"message": "Created",
"errors": null
}
Retrieve a specific role.
The ID of the role.
Role ID.
curl --request GET \
--get "http://localhost:8000/api/v1/roles/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "admin",
"permissions": [
{
"id": 1,
"name": "manage users"
}
]
},
"message": "OK",
"errors": null
}
Update an existing role.
The ID of the role.
Role ID.
curl --request PUT \
"http://localhost:8000/api/v1/roles/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"moderator\",
\"permissions\": [
1,
2,
3
]
}"
{
"data": {
"id": 1,
"name": "moderator",
"permissions": [
{
"id": 1,
"name": "manage users"
}
]
},
"message": "OK",
"errors": null
}
The ID of the role.
Role ID.
curl --request DELETE \
"http://localhost:8000/api/v1/roles/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a role.
APIs for managing submission resources with role-based authorization.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/submissions/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve a paginated list of submissions.
curl --request GET \
--get "http://localhost:8000/api/v1/submissions?page=1&per_page=15" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"carrier_id": 1,
"status": "submitted"
}
],
"message": "OK",
"errors": null
}
Create a new submission.
curl --request POST \
"http://localhost:8000/api/v1/submissions" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"carrier_id\": 1,
\"import_id\": 10,
\"data\": {
\"batch\": \"20260402\",
\"records\": 125,
\"source\": \"payroll-sync\"
},
\"status\": \"0\",
\"sent_by\": 1
}"
{
"data": {
"id": 2,
"carrier_id": 1,
"status": "queued"
},
"message": "Created",
"errors": null
}
Retrieve a specific submission.
The ID of the submission.
Submission ID.
curl --request GET \
--get "http://localhost:8000/api/v1/submissions/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"carrier_id": 1,
"user_sent_by": {
"id": 1,
"name": "John Doe"
},
"status": "submitted"
},
"message": "OK",
"errors": null
}
Update an existing submission.
The ID of the submission.
Submission ID.
curl --request PUT \
"http://localhost:8000/api/v1/submissions/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"carrier_id\": 2,
\"import_id\": 11,
\"data\": {
\"batch\": \"20260403\",
\"records\": 132,
\"source\": \"manual-retry\"
},
\"status\": \"1\",
\"sent_by\": 2
}"
{
"data": {
"id": 1,
"carrier_id": 1,
"status": "submitted"
},
"message": "OK",
"errors": null
}
The ID of the submission.
Submission ID.
curl --request DELETE \
"http://localhost:8000/api/v1/submissions/16" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {"data":null,"message":"Deleted","errors":null}
Delete a submission.
APIs for managing application users with role assignment.
Return the total number of records for this resource.
curl --request GET \
--get "http://localhost:8000/api/v1/users/count" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"count": 42
},
"message": "OK",
"errors": null
}
Retrieve all users.
curl --request GET \
--get "http://localhost:8000/api/v1/users" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
],
"message": "OK",
"errors": null
}
Create a new user.
curl --request POST \
"http://localhost:8000/api/v1/users" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"John Doe\",
\"email\": \"john@example.com\",
\"password\": \"password123\",
\"roles\": [
1,
2
]
}"
{
"data": {
"id": 2,
"name": "John Doe",
"email": "john@example.com"
},
"message": "Created",
"errors": null
}
Retrieve a specific user.
The ID of the user.
curl --request GET \
--get "http://localhost:8000/api/v1/users/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
"message": "OK",
"errors": null
}
Update an existing user.
The ID of the user.
curl --request PUT \
"http://localhost:8000/api/v1/users/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Jane Doe\",
\"email\": \"jane@example.com\",
\"password\": \"newpassword123\",
\"roles\": [
1,
2
]
}"
{
"data": {
"id": 1,
"name": "Jane Doe",
"email": "jane@example.com"
},
"message": "OK",
"errors": null
}
Delete a user.
The ID of the user.
curl --request DELETE \
"http://localhost:8000/api/v1/users/1" \
--header "Authorization: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": null,
"message": "Deleted",
"errors": null
}