> For the complete documentation index, see [llms.txt](https://docs.guibo.travel/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.guibo.travel/developers/content-api/content-or-create-and-update-routes.md).

# Content | 2. Routes

### A) Create route

**Prerequisite**:

Routes must be contained within either a library or a guidebook. This example creates a new route within a library that has the internal ID `"MY_ROUTES_LIB"`. To create the route in a guidebook instead, replace the `"library"` object with a `"guidebook"` object.

* Replace <mark style="color:orange;">CCCCCC</mark> with your Account-ID, you can find this under Account Settings > General Settings > Account ID
* Replace <mark style="color:$primary;">MY\_ROUTES\_LIB</mark> with the Custom ID you have set for the&#x20;
* Replace <mark style="color:orange;">xxxxxx-xxxxxx-xxxxxx-xxxxxx</mark> with the API key, you can find this under Account Settings > General Settings > API Key

```json
curl --location --request POST 'https://services.schneidergeo.com/content/geodata/route' 
--header 'Authorization: xxxxxx-xxxxxx-xxxxxx-xxxxxx' \
--header 'Content-Type: text/plain;charset=UTF-8' \
--data-raw '{
    "account":"CCCCCC",
    "library": {
        "customId":"MY_ROUTES_LIB"
    },
    "customId":"CYCLE_23143534",
    "remark":"This is a test route",
    "names": {
        "en": "Testroute in Arnhem",
        "de": ""
    },
    "descriptions": {
        "en": "",
        "de": ""
    },
    "color": "1c21e1",
    "icon": {
            "name": "hiking"
    },
    "attributes": {
        //Obligatory. Overwrite calculated values from GUIBO
        "altitudeUp":"210", //value in meters
        "altitudeDown":"300", //value in meters
        "routeDistance":"12.5",//value in kilometers
        "time":"2.5" // value in hours
    },
    "waypoints": [
        {
            "lat": 51.96252,
            "lon": 5.88772,
            "ele": 13
        },
        {
            "lat": 51.96253,
            "lon": 5.88772,
            "ele": 13
        },
        {
            "lat": 51.9628,
            "lon": 5.88796,
            "ele": 13
        },
        {
            "lat": 51.96359,
            "lon": 5.88833,
            "ele": 14
        },
        {
            "lat": 51.96438,
            "lon": 5.88871,
            "ele": 11
        },
        {
            "lat": 51.96495,
            "lon": 5.88885,
            "ele": 9
        },
        {
            "lat": 51.96552,
            "lon": 5.889,
            "ele": 9
        }
        
    ]
}'
```

### Supported Icon Names for routes:

* Motorbike
* Sledding
* Ski touring
* Hiking
* Cycling
* Ferry route
* Bus tour
* Canoeing
* Mountaineering
* Snowshoeing
* Cross-country skiing
* Running
* Driving
* Transfer
* Walking
* Segment
* E-bike
* Nordic walking
* Mountain biking

### B) Read route

Use Account ID and Custom ID of Textpage to read the asset.&#x20;

```shellscript
curl --location --request 'https://services.schneidergeo.com/content/geodata/asset/account/{account}/external/{customId}' \
--header 'Authorization: xxxxxx-xxxxxx-xxxxxx-xxxxxx' \
--header 'Content-Type: application/json' 
```

### C) Update route

This example updates the route with internal ID "<mark style="color:orange;">rrrrrr</mark>" .

* Replace <mark style="color:orange;">rrrrrr</mark> with the ID, you can find it in the Edit Route > Metadata section.&#x20;
* Replace <mark style="color:orange;">xxxxxx-xxxxxx-xxxxxx-xxxxxx</mark> with the API key, you can find this in Account Settings > General Settings > API Key

```shellscript
curl --location --request PUT 'https://services.schneidergeo.com/content/geodata/route' \
--header 'Authorization: xxxxxx-xxxxxx-xxxxxx-xxxxxx' \
--header 'Content-Type: text/plain;charset=UTF-8' \
--data-raw '{
    "account":"DpRPNF",
    "library": {
        "customId":"RWR_ROUTES"
    },
    "customId": "CYCLE_23143534",
    "remark":"This is a test route",
    "names": {
        "en": "Testroute in Arnhem",
        "de": ""
    },
    "descriptions": {
        "en": "",
        "de": ""
    },
    "color": "1c21e1",
    "icon": {
            "name": "hiking"
    },
    "waypoints": [
        {
            "lat": 51.96252,
            "lon": 5.88772,
            "ele": 13
        },
        {
            "lat": 51.96253,
            "lon": 5.88772,
            "ele": 13
        },
        {
            "lat": 51.9628,
            "lon": 5.88796,
            "ele": 13
        },
        {
            "lat": 51.96359,
            "lon": 5.88833,
            "ele": 14
        },
        {
            "lat": 51.96438,
            "lon": 5.88871,
            "ele": 11
        },
        {
            "lat": 51.96495,
            "lon": 5.88885,
            "ele": 9
        },
        {
            "lat": 51.96552,
            "lon": 5.889,
            "ele": 9
        }
        
    ]
}'
```

### D) List Routes in Library

Returns a list of all routes stored in the specified library.

Note: The response contains lightweight metadata for each route (such as ID, name, and timestamps), but excludes heavy payloads like geometry and route content. To retrieve full details and geometry for a specific route, fetch it directly using its custom ID.

```shellscript
curl --location 'https://content-tst.guibo.travel/content/library/{account}/{customid}/routes/metadata' \
--header 'Authorization: xxxxxx-xxxxxx-xxxxxx-xxxxxx'
```

### E) Update Custom ID

To set or update the customID you need the GUIBO ID of the POI.

This example updates the route with GUIBO ID "<mark style="color:orange;">rrrrrr</mark>" .

* Replace <mark style="color:orange;">rrrrrr</mark> with the ID, you can find it in the Edit Route > Metadata section.&#x20;
* Replace <mark style="color:orange;">xxxxxx-xxxxxx-xxxxxx-xxxxxx</mark> with the API key, you can find this in Account Settings > General Settings > API Key

```shellscript
curl --location --request PATCH 'https://services.schneidergeo.com/content/geodata/rrrrrr/externalid' \
  --header 'Authorization: xxxxxx-xxxxxx-xxxxxx-xxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '
  {"value":"ROUTEX242"}
  '
```

### F) Delete Route

Use Account ID and Custom ID of Route to delete the asset. It will be in thrash unless you add the query parameter `force=true` to the URL.

```bash
curl --location --request DELETE 'https://services.schneidergeo.com/content/geodata/account/{account}/external/{customId}' \
--header 'Authorization: xxxxxx-xxxxxx-xxxxxx-xxxxxx' \
--header 'Content-Type: application/json' 
```

To update other properties of POIs, please have a look at page&#x20;

{% content-ref url="/pages/g25A808EZoNY0pniumwG" %}
[Content | 4. Geodata properties](/developers/content-api/content-or-4.-geodata-properties.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.guibo.travel/developers/content-api/content-or-create-and-update-routes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
