Confirm successful installation by checking the skill directory location:
.cursor/skills/encore-go-api
Restart Cursor to activate encore-go-api. Access via /encore-go-api in your agent's command palette.
โ
Security Notice
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
When creating API endpoints with Encore Go, follow these patterns:
1. Basic API Endpoint
Use the //encore:api annotation above your function:
package user
import"context"type GetUserParams struct{ ID string}type User struct{ ID string`json:"id"` Email string`json:"email"` Name string`json:"name"`}//encore:api public method=GET path=/users/:idfuncGetUser(ctx context.Context, params *GetUserParams)(*User,error){// Implementationreturn&User{ID: params.ID, Email:"[email protected]", Name:"John"},nil}
2. POST with Request Body
type CreateUserParams struct{ Email string`json:"email"` Name string`json:"name"`}//encore:api public method=POST path=/usersfuncCreateUser(ctx context.Context, params *CreateUserParams)(*User,error){// Implementationreturn&User{ID:"new-id", Email: params.Email, Name: params.Name},nil}
API Annotation Options
Option
Values
Description
public
-
Accessible from outside
private
-
Only callable from other services
auth
-
Requires authentication
method
GET, POST, PUT, PATCH, DELETE
HTTP method
path
string
URL path with :param for path params
sensitive
-
Redacts request/response payloads from traces
Examples
//encore:api public method=GET path=/health//encore:api private method=POST path=/internal/process//encore:api auth method=GET path=/profile//encore:api public sensitive method=POST path=/auth/login
Sensitive Data
Mark sensitive fields to redact them from tracing logs:
type LoginParams struct{ Email string`json:"email"` Password string`json:"password" encore:"sensitive"`}
Or mark the entire endpoint as sensitive in the annotation:
//encore:api public sensitive method=POST path=/auth/loginfuncLogin(ctx context.Context, params *LoginParams)(*TokenResponse,error){// Request and response will be redacted from traces}
Custom HTTP Status Codes
Return custom HTTP status codes using the encore:"httpstatus" tag:
type CreateResponse struct{ ID string`json:"id"` Status int`encore:"httpstatus"`}//encore:api public method=POST path=/itemsfuncCreateItem(ctx context.Context, params *CreateParams)(*CreateResponse,error){ item :=createItem(params)return&CreateResponse{ ID: item.ID, Status:201,// Returns HTTP 201 Created},nil}
Request Parameter Sources
Path Parameters
// Path: /users/:idtype GetUserParams struct{ ID string// Automatically mapped from :id}
Query Parameters
// Path: /userstype ListUsersParams struct{ Limit int`query:"limit"` Offset int`query:"offset"`}//encore:api public method=GET path=/usersfuncListUsers(ctx context.Context, params *ListUsersParams)(*ListResponse,error){// params.Limit and params.Offset come from query string}
Headers
type WebhookParams struct{ Signature string`header:"X-Webhook-Signature"` Payload string`json:"payload"`}
Use //encore:api raw for webhooks or direct HTTP access:
import"net/http"//encore:api public raw path=/webhooks/stripe method=POSTfuncStripeWebhook(w http.ResponseWriter, req *http.Request){ sig := req.Header.Get("Stripe-Signature")// Handle raw request... w.WriteHeader(http.StatusOK)}
Response Types
Standard Response
type Response struct{ Message string`json:"message"`}//encore:api public method=GET path=/hellofuncHello(ctx context.Context)(*Response,error){return&Response{Message:"Hello, World!"},nil}
No Response Body
//encore:api public method=DELETE path=/users/:idfuncDeleteUser(ctx context.Context, params *DeleteParams)error{// Return only error (no response body on success)returnnil}
No Request Parameters
//encore:api public method=GET path=/healthfuncHealth(ctx context.Context)(*HealthResponse,error){return&HealthResponse{Status:"ok"},nil}
Error Handling
Use errs package for proper HTTP error responses:
import"encore.dev/beta/errs"//encore:api public method=GET path=/users/:idfuncGetUser(ctx context.Context, params *GetUserParams)(*User,error){ user, err :=findUser(params.ID)if err !=nil{returnnil, err
}if user ==nil{returnnil,&errs.Error{ Code: errs.NotFound, Message:"user not found",}}return user,nil}
Common Error Codes
Code
HTTP Status
Usage
errs.NotFound
404
Resource doesn't exist
Implementation Guide
Prerequisites
โบClaude Desktop or compatible AI client with skill support
โบClear understanding of task or problem to solve
โบWillingness to iterate and refine outputs
Time Estimate
15-45 minutes depending on use case complexity
Steps
1Install skill using provided installation command
2Test with simple use case relevant to your work
3Evaluate output quality and relevance
4Iterate on prompts to improve results
5Integrate into regular workflow if valuable
Common Pitfalls
โ Expecting perfect results without iteration
โ Not providing enough context in prompts
โ Using skill for tasks outside its intended scope
โ Accepting outputs without review and validation
Best Practices
โ Do
+Start with clear, specific prompts
+Provide relevant context and constraints
+Review and refine all outputs before using
+Iterate to improve output quality
+Document successful prompt patterns
โ Don't
โDon't use without understanding skill limitations
โDon't skip validation of outputs
โDon't share sensitive information in prompts
โDon't expect skill to replace human judgment
๐ก Pro Tips
โ Be specific about desired format and style
โ Ask for multiple options to choose from
โ Request explanations to understand reasoning
โ Combine AI efficiency with human expertise
When to Use This
โ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
โ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
Learning Path
1Familiarize yourself with skill capabilities and limitations
2Start with low-risk, non-critical tasks
3Progress to more complex and valuable use cases
4Build expertise through regular use and experimentation