2017-04-04 16:33:22 +00:00
---
layout: api
page_title: Service - Agent - HTTP API
description: |-
The /agent/service endpoints interact with services on the local agent in
Consul.
---
# Service - Agent HTTP API
2018-10-11 17:48:51 +00:00
The `/agent/service` endpoints interact with services on the local agent in
2017-04-04 16:33:22 +00:00
Consul. These should not be confused with services in the catalog.
## List Services
This endpoint returns all the services that are registered with
the local agent. These services were either provided through configuration files
or added dynamically using the HTTP API.
It is important to note that the services known by the agent may be different
from those reported by the catalog. This is usually due to changes being made
while there is no leader elected. The agent performs active
2023-01-25 16:52:43 +00:00
[anti-entropy](/consul/docs/architecture/anti-entropy), so in most situations
2017-04-04 16:33:22 +00:00
everything will be in sync within a few seconds.
2022-03-19 20:32:38 +00:00
@include 'http_api_results_filtered_by_acls.mdx'
2020-04-06 20:27:35 +00:00
| Method | Path | Produces |
| ------ | ----------------- | ------------------ |
| `GET` | `/agent/services` | `application/json` |
2017-04-04 16:33:22 +00:00
The table below shows this endpoint's support for
2023-01-25 16:52:43 +00:00
[blocking queries](/consul/api-docs/features/blocking),
[consistency modes](/consul/api-docs/features/consistency),
[agent caching](/consul/api-docs/features/caching), and
[required ACLs](/consul/api-docs/api-structure#authentication).
2017-04-04 16:33:22 +00:00
2018-09-06 10:34:28 +00:00
| Blocking Queries | Consistency Modes | Agent Caching | ACL Required |
| ---------------- | ----------------- | ------------- | -------------- |
| `NO` | `none` | `none` | `service:read` |
2017-04-04 16:33:22 +00:00
2022-05-10 15:51:11 +00:00
### Query Parameters
2019-04-16 16:00:15 +00:00
- `filter` `(string: "")` - Specifies the expression used to filter the
queries results prior to returning the data.
2022-05-10 15:51:11 +00:00
- `ns` `(string: "")` <EnterpriseAlert inline /> - Return only the services in the specified namespace.
You can also [specify the namespace through other methods](#methods-to-specify-namespace).
2021-06-22 05:47:03 +00:00
2017-04-04 16:33:22 +00:00
### Sample Request
2020-05-19 18:32:38 +00:00
```shell-session
2017-04-04 16:33:22 +00:00
$ curl \
2018-08-28 16:07:15 +00:00
http://127.0.0.1:8500/v1/agent/services
2017-04-04 16:33:22 +00:00
```
### Sample Response
```json
{
"redis": {
2020-04-06 20:27:35 +00:00
"ID": "redis",
"Service": "redis",
"Tags": [],
"TaggedAddresses": {
"lan": {
"address": "127.0.0.1",
"port": 8000
2018-09-12 16:07:47 +00:00
},
2020-04-06 20:27:35 +00:00
"wan": {
2021-06-22 05:47:03 +00:00
"address": "198.51.100.53",
2020-04-06 20:27:35 +00:00
"port": 80
2018-10-19 08:49:09 +00:00
}
2020-04-06 20:27:35 +00:00
},
"Meta": {
"redis_version": "4.0"
},
2021-06-22 05:47:03 +00:00
"Namespace": "default",
2020-04-06 20:27:35 +00:00
"Port": 8000,
"Address": "",
"EnableTagOverride": false,
2020-11-19 21:27:31 +00:00
"Datacenter": "dc1",
2020-04-06 20:27:35 +00:00
"Weights": {
"Passing": 10,
"Warning": 1
}
2017-04-04 16:33:22 +00:00
}
}
```
2019-04-16 16:00:15 +00:00
### Filtering
The filter is executed against each value in the service mapping with the
following selectors and filter operations being supported:
2021-04-16 19:50:02 +00:00
| Selector | Supported Operations |
| --------------------------------------------- | -------------------------------------------------- |
| `Address` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Connect.Native` | Equal, Not Equal |
| `EnableTagOverride` | Equal, Not Equal |
| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Kind` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Meta` | Is Empty, Is Not Empty, In, Not In |
| `Meta.<any>` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Port` | Equal, Not Equal |
| `Proxy.DestinationServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.DestinationServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.LocalServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.LocalServicePort` | Equal, Not Equal |
| `Proxy.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.TransparentProxy.OutboundListenerPort` | Equal, Not Equal |
| `Proxy.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.Upstreams` | Is Empty, Is Not Empty |
| `Proxy.Upstreams.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.Upstreams.DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.Upstreams.DestinationNamespace` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.Upstreams.DestinationType` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.Upstreams.LocalBindAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Proxy.Upstreams.LocalBindPort` | Equal, Not Equal |
| `Proxy.Upstreams.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `Service` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `TaggedAddresses` | Is Empty, Is Not Empty, In, Not In |
| `TaggedAddresses.<any>.Address` | Equal, Not Equal, In, Not In, Matches, Not Matches |
| `TaggedAddresses.<any>.Port` | Equal, Not Equal |
| `Tags` | In, Not In, Is Empty, Is Not Empty |
| `Weights.Passing` | Equal, Not Equal |
| `Weights.Warning` | Equal, Not Equal |
2019-04-16 16:00:15 +00:00
2018-10-11 09:44:42 +00:00
## Get Service Configuration
This endpoint was added in Consul 1.3.0 and returns the full service definition
for a single service instance registered on the local agent. It is used by
2023-05-05 17:41:40 +00:00
[service mesh proxies](/consul/docs/connect/proxies) to discover the embedded proxy
2018-10-11 09:44:42 +00:00
configuration that was registered with the instance.
It is important to note that the services known by the agent may be different
from those reported by the catalog. This is usually due to changes being made
while there is no leader elected. The agent performs active
2023-01-25 16:52:43 +00:00
[anti-entropy](/consul/docs/architecture/anti-entropy), so in most situations
2018-10-11 09:44:42 +00:00
everything will be in sync within a few seconds.
2020-04-06 20:27:35 +00:00
| Method | Path | Produces |
| ------ | ---------------------------- | ------------------ |
| `GET` | `/agent/service/:service_id` | `application/json` |
2018-10-11 09:44:42 +00:00
The table below shows this endpoint's support for
2023-01-25 16:52:43 +00:00
[blocking queries](/consul/api-docs/features/blocking),
[consistency modes](/consul/api-docs/features/consistency),
[agent caching](/consul/api-docs/features/caching), and
[required ACLs](/consul/api-docs/api-structure#authentication).
2018-10-11 09:44:42 +00:00
2020-04-06 20:27:35 +00:00
| Blocking Queries | Consistency Modes | Agent Caching | ACL Required |
| ----------------- | ----------------- | ------------- | -------------- |
| `YES`<sup>1</sup> | `none` | `none` | `service:read` |
2018-10-11 09:44:42 +00:00
2020-12-08 23:24:36 +00:00
<sup>
1
</sup> Supports <a href="/api/features/blocking#hash-based-blocking-queries">
hash-based blocking
</a> only.
2018-10-11 09:44:42 +00:00
2022-05-10 15:51:11 +00:00
### Path Parameters
2018-10-11 09:44:42 +00:00
2022-05-10 15:51:11 +00:00
- `service_id` `(string: <required>)` - Specifies the ID of the service to fetch.
2018-10-11 09:44:42 +00:00
2022-05-10 15:51:11 +00:00
### Query Parameters
- `ns` `(string: "")` <EnterpriseAlert inline /> - Specifies the namespace of the service you lookup.
You can also [specify the namespace through other methods](#methods-to-specify-namespace).
2021-06-22 05:47:03 +00:00
2018-10-11 09:44:42 +00:00
### Sample Request
2023-02-28 22:09:56 +00:00
The following example request calls the `web-sidecar-proxy` service:
2020-05-19 18:32:38 +00:00
```shell-session
2018-10-11 09:44:42 +00:00
$ curl \
http://127.0.0.1:8500/v1/agent/service/web-sidecar-proxy
```
### Sample Response
2023-02-28 22:09:56 +00:00
The response contains the fields specified in the [service
definition](/consul/docs/services/configuration/services-configuration-reference), but it includes an extra `ContentHash` field that contains the [hash-based blocking
query](/consul/api-docs/features/blocking#hash-based-blocking-queries) hash for the result. The
same hash is also present in `X-Consul-ContentHash`.
2018-10-11 09:44:42 +00:00
```json
{
2020-04-06 20:27:35 +00:00
"Kind": "connect-proxy",
"ID": "web-sidecar-proxy",
"Service": "web-sidecar-proxy",
"Tags": null,
"Meta": null,
2021-06-22 05:47:03 +00:00
"Namespace": "default",
2020-04-06 20:27:35 +00:00
"Port": 18080,
"Address": "",
"TaggedAddresses": {
"lan": {
"address": "127.0.0.1",
"port": 8000
2018-10-11 09:44:42 +00:00
},
2020-04-06 20:27:35 +00:00
"wan": {
2021-06-22 05:47:03 +00:00
"address": "198.51.100.53",
2020-04-06 20:27:35 +00:00
"port": 80
2018-10-11 09:44:42 +00:00
}
2020-04-06 20:27:35 +00:00
},
"Weights": {
"Passing": 1,
"Warning": 1
},
"EnableTagOverride": false,
2020-11-19 21:27:31 +00:00
"Datacenter": "dc1",
2020-04-06 20:27:35 +00:00
"ContentHash": "4ecd29c7bc647ca8",
"Proxy": {
"DestinationServiceName": "web",
"DestinationServiceID": "web",
"LocalServiceAddress": "127.0.0.1",
"LocalServicePort": 8080,
2021-04-16 19:50:02 +00:00
"Mode": "transparent",
"TransparentProxy": {
"OutboundListenerPort": 22500
},
2020-04-06 20:27:35 +00:00
"Config": {
"foo": "bar"
},
"Upstreams": [
{
"DestinationType": "service",
"DestinationName": "db",
"LocalBindPort": 9191
}
]
}
2018-10-11 09:44:42 +00:00
}
```
2019-01-07 14:39:23 +00:00
## Get local service health
Retrieve an aggregated state of service(s) on the local agent by name.
This endpoints support JSON format and text/plain formats, JSON being the
default. In order to get the text format, you can append `?format=text` to
the URL or use Mime Content negotiation by specifying a HTTP Header
`Accept` starting with `text/plain`.
2019-11-06 04:34:46 +00:00
| Method | Path | Produces |
| ------ | ------------------------------------------------------ | ------------------ |
| `GET` | `/agent/health/service/name/:service_name` | `application/json` |
| `GET` | `/agent/health/service/name/:service_name?format=text` | `text/plain` |
2019-01-07 14:39:23 +00:00
The table below shows this endpoint's support for
2023-01-25 16:52:43 +00:00
[blocking queries](/consul/api-docs/features/blocking),
[consistency modes](/consul/api-docs/features/consistency),
[agent caching](/consul/api-docs/features/caching), and
[required ACLs](/consul/api-docs/api-structure#authentication).
2019-01-07 14:39:23 +00:00
| Blocking Queries | Consistency Modes | Agent Caching | ACL Required |
| ---------------- | ----------------- | ------------- | -------------- |
| `NO` | `none` | `none` | `service:read` |
2021-06-16 20:13:32 +00:00
Those endpoints return the aggregated values of all health checks for the
2019-01-07 14:39:23 +00:00
service instance(s) and will return the corresponding HTTP codes:
2022-01-12 23:05:01 +00:00
| Result | Meaning |
| ------ | ---------------------------------------------------------------- |
2021-06-16 20:13:32 +00:00
| `200` | All health checks of every matching service instance are passing |
2022-01-12 23:05:01 +00:00
| `400` | Bad parameter (missing service name of id) |
| `404` | No such service id or name |
2021-06-16 20:13:32 +00:00
| `429` | Some health checks are passing, at least one is warning |
| `503` | At least one of the health checks is critical |
2019-01-07 14:39:23 +00:00
2019-11-06 04:34:46 +00:00
Those endpoints might be useful for the following use-cases:
2019-01-07 14:39:23 +00:00
2020-04-06 20:27:35 +00:00
- a load-balancer wants to check IP connectivity with an agent and retrieve
2019-01-07 14:39:23 +00:00
the aggregated status of given service
2021-06-16 20:13:32 +00:00
- create aliases for a given service (thus, the health check of alias uses
http://localhost:8500/v1/agent/service/id/aliased_service_id health check)
2019-01-07 14:39:23 +00:00
##### Note
2020-04-06 20:27:35 +00:00
2019-01-07 14:39:23 +00:00
If you know the ID of service you want to target, it is recommended to use
2023-01-25 16:52:43 +00:00
[`/v1/agent/health/service/id/:service_id`](/consul/api-docs/agent/service#get-local-service-health-by-id)
2019-01-07 14:39:23 +00:00
so you have the result for the service only. When requesting
`/v1/agent/health/service/name/:service_name`, the caller will receive the
worst state of all services having the given name.
2022-05-10 15:51:11 +00:00
### Path Parameters
- `service_name` `(string: <required>)` - Specifies the name of the service to retrieve.
### Query Parameters
- `ns` `(string: "")` <EnterpriseAlert inline /> - Specifies the namespace of the service you lookup.
You can also [specify the namespace through other methods](#methods-to-specify-namespace).
2019-01-07 14:39:23 +00:00
### Sample Requests
Given 2 services with name `web`, with web2 critical and web1 passing:
2021-07-20 04:29:13 +00:00
#### List the worst status across all instances of the `web` service (HTTP 503)
2019-01-07 14:39:23 +00:00
##### By Name, Text
2022-01-12 23:05:01 +00:00
```shell-session
$ curl "http://localhost:8500/v1/agent/health/service/name/web?format=text"
2019-01-07 14:39:23 +00:00
critical
```
##### By Name, JSON
2021-07-20 04:29:13 +00:00
For the JSON output, the response is an array containing the details of each
passing, warning, or critical service.
2019-01-07 14:39:23 +00:00
```shell
curl localhost:8500/v1/agent/health/service/name/web
```
```json
2021-07-20 04:29:13 +00:00
[
{
"AggregatedStatus": "passing",
"Service": {
"ID": "web1",
2020-04-06 20:27:35 +00:00
"Service": "web",
2021-07-20 04:29:13 +00:00
"Tags": [
"rails"
],
"Meta": {},
"Port": 80,
2020-04-06 20:27:35 +00:00
"Address": "",
2021-07-20 04:29:13 +00:00
"SocketPath": "",
2020-04-06 20:27:35 +00:00
"TaggedAddresses": {
"lan": {
2021-07-20 04:29:13 +00:00
"Address": "127.0.0.1",
"Port": 8000
2020-04-06 20:27:35 +00:00
},
"wan": {
2021-07-20 04:29:13 +00:00
"Address": "198.51.100.53",
"Port": 80
2019-08-09 19:32:54 +00:00
}
2020-04-06 20:27:35 +00:00
},
2021-07-20 04:29:13 +00:00
"Weights": {
"Passing": 1,
"Warning": 1
2020-04-06 20:27:35 +00:00
},
2021-07-20 04:29:13 +00:00
"EnableTagOverride": false,
"Namespace": "default",
"Datacenter": "dc1"
},
"Checks": []
},
{
"AggregatedStatus": "critical",
"Service": {
"ID": "web2",
2020-04-06 20:27:35 +00:00
"Service": "web",
2021-07-20 04:29:13 +00:00
"Tags": [
"rails"
],
"Meta": {},
"Port": 80,
2020-04-06 20:27:35 +00:00
"Address": "",
2021-07-20 04:29:13 +00:00
"SocketPath": "",
2020-04-06 20:27:35 +00:00
"TaggedAddresses": {
"lan": {
2021-07-20 04:29:13 +00:00
"Address": "127.0.0.1",
"Port": 8000
2020-04-06 20:27:35 +00:00
},
"wan": {
2021-07-20 04:29:13 +00:00
"Address": "198.51.100.54",
"Port": 80
2019-01-07 14:39:23 +00:00
}
2020-04-06 20:27:35 +00:00
},
2021-07-20 04:29:13 +00:00
"Weights": {
"Passing": 1,
"Warning": 1
2020-04-06 20:27:35 +00:00
},
2021-07-20 04:29:13 +00:00
"EnableTagOverride": false,
"Namespace": "default",
"Datacenter": "dc1"
},
"Checks": [
{
"Node": "server1",
"CheckID": "service:web2",
"Name": "Service 'web' check",
"Status": "critical",
"Notes": "",
"Output": "Get \"http://localhost/health\": dial tcp [::1]:80: connect: connection refused",
"ServiceID": "web2",
"ServiceName": "web",
"ServiceTags": [
"rails"
],
"Type": "",
"Namespace": "default",
"Definition": {
"Interval": "0s",
"Timeout": "0s",
"DeregisterCriticalServiceAfter": "0s",
"HTTP": "",
"Header": null,
"Method": "",
"Body": "",
"TLSServerName": "",
"TLSSkipVerify": false,
"TCP": ""
},
"CreateIndex": 0,
"ModifyIndex": 0
}
]
}
]
2019-01-07 14:39:23 +00:00
```
2021-07-20 04:29:13 +00:00
## Get local service health by ID ((#get-local-service-health-by-its-id))
Retrieve the health state of a specific service on the local agent by ID.
| Method | Path | Produces |
| ------ | -------------------------------------------------- | ------------------ |
| `GET` | `/agent/health/service/id/:service_id` | `application/json` |
| `GET` | `/agent/health/service/id/:service_id?format=text` | `text/plain` |
The supported request parameters are the same as
2023-01-25 16:52:43 +00:00
[`/v1/agent/health/service/name/:service_name`](/consul/api-docs/agent/service#get-local-service-health).
2021-07-20 04:29:13 +00:00
### Sample Requests
Query the health status of the service with ID `web2`.
2019-01-07 14:39:23 +00:00
#### List status of web2 (HTTP 503)
##### Failure By ID, Text
2022-01-12 23:05:01 +00:00
```shell-session
$ curl "http://localhost:8500/v1/agent/health/service/id/web2?format=text"
2019-01-07 14:39:23 +00:00
critical
```
##### Failure By ID, JSON
2021-07-20 04:29:13 +00:00
In JSON, the output for a query by ID is an object containing only the details
for that service.
2019-01-07 14:39:23 +00:00
```shell
curl localhost:8500/v1/agent/health/service/id/web2
```
```json
{
2021-07-20 04:29:13 +00:00
"AggregatedStatus": "critical",
"Service": {
2020-04-06 20:27:35 +00:00
"ID": "web2",
"Service": "web",
2021-07-20 04:29:13 +00:00
"Tags": [
"rails"
],
"Meta": {},
"Port": 80,
2020-04-06 20:27:35 +00:00
"Address": "",
2021-07-20 04:29:13 +00:00
"SocketPath": "",
2020-04-06 20:27:35 +00:00
"TaggedAddresses": {
"lan": {
2021-07-20 04:29:13 +00:00
"Address": "127.0.0.1",
"Port": 8000
2020-04-06 20:27:35 +00:00
},
"wan": {
2021-07-20 04:29:13 +00:00
"Address": "198.51.100.54",
"Port": 80
2020-04-06 20:27:35 +00:00
}
},
2021-07-20 04:29:13 +00:00
"Weights": {
"Passing": 1,
"Warning": 1
2020-04-06 20:27:35 +00:00
},
2021-07-20 04:29:13 +00:00
"EnableTagOverride": false,
"Namespace": "default",
"Datacenter": "dc1"
},
"Checks": [
{
"Node": "server1",
"CheckID": "service:web2",
"Name": "Service 'web' check",
"Status": "critical",
"Notes": "",
"Output": "Get \"http://localhost/health\": dial tcp [::1]:80: connect: connection refused",
"ServiceID": "web2",
"ServiceName": "web",
"ServiceTags": [
"rails"
],
"Type": "",
"Namespace": "default",
"Definition": {
"Interval": "0s",
"Timeout": "0s",
"DeregisterCriticalServiceAfter": "0s",
"HTTP": "",
"Header": null,
"Method": "",
"Body": "",
"TLSServerName": "",
"TLSSkipVerify": false,
"TCP": ""
},
"CreateIndex": 0,
"ModifyIndex": 0
}
]
2019-01-07 14:39:23 +00:00
}
```
2021-07-20 04:29:13 +00:00
#### List status of web1 (HTTP 200)
2019-01-07 14:39:23 +00:00
##### Success By ID, Text
```shell
2022-01-12 23:05:01 +00:00
$ curl "localhost:8500/v1/agent/health/service/id/web1?format=text"
2019-01-07 14:39:23 +00:00
passing
```
#### Success By ID, JSON
```shell
curl localhost:8500/v1/agent/health/service/id/web1
```
```json
{
2021-07-20 04:29:13 +00:00
"AggregatedStatus": "passing",
"Service": {
2020-04-06 20:27:35 +00:00
"ID": "web1",
"Service": "web",
2021-07-20 04:29:13 +00:00
"Tags": [
"rails"
],
"Meta": {},
"Port": 80,
2020-04-06 20:27:35 +00:00
"Address": "",
2021-07-20 04:29:13 +00:00
"SocketPath": "",
2020-04-06 20:27:35 +00:00
"TaggedAddresses": {
"lan": {
2021-07-20 04:29:13 +00:00
"Address": "127.0.0.1",
"Port": 8000
2020-04-06 20:27:35 +00:00
},
"wan": {
2021-07-20 04:29:13 +00:00
"Address": "198.51.100.53",
"Port": 80
2020-04-06 20:27:35 +00:00
}
},
2021-07-20 04:29:13 +00:00
"Weights": {
"Passing": 1,
"Warning": 1
2020-04-06 20:27:35 +00:00
},
2021-07-20 04:29:13 +00:00
"EnableTagOverride": false,
"Namespace": "default",
"Datacenter": "dc1"
},
"Checks": []
2019-01-07 14:39:23 +00:00
}
```
2017-04-04 16:33:22 +00:00
## Register Service
2019-09-02 15:38:29 +00:00
This endpoint adds a new service, with optional health checks, to the local
2017-04-04 16:33:22 +00:00
agent.
The agent is responsible for managing the status of its local services, and for
sending updates about its local services to the servers to keep the global
catalog in sync.
2018-05-29 21:07:40 +00:00
For "connect-proxy" kind services, the `service:write` ACL for the
2018-09-12 16:07:47 +00:00
`Proxy.DestinationServiceName` value is also required to register the service.
2018-05-29 21:07:40 +00:00
2020-04-06 20:27:35 +00:00
| Method | Path | Produces |
| ------ | ------------------------- | ------------------ |
| `PUT` | `/agent/service/register` | `application/json` |
2017-04-04 16:33:22 +00:00
The table below shows this endpoint's support for
2023-01-25 16:52:43 +00:00
[blocking queries](/consul/api-docs/features/blocking),
[consistency modes](/consul/api-docs/features/consistency),
[agent caching](/consul/api-docs/features/caching), and
[required ACLs](/consul/api-docs/api-structure#authentication).
2017-04-04 16:33:22 +00:00
2018-09-06 10:34:28 +00:00
| Blocking Queries | Consistency Modes | Agent Caching | ACL Required |
| ---------------- | ----------------- | ------------- | --------------- |
| `NO` | `none` | `none` | `service:write` |
2017-04-04 16:33:22 +00:00
2023-01-25 16:52:43 +00:00
The corresponding CLI command is [`consul services register`](/consul/commands/services/register).
2022-01-10 19:21:32 +00:00
2022-05-10 15:51:11 +00:00
### Query Parameters
2019-09-02 15:38:29 +00:00
2021-06-16 20:13:32 +00:00
- `replace-existing-checks` - Missing health checks from the request will be deleted from the agent. Using this parameter allows to idempotently register a service and its checks without having to manually deregister checks.
2019-09-02 15:38:29 +00:00
2022-05-10 15:51:11 +00:00
- `ns` `(string: "")` <EnterpriseAlert inline /> - Specifies the namespace of the service you register.
You can also [specify the namespace through other methods](#methods-to-specify-namespace).
### JSON Request Body Schema
2017-04-04 16:33:22 +00:00
2023-02-28 22:09:56 +00:00
The `/agent/service/register` endpoint supports camel case and _snake case_ for service definition keys. Snake case is a convention in which keys with two or more words have underscores between them. Snake case ensures compatibility with the agent configuration file format.
2018-09-12 16:07:47 +00:00
2017-04-04 16:33:22 +00:00
- `Name` `(string: <required>)` - Specifies the logical name of the service.
2020-01-15 15:36:17 +00:00
Many service instances may share the same logical service name. We recommend using
2023-02-28 22:09:56 +00:00
valid DNS labels for service definition names. Refer to the Internet Engineering Task Force's [RFC 1123](https://datatracker.ietf.org/doc/html/rfc1123#page-72) for additional information. Service names that conform to standard usage ensures compatibility with external DNSs. Refer to [Services Configuration Reference](/consul/docs/services/configuration/services-configuration-reference#name) for additional information.
2017-04-04 16:33:22 +00:00
- `ID` `(string: "")` - Specifies a unique ID for this service. This must be
unique per _agent_. This defaults to the `Name` parameter if not provided.
- `Tags` `(array<string>: nil)` - Specifies a list of tags to assign to the
2023-02-28 22:09:56 +00:00
service. Tags enable you to filter when querying for the services and are exposed in Consul APIs. We recommend using
valid DNS labels for tags. Refer to the Internet Engineering Task Force's [RFC 1123](https://datatracker.ietf.org/doc/html/rfc1123#page-72) for additional information. Tags that conform to standard usage ensures compatibility with external DNSs. Refer to [Services Configuration Reference](/consul/docs/services/configuration/services-configuration-reference#tags) for additional information.
2017-04-04 16:33:22 +00:00
- `Address` `(string: "")` - Specifies the address of the service. If not
provided, the agent's address is used as the address for the service during
DNS queries.
2019-06-17 14:51:50 +00:00
- `TaggedAddresses` `(map<string|object>: nil)` - Specifies a map of explicit LAN
and WAN addresses for the service instance. Both the address and port can be
specified within the map values.
2018-03-28 14:04:50 +00:00
- `Meta` `(map<string|string>: nil)` - Specifies arbitrary KV metadata
2018-02-11 13:12:41 +00:00
linked to the service instance.
2022-05-10 15:51:11 +00:00
- `Namespace` `(string: "")` <EnterpriseAlert inline /> - Specifies the namespace of the service you register.
This field takes precedence over the `ns` query parameter,
one of several [other methods to specify the namespace](#methods-to-specify-namespace).
2021-06-22 05:47:03 +00:00
2017-12-31 16:40:35 +00:00
- `Port` `(int: 0)` - Specifies the port of the service.
2023-05-17 20:27:21 +00:00
- `Kind` `(string: "")` - The kind of service. Defaults to `""`, which is a
typical Consul service. You can specify the following values:
- `"connect-proxy"` for [service mesh](/consul/docs/connect) proxies representing another service
- `"mesh-gateway"` for instances of a [mesh gateway](/consul/docs/connect/gateways/mesh-gateway#service-mesh-proxy-configuration)
- `"terminating-gateway"` for instances of a [terminating gateway](/consul/docs/connect/gateways/terminating-gateway)
- `"ingress-gateway"` for instances of an [ingress gateway](/consul/docs/connect/gateways/ingress-gateway)
2018-05-29 21:07:40 +00:00
2018-09-12 16:07:47 +00:00
- `Proxy` `(Proxy: nil)` - From 1.2.3 on, specifies the configuration for a
2023-05-05 17:41:40 +00:00
service mesh proxy instance. This is only valid if `Kind` defines a proxy or gateway.
2023-09-06 23:55:18 +00:00
Refer to the [Service mesh proxy configuration reference](/consul/docs/connect/proxies/proxy-config-reference)
2019-06-14 05:52:50 +00:00
for full details.
2018-05-29 21:07:40 +00:00
2019-01-07 14:39:23 +00:00
- `Connect` `(Connect: nil)` - Specifies the
2023-05-05 17:41:40 +00:00
[configuration for service mesh](/consul/docs/connect/configuration). The connect subsystem provides Consul's service mesh capabilities. Refer to the
2018-09-12 16:07:47 +00:00
[Connect Structure](#connect-structure) section below for supported fields.
2018-06-05 16:43:49 +00:00
2017-04-04 16:33:22 +00:00
- `Check` `(Check: nil)` - Specifies a check. Please see the
2023-01-25 16:52:43 +00:00
[check documentation](/consul/api-docs/agent/check) for more information about the
2017-05-15 19:49:13 +00:00
accepted fields. If you don't provide a name or id for the check then they
will be generated. To provide a custom id and/or name set the `CheckID`
and/or `Name` field.
2018-02-11 13:12:41 +00:00
2018-10-19 08:49:09 +00:00
- `Checks` `(array<Check>: nil)` - Specifies a list of checks. Please see the
2023-01-25 16:52:43 +00:00
[check documentation](/consul/api-docs/agent/check) for more information about the
2017-05-15 19:49:13 +00:00
accepted fields. If you don't provide a name or id for the check then they
will be generated. To provide a custom id and/or name set the `CheckID`
and/or `Name` field. The automatically generated `Name` and `CheckID` depend
on the position of the check within the array, so even though the behavior is
2017-05-17 18:22:00 +00:00
deterministic, it is recommended for all checks to either let consul set the
2017-05-15 19:49:13 +00:00
`CheckID` by leaving the field empty/omitting it or to provide a unique value.
2017-04-04 16:33:22 +00:00
- `EnableTagOverride` `(bool: false)` - Specifies to disable the anti-entropy
feature for this service's tags. If `EnableTagOverride` is set to `true` then
2023-01-25 16:52:43 +00:00
external agents can update this service in the [catalog](/consul/api-docs/catalog)
2017-04-04 16:33:22 +00:00
and modify the tags. Subsequent local sync operations by this agent will
ignore the updated tags. For instance, if an external agent modified both the
tags and the port for this service and `EnableTagOverride` was set to `true`
then after the next sync cycle the service's port would revert to the original
value but the tags would maintain the updated value. As a counter example, if
an external agent modified both the tags and port for this service and
`EnableTagOverride` was set to `false` then after the next sync cycle the
service's port _and_ the tags would revert to the original value and all
modifications would be lost.
2023-02-28 22:09:56 +00:00
- `Weights` `(Weights: nil)` - Specifies weights for the service. Refer to
[Services Configuration Reference](/consul/docs/services/configuraiton/services-configuration-reference#weights) for additional information. Default is
2018-10-19 08:49:09 +00:00
`{"Passing": 1, "Warning": 1}`.
2023-02-28 22:09:56 +00:00
Weights only apply to the locally registered service.
If multiple nodes register the same service, each node implements `EnableTagOverride` and other service configuration items independently. Updating the tags for the service registered
on one node does not necessarily update the same tags on services with the same name registered on another node. If `EnableTagOverride` is not specified the default value is
2023-01-25 16:52:43 +00:00
`false`. See [anti-entropy syncs](/consul/docs/architecture/anti-entropy) for
2023-02-28 22:09:56 +00:00
additional information.
2017-04-04 16:33:22 +00:00
2018-06-05 16:43:49 +00:00
#### Connect Structure
For the `Connect` field, the parameters are:
- `Native` `(bool: false)` - Specifies whether this service supports
2023-05-05 17:41:40 +00:00
the [Consul service mesh](/consul/docs/connect) protocol [natively](/consul/docs/connect/native).
If this is true, then service mesh proxies, DNS queries, etc. will be able to
2018-06-05 16:43:49 +00:00
service discover this service.
2018-10-11 09:44:42 +00:00
- `Proxy` `(Proxy: nil)` -
2023-08-18 18:54:42 +00:00
**Deprecated** Specifies that a managed service mesh proxy should be started
for this service instance, and optionally provides configuration for the proxy.
Managed proxies (which have been deprecated since Consul v1.3.0) have been
[removed](/consul/docs/connect/proxies) since v1.6.0.
2018-10-11 09:44:42 +00:00
- `SidecarService` `(ServiceDefinition: nil)` - Specifies an optional nested
2023-09-06 23:55:18 +00:00
service definition to register. Refer to
[Deploy sidecar services](/consul/docs/connect/proxies/deploy-sidecar-services) for additional information.
2018-06-05 16:43:49 +00:00
2017-04-04 16:33:22 +00:00
### Sample Payload
```json
{
"ID": "redis1",
"Name": "redis",
2020-04-06 20:27:35 +00:00
"Tags": ["primary", "v1"],
2017-04-04 16:33:22 +00:00
"Address": "127.0.0.1",
"Port": 8000,
2018-03-28 14:04:50 +00:00
"Meta": {
2018-02-11 13:12:41 +00:00
"redis_version": "4.0"
},
2017-04-04 16:33:22 +00:00
"EnableTagOverride": false,
"Check": {
"DeregisterCriticalServiceAfter": "90m",
2017-10-10 23:37:08 +00:00
"Args": ["/usr/local/bin/check_redis.py"],
2017-04-04 16:33:22 +00:00
"Interval": "10s",
2019-11-02 16:34:20 +00:00
"Timeout": "5s"
2018-10-19 08:49:09 +00:00
},
"Weights": {
"Passing": 10,
"Warning": 1
2017-04-04 16:33:22 +00:00
}
}
```
### Sample Request
2020-05-19 18:32:38 +00:00
```shell-session
2017-04-04 16:33:22 +00:00
$ curl \
--request PUT \
--data @payload.json \
2019-09-17 14:25:36 +00:00
http://127.0.0.1:8500/v1/agent/service/register?replace-existing-checks=true
2017-04-04 16:33:22 +00:00
```
## Deregister Service
This endpoint removes a service from the local agent. If the service does not
exist, no action is taken.
The agent will take care of deregistering the service with the catalog. If there
is an associated check, that is also deregistered.
2020-04-06 20:27:35 +00:00
| Method | Path | Produces |
| ------ | --------------------------------------- | ------------------ |
2017-04-04 16:33:22 +00:00
| `PUT` | `/agent/service/deregister/:service_id` | `application/json` |
The table below shows this endpoint's support for
2023-01-25 16:52:43 +00:00
[blocking queries](/consul/api-docs/features/blocking),
[consistency modes](/consul/api-docs/features/consistency),
[agent caching](/consul/api-docs/features/caching), and
[required ACLs](/consul/api-docs/api-structure#authentication).
2017-04-04 16:33:22 +00:00
2018-09-06 10:34:28 +00:00
| Blocking Queries | Consistency Modes | Agent Caching | ACL Required |
| ---------------- | ----------------- | ------------- | --------------- |
| `NO` | `none` | `none` | `service:write` |
2017-04-04 16:33:22 +00:00
2023-01-25 16:52:43 +00:00
The corresponding CLI command is [`consul services deregister`](/consul/commands/services/deregister).
2022-01-10 19:21:32 +00:00
2022-05-10 15:51:11 +00:00
### Path Parameters
2017-04-04 16:33:22 +00:00
2022-05-10 15:51:11 +00:00
- `service_id` `(string: <required>)` - Specifies the ID of the service to deregister.
2021-06-22 05:47:03 +00:00
2022-05-10 15:51:11 +00:00
### Query Parameters
- `ns` `(string: "")` <EnterpriseAlert inline /> - Specifies the namespace of the service you deregister.
You can also [specify the namespace through other methods](#methods-to-specify-namespace).
2017-04-04 16:33:22 +00:00
### Sample Request
2020-05-19 18:32:38 +00:00
```shell-session
2017-04-04 16:33:22 +00:00
$ curl \
--request PUT \
2018-08-28 16:07:15 +00:00
http://127.0.0.1:8500/v1/agent/service/deregister/my-service-id
2017-04-04 16:33:22 +00:00
```
## Enable Maintenance Mode
This endpoint places a given service into "maintenance mode". During maintenance
mode, the service will be marked as unavailable and will not be present in DNS
or API queries. This API call is idempotent. Maintenance mode is persistent and
will be automatically restored on agent restart.
2020-04-06 20:27:35 +00:00
| Method | Path | Produces |
| ------ | ---------------------------------------- | ------------------ |
| `PUT` | `/agent/service/maintenance/:service_id` | `application/json` |
2017-04-04 16:33:22 +00:00
The table below shows this endpoint's support for
2023-01-25 16:52:43 +00:00
[blocking queries](/consul/api-docs/features/blocking),
[consistency modes](/consul/api-docs/features/consistency),
[agent caching](/consul/api-docs/features/caching), and
[required ACLs](/consul/api-docs/api-structure#authentication).
2017-04-04 16:33:22 +00:00
2018-09-06 10:34:28 +00:00
| Blocking Queries | Consistency Modes | Agent Caching | ACL Required |
| ---------------- | ----------------- | ------------- | --------------- |
| `NO` | `none` | `none` | `service:write` |
2017-04-04 16:33:22 +00:00
2022-05-10 15:51:11 +00:00
### Path Parameters
- `service_id` `(string: <required>)` - Specifies the ID of the service to put in maintenance mode.
2017-04-04 16:33:22 +00:00
2022-05-10 15:51:11 +00:00
### Query Parameters
2017-04-04 16:33:22 +00:00
- `enable` `(bool: <required>)` - Specifies whether to enable or disable
maintenance mode. This is specified as part of the URL as a query string
parameter.
- `reason` `(string: "")` - Specifies a text string explaining the reason for
placing the node into maintenance mode. This is simply to aid human operators.
2022-05-10 15:51:11 +00:00
If no reason is provided, a default value is used instead.
This parameter must be URI-encoded.
- `ns` `(string: "")` <EnterpriseAlert inline /> - Specifies the namespace of the service you place into maintenance mode.
You can also [specify the namespace through other methods](#methods-to-specify-namespace).
2017-04-04 16:33:22 +00:00
### Sample Request
2020-05-19 18:32:38 +00:00
```shell-session
2017-04-04 16:33:22 +00:00
$ curl \
--request PUT \
2018-08-28 16:07:15 +00:00
http://127.0.0.1:8500/v1/agent/service/maintenance/my-service-id?enable=true&reason=For+the+docs
2017-04-04 16:33:22 +00:00
```
2022-05-10 15:51:11 +00:00
2023-10-23 11:41:24 +00:00
## Methods to specify namespace <EnterpriseAlert inline />
2022-05-10 15:51:11 +00:00
Local agent service endpoints
support several methods for specifying the namespace of service resources
with the following order of precedence:
1. `Namespace` field of the JSON request body -
only applies to the [register](#register-check) endpoint
1. `ns` query parameter
1. `X-Consul-Namespace` request header
1. Namespace is inherited from the namespace of the request's ACL token (if any)
1. The `default` namespace