Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/astranexo-com:astranexo-com-claves-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Astranexo Com Claves API
version: '1.0'
contact:
name: Soporte de Aster
url: https://astranexo.com/soporte
email: app@astranexo.com
description: 'Operations tagged Claves API across 2 of this provider''s published API definitions: aster-openapi.yaml, fe-api-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://aster.astranexo.com/api/v1
description: Producción. La misma URL atiende claves de prueba y de producción; la clave decide el ambiente de Hacienda.
security:
- ApiKey: []
tags:
- name: Claves API
description: Claves de cuenta y de organización.
paths:
/api-keys:
get:
operationId: listApiKeys
tags:
- Claves API
summary: Listar claves
description: Claves de la cuenta (de cuenta y de organización), de la más reciente a la más antigua, incluidas las revocadas. Nunca incluye el secreto.
x-required-ability: account:manage
responses:
'200':
description: Claves.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ApiKey'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/AccountForbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: createApiKey
tags:
- Claves API
summary: Crear una clave
description: 'Crea una clave de cuenta (sin `organization_id`) o de organización. El secreto se
devuelve **una sola vez**. Las claves de producción requieren un plan pagado
activo (`402 plan_required`) y solo una clave de cuenta de producción puede
crearlas (`403 live_key_required`). Sin `abilities`, una clave de organización
recibe todas las habilidades de organización y una de cuenta `account:manage`.'
x-required-ability: account:manage
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApiKeyInput'
example:
name: Integración ERP
mode: test
organization_id: 6f1c2a9e-4b7d-4c3e-9a51-2d8f0e7b1c44
responses:
'201':
description: Clave creada. Guarde el secreto ahora; no se vuelve a mostrar.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
$ref: '#/components/schemas/ApiKeyCreated'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'403':
$ref: '#/components/responses/AccountForbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/TooManyRequests'
servers:
- url: https://aster.astranexo.com/api/v1
description: Producción. La misma URL atiende claves de prueba y de producción; la clave decide el ambiente de Hacienda.
/api-keys/{key}:
parameters:
- name: key
in: path
required: true
description: Id (UUID) de la clave.
schema:
type: string
format: uuid
delete:
operationId: revokeApiKey
tags:
- Claves API
summary: Revocar una clave
description: 'Revoca una clave de la cuenta. Una clave no puede revocarse a sí misma
(`422 cannot_revoke_current_key`) y solo una clave de cuenta de producción puede
revocar claves de producción (`403 live_key_required`).'
x-required-ability: account:manage
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
responses:
'200':
description: Clave revocada.
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/AccountForbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/Unprocessable'
'429':
$ref: '#/components/responses/TooManyRequests'
servers:
- url: https://aster.astranexo.com/api/v1
description: Producción. La misma URL atiende claves de prueba y de producción; la clave decide el ambiente de Hacienda.
/auth/me:
get:
operationId: getCurrentKey
tags:
- Claves API
summary: Clave actual
description: Identifica la clave de organización con que se llama, su cuenta, su organización y sus habilidades. Útil para verificar una integración.
x-required-ability: ninguna
responses:
'200':
description: La clave actual.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
$ref: '#/components/schemas/CurrentKey'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
servers:
- url: https://aster.astranexo.com/api/v1
description: Producción. La misma URL atiende claves de prueba y de producción; la clave decide el ambiente de Hacienda.
components:
headers:
X-RateLimit-Reset:
description: Fin de la ventana actual (segundos Unix).
schema:
type: integer
format: int64
Retry-After:
description: Segundos que faltan para poder reintentar.
schema:
type: integer
X-RateLimit-Remaining:
description: Solicitudes restantes en la ventana actual.
schema:
type: integer
X-RateLimit-Limit:
description: Solicitudes permitidas en la ventana actual.
schema:
type: integer
responses:
Forbidden:
description: 'Sin permiso: `forbidden` (falta la habilidad), `organization_key_required`, `live_key_required`, `no_tenant`, `tenant_inactive`, `tenant_deleted`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
message: This action is unauthorized.
error:
code: forbidden
message: This action is unauthorized.
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
Unprocessable:
description: Regla de negocio incumplida; `error.code` indica cuál.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
AccountForbidden:
description: 'Sin permiso: `account_key_required` (se usó una clave de organización), `forbidden`, `live_key_required`, `organization_limit_reached`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
message: 'This endpoint manages an account: use an account API key.'
error:
code: account_key_required
message: 'This endpoint manages an account: use an account API key.'
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
NotFound:
description: 'No existe o no pertenece a la organización ni a su ambiente: `not_found` u otro código específico (`xml_not_available`, `response_not_available`, `pdf_not_available`, `no_documents`, `recipient_not_found`, `document_not_found`, `cabys_not_found`, `tariff_not_found`, `province_not_found`).'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
error:
code: not_found
message: Document not found.
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
ValidationFailed:
description: Validación fallida (`validation_error`, con mensajes por campo en `error.errors`) u otra regla de negocio con su propio código.
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/ValidationError'
- $ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
error:
code: validation_error
message: A valid email is required.
errors:
email:
- A valid email is required.
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
PaymentRequired:
description: 'Se requiere un plan pagado: `plan_required` (claves de producción sin plan activo) o `subscription_expired`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
TooManyRequests:
description: Límite de solicitudes alcanzado (`rate_limited`).
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
message: Rate limit exceeded. Try again in 12 seconds.
error:
code: rate_limited
message: Rate limit exceeded. Try again in 12 seconds.
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
Unauthorized:
description: 'Clave ausente, desconocida, vencida o revocada: `unauthenticated`, `token_expired`, `key_revoked`, `tenant_unresolved`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
message: Unauthenticated.
error:
code: unauthenticated
message: Unauthenticated.
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
BadRequest:
description: 'Solicitud mal formada: `invalid_json`, `invalid_request`, `invalid_idempotency_key`, `invalid_body`, `missing_params`, `missing_date`, `invalid_date`, `future_date`, `invalid_currency`, `missing_category`, `missing_param`, `too_many_codes`, etc.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
example:
success: false
error:
code: invalid_json
message: 'Invalid JSON in request body: unexpected EOF'
timestamp: '2026-10-08T16:00:00Z'
api_version: '1.0'
schemas:
ErrorPayload:
type: object
required:
- code
- message
properties:
code:
type: string
description: Código estable del error, para usar en el código del cliente.
example: validation_error
message:
type: string
description: Descripción legible.
errors:
type: object
description: Mensajes por campo (ruta con puntos, por ejemplo `items.0.cabys_code`).
additionalProperties:
type: array
items:
type: string
ApiKey:
type: object
properties:
id:
type: string
format: uuid
mode:
type: string
enum:
- test
- live
name:
type: string
prefix:
type: string
description: Inicio de la clave, para reconocerla.
example: aster_test_8Kq3vT0b
abilities:
type: array
items:
type: string
organization_id:
type: string
format: uuid
description: Organización de la clave; ausente en las claves de cuenta.
last_used_at:
type:
- string
- 'null'
format: date-time
expires_at:
type:
- string
- 'null'
format: date-time
revoked_at:
type:
- string
- 'null'
format: date-time
created_at:
type: string
format: date-time
CurrentKey:
type: object
properties:
key:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
mode:
type: string
enum:
- test
- live
prefix:
type: string
account:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
plan:
type: string
status:
type: string
organization:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
identification_type:
type: string
identification_number:
type: string
environment:
$ref: '#/components/schemas/Environment'
abilities:
type: array
items:
type: string
Envelope:
type: object
description: Envoltura de las respuestas exitosas.
required:
- success
- timestamp
- api_version
properties:
success:
type: boolean
const: true
message:
type: string
description: Mensaje legible (en inglés) de algunas operaciones.
data:
description: Contenido de la respuesta.
timestamp:
type: string
format: date-time
api_version:
type: string
example: '1.0'
ErrorEnvelope:
type: object
description: Envoltura de los errores.
required:
- success
- error
- timestamp
- api_version
properties:
success:
type: boolean
const: false
message:
type: string
description: Repite `error.message` en los errores de autenticación, permisos, límites, idempotencia y cuota.
error:
$ref: '#/components/schemas/ErrorPayload'
timestamp:
type: string
format: date-time
api_version:
type: string
example: '1.0'
ApiKeyCreated:
allOf:
- $ref: '#/components/schemas/ApiKey'
- type: object
required:
- secret
properties:
secret:
type: string
description: La clave completa. Solo se muestra en esta respuesta.
example: aster_test_8Kq3vT0bX2mN7pQ9rS4tU6wY1zA3cE5gH7jK9lM0
Environment:
type: string
enum:
- staging
- production
description: Ambiente de Hacienda. Con claves de Aster lo decide la clave.
ApiKeyInput:
type: object
required:
- name
- mode
properties:
name:
type: string
maxLength: 100
mode:
type: string
enum:
- test
- live
organization_id:
type: string
format: uuid
description: Organización de la clave. Omítalo para una clave de cuenta.
abilities:
type: array
description: 'Habilidades de la clave. Por defecto, todas las disponibles para su tipo. De
organización: `invoices:read`, `invoices:write`, `invoices:sign`,
`invoices:void`, `credit-notes:read|write|sign`, `debit-notes:read|write|sign`,
`tickets:read|write|sign`, `recipients:read`, `recipients:write`,
`hacienda:query`, `hacienda:validate`, `settings:read`, `settings:manage`,
`webhooks:read`, `webhooks:write`, `webhooks:manage`, `reference:read`,
`documents:export`. De cuenta: `account:manage`.
'
items:
type: string
expires_at:
type: string
format: date-time
description: Vencimiento (futuro).
ValidationError:
description: Error `422 validation_error` con los mensajes por campo.
allOf:
- $ref: '#/components/schemas/ErrorEnvelope'
- type: object
properties:
error:
type: object
required:
- code
- message
- errors
properties:
code:
type: string
const: validation_error
message:
type: string
description: Resumen de todos los mensajes, separados por ` | `.
errors:
type: object
additionalProperties:
type: array
items:
type: string
parameters:
IdempotencyKey:
name: X-Idempotency-Key
in: header
required: false
description: Clave única de la operación (máximo 255 caracteres). Repetirla con el mismo cuerpo devuelve la respuesta guardada durante 24 horas.
schema:
type: string
maxLength: 255
example: 7f3c1e2a-pedido-1042
securitySchemes:
ApiKey:
type: http
scheme: bearer
description: 'Tu llave de API en el encabezado `Authorization: Bearer <llave>`: `aster_test_…` (pruebas) o `aster_live_…` (producción).'
x-refined-from:
- aster-openapi.yaml
- fe-api-openapi.yaml