e-Próspera

Skills for AI Agents

A CLI-first capability map and decision tree for LLM-based callers. **Read this before making your first request** — it is shorter than the reference docs and will save you from probing endpoints that are empty by design.

View as Markdown

If you are the developer wiring an agent up to e-Próspera, paste this page (or /llms-full.txt) into your agent's system prompt or skill folder.

Official CLI: Honduras-Prospera-inc/eprospera-cli.

TL;DR — what an agent must internalize before the first call

  • Use the CLI first when shell access is available: eprospera --json --yes <group> <command>.
  • Docs, in order: CLI (install, auth, exit codes) → Standard API Keys, Agent Keys, or OAuth (credentials & scopes) → Conventions (HTTP rules) → this page (capabilities & dead ends) → Agent recipes (copy-paste workflows).
  • Every Agent Key request is scope-checked. CLI exit code 4 or HTTP 403 means the key is missing the scope, not that the resource is absent.
  • A 404 / CLI exit code 5 from legal-entity reads usually means "created outside the API", not "no such entity." Agent Keys can only see API-created records — see Why your call might return empty.
  • Consented entities and tax records require OAuth. They are read-only and limited to the signed-in user or selected entities the user still represents.
  • There are no webhooks. Use eprospera application watch <id> --timeout 30m or poll the direct API — see Polling, not webhooks.

Invocation Rules

Prefer this shape for automation:

eprospera --json --yes <group> <command>
  • Parse stdout as JSON. Treat stderr as diagnostics.
  • Use --raw when compact single-line JSON is better.
  • Use --fields id,statusId,name to reduce read responses.
  • Use --dry-run before write commands while constructing request files.
  • Put credentials in --api-key, EPROSPERA_API_KEY, or auth login; never echo tokens.
  • Use EPROSPERA_ENV=staging for staging checks.
  • Use direct HTTP only when the CLI does not cover the task or you are implementing your own client.

CLI Capability Matrix

I want to…RunCredentialsRequired scopeCommon dead-end
Confirm an RPN existseprospera --json entity verify <rpn>sk-, ak-agent:verify_rpnRPN must be 14 digits starting with 8 or 9.
Search the registryeprospera --json entity search "<query>"sk-, ak-agent:registry.searchEmpty results are not a bug; broaden or simplify the query.
Fetch one legal entityeprospera --json entity get <id>sk-, ak-agent:entity.readAgent Keys see only API-created entities; sk- sees any you represent.
Fetch entity documentseprospera --json entity documents <id>sk-, ak-agent:entity.documents.readSame visibility as entity get.
List owned applicationseprospera --json application listsk-, ak-agent:entity.application.readAgent Keys see only API-created records; sk- sees all owned.
Create an LLC applicationeprospera --json --yes application create --file application.jsonsk-, ak-agent:entity.application.createJSON fails schema validation, or AOC was not pre-accepted.
Fetch an applicationeprospera --json application get <id>sk-, ak-agent:entity.application.readAgent Keys require an API-created application; standard keys can read all owned applications.
Pay with a vouchereprospera --json --yes application pay <id> --voucher <code>sk-, ak-agent:entity.application.payVoucher must fully cover the invoice.
Create hosted checkouteprospera --json --yes application checkout <id> --redirect-url <url> --provider <name>sk-Agent Key checkout is disabled.
Watch for approvaleprospera --json application watch <id> --timeout 30msk-, ak-agent:entity.application.readRejected/payment-failed states are terminal.
Read the owner's profileeprospera --json me profileak-, OAuthagent:person.details.read / eprospera:person.details.readStandard sk- keys are not valid for me commands.
Read residency statuseprospera --json me residencyak-, OAuthagent:person.residency.read / eprospera:person.residency.readMissing residency-read scope.
Read ID-verification artifactseprospera --json me id-verificationak-, OAuthagent:person.id_verification.read / eprospera:person.id_verification.readSigned URLs expire; download promptly.
List consented entitieseprospera --json me legal-entities listOAutheprospera:entity.readAn empty list is valid when no entities were selected.
Read a consented entityeprospera --json me legal-entities get <id>OAutheprospera:entity.readConsent and current representation are both required.
Read consented entity documentseprospera --json me legal-entities documents <id>OAutheprospera:entity.documents.readConsent and current representation are both required.
Show tax obligationseprospera --json tax status --subject <subject>OAutheprospera:person.tax.read or eprospera:entity.tax.readScope must match personal or the selected entity.
List tax filingseprospera --json tax list --subject <subject> --year 2025OAutheprospera:person.tax.read or eprospera:entity.tax.readCursors are opaque; never edit or decode them.
Read one tax filingeprospera --json tax get <filing-id>OAutheprospera:person.tax.read or eprospera:entity.tax.readThe filing must be visible to the current grant.
Download a tax documenteprospera tax download <filing-id> --document assessmentOAutheprospera:person.tax.read or eprospera:entity.tax.readOutput contains confidential financial information.
List referral attributioneprospera --json referral list <code>sk-Agent Keys are not valid for referral reads.
Submit a visitor passeprospera --json --yes visitor-pass create <required flags>NoneAll applicant fields and explicit consent are required.

Direct HTTP Mapping

When you cannot use the CLI, call the underlying endpoints directly. All paths are relative to https://portal.eprospera.com in production or https://staging-portal.eprospera.com in staging.

CLI commandDirect endpoint
entity verify <rpn>POST /api/v1/verify_rpn
entity search "<query>"POST /api/v1/registries/legal_entities/search
entity get <id>GET /api/v1/legal_entities/{id}
entity documents <id>GET /api/v1/legal_entities/{id}/documents
application listGET /api/v1/legal_entity_applications
application create --file application.jsonPOST /api/v1/legal_entity_applications
application get <id> / application watch <id>GET /api/v1/legal_entity_applications/{id}
application pay <id> --voucher <code>POST /api/v1/legal_entity_applications/{id}/pay/voucher
application checkout <id> …POST /api/v1/legal_entity_applications/{id}/checkout_session
me profileGET /api/v1/me/natural-person
me residencyGET /api/v1/me/natural-person/residency
me id-verificationGET /api/v1/me/natural-person/id-verification
me legal-entities listGET /api/v1/me/legal-entities
me legal-entities get <id>GET /api/v1/me/legal-entities/{id}
me legal-entities documents <id>GET /api/v1/me/legal-entities/{id}/documents
tax statusGET /api/v1/me/tax/summary
tax listGET /api/v1/me/tax/filings
tax get <filing-id>GET /api/v1/me/tax/filings/{filingId}
tax download <filing-id> …GET /api/v1/me/tax/filings/{filingId}/documents/{document}
referral list <code>GET /api/v1/referral-codes/{code}/referrals
visitor-pass create …POST /api/v1/visitor_pass_applications

The legal-entity portfolio and tax endpoint families are OAuth-only. Agent Keys cannot use them. Consent limits entity access to the user's selection, and the corresponding personal or entity tax scope is required for every tax request.

Decision Tree — Pick the Right Command

Walk this top-down. Stop at the first row that matches your goal.

  1. You need to store or inspect credentials.eprospera auth login, eprospera --json auth whoami, or eprospera --yes auth logout.

  2. You have an RPN string and want to know if it is real and active.eprospera --json entity verify <rpn>.

  3. You have a human-readable name or partial RPN and want to find the entity.eprospera --json entity search "<query>". If results are empty, broaden the query — do not retry the same input.

  4. You have a legal-entity ID that your own agent created earlier.eprospera --json entity get <id>.

  5. You have a legal-entity ID from outside this API.Not reachable with an Agent Key. A standard sk- key can still entity get any entity you currently represent. Otherwise use OAuth and /api/v1/me/legal-entities/{id}. Do not retry the Agent Key call.

  6. You want data about the human who owns the Agent Key or OAuth credential.eprospera --json me profile, me residency, or me id-verification with the matching scope.

  7. You want entities the OAuth user selected during consent.eprospera --json me legal-entities list, then get or documents with a returned ID.

  8. You want personal or consented-entity tax data. → Log in with OAuth, then use tax status, tax list, tax get, or tax download. Use --subject personal or a consented entity UUID.

  9. You want to incorporate a new LLC. → See Recipe 2. Confirm MoW, pre-accepted AOC, and a fully covering voucher before the agent starts.

  10. You want the resident to pay through hosted checkout. → Use application checkout with a standard key. Agent Keys cannot create checkout sessions.

  11. You want to know when an application is approved.eprospera --json application watch <id> --timeout 30m.

  12. You need referral attribution or a public visitor pass. → Use referral list with a standard key or visitor-pass create without a credential.

  13. You need exact wire-level request and response shapes. → Use the direct HTTP reference pages.

Why Your Call Might Return Empty

Read this section any time a response is unexpectedly empty, 404, CLI exit code 5, 401, 403, or CLI exit code 4. Most of these are by design, not bugs.

SymptomCauseFix
application list returns { "data": [] }Agent Keys see only API-created applications (createdViaAPI: true). Applications started in the portal are invisible to ak- keys. Standard sk- keys list every owned application.Restart through the API/CLI, or have the owner finish it in the portal. A standard key can still read the portal draft.
entity get <id> exits 5 or HTTP returns 404Either the entity does not exist, or (for Agent Keys) it was created outside the API. Standard keys return any entity the owner currently represents.Use a standard key, or OAuth /me/legal-entities/{id} if the owner must share non-API-created entities.
/me/legal-entities* returns 401You sent an Agent Key (ak-...). This route family is OAuth-only.Switch to an OAuth access token.
Tax request returns invalid_subjectsubject was empty or was neither personal nor a legal-entity UUID.Omit subject for all authorized subjects, or pass one valid subject.
Any command exits 4 or HTTP returns 403The credential lacks the required scope, consent, or MoW.Reauthorize OAuth or ask the owner for a key with the required access.
application create returns nextSteps.signatureThe Agreement of Coexistence was not pre-accepted.The owner opens the signature URL once in a browser. Future creates of that residency type can be headless.
Any command exits 7 or HTTP returns 429Per-key rate limit. verify_rpn and registry search are capped at 50/minute and 5,000/day.Respect Retry-After and back off.
Search returns { "results": [] }Query was too narrow or used punctuation the registry does not index.Reduce to the most distinctive single word.
entity verify returns "not_found"The RPN string is malformed or unknown.Treat as terminal; do not retry the same RPN.

Polling, Not Webhooks

There are no webhook callbacks today. Prefer the CLI watcher:

eprospera --json application watch <application-id> --timeout 30m

Direct HTTP callers should poll GET /api/v1/legal_entity_applications/{id} every 30 seconds for the first 2 minutes, then back off to every 5 minutes. Approved and Rejected are terminal — stop polling.

Machine-Readable Resources

If your agent has fetch capability, ingest these instead of scraping rendered pages:

Where To Go Next

On this page