> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ovac.councilbox.com/llms.txt.
> For full documentation content, see https://docs.ovac.councilbox.com/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ovac.councilbox.com/_mcp/server.

# Assign Appointment to Operator_External

POST https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2
Content-Type: application/json

# Assign Appointment to Operator (External ID Variant) (`assignCouncilToUser`)

Este método permite asignar una cita (consejo) existente a un operador utilizando el identificador externo del usuario (`userExternalId`) y el identificador externo de la organización o entidad (`companyExternalId`). Esta variante es ideal para integraciones con CRMs o sistemas legados del cliente, ya que permite realizar la asignación sin necesidad de conocer los identificadores numéricos internos de la base de datos de OVAC.

### Autenticación

> **Tipo:** API Key**  
Header:** `x-jwt-token`  
**Ubicación:** Header HTTP_  
Ejemplo:_ `x-jwt-token: eyJhbGciOiJIUzI1NiIsInR5cCI6...` 
  

## Referencia de la API

### Parámetros de Entrada (Variables)

| Parámetro | Descripción | Requerido | Tipo |
| --- | --- | --- | --- |
| councilId | Identificador numérico único de la cita en la plataforma. | SI | Integer |
| userExternalId | Identificador único del usuario en el sistema de origen del cliente. | SI | String |
| companyExternalId | Identificador único de la entidad u organización en el sistema de origen del cliente. | SI | String |

### Campos de Respuesta (Payload)

La mutación devuelve un objeto `assignCouncilToUser` con el resultado de la asignación de personal:

| Parámetro | Descripción | Tipo |
| --- | --- | --- |
| data | Objeto dato | Object |
| data.assignCouncilToUser | Objeto del usuario | Object |
| data.assignCouncilToUser.success | Valor booleano de verificación de asignación. | Boolean |
| data.assignCouncilToUser.message | Error que devuelve, por defecto _null_ | String |

## Ejemplos de Código y Peticiones

### 1\. Mutación GraphQL

``` graphql
mutation AssignCouncilToUser(
    $councilId: Int!, 
    $userId: Int, 
    $userExternalId: String, 
    $companyExternalId: String
) {
    assignCouncilToUser(
        councilId: $councilId, 
        userId: $userId, 
        userExternalId: $userExternalId, 
        companyExternalId: $companyExternalId
    ) {
        success
        message
    }
}

 ```

### 2\. Variables de la Petición (JSON Payload)

``` json
{
    "councilId": 64886,
    "userExternalId": "TEST001",
    "companyExternalId": "API_TEST"
}

 ```

### 3\. Ejemplo de comando cURL

``` bash
curl --location "https://api.ovac.pre.councilbox.com/graphql" \
--header "Content-Type: application/json" \
--header "x-jwt-token: {{token}}" \
--data '{"query":"mutation AssignCouncilToUser($councilId: Int!, $userId: Int, $userExternalId: String, $companyExternalId: String) { assignCouncilToUser(councilId: $councilId, userId: $userId, userExternalId: $userExternalId, companyExternalId: $companyExternalId) { success message } }","variables":{"councilId":64886,"userExternalId":"TEST001","companyExternalId":"API_TEST"}}'

 ```

### 4\. Respuesta Esperada (200 OK)

``` json
{
    "data": {
        "assignCouncilToUser": {
            "success": true,
            "message": null
        }
    }
}

 ```

> **Nota OpenAPI/Fern:** esta operación GraphQL se documenta como `/graphql/assigncounciltouser-2` para que Fern pueda mostrarla como operación independiente. La ruta técnica real de ejecución es `POST /graphql`.


Reference: https://docs.ovac.councilbox.com/metodos-api/ovac/assign-council-to-user-2

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: ovac
  version: 1.0.0
paths:
  /graphql/assigncounciltouser-2:
    post:
      operationId: assign-council-to-user-2
      summary: Assign Appointment to Operator_External
      description: >
        # Assign Appointment to Operator (External ID Variant)
        (`assignCouncilToUser`)


        Este método permite asignar una cita (consejo) existente a un operador
        utilizando el identificador externo del usuario (`userExternalId`) y el
        identificador externo de la organización o entidad
        (`companyExternalId`). Esta variante es ideal para integraciones con
        CRMs o sistemas legados del cliente, ya que permite realizar la
        asignación sin necesidad de conocer los identificadores numéricos
        internos de la base de datos de OVAC.


        ### Autenticación


        > **Tipo:** API Key**  

        Header:** `x-jwt-token`  

        **Ubicación:** Header HTTP_  

        Ejemplo:_ `x-jwt-token: eyJhbGciOiJIUzI1NiIsInR5cCI6...` 
          

        ## Referencia de la API


        ### Parámetros de Entrada (Variables)


        | Parámetro | Descripción | Requerido | Tipo |

        | --- | --- | --- | --- |

        | councilId | Identificador numérico único de la cita en la plataforma.
        | SI | Integer |

        | userExternalId | Identificador único del usuario en el sistema de
        origen del cliente. | SI | String |

        | companyExternalId | Identificador único de la entidad u organización
        en el sistema de origen del cliente. | SI | String |


        ### Campos de Respuesta (Payload)


        La mutación devuelve un objeto `assignCouncilToUser` con el resultado de
        la asignación de personal:


        | Parámetro | Descripción | Tipo |

        | --- | --- | --- |

        | data | Objeto dato | Object |

        | data.assignCouncilToUser | Objeto del usuario | Object |

        | data.assignCouncilToUser.success | Valor booleano de verificación de
        asignación. | Boolean |

        | data.assignCouncilToUser.message | Error que devuelve, por defecto
        _null_ | String |


        ## Ejemplos de Código y Peticiones


        ### 1\. Mutación GraphQL


        ``` graphql

        mutation AssignCouncilToUser(
            $councilId: Int!, 
            $userId: Int, 
            $userExternalId: String, 
            $companyExternalId: String
        ) {
            assignCouncilToUser(
                councilId: $councilId, 
                userId: $userId, 
                userExternalId: $userExternalId, 
                companyExternalId: $companyExternalId
            ) {
                success
                message
            }
        }

         ```

        ### 2\. Variables de la Petición (JSON Payload)


        ``` json

        {
            "councilId": 64886,
            "userExternalId": "TEST001",
            "companyExternalId": "API_TEST"
        }

         ```

        ### 3\. Ejemplo de comando cURL


        ``` bash

        curl --location "https://api.ovac.pre.councilbox.com/graphql" \

        --header "Content-Type: application/json" \

        --header "x-jwt-token: {{token}}" \

        --data '{"query":"mutation AssignCouncilToUser($councilId: Int!,
        $userId: Int, $userExternalId: String, $companyExternalId: String) {
        assignCouncilToUser(councilId: $councilId, userId: $userId,
        userExternalId: $userExternalId, companyExternalId: $companyExternalId)
        { success message }
        }","variables":{"councilId":64886,"userExternalId":"TEST001","companyExternalId":"API_TEST"}}'

         ```

        ### 4\. Respuesta Esperada (200 OK)


        ``` json

        {
            "data": {
                "assignCouncilToUser": {
                    "success": true,
                    "message": null
                }
            }
        }

         ```

        > **Nota OpenAPI/Fern:** esta operación GraphQL se documenta como
        `/graphql/assigncounciltouser-2` para que Fern pueda mostrarla como
        operación independiente. La ruta técnica real de ejecución es `POST
        /graphql`.
      tags:
        - subpackage_ovac
      parameters:
        - name: x-jwt-token
          in: header
          description: JWT token obtained from Login.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: >-
            Successful response. GraphQL business errors may be returned inside
            the JSON `errors` field while transport status remains HTTP 200.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OVAC_assignCouncilToUser_2_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  description: GraphQL operation
                variables:
                  $ref: >-
                    #/components/schemas/GraphqlAssigncounciltouser2PostRequestBodyContentApplicationJsonSchemaVariables
                  description: GraphQL variables
              required:
                - query
servers:
  - url: https://api.ovac.pre.councilbox.com
  - url: https://api.ovac.councilbox.com
components:
  schemas:
    GraphqlAssigncounciltouser2PostRequestBodyContentApplicationJsonSchemaVariables:
      type: object
      properties: {}
      description: GraphQL variables
      title: >-
        GraphqlAssigncounciltouser2PostRequestBodyContentApplicationJsonSchemaVariables
    OVAC_assignCouncilToUser_2_Response_200:
      type: object
      properties: {}
      title: OVAC_assignCouncilToUser_2_Response_200
  securitySchemes:
    JwtToken:
      type: apiKey
      in: header
      name: x-jwt-token
      description: JWT token obtained from Login.

```

## SDK Code Examples

```python Assign Appointment to Operator_External
import requests

url = "https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2"

payload = {
    "query": "mutation AssignCouncilToUser($councilId: Int!, 
$userExternalId: String!, 
$companyExternalId: String!) 
    {
    assignCouncilToUser(councilId: $councilId, 
        userExternalId: $userExterna",
    "variables": {
        "councilId": 98765,
        "userExternalId": "USR_2024_001",
        "companyExternalId": "COMP_ABC_123"
    }
}
headers = {
    "x-jwt-token": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Assign Appointment to Operator_External
const url = 'https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2';
const options = {
  method: 'POST',
  headers: {'x-jwt-token': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"query":"mutation AssignCouncilToUser($councilId: Int!, \r\n$userExternalId: String!, \r\n$companyExternalId: String!) \r\n    {\r\n    assignCouncilToUser(councilId: $councilId, \r\n        userExternalId: $userExterna","variables":{"councilId":98765,"userExternalId":"USR_2024_001","companyExternalId":"COMP_ABC_123"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Assign Appointment to Operator_External
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2"

	payload := strings.NewReader("{\n  \"query\": \"mutation AssignCouncilToUser($councilId: Int!, \\r\\n$userExternalId: String!, \\r\\n$companyExternalId: String!) \\r\\n    {\\r\\n    assignCouncilToUser(councilId: $councilId, \\r\\n        userExternalId: $userExterna\",\n  \"variables\": {\n    \"councilId\": 98765,\n    \"userExternalId\": \"USR_2024_001\",\n    \"companyExternalId\": \"COMP_ABC_123\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("x-jwt-token", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Assign Appointment to Operator_External
require 'uri'
require 'net/http'

url = URI("https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-jwt-token"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"query\": \"mutation AssignCouncilToUser($councilId: Int!, \\r\\n$userExternalId: String!, \\r\\n$companyExternalId: String!) \\r\\n    {\\r\\n    assignCouncilToUser(councilId: $councilId, \\r\\n        userExternalId: $userExterna\",\n  \"variables\": {\n    \"councilId\": 98765,\n    \"userExternalId\": \"USR_2024_001\",\n    \"companyExternalId\": \"COMP_ABC_123\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Assign Appointment to Operator_External
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2")
  .header("x-jwt-token", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"query\": \"mutation AssignCouncilToUser($councilId: Int!, \\r\\n$userExternalId: String!, \\r\\n$companyExternalId: String!) \\r\\n    {\\r\\n    assignCouncilToUser(councilId: $councilId, \\r\\n        userExternalId: $userExterna\",\n  \"variables\": {\n    \"councilId\": 98765,\n    \"userExternalId\": \"USR_2024_001\",\n    \"companyExternalId\": \"COMP_ABC_123\"\n  }\n}")
  .asString();
```

```php Assign Appointment to Operator_External
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2', [
  'body' => '{
  "query": "mutation AssignCouncilToUser($councilId: Int!, \\r\\n$userExternalId: String!, \\r\\n$companyExternalId: String!) \\r\\n    {\\r\\n    assignCouncilToUser(councilId: $councilId, \\r\\n        userExternalId: $userExterna",
  "variables": {
    "councilId": 98765,
    "userExternalId": "USR_2024_001",
    "companyExternalId": "COMP_ABC_123"
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-jwt-token' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Assign Appointment to Operator_External
using RestSharp;

var client = new RestClient("https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2");
var request = new RestRequest(Method.POST);
request.AddHeader("x-jwt-token", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"query\": \"mutation AssignCouncilToUser($councilId: Int!, \\r\\n$userExternalId: String!, \\r\\n$companyExternalId: String!) \\r\\n    {\\r\\n    assignCouncilToUser(councilId: $councilId, \\r\\n        userExternalId: $userExterna\",\n  \"variables\": {\n    \"councilId\": 98765,\n    \"userExternalId\": \"USR_2024_001\",\n    \"companyExternalId\": \"COMP_ABC_123\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Assign Appointment to Operator_External
import Foundation

let headers = [
  "x-jwt-token": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "query": "mutation AssignCouncilToUser($councilId: Int!, 
$userExternalId: String!, 
$companyExternalId: String!) 
    {
    assignCouncilToUser(councilId: $councilId, 
        userExternalId: $userExterna",
  "variables": [
    "councilId": 98765,
    "userExternalId": "USR_2024_001",
    "companyExternalId": "COMP_ABC_123"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.ovac.pre.councilbox.com/graphql/assigncounciltouser-2")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```