Introduction
This documentation aims to provide all the information you need to work with our API.
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>
Authenticating requests
This API is not authenticated.
Endpoints
GET api/user
Example request:
curl --request GET \
--get "https://forge.test/api/user" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/user"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/webhooks/github
Example request:
curl --request POST \
"https://forge.test/api/webhooks/github" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/webhooks/github"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/tickets
Example request:
curl --request POST \
"https://forge.test/api/v1/tickets" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "summary=b"\
--form "description=Et animi quos velit et fugiat."\
--form "service_product_id=architecto"\
--form "email=zbailey@example.net"\
--form "player_id=i"\
--form "build=y"\
--form "platform=v"\
--form "severity=minor"\
--form "attachments[]=@/private/var/folders/48/zstrqz0d3cb36v0r9cdnbh7c0000gn/T/phpylPExO"
const url = new URL(
"https://forge.test/api/v1/tickets"
);
const headers = {
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('summary', 'b');
body.append('description', 'Et animi quos velit et fugiat.');
body.append('service_product_id', 'architecto');
body.append('email', 'zbailey@example.net');
body.append('player_id', 'i');
body.append('build', 'y');
body.append('platform', 'v');
body.append('severity', 'minor');
body.append('attachments[]', document.querySelector('input[name="attachments[]"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/me
Example request:
curl --request GET \
--get "https://forge.test/api/v1/me" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/me"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/projects
Example request:
curl --request GET \
--get "https://forge.test/api/v1/projects" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/projects"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/projects/{id}
Example request:
curl --request GET \
--get "https://forge.test/api/v1/projects/6dbe929c-6f1f-47df-bc3c-b4ea3d0d55f6" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/projects/6dbe929c-6f1f-47df-bc3c-b4ea3d0d55f6"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/lookups
Example request:
curl --request GET \
--get "https://forge.test/api/v1/lookups" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/lookups"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/issues
Example request:
curl --request GET \
--get "https://forge.test/api/v1/issues" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/issues"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/issues
Example request:
curl --request POST \
"https://forge.test/api/v1/issues" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"project_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
\"summary\": \"g\",
\"description\": \"Eius et animi quos velit et.\",
\"issue_type_id\": 16,
\"issue_priority_id\": 16,
\"issue_status_id\": 16,
\"assignee_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
\"parent_id\": \"c90237e9-ced5-3af6-88ea-84aeaa148878\",
\"tags\": [
\"architecto\"
]
}"
const url = new URL(
"https://forge.test/api/v1/issues"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"project_id": "6ff8f7f6-1eb3-3525-be4a-3932c805afed",
"summary": "g",
"description": "Eius et animi quos velit et.",
"issue_type_id": 16,
"issue_priority_id": 16,
"issue_status_id": 16,
"assignee_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
"parent_id": "c90237e9-ced5-3af6-88ea-84aeaa148878",
"tags": [
"architecto"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/issues/{id}
Example request:
curl --request GET \
--get "https://forge.test/api/v1/issues/OMP-1" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
PUT api/v1/issues/{id}
Example request:
curl --request PUT \
"https://forge.test/api/v1/issues/OMP-1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"summary\": \"b\",
\"description\": \"Eius et animi quos velit et.\",
\"issue_type_id\": 16,
\"issue_priority_id\": 16,
\"issue_status_id\": 16,
\"assignee_id\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
\"parent_id\": \"c90237e9-ced5-3af6-88ea-84aeaa148878\",
\"tags\": [
\"architecto\"
]
}"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"summary": "b",
"description": "Eius et animi quos velit et.",
"issue_type_id": 16,
"issue_priority_id": 16,
"issue_status_id": 16,
"assignee_id": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
"parent_id": "c90237e9-ced5-3af6-88ea-84aeaa148878",
"tags": [
"architecto"
]
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/issues/{issue_id}/transition
Example request:
curl --request POST \
"https://forge.test/api/v1/issues/OMP-1/transition" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"to_status_id\": 16
}"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/transition"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"to_status_id": 16
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/issues/{issue_id}/comments
Example request:
curl --request POST \
"https://forge.test/api/v1/issues/OMP-1/comments" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"body\": \"b\"
}"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/comments"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"body": "b"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/issues/{issue_id}/attachments
Example request:
curl --request POST \
"https://forge.test/api/v1/issues/OMP-1/attachments" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/private/var/folders/48/zstrqz0d3cb36v0r9cdnbh7c0000gn/T/phpo6yYCq"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/attachments"
);
const headers = {
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET /api/v1/issues/{issue:id}/time/summary
Example request:
curl --request GET \
--get "https://forge.test/api/v1/issues/OMP-1/time/summary" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/time/summary"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST /api/v1/issues/{issue:id}/time/start Starts a running timer for the authenticated user.
Example request:
curl --request POST \
"https://forge.test/api/v1/issues/OMP-1/time/start" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/time/start"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST /api/v1/issues/{issue:id}/time/stop Stops the current running timer for the authenticated user.
Example request:
curl --request POST \
"https://forge.test/api/v1/issues/OMP-1/time/stop" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/time/stop"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST /api/v1/issues/{issue:id}/time Manual log: accepts either {seconds} or {started_at, ended_at}, plus optional note.
Example request:
curl --request POST \
"https://forge.test/api/v1/issues/OMP-1/time" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"started_at\": \"2025-09-19T15:54:45\",
\"ended_at\": \"2051-10-13\",
\"note\": \"n\"
}"
const url = new URL(
"https://forge.test/api/v1/issues/OMP-1/time"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"started_at": "2025-09-19T15:54:45",
"ended_at": "2051-10-13",
"note": "n"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.