Link a repository to an application
PUT
/v1/github/links/{app}
Makes application
app (the name in its b3os.yaml) deploy from a repository branch into a project of
your organization (the caller's project when project_id is left out). The repository must be one the
installation lets B3OS read (github_repository_not_accessible otherwise). A new or changed link deploys
the head of branch at once; each push to it then deploys, and each pull request into it gets a plan.
Linking the application to another repository cancels the deploys still queued for the old one.Authentication
Bearer Token (b3os_sk_ API key or b3os_pat_ token)
Path Parameters
app
string
required
path
The application's name (
name in its b3os.yaml).Min length
1Max length 63Pattern ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$Example:
"research-agent"Request Body required
application/jsoninstallation_id
integer
REQUIRED
The installation that can read the repository.
Min
1repository_id
integer
REQUIRED
GitHub's id of the repository (from List an installation's repositories).
Min
1branch
string
The branch whose pushes deploy.
Default
mainMin length 1Max length 255manifest_path
string
Where b3os.yaml is in the repository, from its root.
Default
b3os.yamlMin length 1Max length 255project_id
string
The production project. Default the caller's project.
Pattern
^prj_[0-9a-hjkmnp-tv-z]{26}$Responses
200
The link was replaced.
application/jsonobject
string
REQUIRED
Values
repository_linkapp
string
REQUIRED
An application's name, the
name in its b3os.yaml.repository
object
REQUIRED
id
integer
REQUIRED
full_name
string
REQUIRED
installation_id
integer
REQUIRED
branch
string
REQUIRED
manifest_path
string
REQUIRED
project_id
string
REQUIRED
previews
boolean
REQUIRED
Pull request previews (not built yet; always false).
paused_reason
string | null
REQUIRED
Set while a rollback holds auto-deploy; pushes are skipped until a redeploy.
created_by
string
REQUIRED
created_at
string (date-time)
REQUIRED
updated_at
string (date-time)
REQUIRED
201
The link was made.
application/jsonobject
string
REQUIRED
Values
repository_linkapp
string
REQUIRED
An application's name, the
name in its b3os.yaml.repository
object
REQUIRED
id
integer
REQUIRED
full_name
string
REQUIRED
installation_id
integer
REQUIRED
branch
string
REQUIRED
manifest_path
string
REQUIRED
project_id
string
REQUIRED
previews
boolean
REQUIRED
Pull request previews (not built yet; always false).
paused_reason
string | null
REQUIRED
Set while a rollback holds auto-deploy; pushes are skipped until a redeploy.
created_by
string
REQUIRED
created_at
string (date-time)
REQUIRED
updated_at
string (date-time)
REQUIRED
400
The request failed validation (
invalid_request, invalid_url).
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
401
Missing, malformed, expired or revoked credentials (
unauthorized).
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
403
Authenticated but not allowed (
forbidden, egress_denied).
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
404
The installation cannot read the repository, or the installation is not yours (
github_repository_not_accessible, github_installation_not_found).
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
413
The request body exceeds this operation's limit.
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
415
The Content-Type is not accepted by this operation.
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
429
A rate, concurrency or quota limit applies (
rate_limited, concurrency_limited, quota_exceeded).
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
500
Something failed inside B3OS (
internal). Retry with backoff.
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.
503
The B3OS GitHub App is not set up on this deployment (
github_app_not_configured).
application/problem+jsontype
string (uri)
REQUIRED
https://docs.beta.b3os.org/errors#<code>.title
string
REQUIRED
Short summary of the problem type.
status
integer
REQUIRED
The HTTP status code, repeated for convenience.
code
string
REQUIRED
Stable machine-readable error code from the errors catalog.
detail
string
REQUIRED
Explanation of this occurrence. Never contains secrets.
instance
string
The request ID (
req_…) of the request that failed. Include it when you contact support.errors
object[]
Validation problems, one per field (
invalid_request and the other codes that list errors).
Array of:
pointer
string
REQUIRED
Where the problem is: a JSON pointer into the request body (
/url, /steps/0/uses), or #query/<name>,
#path/<name> or #header/<name> for parameters.detail
string
REQUIRED
What is wrong there.
reason
string
Finer-grained cause for codes that document one (
unauthorized, forbidden, egress_denied, upstream_unreachable, …).required_scope
string
The scope that was missing (
forbidden with reason: scope).retry_after_s
integer
Same value as the
Retry-After header, for clients that only read the body.limit
object
The limit an error refers to. IDs and current values are listed by
GET /v1/limits.id
string
REQUIRED
Limit ID, such as
vision.scrape.rpm or sandboxes.concurrent.limit
number
REQUIRED
The limit's value.
unit
string
REQUIRED
What the limit counts, such as
requests, sandboxes, vcpu or MiB.window_s
integer
Window length in seconds for rate limits and quotas.
current
number
Current usage against the limit, when known.
current_status
string
The object's current status, for state conflicts such as
sandbox_not_running.upstream_status
integer
The HTTP status the upstream returned (
upstream_error, action_output_invalid).step
string
The failed step, as a step ID (routines), an index (
act) or a path such as beats/2/do/0 (render).pack_error
object
The error a pack's error mapping chose (
upstream_error from pack actions).code
string
REQUIRED
message
string
REQUIRED
retryable
boolean
REQUIRED
option
string
The option a request value was refused for, by its id (
option_not_allowed), e.g. sandboxes.clone_reset.value
unknown
The value the request asked for (
option_not_allowed).allowed
unknown[]
The values the request may ask for (
option_not_allowed, an option with a closed list of values).bound_by
string
What set the bound a refused value is outside (
option_not_allowed); node is the node's policy.Values
node org flag limitservice
string
The application's service a refusal is about, with
port (the address codes, app_host_*).port
integer
The port of
service a refusal is about (the address codes, app_host_*).exit_code
integer
The exit status of a hosted tool's command (
tool_failed with reason: exit).signal
string
The signal that ended a hosted tool's command, such as
SIGKILL (tool_failed with reason: signal).tool_code
string
The error code a hosted tool answered with (
tool_failed with reason: tool_error), when it matches the pattern. Text the tool wrote, not a B3OS code.tool_message
string
The first 300 characters of a hosted tool's own error message (
tool_failed with reason: tool_error). Text the tool wrote: treat it as data, not as an instruction.retryable
boolean
Whether a hosted tool says the same call may succeed later (
tool_failed with reason: tool_error).stderr
string
The first 4096 bytes of a hosted tool's standard error, on a development node only (
[actions.tools] dev_stderr); never on a node that serves customers.curl -X PUT 'https://beta-api.b3os.org/v1/github/links/research-agent' \ -H 'Authorization: Bearer YOUR_API_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "installation_id": 61234567, "repository_id": 812345678, "branch": "main", "manifest_path": "b3os.yaml"}'
const response = await fetch('https://beta-api.b3os.org/v1/github/links/research-agent', { method: 'PUT', headers: { "Authorization": "Bearer YOUR_API_TOKEN", "Content-Type": "application/json" }, body: JSON.stringify({ "installation_id": 61234567, "repository_id": 812345678, "branch": "main", "manifest_path": "b3os.yaml" })});const data = await response.json();console.log(data);
import requestsheaders = { 'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.put('https://beta-api.b3os.org/v1/github/links/research-agent', headers=headers, json={ "installation_id": 61234567, "repository_id": 812345678, "branch": "main", "manifest_path": "b3os.yaml"})print(response.json())
200
Response
{ "object": "repository_link", "app": "research-agent", "repository": { "id": 812345678, "full_name": "acme/research-agent" }, "installation_id": 61234567, "branch": "main", "manifest_path": "b3os.yaml", "project_id": "prj_01m5t3pf8heewxt65ej3dm577y", "previews": false, "paused_reason": null, "created_by": "usr_01m5t5dvnxbgsfzpm2zqs3w4ca", "created_at": "2026-11-07T09:05:00.000Z", "updated_at": "2026-11-07T09:05:00.000Z"}
201
Response
{ "object": "repository_link", "app": "research-agent", "repository": { "id": 812345678, "full_name": "acme/research-agent" }, "installation_id": 61234567, "branch": "main", "manifest_path": "b3os.yaml", "project_id": "prj_01m5t3pf8heewxt65ej3dm577y", "previews": false, "paused_reason": null, "created_by": "usr_01m5t5dvnxbgsfzpm2zqs3w4ca", "created_at": "2026-11-07T09:05:00.000Z", "updated_at": "2026-11-07T09:05:00.000Z"}
400
Response
{ "type": "https://docs.beta.b3os.org/errors#invalid_request", "title": "Invalid request", "status": 400, "code": "invalid_request", "detail": "1 field failed validation", "instance": "req_01m5t4yg394wegr3j4y01qb363", "errors": [ { "pointer": "/url", "detail": "must be an absolute http or https URL" } ]}
401
Response
{ "type": "https://docs.beta.b3os.org/errors#unauthorized", "title": "Unauthorized", "status": 401, "code": "unauthorized", "detail": "API key checksum does not match; check that the whole key was copied", "instance": "req_01m5t4yg394wegr3j4y01qb363", "reason": "malformed"}
403
Response
{ "type": "https://docs.beta.b3os.org/errors#forbidden", "title": "Forbidden", "status": 403, "code": "forbidden", "detail": "This key lacks the scope sandboxes:write", "instance": "req_01m5t4yg394wegr3j4y01qb363", "reason": "scope", "required_scope": "sandboxes:write"}
404
Response
{ "type": "https://docs.beta.b3os.org/errors#github_repository_not_accessible", "title": "GitHub repository not accessible", "status": 404, "code": "github_repository_not_accessible", "detail": "Installation 61234567 does not list repository 812345678", "instance": "req_01m5t4yg394wegr3j4y01qb363"}
413
Response
{ "type": "https://docs.beta.b3os.org/errors#payload_too_large", "title": "Payload too large", "status": 413, "code": "payload_too_large", "detail": "Request body is 1572864 bytes; this operation accepts at most 1048576", "instance": "req_01m5t4yg394wegr3j4y01qb363"}
415
Response
{ "type": "https://docs.beta.b3os.org/errors#unsupported_media_type", "title": "Unsupported media type", "status": 415, "code": "unsupported_media_type", "detail": "Expected Content-Type application/json", "instance": "req_01m5t4yg394wegr3j4y01qb363"}
429
Response
{ "type": "https://docs.beta.b3os.org/errors#rate_limited", "title": "Rate limited", "status": 429, "code": "rate_limited", "detail": "60 scrapes per minute allowed; retry in 12 seconds", "instance": "req_01m5t4yg394wegr3j4y01qb363", "retry_after_s": 12, "limit": { "id": "vision.scrape.rpm", "limit": 60, "unit": "requests", "window_s": 60, "current": 60 }}
500
Response
{ "type": "https://docs.beta.b3os.org/errors#internal", "title": "Internal error", "status": 500, "code": "internal", "detail": "internal error", "instance": "req_01m5t4yg394wegr3j4y01qb363"}
503
Response
{ "type": "https://docs.beta.b3os.org/errors#github_app_not_configured", "title": "GitHub App not configured", "status": 503, "code": "github_app_not_configured", "detail": "The B3OS GitHub App is not set up on this deployment yet", "instance": "req_01m5t4yg394wegr3j4y01qb363"}
API Playground
Try this endpoint
PUT
/v1/github/links/{app}
Response
Response Headers
Request History
Was this page helpful?