# REST API
# Introduction
The PHP-Prefixer API allows you to create and interact with projects and builds on PHP-Prefixer through a simple REST API.
It’s quick and easy to get a project up and running. The PHP-Prefixer API supports the same use cases presented in our guides (opens new window). Essentially, the prefixing workflow has the following steps:
- Sign up (opens new window),
- Create your PHP-Prefixer project,
- Create a ZIP file to be prefixed, and upload it,
- Download and review the prefixed codebase, and
- Review the prefixed PHP project
# Authentication
In order to use the API, you should authenticate your request by including your API key as a bearer token value:
Authorization: Bearer API_KEY_HERE
# Headers
Make sure you have the following content-type headers are set on every request:
Accept: application/json
Content-Type: application/json
# URI
PHP-Prefixer API is hosted on the following base URI:
https://php-prefixer.com/api/v1
# Errors
PHP-Prefixer uses conventional HTTP response codes to indicate the success or failure of an API request. The table below contains a summary of the typical response codes:
Code | Description |
---|---|
200 | Everything is ok. |
400 | Valid data was given but the request has failed. |
401 | No valid API Key was given. |
404 | The request resource could not be found. |
422 | The payload has missing required parameters or invalid data was given. |
429 | Too many attempts. |
500 | Request failed due to an internal error in PHP-Prefixer. |
503 | PHP-Prefixer is offline for maintenance. |
# User
# Get User
# HTTP Request
GET /api/v1/user
# Response
{
"user": {
"id": 5299,
"name": "Aníbal Sánchez",
"company": "Extly CB"
}
}
# Project
# Create Project
# HTTP Request
POST /api/v1/projects
{
"name": "My Project",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"source_type": "project_file"
}
# Parameters
Key | Description |
---|---|
name * | The project name. |
description | An optional description of the project. |
source_type * | The type of project to create. Valid values are: project_file . |
# Response
HTTP/1.1 201 Created
{
"project": {
"id": 5399,
"name": "My Project",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"source_type": "project_file",
"updated_at": "2021-04-19T17:56:34.000000Z",
"created_at": "2021-04-19T17:56:34.000000Z"
}
}
# List Projects
# HTTP Request
GET /api/v1/projects
# Response
HTTP/1.1 200 OK
{
"projects": [
{
"id": 5394,
"name": "XT Laravel Starter for Joomla",
"source_type": "project_file",
"created_at": "2020-12-07T14:27:49.000000Z",
"updated_at": "2020-12-07T14:27:49.000000Z"
},
{
"id": 5398,
"name": "My Project",
"description": "Quisque sit amet tincidunt libero.",
"source_type": "project_file",
"created_at": "2021-04-15T15:45:19.000000Z",
"updated_at": "2021-04-15T15:46:05.000000Z"
}
]
}
# Get Project
# HTTP Request
GET /api/v1/projects/{projectId}
# Response
HTTP/1.1 200 OK
{
"project": {
"id": 5399,
"name": "My Project",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"source_type": "project_file",
"updated_at": "2021-04-19T17:56:34.000000Z",
"created_at": "2021-04-19T17:56:34.000000Z"
}
}
# Update Project
# HTTP Request
PUT /api/v1/projects/{projectId}
{
"description": "Quisque sit amet tincidunt libero."
}
# Response
HTTP/1.1 200 OK
{
"project": {
"id": 5398,
"name": "My Project",
"description": "Quisque sit amet tincidunt libero.",
"source_type": "project_file",
"created_at": "2021-04-15T15:45:19.000000Z",
"updated_at": "2021-04-15T15:46:05.000000Z"
}
}
# Delete Project
# HTTP Request
DELETE /api/v1/projects/{projectId}
# Response
HTTP/1.1 204 No Content
# Build
# Create Build
# HTTP Request
POST /api/v1/projects/{projectId}/builds
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Accept: application/json, text/plain, */*
Authorization: Bearer {{PERSONAL_ACCESS_TOKEN}}
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="uploaded_source_file"; filename="MyProjectSource.zip"
Content-Type: application/x-zip
< /home/user/.../MockSourceProject.zip
------WebKitFormBoundary7MA4YWxkTrZu0gW--
# Parameters
Key | Description |
---|---|
uploaded_source_file * | The field must have the project source code package, the ZIP file that contains the complete source code of the project. It must include the ´composer.json´ file in the root folder. |
github_access_token | An optional GitHub token to access ´composer.json´ dependencies that are managed in private repositories. |
# Response
HTTP/1.1 201 Created
{
"build": {
"id": 1448,
"state": "initial-state",
"project_id": 5398,
"updated_at": "2021-04-20T08:02:58.000000Z",
"created_at": "2021-04-20T08:02:58.000000Z"
}
}
# List Builds
# HTTP Request
GET /api/v1/projects/{projectId}/builds
# Response
HTTP/1.1 200 OK
{
"builds": [
{
"id": 1448,
"state": "prefixing",
"build_uuid": "ea59d7d5-b648-4b8f-8f17-1438f6a776ea",
"package_name": "project\/mock",
"project_id": 5398,
"created_at": "2021-04-20T08:02:58.000000Z",
"updated_at": "2021-04-20T08:03:05.000000Z"
},
{
"id": 1446,
"state": "success",
"build_uuid": "810b6220-d64f-4879-ab80-e0a3eaf20316",
"package_name": "project\/mock",
"project_id": 5398,
"created_at": "2021-04-19T14:02:20.000000Z",
"updated_at": "2021-04-19T14:03:51.000000Z"
}
]
}
# Get Build
# HTTP Request
GET /api/v1/projects/{projectId}/builds/{buildId}
# Response
HTTP/1.1 200 OK
{
"build": {
"id": 1448,
"state": "success",
"build_uuid": "ea59d7d5-b648-4b8f-8f17-1438f6a776ea",
"package_name": "project\/mock",
"project_id": 5398,
"created_at": "2021-04-20T08:02:58.000000Z",
"updated_at": "2021-04-20T08:04:16.000000Z"
}
}
# Download Build
# HTTP Request
GET /api/v1/projects/{projectId}/builds/{buildId}/download
# Response
HTTP/1.1 200 OK
Content-Disposition: attachment; filename=ea59d7d5-b648-4b8f-8f17-1438f6a776ea.processed.zip
Content-Type: application/x-zip
...
# Download Build Log
# HTTP Request
GET /api/v1/projects/{projectId}/builds/{buildId}/downloadLog
# Response
HTTP/1.1 200 OK
Content-Type: application/x-zip
Content-Disposition: attachment; filename=ea59d7d5-b648-4b8f-8f17-1438f6a776ea.log.zip
...
# Cancel Build
# HTTP Request
POST /api/v1/projects/{projectId}/builds/{buildId}/cancel
# Response
HTTP/1.1 202 Accepted
{
"build": {
"id": 1449,
"state": "user-cancelled",
"build_uuid": "3660939c-73e2-450f-9d5c-e52f69c06992",
"package_name": "project\/mock",
"project_id": 5398,
"created_at": "2021-04-20T08:13:52.000000Z",
"updated_at": "2021-04-20T08:14:05.000000Z"
}
}
# Delete Build
# HTTP Request
DELETE /api/v1/projects/{projectId}/builds/{buildId}
# Response
HTTP/1.1 204 No Content