> 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.

# Share appointment

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

# Share Appointment (`shareAppointment`)

Esta mutación permite generar un enlace único de acceso compartido para una cita específica. Adicionalmente, expone un parámetro de seguridad ajustable que permite condicionar el acceso de terceros mediante un código PIN dinámico generado por el sistema.

### 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 único de la cita a la que se desea permitir el acceso. | SI | Integer |
| requirePin | Parámetro de seguridad para el nivel de acceso:  <br>`0` -> Acceso directo sin autenticación adicional.  <br>`1` -> Requiere PIN de seguridad (se generará en la respuesta). | SI | Integer |

### Campos de Respuesta (Payload)

La mutación devuelve un objeto `shareAppointment` con el enlace securizado:

| Parámetro | Descripción | Tipo |
| --- | --- | --- |
| shareAppointment | Objeto raíz con los datos del enlace compartido generado. | Object |
| shareAppointment.**url** | Enlace único de acceso directo para auditar la cita. | String |
| shareAppointment.**pin** | Código numérico secreto de acceso. Este campo solo se devolverá si $requirePin fue enviado con valor 1. | Integer |

## Ejemplos de Código y Peticiones

### 1\. Mutación GraphQL

``` graphql
mutation ShareAppointment($councilId: ID!, $requirePin: Int) {
    shareAppointment(councilId: $councilId, requirePin: $requirePin) {
        url
        pin
    }
}

 ```

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

``` json
{
    "councilId": 64767,
    "requirePin": 1
}

 ```

### 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 ShareAppointment ($councilId: ID!, $requirePin: Int){ shareAppointment(councilId: $councilId, requirePin: $requirePin) { url pin } }","variables":{"councilId":64767,"requirePin":1}}'

 ```

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

``` json
{
    "data": {
        "shareAppointment": {
            "url": "https://l.councilbox.com/to/82e520fb",
            "pin": 18065
        }
    }
}

 ```

> **Nota OpenAPI/Fern:** esta operación GraphQL se documenta como `/graphql/shareappointment` 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/share-appointment

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: ovac
  version: 1.0.0
paths:
  /graphql/shareappointment:
    post:
      operationId: share-appointment
      summary: Share appointment
      description: >
        # Share Appointment (`shareAppointment`)


        Esta mutación permite generar un enlace único de acceso compartido para
        una cita específica. Adicionalmente, expone un parámetro de seguridad
        ajustable que permite condicionar el acceso de terceros mediante un
        código PIN dinámico generado por el sistema.


        ### 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 único de la cita a la que se desea permitir
        el acceso. | SI | Integer |

        | requirePin | Parámetro de seguridad para el nivel de acceso:  <br>`0`
        -> Acceso directo sin autenticación adicional.  <br>`1` -> Requiere PIN
        de seguridad (se generará en la respuesta). | SI | Integer |


        ### Campos de Respuesta (Payload)


        La mutación devuelve un objeto `shareAppointment` con el enlace
        securizado:


        | Parámetro | Descripción | Tipo |

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

        | shareAppointment | Objeto raíz con los datos del enlace compartido
        generado. | Object |

        | shareAppointment.**url** | Enlace único de acceso directo para auditar
        la cita. | String |

        | shareAppointment.**pin** | Código numérico secreto de acceso. Este
        campo solo se devolverá si $requirePin fue enviado con valor 1. |
        Integer |


        ## Ejemplos de Código y Peticiones


        ### 1\. Mutación GraphQL


        ``` graphql

        mutation ShareAppointment($councilId: ID!, $requirePin: Int) {
            shareAppointment(councilId: $councilId, requirePin: $requirePin) {
                url
                pin
            }
        }

         ```

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


        ``` json

        {
            "councilId": 64767,
            "requirePin": 1
        }

         ```

        ### 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 ShareAppointment ($councilId: ID!,
        $requirePin: Int){ shareAppointment(councilId: $councilId, requirePin:
        $requirePin) { url pin }
        }","variables":{"councilId":64767,"requirePin":1}}'

         ```

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


        ``` json

        {
            "data": {
                "shareAppointment": {
                    "url": "https://l.councilbox.com/to/82e520fb",
                    "pin": 18065
                }
            }
        }

         ```

        > **Nota OpenAPI/Fern:** esta operación GraphQL se documenta como
        `/graphql/shareappointment` 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_shareAppointment_Response_200'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  description: GraphQL operation
                variables:
                  $ref: >-
                    #/components/schemas/GraphqlShareappointmentPostRequestBodyContentApplicationJsonSchemaVariables
                  description: GraphQL variables
              required:
                - query
servers:
  - url: https://api.ovac.pre.councilbox.com
  - url: https://api.ovac.councilbox.com
components:
  schemas:
    GraphqlShareappointmentPostRequestBodyContentApplicationJsonSchemaVariables:
      type: object
      properties: {}
      description: GraphQL variables
      title: >-
        GraphqlShareappointmentPostRequestBodyContentApplicationJsonSchemaVariables
    OVAC_shareAppointment_Response_200:
      type: object
      properties: {}
      title: OVAC_shareAppointment_Response_200
  securitySchemes:
    JwtToken:
      type: apiKey
      in: header
      name: x-jwt-token
      description: JWT token obtained from Login.

```

## SDK Code Examples

```python Share appointment
import requests

url = "https://api.ovac.pre.councilbox.com/graphql/shareappointment"

payload = {
    "query": "mutation ShareAppointment (
    $councilId: ID!,
    $requirePin: Int

){
    shareAppointment(
        councilId: $councilId,
        requirePin: $requirePin,
    ) {
        url
        pin
    }
}",
    "variables": {
        "councilId": 12345,
        "requirePin": 1
    }
}
headers = {
    "x-jwt-token": "<apiKey>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Share appointment
const url = 'https://api.ovac.pre.councilbox.com/graphql/shareappointment';
const options = {
  method: 'POST',
  headers: {'x-jwt-token': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"query":"mutation ShareAppointment (\r\n    $councilId: ID!,\r\n    $requirePin: Int\r\n\r\n){\r\n    shareAppointment(\r\n        councilId: $councilId,\r\n        requirePin: $requirePin,\r\n    ) {\r\n        url\r\n        pin\r\n    }\r\n}","variables":{"councilId":12345,"requirePin":1}}'
};

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

```go Share appointment
package main

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

func main() {

	url := "https://api.ovac.pre.councilbox.com/graphql/shareappointment"

	payload := strings.NewReader("{\n  \"query\": \"mutation ShareAppointment (\\r\\n    $councilId: ID!,\\r\\n    $requirePin: Int\\r\\n\\r\\n){\\r\\n    shareAppointment(\\r\\n        councilId: $councilId,\\r\\n        requirePin: $requirePin,\\r\\n    ) {\\r\\n        url\\r\\n        pin\\r\\n    }\\r\\n}\",\n  \"variables\": {\n    \"councilId\": 12345,\n    \"requirePin\": 1\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 Share appointment
require 'uri'
require 'net/http'

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

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 ShareAppointment (\\r\\n    $councilId: ID!,\\r\\n    $requirePin: Int\\r\\n\\r\\n){\\r\\n    shareAppointment(\\r\\n        councilId: $councilId,\\r\\n        requirePin: $requirePin,\\r\\n    ) {\\r\\n        url\\r\\n        pin\\r\\n    }\\r\\n}\",\n  \"variables\": {\n    \"councilId\": 12345,\n    \"requirePin\": 1\n  }\n}"

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

```java Share appointment
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.ovac.pre.councilbox.com/graphql/shareappointment")
  .header("x-jwt-token", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"query\": \"mutation ShareAppointment (\\r\\n    $councilId: ID!,\\r\\n    $requirePin: Int\\r\\n\\r\\n){\\r\\n    shareAppointment(\\r\\n        councilId: $councilId,\\r\\n        requirePin: $requirePin,\\r\\n    ) {\\r\\n        url\\r\\n        pin\\r\\n    }\\r\\n}\",\n  \"variables\": {\n    \"councilId\": 12345,\n    \"requirePin\": 1\n  }\n}")
  .asString();
```

```php Share appointment
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.ovac.pre.councilbox.com/graphql/shareappointment', [
  'body' => '{
  "query": "mutation ShareAppointment (\\r\\n    $councilId: ID!,\\r\\n    $requirePin: Int\\r\\n\\r\\n){\\r\\n    shareAppointment(\\r\\n        councilId: $councilId,\\r\\n        requirePin: $requirePin,\\r\\n    ) {\\r\\n        url\\r\\n        pin\\r\\n    }\\r\\n}",
  "variables": {
    "councilId": 12345,
    "requirePin": 1
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-jwt-token' => '<apiKey>',
  ],
]);

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

```csharp Share appointment
using RestSharp;

var client = new RestClient("https://api.ovac.pre.councilbox.com/graphql/shareappointment");
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 ShareAppointment (\\r\\n    $councilId: ID!,\\r\\n    $requirePin: Int\\r\\n\\r\\n){\\r\\n    shareAppointment(\\r\\n        councilId: $councilId,\\r\\n        requirePin: $requirePin,\\r\\n    ) {\\r\\n        url\\r\\n        pin\\r\\n    }\\r\\n}\",\n  \"variables\": {\n    \"councilId\": 12345,\n    \"requirePin\": 1\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Share appointment
import Foundation

let headers = [
  "x-jwt-token": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "query": "mutation ShareAppointment (
    $councilId: ID!,
    $requirePin: Int

){
    shareAppointment(
        councilId: $councilId,
        requirePin: $requirePin,
    ) {
        url
        pin
    }
}",
  "variables": [
    "councilId": 12345,
    "requirePin": 1
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.ovac.pre.councilbox.com/graphql/shareappointment")! 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()
```