Reactions
Thumbs-up / thumbs-down votes on targets
/api/v0/reactionsSubmit a reaction
Record a thumbs-up (1) or thumbs-down (-1) reaction against a target.
Supply target.type and target.metadata. If your organization has no target with that type and metadata, we create one. You identified the target by its metadata, so the response carries the resolved target back to give you its id. For the up and down counts, call GET /api/v0/targets/{target_id}/reactions/summary.
A person gets one reaction per target. Reacting again replaces their earlier value instead of being rejected, so someone who switches from thumbs-up to thumbs-down ends up with a single thumbs-down rather than two reactions.
- With
user_id, that person is held to one reaction per target for all time. - Without
user_id, we fall back to one reaction per target per IP address every 24 hours. This is best effort: people behind a shared network or proxy can overwrite each other. - With neither a
user_idnor a reachable client IP, there is nobody to attribute the reaction to, and the request is rejected with422andfield: "user_id". Send auser_idif your integration cannot present a client IP.
The target to react to, given as a type and its metadata. If your organization has no target with that type and metadata, we create one, so you can react to a docs page nobody has registered yet.
The HTTP method (e.g. GET, POST).
The API endpoint path.
The hostname of the API (e.g. api.example.com).
The API version string (e.g. v1).
1 for thumbs-up, -1 for thumbs-down.
An identifier for the end user submitting the reaction, such as your own user id. We store it exactly as you send it, so prefer an id over an email address. If an email address is all you have, hash it yourself before sending it.
A user_id holds each person to one reaction per target, for all time. Without one we fall back to one reaction per target per IP address every 24 hours.
A unique identifier for a resource. Treat it as an opaque string: don't parse it or build your own.
The resolved target this reaction was recorded against.
A unique identifier for a resource. Treat it as an opaque string: don't parse it or build your own.
Which kind of surface this target identifies. Immutable after create.
A human-readable label, derived from metadata when the target was created.
The details identifying the target. Which fields it carries depends on type; the shape for each type is listed below.
One of the following:
Rest Endpoint Metadata
The HTTP method (e.g. GET, POST).
The API endpoint path.
The hostname of the API (e.g. api.example.com).
The API version string (e.g. v1).
Documentation Metadata
The URL of the documentation page.
The section heading within the page.
The documentation version string.
Cli Command Metadata
The CLI command name.
The subcommand path, which may be multi-word (e.g. "container run").
The CLI version string.
The documented flags and args, e.g. ["--rm", "--network"].
1 for thumbs-up, -1 for thumbs-down.
The ISO 8601 timestamp when the reaction was recorded.
The response metadata for a single resource.
The links for the resource in data.
Where to call this resource in this API, for example /api/v0/feedback/8x7k2mN.
The path to this resource. It starts with a / and carries no domain, so join it to https://inputbuffer.io for a full URL.
Where a person can open this resource in InputBuffer, for example /o/yoyodyne/feedback/8x7k2mN. Use it to link a user straight to the page. web is null when the resource has no page of its own.
The path to this resource. It starts with a / and carries no domain, so join it to https://inputbuffer.io for a full URL.
The links for the objects embedded in this resource, keyed by the field each one sits at. A value is null when the embedded object has nothing to link to. {} when the resource embeds nothing.
401The API token is missing, malformed, or revoked.
The API token is missing, malformed, or revoked.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
403A full-access token was used from a browser (widget-token-restricted), or a widget token's origin isn't allowlisted (forbidden-origin).
A full-access token was used from a browser (widget-token-restricted), or a widget token's origin isn't allowlisted (forbidden-origin).
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
415The request body wasn't sent as application/json (or application/merge-patch+json, which PATCH also accepts). Set the Content-Type header and send a JSON-encoded body.
The request body wasn't sent as application/json (or application/merge-patch+json, which PATCH also accepts). Set the Content-Type header and send a JSON-encoded body.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
422A required field is missing or a field value is invalid. Check field.
A required field is missing or a field value is invalid. Check field.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
429Too many requests.
Too many requests.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
500Something went wrong on our end.
Something went wrong on our end.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
/api/v0/targets/{target_id}/reactions/summaryGet the reaction summary for a target
Returns all-time totals and a 30-day daily breakdown of thumbs-up / thumbs-down reactions for a specific target. Requires a full-access (ib_*) token. Widget tokens are not permitted, as on every endpoint other than feedback and reaction creation.
A unique identifier for a resource. Treat it as an opaque string: don't parse it or build your own.
The target these totals describe.
A unique identifier for a resource. Treat it as an opaque string: don't parse it or build your own.
Which kind of surface this target identifies. Immutable after create.
A human-readable label, derived from metadata when the target was created.
The details identifying the target. Which fields it carries depends on type; the shape for each type is listed below.
One of the following:
Rest Endpoint Metadata
The HTTP method (e.g. GET, POST).
The API endpoint path.
The hostname of the API (e.g. api.example.com).
The API version string (e.g. v1).
Documentation Metadata
The URL of the documentation page.
The section heading within the page.
The documentation version string.
Cli Command Metadata
The CLI command name.
The subcommand path, which may be multi-word (e.g. "container run").
The CLI version string.
The documented flags and args, e.g. ["--rm", "--network"].
The all-time total of thumbs-up reactions.
The all-time total of thumbs-down reactions.
reaction_up minus reaction_down.
The per-day up and down counts for the past 30 days.
The response metadata for a single resource.
The links for the resource in data.
Where to call this resource in this API, for example /api/v0/feedback/8x7k2mN.
The path to this resource. It starts with a / and carries no domain, so join it to https://inputbuffer.io for a full URL.
Where a person can open this resource in InputBuffer, for example /o/yoyodyne/feedback/8x7k2mN. Use it to link a user straight to the page. web is null when the resource has no page of its own.
The path to this resource. It starts with a / and carries no domain, so join it to https://inputbuffer.io for a full URL.
The links for the objects embedded in this resource, keyed by the field each one sits at. A value is null when the embedded object has nothing to link to. {} when the resource embeds nothing.
401The API token is missing, malformed, or revoked.
The API token is missing, malformed, or revoked.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
403Widget tokens are not permitted to access reaction summaries (widget-token-restricted).
Widget tokens are not permitted to access reaction summaries (widget-token-restricted).
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
404No target matches this ID in your organization (target-not-found).
No target matches this ID in your organization (target-not-found).
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.
500Something went wrong on our end.
Something went wrong on our end.
A URI identifying the error type. Stable across releases, so it is safe to switch on.
A short label for the error type.
An explanation of this specific occurrence. May change between releases, so don't parse it.
The HTTP status code, mirroring the response status.
Who most likely caused the problem. user means the person using your app sent something the API rejected, such as a bad value or too many requests; detail is safe to show them. integration means the problem is in your own setup or code, so show them something generic and log detail for yourself. Omitted on internal-error.
Which request field caused the error. Present only on missing-required-field and invalid-field-value.