<div class="endpoint"><span class="method">POST</span><code>/api/v1/workspaces/&#123;workspaceId&#125;/services</code></div>

**Operation ID:** `services.create` · **Access:** PAT with `write` scope and authorized workspace where applicable · **Effect:** `write`.

Read the [saved services workflow](/guides/data-model/) before this operation.

## Parameters

| Name | In | Required | Type / allowed values |
| --- | --- | --- | --- |
| `workspaceId` | path | Yes | string |
| `idempotency-key` | header | No | string |

## Request body

**Content type:** `application/json` · **Required:** yes.

Schema: [ServiceInput](/reference/schemas/service-input/). [Browse schema fields](/reference/schemas/).

<details>
<summary>Example: request</summary>

Synthetic contract example. Replace identifiers and clinical data with authorized values. This example does not prove ministry acceptance.

[Download JSON](/examples/services-create-request.json)

```json
{
  "category": 1,
  "name": "Consulta de ejemplo",
  "payload": {
    "codPrestador": "110010000101",
    "fechaInicioAtencion": "2026-09-01 10:00",
    "numAutorizacion": null,
    "codConsulta": "890201",
    "modalidadGrupoServicioTecSal": "01",
    "grupoServicios": "01",
    "codServicio": 325,
    "finalidadTecnologiaSalud": "44",
    "causaMotivoAtencion": "38",
    "codDiagnosticoPrincipal": "Z000",
    "codDiagnosticoRelacionado1": null,
    "codDiagnosticoRelacionado2": null,
    "codDiagnosticoRelacionado3": null,
    "tipoDiagnosticoPrincipal": "01",
    "tipoDocumentoIdentificacion": "CC",
    "numDocumentoIdentificacion": "1000000001",
    "vrServicio": 100000,
    "conceptoRecaudo": "05",
    "valorPagoModerador": 0,
    "numFEVPagoModerador": null,
    "consecutivo": 1
  }
}
```

</details>

## Responses

| HTTP | Content | Schema |
| --- | --- | --- |
| 201 | `application/json` | [Service](/reference/schemas/service/) |
| 400 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 401 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 403 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 404 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 409 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 413 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 415 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 428 | `application/json` | [ApiError](/reference/schemas/api-error/) |
| 500 | `application/json` | [ApiError](/reference/schemas/api-error/) |

Use `error.code`, `error.issues`, and `requestId` for JSON errors. [Error and recovery guide](/guides/errors-and-retries/).

## cURL

Set the connection variables from the [quickstart](/guides/quickstart/). Set each path variable to an authorized identifier or an allowed parameter value from the table above.

Save your authorized JSON input as `request.json`. Use the request schema and examples above; replace synthetic data before use.

```bash
curl --fail-with-body --request POST \
  "$RIPSCLOUD_BASE_URL/api/v1/workspaces/$WORKSPACE_ID/services" \
  --header "Authorization: Bearer $RIPSCLOUD_TOKEN" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data-binary @request.json
```
