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

> ## Agent Instructions
> This site documents the D-EDGE APIs for technology partners (web agencies, OTAs, PMS and RMS vendors, booking and CRM tools). It is written for developers integrating with hotels that use the D-EDGE platform.
> Seven APIs, grouped by domain. Connectivity: Channel Manager API (distribute a hotel's inventory to your channel and send bookings back). Pricing & Availability: Best Price API (best offers to highlight), Quotation API (all bookable offers for a stay), Daily Rates API (daily availability between two dates). Booking: Booking Engine API (a hotel's full direct booking funnel), Gift Shop API (gift vouchers from catalogue to payment). Guest Management: CRM API (guest profiles).
> Pick the API by the need: to display prices, use the Best Price API or the Daily Rates API; to quote a specific stay, use the Quotation API; to book, use the Booking Engine API; to sell gift vouchers, use the Gift Shop API; to manage guest profiles, use the CRM API; to receive hotel inventory and send bookings back as a distribution channel, use the Channel Manager API.
> Base URLs, hotel identifiers, and credentials are delivered by the D-EDGE partnership team during onboarding. Do not invent base URLs, endpoints, parameters, or example credentials that do not appear on these pages.
> Authentication differs per API: OAuth 1.0 for Best Price, Quotation, Daily Rates, and Booking Engine; an X-API-KEY header for Gift Shop; OAuth 2.0 client credentials for CRM; partner-defined credentials carried in the XML message for the Channel Manager API. Read each API's Authentication page before writing code.
> A mock environment returns realistic but fictitious data without credentials. The Postman and Insomnia collections on the API collections page target it by default. Use it for exploration and tests, never for production traffic.
> Use the official names exactly: D-EDGE, D-EDGE platform, Channel Manager API, partnership team. Do not use Back Office or Extranet.
> Each API has a Changelog page. Check it for the current behaviour before relying on an older answer. For questions these pages do not answer, direct the reader to the Contact us page.

# Responses

> Location headers, per-attribute errors, and codes

The CRM API returns JSON. The exact body shape depends on the status code and the endpoint.

## Content type

| Status | Body |
| - | - |
| `200 OK` | JSON, the result |
| `204 No Content` | No body |
| `400`, `401`, `404`, `408`, `500` | JSON error, see below |

## Writes return a location header and no body

Creating a guest, creating a segment, and updating either of them return `200 OK` with an empty body and a `location` header holding the path of the resource:

```text theme={null}
location: /api/guestprofile/entities/8dfd708c-9584-4ed3-8e2c-415afb373a13/guests/55468764-64be-4fc1-a43f-e37239e012bf
```

On a creation, the last path segment is the identifier to store on your side. On an update, the header points back at the resource you changed.

Nothing in the response says what was stored. An attribute carrying a value the API rejects, such as a `gender` outside `M`, `F`, and `X`, is dropped and the status code stays `200`. Read the guest back with **Get a guest** when the write matters.

## Long operations return a task

Merging guests and computing a merge confidence run in the background. They return `200 OK` with an empty body and a `location` header pointing at a task:

```text theme={null}
location: /api/guestprofile/tasks/22ab132e-43cb-484e-bd86-e58993495adb
```

Read that path with [Read a task](/crm-api/build/reference/merge/get-task.md) until `status` reaches `completed` or `failed`. A completed task carries its `result`: the confidence score for a computation, and for a merge an object whose `rid` ends with the identifier of the merged profile.

```json theme={null}
{
  "progress": 100,
  "status": "completed",
  "result": {
    "rid": "guestprofile.entities.8dfd708c-9584-4ed3-8e2c-415afb373a13.guests.55468764-64be-4fc1-a43f-e37239e012bf"
  },
  "startedAt": "2026-09-18T07:56:08Z",
  "endedAt": "2026-09-18T07:56:08Z"
}
```

A failed task carries an `error` instead. The identifiers you already hold keep working after a merge and redirect to the merged profile, as described in [Best practices](/crm-api/build/best-practices.md).

## Error format

Errors return a JSON body with three fields:

**code** `string`

A machine-readable code, such as `system.invalidParams` or `system.accessDenied`.

**message** `string`

A human-readable summary.

**data** `object`

Details specific to this occurrence, such as the invalid property and the reason. Absent on some errors, `401` among them.

## Response codes

### 200 OK

The request was processed. The body depends on the endpoint: a guest, a segment, a count, a document list, an operation result, or nothing at all on the endpoints that answer with a `location` header.

### 204 No Content

The request succeeded and there is nothing to return: deleting a segment.

### 400 Bad Request

The request failed validation, with the code `system.invalidParams` (URL parameters) or `system.invalidQuery` (request body). The `data` object says which property is invalid. Fix the request before retrying.

### 401 Unauthorized

The bearer token is missing, invalid, or does not give access to the entity. The code is `system.accessDenied`, and the three cases share one response so an entity you cannot reach is indistinguishable from one that does not exist. See [Authentication](/crm-api/build/guidelines/authentication.md).

### 404 Not Found

The guest, segment, or task identifier does not match an existing resource. The code is `system.notFound`.

### 408 Request Timeout

The service did not answer in time, with the code `system.timeout`. Retry later with backoff.

### 500 Internal Server Error

The code is `system.internalError`. On this API, a `500` often points at the request rather than the server: an attribute sent in the wrong shape, such as an email as a plain string instead of an object, fails this way. Check the body against [Requests](/crm-api/build/guidelines/requests.md) before anything else. Treat a `500` as transient only on reads, where a retry with exponential backoff is safe. If it persists, [contact us](/overview/resources/contact-us.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.