@php /** @var string $openApiUrl */ $openApiUrl = route('v2.unidade-regional.api.openapi'); $pageTitle = 'API Unidades Regionais — Documentação'; @endphp @extends('v2-cms::layouts.app', ['title' => $pageTitle]) @push('css') @endpush @section('page-breadcrumbs') Conexões › Unidades Regionais › API Docs @endsection @section('page-actions') Voltar @endsection @section('content')
Authorization: Bearer asc_... em todas as requisições
wiki/api/unidade-regional.md para detalhes avançados
| Endpoint | Operação | Limite | Janela |
|---|---|---|---|
POST /noticias |
Criar notícia | 30 req | por minuto |
POST /noticias/{id} |
Atualizar notícia /{id} |
30 req | por minuto |
POST /associados |
Criar associado | 30 req | por minuto |
POST /associados/{id} |
Atualizar associado /{id} |
30 req | por minuto |
GET /noticias |
Listar notícias | Sem limite | — |
GET /associados |
Listar associados | Sem limite | — |
DELETE /noticias/{id} |
Arquivar notícia | Sem limite | — |
DELETE /associados/{id} |
Arquivar associado | Sem limite | — |
| Método | Rota | Descrição | Auth | Throttle |
|---|---|---|---|---|
| GET | /noticias |
Listar notícias da regional | — | |
| POST | /noticias |
Criar notícia sem id |
30/min | |
| POST | /noticias/{id} |
Atualizar notícia | 30/min | |
| DELETE | /noticias/{id} |
Arquivar notícia (soft-delete) | — | |
| GET | /associados |
Listar associados da regional | — | |
| POST | /associados |
Criar associado sem id |
30/min | |
| POST | /associados/{id} |
Atualizar associado | 30/min | |
| DELETE | /associados/{id} |
Arquivar associado (soft-delete) | — |
Cada exemplo abaixo é um REST client completo com todas as 8 operações da API: criar, atualizar, listar e arquivar tanto notícias quanto associados.
{{-- Tabs de linguagem --}} {{-- ── PHP Puro ─────────────────────────────────────────── --}}<?php // ============================================================ // Sucesu API Client — PHP Puro (cURL) // Operações: Notícias (criar/atualizar/listar/arquivar) // Associados (criar/atualizar/listar/arquivar) // ============================================================ $token = 'asc_SEU_TOKEN'; $baseUrl = '{{ url("api/v2/unidaderegional") }}'; /** * Envia requisição HTTP para a API * * @param string $method GET, POST ou DELETE * @param string $endpoint Rota (ex: /noticias) * @param string $token Bearer token * @param string $baseUrl URL base da API * @param array|null $data Dados do body (apenas para POST) * @return array */ function apiRequest($method, $endpoint, $token, $baseUrl, $data = null) { $ch = curl_init($baseUrl . $endpoint); $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json', ], ]; if ($method === 'POST') { $options[CURLOPT_POST] = true; $options[CURLOPT_POSTFIELDS] = json_encode($data); } elseif ($method === 'DELETE') { $options[CURLOPT_CUSTOMREQUEST] = 'DELETE'; } curl_setopt_array($ch, $options); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response; } // ════════════════════════════════════════════════════════════ // NOTÍCIAS // ════════════════════════════════════════════════════════════ // 1. Criar notícia (Markdown → converte para Tiptap JSON) $result = apiRequest('POST', '/noticias', $token, $baseUrl, [ 'title' => 'SUCESU Participa de Fórum', 'content' => "## Resumo\n\nA regional participou do fórum nacional.\n\n- Item 1\n- Item 2", 'tags' => ['forum', 'nacional'], ]); $noticiaId = $result['data']['id']; echo "Criado: $noticiaId\n"; // 2. Atualizar notícia (envie path + campos desejados) $result = apiRequest('POST', "/noticias/$noticiaId", $token, $baseUrl, [ 'title' => 'Título Atualizado via API', ]); echo $result['message'] . "\n"; // 3. Listar notícias (paginado) $list = apiRequest('GET', '/noticias?per_page=10', $token, $baseUrl); foreach ($list['data']['news'] as $n) { echo " {$n['title']} [{$n['status']}]\n"; } // 4. Arquivar notícia (soft-delete) $result = apiRequest('DELETE', "/noticias/$noticiaId", $token, $baseUrl); echo $result['message'] . "\n"; // ════════════════════════════════════════════════════════════ // ASSOCIADOS // ════════════════════════════════════════════════════════════ // 5. Criar associado (description em Markdown → rich text) $result = apiRequest('POST', '/associados', $token, $baseUrl, [ 'name' => 'Hospital São Lucas', 'description' => "## Convênio\n\nDesconto de **15%** em consultas.\n\n### Benefícios\n\n- Consultas\n- Exames", 'url' => 'https://hospitalsaolucas.com.br', 'tags' => 'saúde, desconto, destaque', ]); $empresaId = $result['data']['results'][0]['empresa_id']; echo "Criado: $empresaId\n"; // 6. Atualizar associado $result = apiRequest('POST', "/associados/$empresaId", $token, $baseUrl, [ 'name' => 'Hospital São Lucas - Atualizado', ]); echo $result['message'] . "\n"; // 7. Listar associados $list = apiRequest('GET', '/associados', $token, $baseUrl); foreach ($list['data']['associados'] as $a) { echo " {$a['nome']} [{$a['status']}]\n"; } // 8. Arquivar associado (soft-delete do vínculo + registro) $vinculoId = $list['data']['associados'][0]['id']; $result = apiRequest('DELETE', "/associados/$vinculoId", $token, $baseUrl); echo $result['message'] . "\n";
Arquivo completo: wiki/api/examples/sucusu_client.php
// ============================================================ // Sucesu API Client — Laravel 5.5 (Guzzle) // Use dentro de um Artisan Command ou Controller // ============================================================ use GuzzleHttp\Client; $token = 'asc_SEU_TOKEN'; $client = new Client([ 'base_uri' => '{{ url("api/v2/unidaderegional") }}', 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json', ], ]); // ════════════════════════════════════════════════════════════ // NOTÍCIAS // ════════════════════════════════════════════════════════════ // 1. Criar notícia $response = $client->post('/noticias', [ 'json' => [ 'title' => 'Notícia via Laravel', 'content' => '## Conteúdo em **Markdown**', 'tags' => ['laravel', 'api'], ], ]); $result = json_decode($response->getBody(), true); $noticiaId = $result['data']['id']; echo "Criado: $noticiaId\n"; // 2. Atualizar notícia $client->post("/noticias/$noticiaId", [ 'json' => [ 'title' => 'Título Atualizado', ], ]); // 3. Listar notícias $response = $client->get('/noticias', ['query' => ['per_page' => 10]]); $news = json_decode($response->getBody(), true); foreach ($news['data']['news'] as $n) { echo " {$n['title']} [{$n['status']}]\n"; } // 4. Arquivar notícia $client->delete("/noticias/$noticiaId"); // ════════════════════════════════════════════════════════════ // ASSOCIADOS // ════════════════════════════════════════════════════════════ // 5. Criar associado $response = $client->post('/associados', [ 'json' => [ 'name' => 'Hospital São Lucas', 'description' => '## Convênio\n\nDesconto de **15%**.', 'tags' => 'saúde, desconto', ], ]); $result = json_decode($response->getBody(), true); $empresaId = $result['data']['results'][0]['empresa_id']; // 6. Atualizar associado $client->post("/associados/$empresaId", [ 'json' => [ 'name' => 'Hospital - Atualizado', ], ]); // 7. Listar associados $response = $client->get('/associados'); $associados = json_decode($response->getBody(), true); foreach ($associados['data']['associados'] as $a) { echo " {$a['nome']} [{$a['status']}]\n"; } // 8. Arquivar associado $vinculoId = $associados['data']['associados'][0]['id']; $client->delete("/associados/$vinculoId");
Arquivo completo: wiki/api/examples/SucesuApiClient.php
// ============================================================ // Sucesu API Client — Node.js 18+ (fetch nativo) // Operações: Notícias + Associados (CRUD completo) // ============================================================ const TOKEN = 'asc_SEU_TOKEN'; const BASE = '{{ url("api/v2/unidaderegional") }}'; /** Envia requisição para a API */ async function api(method, endpoint, data = null) { const opts = { method, headers: { 'Authorization': `Bearer ${TOKEN}`, 'Content-Type': 'application/json', }, }; if (data) opts.body = JSON.stringify(data); const resp = await fetch(`${BASE}${endpoint}`, opts); return resp.json(); } // ════════════════════════════════════════════════════════════ // NOTÍCIAS // ════════════════════════════════════════════════════════════ // 1. Criar notícia const created = await api('POST', '/noticias', { title: 'Nova Matéria', content: '## Conteúdo em **Markdown**', tags: ['exemplo', 'nodejs'], }); const noticiaId = created.data.id; console.log(`Criado: ${noticiaId}`); // 2. Atualizar notícia await api('POST', `/noticias/${noticiaId}`, { title: 'Título Atualizado', }); // 3. Listar notícias const news = await api('GET', '/noticias?per_page=10'); news.data.news.forEach(n => console.log(` ${n.title} [${n.status}]`)); // 4. Arquivar notícia await api('DELETE', `/noticias/${noticiaId}`); // ════════════════════════════════════════════════════════════ // ASSOCIADOS // ════════════════════════════════════════════════════════════ // 5. Criar associado const emp = await api('POST', '/associados', { name: 'Hospital São Lucas', description: '## Convênio\n\nDesconto de **15%**.', tags: 'saúde, desconto', }); const empresaId = emp.data.results[0].empresa_id; // 6. Atualizar associado await api('POST', `/associados/${empresaId}`, { name: 'Hospital - Atualizado', }); // 7. Listar associados const list = await api('GET', '/associados'); list.data.associados.forEach(a => console.log(` ${a.nome} [${a.status}]`)); // 8. Arquivar associado const vinculoId = list.data.associados[0].id; await api('DELETE', `/associados/${vinculoId}`);
Arquivo completo: wiki/api/examples/sucusu-client.js
# ============================================================ # Sucesu API Client — Python (requests) # Operações: Notícias + Associados (CRUD completo) # ============================================================ import requests TOKEN = 'asc_SEU_TOKEN' BASE = '{{ url("api/v2/unidaderegional") }}' HEADERS = {'Authorization': f'Bearer {TOKEN}', 'Content-Type': 'application/json'} def api(method, endpoint, data=None): """Envia requisição para a API.""" url = BASE + endpoint if method == 'POST': r = requests.post(url, headers=HEADERS, json=data) elif method == 'DELETE': r = requests.delete(url, headers=HEADERS) else: r = requests.get(url, headers=HEADERS) return r.json() # ════════════════════════════════════════════════════════════ # NOTÍCIAS # ════════════════════════════════════════════════════════════ # 1. Criar notícia result = api('POST', '/noticias', { 'title': 'Nova Matéria', 'content': '## Conteúdo em **Markdown**', 'tags': ['exemplo', 'python'], }) noticia_id = result['data']['id'] print(f'Criado: {noticia_id}') # 2. Atualizar notícia api('POST', f'/noticias/{noticia_id}', { 'title': 'Título Atualizado', }) # 3. Listar notícias news = api('GET', '/noticias?per_page=10') for n in news['data']['news']: print(f' {n["title"]} [{n["status"]}]') # 4. Arquivar notícia api('DELETE', f'/noticias/{noticia_id}') # ════════════════════════════════════════════════════════════ # ASSOCIADOS # ════════════════════════════════════════════════════════════ # 5. Criar associado result = api('POST', '/associados', { 'name': 'Hospital São Lucas', 'description': '## Convênio\n\nDesconto de **15%**.', 'tags': 'saúde, desconto', }) empresa_id = result['data']['results'][0]['empresa_id'] # 6. Atualizar associado api('POST', f'/associados/{empresa_id}', { 'name': 'Hospital - Atualizado', }) # 7. Listar associados assoc = api('GET', '/associados') for a in assoc['data']['associados']: print(f' {a["nome"]} [{a["status"]}]') # 8. Arquivar associado vinculo_id = assoc['data']['associados'][0]['id'] api('DELETE', f'/associados/{vinculo_id}')
Arquivo completo: wiki/api/examples/sucusu_client.py
# ============================================================ # Sucesu API Client — Ruby (HTTParty) # Operações: Notícias + Associados (CRUD completo) # ============================================================ require 'httparty' TOKEN = 'asc_SEU_TOKEN' BASE = '{{ url("api/v2/unidaderegional") }}' HEADERS = { 'Authorization' => "Bearer #{TOKEN}", 'Content-Type' => 'application/json' } def api(method, endpoint, data = nil) url = BASE + endpoint case method when 'POST' HTTParty.post(url, headers: HEADERS, body: data.to_json) when 'DELETE' HTTParty.delete(url, headers: HEADERS) else HTTParty.get(url, headers: HEADERS) end.parsed_response end # ════════════════════════════════════════════════════════════ # NOTÍCIAS # ════════════════════════════════════════════════════════════ # 1. Criar notícia result = api('POST', '/noticias', { title: 'Nova Matéria', content: '## Conteúdo em **Markdown**', tags: ['exemplo', 'ruby'], }) noticia_id = result['data']['id'] puts "Criado: #{noticia_id}" # 2. Atualizar notícia api('POST', "/noticias/#{noticia_id}", { title: 'Título Atualizado', }) # 3. Listar notícias news = api('GET', '/noticias?per_page=10') news['data']['news'].each do |n| puts " #{n['title']} [#{n['status']}]" end # 4. Arquivar notícia api('DELETE', "/noticias/#{noticia_id}") # ════════════════════════════════════════════════════════════ # ASSOCIADOS # ════════════════════════════════════════════════════════════ # 5. Criar associado result = api('POST', '/associados', { name: 'Hospital São Lucas', description: '## Convênio\n\nDesconto de **15%**.', tags: 'saúde, desconto', }) empresa_id = result['data']['results'][0]['empresa_id'] # 6. Atualizar associado api('POST', "/associados/#{empresa_id}", { name: 'Hospital - Atualizado', }) # 7. Listar associados assoc = api('GET', '/associados') assoc['data']['associados'].each do |a| puts " #{a['nome']} [#{a['status']}]" end # 8. Arquivar associado vinculo_id = assoc['data']['associados'][0]['id'] api('DELETE', "/associados/#{vinculo_id}")
Arquivo completo: wiki/api/examples/sucusu_client.rb
// ============================================================ // Sucesu API Client — Rust (reqwest + tokio) // Cargo.toml: reqwest, tokio, serde, serde_json // ============================================================ use reqwest::Client; use serde_json::{json, Value}; const TOKEN: &str = "asc_SEU_TOKEN"; const BASE: &str = "{{ url("api/v2/unidaderegional") }}"; async fn api(client: &Client, method: &str, endpoint: &str, data: Option<Value>) -> Result<Value, Box<dyn std::error::Error>> { let url = format!("{}{}", BASE, endpoint); let mut req = match method { "POST" => client.post(&url), "DELETE" => client.delete(&url), _ => client.get(&url), }; req = req.bearer_auth(TOKEN); if let Some(body) = data { req = req.json(&body); } let resp = req.send().await?; let val: Value = resp.json().await?; Ok(val) } #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = Client::new(); // ════════════════════════════════════════════════════════ // NOTÍCIAS // ════════════════════════════════════════════════════════ // 1. Criar notícia let created = api(&client, "POST", "/noticias", Some(json!({ "title": "Nova Matéria", "content": "## Conteúdo em **Markdown**", "tags": ["exemplo", "rust"], }))).await?; let noticia_id = created["data"]["id"].as_str().unwrap(); println!("Criado: {}", noticia_id); // 2. Atualizar notícia api(&client, "POST", &format!("/noticias/{}", noticia_id), Some(json!({ "title": "Título Atualizado", }))).await?; // 3. Listar notícias let news = api(&client, "GET", "/noticias?per_page=10", None).await?; if let Some(items) = news["data"]["news"].as_array() { for n in items { println!(" {} [{}]", n["title"], n["status"]); } } // 4. Arquivar notícia api(&client, "DELETE", &format!("/noticias/{}", noticia_id), None).await?; // ════════════════════════════════════════════════════════ // ASSOCIADOS // ════════════════════════════════════════════════════════ // 5. Criar associado let emp = api(&client, "POST", "/associados", Some(json!({ "name": "Hospital São Lucas", "description": "## Convênio\n\nDesconto de **15%**.", "tags": "saúde, desconto", }))).await?; let empresa_id = emp["data"]["results"][0]["empresa_id"] .as_str().unwrap(); // 6. Atualizar associado api(&client, "POST", &format!("/associados/{}", empresa_id), Some(json!({ "name": "Hospital - Atualizado", }))).await?; // 7. Listar associados let list = api(&client, "GET", "/associados", None).await?; if let Some(items) = list["data"]["associados"].as_array() { for a in items { println!(" {} [{}]", a["nome"], a["status"]); } } // 8. Arquivar associado let vinculo_id = list["data"]["associados"][0]["id"] .as_str().unwrap(); api(&client, "DELETE", &format!("/associados/{}", vinculo_id), None).await?; Ok(()) }
Arquivo completo: wiki/api/examples/main.rs
Importe a especificação OpenAPI em suas ferramentas favoritas:
Todas as requisições (exceto GET /openapi.json) exigem um Bearer Token válido.
Authorization: Bearer asc_...
asc_ + 60 caracteres aleatórios