---
title: "Find free slots"
description: "The free slots of one service under one contract at a cost centre, from a day on, read from every professional's agenda (or the one named), each with the reference visoft.appointments.create takes. A professional whose agenda SIIPS did not answer is failed:true: their slots are unknown, never none. Never cached. This read never books anything.\n\n- **Scopes:** any one of `visoft:appointments:read`, `visoft:appointments:write`\n- **Credentials:** an API key, a client-credentials token or a person's access token\n- **Effect:** read-only; safe to retry\n- **Limits:** request body up to 64 KB, response up to 1 MB\n- **CLI:** `arbol visoft availability lookup` · **MCP tool:** `visoft_availability_lookup`"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.getarbol.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Visoft API › Availability

`POST /v1/visoft/availability/lookup`

The free slots of one service under one contract at a cost centre, from a day on, read from every professional's agenda (or the one named), each with the reference visoft.appointments.create takes. A professional whose agenda SIIPS did not answer is failed:true: their slots are unknown, never none. Never cached. This read never books anything.

- **Scopes:** any one of `visoft:appointments:read`, `visoft:appointments:write`
- **Credentials:** an API key, a client-credentials token or a person's access token
- **Effect:** read-only; safe to retry
- **Limits:** request body up to 64 KB, response up to 1 MB
- **CLI:** `arbol visoft availability lookup` · **MCP tool:** `visoft_availability_lookup`

## Authentication

Requires one of the following:

- `arbolHuman`, oauth2, scopes: `visoft:appointments:read`
- `arbolHuman`, oauth2, scopes: `visoft:appointments:write`
- `arbolMachine`, oauth2, scopes: `visoft:appointments:read`
- `arbolMachine`, oauth2, scopes: `visoft:appointments:write`
- `arbolApiKey`, http, header `Authorization`

## Request body

_Required._

- `contractCode` (`visoft.availability.lookup.contractCode`; string, required) — The contract, by the code visoft.contracts.list answers.
  - minLength 1; maxLength 40; pattern `^[A-Za-z0-9_-]+$`
- `serviceCode` (`visoft.availability.lookup.serviceCode`; string, required) — The service, by the code a contract's services answer ("CUPS-890208").
  - minLength 3; maxLength 60; pattern `^[A-Za-z0-9]+-[A-Za-z0-9._-]+$`
- `from` (`visoft.availability.lookup.from`; string, required) — The day the search starts, in the clinic's time (YYYY-MM-DD): SIIPS answers each professional's free slots from that day on.
  - pattern `^\d{4}-\d{2}-\d{2}$`
- `connectionId` (`visoft.availability.lookup.connectionId`; string, optional) — The connection to run on. Optional when the organization has one Visoft connection; required when it has several. Another organization's connection is CONNECTION_NOT_FOUND.
  - minLength 5; maxLength 68; pattern `^con_[0-9A-Za-z]+$`
- `agencyCode` (`visoft.availability.lookup.agencyCode`; string, optional) — One of the clinic's cost centres, as visoft.clinic.get lists them. Optional when the clinic has a default one.
  - pattern `^\d{3}$`
- `professionalId` (`visoft.availability.lookup.professionalId`; string, optional) — One professional's id, as visoft.professionals.list answers it: only their agenda.
  - minLength 1; maxLength 40; pattern `^[A-Za-z0-9_-]+$`
- `refreshProfessionals` (`visoft.availability.lookup.refreshProfessionals`; boolean, optional) — Read the professional directory again instead of its one-hour cache.
- `concurrency` (`visoft.availability.lookup.concurrency`; integer, optional) — How many agendas are read from SIIPS at once (5 by default).
  - min 1; max 10

## Example request

```json
{
  "connectionId": "string",
  "agencyCode": "string",
  "contractCode": "string",
  "serviceCode": "string",
  "from": "string",
  "professionalId": "string",
  "refreshProfessionals": true,
  "concurrency": 1
}
```

## Code samples

### cURL

```bash
curl https://api.getarbol.com/v1/visoft/availability/lookup \
  --request POST \
  --header "Authorization: Bearer $ARBOL_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "contractCode": "<contractCode>",
  "serviceCode": "<serviceCode>",
  "from": "<from>"
}'
```

### TypeScript

```typescript
import { createClient } from "@arbol-ai/sdk";

const arbol = createClient({
  baseUrl: "https://api.getarbol.com",
  token: process.env.ARBOL_API_KEY!,
});

const { data } = await arbol.visoft.availability.lookup({
  contractCode: "<contractCode>",
  serviceCode: "<serviceCode>",
  from: "<from>",
});
```

### Rust

```rust
use arbol_sdk::{types, Client, Credential};

let arbol = Client::new(Credential::ApiKey(std::env::var("ARBOL_API_KEY")?))?;

let data = arbol
    .visoft()
    .availability()
    .lookup(&types::VisoftAvailabilityLookupInput {
        contract_code: "<contractCode>".into(),
        service_code: "<serviceCode>".into(),
        from: "<from>".into(),
        connection_id: None,
        agency_code: None,
        professional_id: None,
        refresh_professionals: None,
        concurrency: None,
    })
    .await?;
```

### CLI

```bash
arbol visoft availability lookup --contract-code '<contractCode>' --service-code '<serviceCode>' --from '<from>'
```

### MCP

```json
{
  "name": "visoft_availability_lookup",
  "arguments": {
    "contractCode": "<contractCode>",
    "serviceCode": "<serviceCode>",
    "from": "<from>"
  }
}
```

## Responses

### 200

Successful operation.

#### Example

```json
{
  "success": true,
  "data": {
    "from": "string",
    "professionals": [
      {
        "professional": {
          "id": "string",
          "name": "string",
          "label": "string",
          "specialty": "string"
        },
        "failed": true,
        "slots": [
          {
            "reference": "strings",
            "startsAt": "2019-08-24T14:15:22Z",
            "professionalId": "string",
            "professionalName": "string",
            "specialty": "string",
            "agencyCode": "string",
            "scheduleId": "string",
            "slotNumber": "string",
            "subCostCenter": "string",
            "status": "string",
            "purpose": "string"
          }
        ]
      }
    ]
  },
  "error": null,
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.200.success`; boolean, required)
  - one of `true`
- `data` (`visoft.availability.lookup.response.200.data`; object, required)
  - `from` (`visoft.availability.lookup.response.200.data.from`; string, required) — The day the search started, in the clinic: YYYY-MM-DD.
  - `professionals` (`visoft.availability.lookup.response.200.data.professionals`; array<object>, required) — Every professional of the service at the cost centre (or the one asked for), in the directory's order, each with their free slots. Never cached: read for this call.
    - `professional` (`visoft.availability.lookup.response.200.data.professionals.professional`; object, required)
      - `id` (`visoft.availability.lookup.response.200.data.professionals.professional.id`; string, required) — The professional's SIIPS id. Empty only in an availability answer of an agenda SIIPS lists without its professionals.
      - `name` (`visoft.availability.lookup.response.200.data.professionals.professional.name`; string, required) — Their name, without the specialty SIIPS appends.
      - `label` (`visoft.availability.lookup.response.200.data.professionals.professional.label`; string, required) — Their name as SIIPS labels it.
      - `specialty` (`visoft.availability.lookup.response.200.data.professionals.professional.specialty`; string, required) — The specialty SIIPS appends to the label; empty when none.
    - `failed` (`visoft.availability.lookup.response.200.data.professionals.failed`; boolean, required) — Whether SIIPS failed to answer this professional's agenda: their slots are unknown, never none.
    - `slots` (`visoft.availability.lookup.response.200.data.professionals.slots`; array<object>, required) — Their free slots, in the order SIIPS lists them.
      - `reference` (`visoft.availability.lookup.response.200.data.professionals.slots.reference`; string, required) — The free slot's SIIPS key, as visoft.availability.lookup answered it: pass it unchanged to visoft.appointments.create.
        - minLength 7; maxLength 200
      - `startsAt` (`visoft.availability.lookup.response.200.data.professionals.slots.startsAt`; string, required) — The moment, as an RFC 3339 instant written in the clinic's own offset (for example "2026-11-04T08:50:00-05:00"), so its first ten characters are the clinic's day and the next eight its hour.
        - format `date-time`
      - `professionalId` (`visoft.availability.lookup.response.200.data.professionals.slots.professionalId`; string, required) — The professional's SIIPS id.
      - `professionalName` (`visoft.availability.lookup.response.200.data.professionals.slots.professionalName`; string, required) — The professional, as SIIPS names them.
      - `specialty` (`visoft.availability.lookup.response.200.data.professionals.slots.specialty`; string, required) — The specialty SIIPS shows on the agenda.
      - `agencyCode` (`visoft.availability.lookup.response.200.data.professionals.slots.agencyCode`; string, required) — The cost centre the slot is at.
      - `scheduleId` (`visoft.availability.lookup.response.200.data.professionals.slots.scheduleId`; string, required) — The agenda block the slot belongs to.
      - `slotNumber` (`visoft.availability.lookup.response.200.data.professionals.slots.slotNumber`; string, required) — The slot's position in its agenda block.
      - `subCostCenter` (`visoft.availability.lookup.response.200.data.professionals.slots.subCostCenter`; string, required) — The sub cost centre of the agenda.
      - `status` (`visoft.availability.lookup.response.200.data.professionals.slots.status`; string, required) — SIIPS's status of the slot.
      - `purpose` (`visoft.availability.lookup.response.200.data.professionals.slots.purpose`; string, required) — The purpose SIIPS shows on the agenda.
- `error` (`visoft.availability.lookup.response.200.error`; unknown, required)
- `metadata` (`visoft.availability.lookup.response.200.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.200.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 400

`INVALID_INPUT`: The request does not match the published schema.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "INVALID_INPUT",
    "message": "string",
    "retryable": false,
    "data": {
      "issues": [
        {
          "path": "string",
          "message": "string"
        }
      ]
    }
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.400.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.400.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.400.error`; object, required) — The request does not match the published schema.
  - `code` (`visoft.availability.lookup.response.400.error.code`; string, required) — The failure code, stable across releases.
    - one of `"INVALID_INPUT"`
  - `message` (`visoft.availability.lookup.response.400.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.400.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.400.error.data`; object, required)
    - `issues` (`visoft.availability.lookup.response.400.error.data.issues`; array<object>, optional)
      - `path` (`visoft.availability.lookup.response.400.error.data.issues.path`; string, required) — RFC 6901 JSON Pointer to the refused field; empty for the whole input.
        - maxLength 256
      - `message` (`visoft.availability.lookup.response.400.error.data.issues.message`; string, required)
        - maxLength 256
- `metadata` (`visoft.availability.lookup.response.400.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.400.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 401

`UNAUTHORIZED`: A valid access token is required.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.401.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.401.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.401.error`; object, required) — A valid access token is required.
  - `code` (`visoft.availability.lookup.response.401.error.code`; string, required) — The failure code, stable across releases.
    - one of `"UNAUTHORIZED"`
  - `message` (`visoft.availability.lookup.response.401.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.401.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.401.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.401.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.401.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 403

`FORBIDDEN`: The token does not authorize this operation.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "FORBIDDEN",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.403.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.403.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.403.error`; object, required) — The token does not authorize this operation.
  - `code` (`visoft.availability.lookup.response.403.error.code`; string, required) — The failure code, stable across releases.
    - one of `"FORBIDDEN"`
  - `message` (`visoft.availability.lookup.response.403.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.403.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.403.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.403.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.403.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 404

- `CONNECTION_NOT_FOUND`: The organization has no such connection.
- `PROFESSIONAL_NOT_FOUND`: No professional with that id attends the service at the clinic's cost centre.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "CONNECTION_NOT_FOUND",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.404.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.404.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.404.error`; one of, required)
  - one of: `ConnectionNotFoundFailure`, `VisoftProfessionalNotFoundFailure`
  - discriminator: `code`
- `metadata` (`visoft.availability.lookup.response.404.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.404.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 409

`CONNECTION_NOT_CONFIGURED`: The organization has no active Visoft connection for this call; an administrator connects Visoft in Account.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "CONNECTION_NOT_CONFIGURED",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.409.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.409.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.409.error`; object, required) — The organization has no active Visoft connection for this call; an administrator connects Visoft in Account.
  - `code` (`visoft.availability.lookup.response.409.error.code`; string, required) — The failure code, stable across releases.
    - one of `"CONNECTION_NOT_CONFIGURED"`
  - `message` (`visoft.availability.lookup.response.409.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.409.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.409.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.409.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.409.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 413

`REQUEST_TOO_LARGE`: The request exceeds the allowed size.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "REQUEST_TOO_LARGE",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.413.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.413.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.413.error`; object, required) — The request exceeds the allowed size.
  - `code` (`visoft.availability.lookup.response.413.error.code`; string, required) — The failure code, stable across releases.
    - one of `"REQUEST_TOO_LARGE"`
  - `message` (`visoft.availability.lookup.response.413.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.413.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.413.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.413.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.413.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 415

`UNSUPPORTED_MEDIA_TYPE`: The request content type is not supported.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "UNSUPPORTED_MEDIA_TYPE",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.415.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.415.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.415.error`; object, required) — The request content type is not supported.
  - `code` (`visoft.availability.lookup.response.415.error.code`; string, required) — The failure code, stable across releases.
    - one of `"UNSUPPORTED_MEDIA_TYPE"`
  - `message` (`visoft.availability.lookup.response.415.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.415.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.415.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.415.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.415.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 422

- `CREDENTIALS_REJECTED`: The organization's connection to this integration couldn't complete the request. Don't retry it automatically; if it keeps happening, contact your Arbol team.
- `AGENCY_NOT_SERVED`: The cost centre is not one of the connection's clinic: use one visoft.clinic.get lists.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "CREDENTIALS_REJECTED",
    "message": "string",
    "retryable": false
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.422.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.422.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.422.error`; one of, required)
  - one of: `VisoftCredentialsRejectedFailure`, `VisoftAgencyNotServedFailure`
  - discriminator: `code`
- `metadata` (`visoft.availability.lookup.response.422.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.422.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 429

`RATE_LIMITED`: The request rate limit was exceeded. Try again later.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "RATE_LIMITED",
    "message": "string",
    "retryable": true,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.429.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.429.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.429.error`; object, required) — The request rate limit was exceeded. Try again later.
  - `code` (`visoft.availability.lookup.response.429.error.code`; string, required) — The failure code, stable across releases.
    - one of `"RATE_LIMITED"`
  - `message` (`visoft.availability.lookup.response.429.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.429.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `true`
  - `data` (`visoft.availability.lookup.response.429.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.429.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.429.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 500

`INTERNAL_ERROR`: The service could not complete the operation.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.500.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.500.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.500.error`; object, required) — The service could not complete the operation.
  - `code` (`visoft.availability.lookup.response.500.error.code`; string, required) — The failure code, stable across releases.
    - one of `"INTERNAL_ERROR"`
  - `message` (`visoft.availability.lookup.response.500.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.500.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `false`
  - `data` (`visoft.availability.lookup.response.500.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.500.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.500.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 502

- `OUTCOME_UNKNOWN`: The operation may have been applied; check its result before repeating it.
- `PROVIDER_UNAVAILABLE`: The clinical system did not answer or could not complete the request.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "OUTCOME_UNKNOWN",
    "message": "string",
    "retryable": false,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.502.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.502.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.502.error`; one of, required)
  - one of: `OutcomeUnknownFailure`, `VisoftProviderUnavailableFailure`
  - discriminator: `code`
- `metadata` (`visoft.availability.lookup.response.502.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.502.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 503

`UPSTREAM_UNAVAILABLE`: The upstream service could not complete the request.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "UPSTREAM_UNAVAILABLE",
    "message": "string",
    "retryable": true,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.503.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.503.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.503.error`; object, required) — The upstream service could not complete the request.
  - `code` (`visoft.availability.lookup.response.503.error.code`; string, required) — The failure code, stable across releases.
    - one of `"UPSTREAM_UNAVAILABLE"`
  - `message` (`visoft.availability.lookup.response.503.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.503.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `true`
  - `data` (`visoft.availability.lookup.response.503.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.503.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.503.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 504

`UPSTREAM_TIMEOUT`: The upstream service did not respond before its deadline.

#### Example

```json
{
  "success": false,
  "data": null,
  "error": {
    "code": "UPSTREAM_TIMEOUT",
    "message": "string",
    "retryable": true,
    "data": {}
  },
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`visoft.availability.lookup.response.504.success`; boolean, required)
  - one of `false`
- `data` (`visoft.availability.lookup.response.504.data`; unknown, required)
- `error` (`visoft.availability.lookup.response.504.error`; object, required) — The upstream service did not respond before its deadline.
  - `code` (`visoft.availability.lookup.response.504.error.code`; string, required) — The failure code, stable across releases.
    - one of `"UPSTREAM_TIMEOUT"`
  - `message` (`visoft.availability.lookup.response.504.error.message`; string, required) — What went wrong, for people; it never contains input values.
  - `retryable` (`visoft.availability.lookup.response.504.error.retryable`; boolean, required) — Whether repeating the same request may succeed.
    - one of `true`
  - `data` (`visoft.availability.lookup.response.504.error.data`; object, required) — No fields.
- `metadata` (`visoft.availability.lookup.response.504.metadata`; object, required) — What every answer carries besides its data or error.
  - `requestId` (`visoft.availability.lookup.response.504.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.


Source: https://docs.getarbol.com/api/visoft/availability/lookup/index.md
